 100 ' ** UNDEL **
 101 ' Pour récupérer un fichier effacé par DEL (Sedoric 3.0)
 102 ' Le fichier sera restauré sous le nom SANSNOM.COM et devra être renommé
 103 ' avant de relancer le programme pour restaurer un autre fichier
 104 ' (c) André Chéramy 2012
 105 ' V 0609-2044
 160 K=0:Y=0:F1=0:F2=0:F3=0:F4=0:NZ=0:W=222
 190 DIM PL(128):DIM SL(128):DIM TI(715):DIM SI(715)
 210 GOSUB 2020
 220 GOSUB 2520:PMAP:CRESEC:SMAP
 230 GOSUB 3010:GOSUB 3110
 240 GOSUB 3220
 250 GOSUB 3320
 260 IF S1=0 THEN PRINT"Il n'y a pas  de descripteur suivant":GOTO 360
 270 IF NR=0 THEN 330
 290 PRINT"   Descripteur  secondaire trouv{   ":GOSUB 3420:GOSUB 3510
 310 GOSUB 3220:GOSUB 3320:GOTO 260
 330 GOSUB 3010:GOSUB 4410
 340 GOSUB 3220:GOSUB 3320:GOTO 260
 360 GOSUB 4220
 370 GOSUB 3720
 380 GOTO 2620
 2020 CLS:PAPER 3:INK 0:ACCENT SET:Y1=5:Y2=10:Y3=17
 2030 POKE#26A,(PEEK(#26A)AND#FE):PRINT""
 2040 PLOT 1,Y1,4:PLOT 2,Y1,10:PLOT 18,Y1,"UNDEL"
 2050 PLOT 1,Y1+1,1:PLOT 2,Y1+1,10:PLOT 18,Y1+1,"UNDEL"
 2060 PLOT 2,Y2+0,"           Pour r{cup{rer           "
 2070 PLOT 2,Y2+1,"     un fichier  effac{ par DEL     "
 2080 PLOT 2,Y2+2,"           (Sedoric  3.0)           "
 2090 PLOT 2,Y2+3,"       (c) 2020 Andr{ Ch{ramy       "
 2100 PLOT 2,Y2+4,"         & Club Europe Oric         "
 2110 PLOT 2,Y3+0,"   Ce programme peut etre relanc{   "
 2120 PLOT 23,Y3+0,126
 2130 PLOT 2,Y3+1,"   plusieurs fois  pour restaurer   "
 2140 PLOT 2,Y3+2,"         plusieurs fichiers         "
 2150 PLOT 2,Y3+3,"     ayant {t{ supprim{s  apr}s     "
 2160 PLOT 2,Y3+4,"        la derni}re {criture        "
 2170 PLOT 2,Y3+5,"          sur la disquette          "
 2180 PLOT 2,Y3+8,"                            <touche>"
 2190 GET R$:RETURN
 2220 GOSUB 3320:SMAP:CLOSE:CLS:PAPER 3:INK 0:Y1=7:Y2=11
 2230 PLOT 1,Y1,4:PLOT 2,Y1,10:PLOT 18,Y1,"UNDEL"
 2240 PLOT 1,Y1+1,1:PLOT 2,Y1+1,10:PLOT 18,Y1+1,"UNDEL"
 2250 PLOT 2,Y2+0,"Le programme a rencontr{ un probl}me"
 2252 PLOT 2,Y2+2," Il y a une rupture  dans la chaîne "
 2254 PLOT 2,Y2+3,"     des liens des descripteurs     "
 2256 PLOT 2,Y2+5,"    La disquette a  probablement    "
 2258 PLOT 2,Y2+6,"      {t{ utilis{e en {criture      "
 2260 PLOT 2,Y2+7,"    apr}s le DEL fatidique et la    "
 2262 PLOT 2,Y2+8,"    restauration est impossible!    "
 2264 PLOT 2,25  ,"                        <touche>    "
 2266 PRINT@2,22;"":POKE#26A,(PEEK(#26A)OR#01):PRINT"":GET R$
 2270 PAPER 0:INK 7:DIR:END
 2300 PRINT:PRINT
 2310 PRINT"        UNDEL n'a pas trouv{        "
 2320 PRINT"      de descripteur principal.     "
 2330 PRINT"       D{sol{, la restauration      "
 2340 PRINT"          est impossible !          ":PRINT
 2350 PRINT"                        <touche>    "
 2360 GOSUB 3320
 2370 GOTO 2266
 2410 F1=F1-1:Y=Y+1:IF Y>714 THEN Y=714:GOTO 2300
 2415 TI(Y)=FP:SI(Y)=FS:IF F4>0 THEN 2478
 2420 CLS:PAPER 3:INK 0:Y1=3:Y2=8
 2430 PLOT 1,Y1,4:PLOT 2,Y1,10:PLOT 18,Y1,"UNDEL"
 2440 PLOT 1,Y1+1,1:PLOT 2,Y1+1,10:PLOT 18,Y1+1,"UNDEL"
 2450 PLOT 2,Y2+0,"Le programme a rencontr{ un probl}me"
 2452 PLOT 2,Y2+2," Le premier secteur libre n'est pas "
 2454 PLOT 2,Y2+3,"un descripteur, mais probablement le"
 2456 PLOT 2,Y2+4,"reste d'un fichier supprim{ avec DEL"
 2458 PLOT 2,Y2+5,"  puis partiellement {cras{ par le  "
 2460 PLOT 2,Y2+6,"    SAVE d'un fichier plus petit    "
 2462 PLOT 2,Y2+7," A moins qu'il n'y ait pas (ou plus)" 
 2464 PLOT 2,Y2+8,"       de fichier @ restaurer.      "
 2466 PLOT 2,Y2+10,"     Faut-il abandonner (O/N)?      "
 2468 GET R$:IF R$="O" THEN 2264
 2474 GOSUB 2520:PRINT"    UNDEL reprend la recherche      "
 2478 F4=F4+1:IF F4>190 THEN F4=0:GOTO 2466
 2482 PMAP:CRESEC
 2486 SMAP:PRINT".";:RETURN
 2520 CLS:PAPER 3:INK 0:ACCENT SET:Y1=3:Y2=7
 2530 POKE#26A,(PEEK(#26A)AND#FE):PRINT""
 2540 PLOT 1,Y1,4:PLOT 2,Y1,10:PLOT 18,Y1,"UNDEL"
 2550 PLOT 1,Y1+1,1:PLOT 2,Y1+1,10:PLOT 18,Y1+1,"UNDEL"
 2560 PLOT 2,Y2+0," Patience, r{cup{ration en cours... "
 2570 PRINT@2,Y2+1;""
 2580 RETURN
 2620 CLS:PAPER 3:INK 4:ACCENT SET:Y1=7:Y2=12:Y3=17
 2630 PLOT 1,Y1,1:PLOT 2,Y1,10:PLOT 10,Y1,"RECUPERATION REUSSIE"
 2640 PLOT 1,Y1+1,0:PLOT 2,Y1+1,10:PLOT 10,Y1+1,"RECUPERATION REUSSIE"
 2650 PLOT 2,Y2+0,"    Fichier SANSNOM.COM r{cup{r{    " 
 2660 IF F1<2 THEN 2680
 2670 F1$=RIGHT$(STR$(F1),1):PLOT 2,Y2+1,"         ("+F1$+" fichiers merg{s)"
 2680 PLOT 2,Y2+2,"      Utilisez RENAME avant de      "
 2690 PLOT 2,Y2+3,"     relancer le programme UNDEL    "
 2700 IF F1<2   THEN PLOT 2,Y3+0,"          Type de fichier:          "
 2710 IF F1>1   THEN PLOT 2,Y3+0,"         Fichier principal:         "
 2720 IF TF=128 THEN PLOT 2,Y3+1,"           Programme Basic          "
 2730 IF TF=129 THEN PLOT 2,Y3+1,"        Programme Basic auto        "
 2740 IF TF=64  THEN PLOT 2,Y3+1,"     Bloc de donn{es ou Code LM     "
 2750 IF TF=65  THEN PLOT 2,Y3+1,"  Bloc de donn{es ou Code LM auto   "
 2760 IF TF=96  THEN PLOT 2,Y3+1,"               Window               ":F3=1
 2770 IF TF=16  THEN PLOT 2,Y3+1,"     Fichier @ acc}s s{quentiel     ":F3=1
 2780 IF TF=8   THEN PLOT 2,Y3+1,"       Fichier @ acc}s direct       ":F3=1
 2790 IF F3=1 THEN 2850
 2800 DE$=HEX$(DE):DE$="000"+RIGHT$(DE$,LEN(DE$)-1):DE$="#"+RIGHT$(DE$,4) 
 2810 FI$=HEX$(FI):FI$="000"+RIGHT$(FI$,LEN(FI$)-1):FI$="#"+RIGHT$(FI$,4)
 2820 EX$=HEX$(EX):EX$="000"+RIGHT$(EX$,LEN(EX$)-1):EX$="#"+RIGHT$(EX$,4)
 2830 IF EX=0  THEN PLOT 2,Y3+2,"       D{but "+DE$+", Fin "+FI$+"       "
 2840 IF EX<>0 THEN PLOT 2,Y3+2," D{but "+DE$+", Fin "+FI$+", Ex{c "+EX$+" "
 2850 PLOT 6,Y3+3,"Nombre total de secteurs:":PRINT@32,Y3+3;NZ
 2860 PLOT 2,Y3+8,"                            <touche>"
 2870 GET R$:CLS:PRINT:PRINT
 2880 IF F1<2 THEN 2900
 2890 PRINT"Composition des fichiers merg{s:":LOAD"SANSNOM",V
 2900 PAPER 0:INK 7:DIR
 2910 POKE#26A,(PEEK(#26A)OR#01):PRINT"":END
 3010 OPEN D,10: FIELD 10, PDSUIV TOO, SDSUIV TOO, FDESCR TOO, TYPFIC TOO,
 3020 FIELD 10, LDEBFI TOO, HDEBFI TOO, LFINFI TOO, HFINFI TOO, 
 3030 FIELD 10, LEXEFI TOO, HEXEFI TOO, NBRSEC TO%,
 3040 FOR K=1 TO 122:FIELD 10, PDSACH(K) TOO, SDSACH(K) TOO,:NEXT
 3050 RETURN
 3110 F1=F1+1 : PZ=FP : SZ=FS : TAKE 10,FP,FS : FDESCR > FD
 3120 IF FD<>#FF THEN GOSUB 2410:GOTO 3110
 3124 PRINT:PRINT"    Descripteur principal trouv{    "
 3125 F4=0 : PDSUIV > P1 : SDSUIV > S1 
 3130 TYPFIC>TF:LDEBFI > LD:HDEBFI > HD:LFINFI > LF:HFINFI > HF:DE=HD*#100+LD
 3140 FI=HF*#100+LF : LEXEFI > LE : HEXEFI > HE : EX=HE*#100+LE
 3150 NBRSEC > NB:IF NB < 123 THEN NS=NB ELSE NS=122
 3160 NR=NB-122: IF NR < 0 THEN NR=0
 3170 FOR K=1 TO NS:PDSACH(K) > PL(K):SDSACH(K) > SL(K):NEXT
 3180 CLOSE 10:NZ=NZ+NB+1
 3190 RETURN
 3220 PMAP
 3230 FOR K=1 TO NS:CRESEC
 3240 IF FP=PL(K) AND FS=SL(K) THEN 3260 
 3250 Y=Y+1:TI(Y)=FP:SI(Y)=FS
 3260 NEXT
 3270 SMAP:PRINT" Ses secteurs ont tous {t{ restaur{s"
 3280 RETURN
 3320 IF Y<1 THEN 3370
 3330 PMAP
 3340 FOR K=1 TO Y:FRSEC TI(K),SI(K):NEXT
 3350 SMAP
 3360 Y=0
 3370 PRINT:RETURN
 3420 OPEN D,20:FIELD 20,PDSUIV TOO, SDSUIV TOO,
 3430 FOR K=1 TO 127:FIELD 20, PDSACH(K) TOO, SDSACH(K) TOO,:NEXT 
 3440 RETURN
 3510 GOSUB 4510 
 3520 TAKE 20,P1,S1:PDSUIV > P1:SDSUIV > S1
 3530 IF NR < 127 THEN NS=NR ELSE NS=127
 3540 NR=NR-127:IF NR < 0 THEN NR=0
 3550 FOR K=1 TO NS:PDSACH(K) > PL(K):SDSACH(K) > SL(K):NEXT
 3560 CLOSE 20
 3570 NZ=NZ+1
 3580 RETURN
 3620 OPEN D,40:FIELD 40, SIGNAT TO%, SECLIB TO%, NBFICH TO%, 
 3630 FIELD 40, PPFSPP TO%, NBRDIR TOO, ETCETC TO$7
 3640 RETURN
 3720 GOSUB 3620:TAKE 40,20,2:NBFICH > NF:NF=NF+1:LSET NBFICH < NF
 3730 NBRDIR > ND:ND=ND+F2:LSET NBRDIR < ND
 3750 PUT 40,20,2:CLOSE 40
 3760 GOSUB 3620:TAKE 40,20,3:LSET NBFICH < NF:LSET NBRDIR < ND
 3770 PUT 40,20,3:CLOSE 40
 3780 PRINT"    Secteurs de bitmap restaur{s    ":WAIT W:RETURN
 3820 OPEN D,30:FIELD 30, PDSUIV TOO, SDSUIV TOO, ENTLIB TOO, INUTIL TO$13, 
 3830 FOR K=1 TO 15:FIELD 30, NMFICH(K) TO$12, PDPFIC(K) TOO, SDPFIC(K) TOO, 
 3840 FIELD 30, NBTSEC(K) TOO, ATTPRT(K) TOO,:NEXT
 3850 RETURN
 3910 K=EL/16:LSET NMFICH(K)<"SANSNOM  COM":LSET PDPFIC(K) < PZ
 3920 LSET SDPFIC(K) < SZ:HH=INT(NZ/#100):LL=NZ-(HH*#100):HH=HH OR #C0
 3930 LSET NBTSEC(K) < LL:LSET ATTPRT(K) < HH
 3940 EL=EL+#10:IF EL>#FF THEN EL=#00
 3950 LSET ENTLIB < EL
 3960 PUT 30,PD,SD:CLOSE 30:IF F2=0 THEN 3990
 3970 GOSUB 3820:TAKE 30,P3,S3
 3980 LSET PDSUIV < PD:LSET SDSUIV < SD:PUT30,P3,S3:CLOSE 30
 3990 PRINT"Entr{e de directory & lien restaur{s":RETURN
 4120 PMAP:CRESEC:SMAP:PD=FP:SD=FS
 4130 OPEN D,30:FOR K=0 TO 255:FIELD 30, OCTETS(K) TOO, :NEXT
 4140 TAKE 30,PD,SD
 4150 FOR K=0 TO 255:LSET OCTETS(K) < #00:NEXT
 4160 LSET OCTETS(2) < #10
 4170 F2=1:PUT 30,PD,SD:CLOSE 30:RETURN
 4180 PRINT"    Secteur de directory  recr{{    ":WAIT W:RETURN
 4220 PD=#14:SD=#04
 4230 GOSUB 3820
 4240 TAKE 30,PD,SD : PDSUIV > P2 : SDSUIV > S2 : ENTLIB > EL
 4250 IF EL<>0 THEN GOSUB 3910:RETURN
 4260 IF EL=0 AND S2<>0 THEN PD=P2:SD=S2:GOTO 4240
 4270 IF EL=0 AND S2=0 THEN P3=PD:S3=SD:CLOSE 30
 4280 PRINT"  Pas d'entr{e  de directory libre  "
 4285 PRINT"            Patience ...            "
 4290 IF PD>20 THEN GOSUB 4120:GOTO 4230
 4300 SD=SD+3:IF SD>16 THEN GOSUB 4120:GOTO 4230
 4310 GOSUB 4130:GOTO 4230
 4410 F1=F1+1 : TAKE 10,P1,S1 : FDESCR > FD
 4420 IF FD<>#FF THEN POP:GOTO 2220
 4430 GOSUB 4510:PRINT"Descripteur principal f.merg{ trouv{"
 4440 PDSUIV > P1 : SDSUIV > S1
 4450 NBRSEC > NB:IF NB < 123 THEN NS=NB ELSE NS=122
 4460 NR=NB-122: IF NR < 0 THEN NR=0
 4470 FOR K=1 TO NS:PDSACH(K) > PL(K):SDSACH(K) > SL(K):NEXT
 4480 CLOSE 10:NZ=NZ+NB+1
 4490 RETURN
 4510 PMAP
 4520 CRESEC
 4530 IF FP=P1 AND FS=S1 THEN 4550 
 4540 Y=Y+1:TI(Y)=FP:SI(Y)=FS:GOTO 4520
 4550 SMAP:PRINT"   Le descripteur a {t{  restaur{   ";
 4560 GOSUB 3320:RETURN
