2 ! +++++++++++++++++++++++++++++++++++ 3 ! Program .... CASDISK.BAS 4 ! Utg}va 1.31 1985-06-12 5 ! av (c) Bo Kullmar 8 ! Ins{nt av Bo Kullmar, medlem 1789. 9 ! Programmet kopierar text, ABS och ABC800 BAC filer fr}n kassett till disk. 10 ! Programmet kopierar ocks} randomfiler enligt ABC-kassett nr 7. 11 ! +++++++++++++++++++++++++++++++++++ 50 ON ERROR GOTO 10000 60 FLOAT 80 EXTEND 300 DIM Block$=253 1000 Tabb=PEEK(65364) 1010 IF Tabb=40 THEN Tabb=1 ELSE Tabb=20 1020 Rubrik$=CHR$(12)+CUR(0,Tabb-1)+CYA+'KOPIERING FR]NG KASSETT TILL DISK' 1030 Slutbas$=STRING$(6,0)+CHR$(3) 1040 Slutrandom$=CHR$(253,192,253,192,253,192,52) 1050 Ej$='Kopieras ej, sektorformatfel!' 1060 Ej2$='Kopieras ej sektorformatfel' 1070 Ko$='Kopierad under namnet TEMP' 2000 ; Rubrik$ : ; : ; : ; 2010 ; TAB(Tabb) YEL '\nskas anvisningar? (J/N) '; 2020 GET Svar$ : ; Svar$ 2030 IF Svar$='j' OR Svar$='J' THEN Z=FNAnvisningar 2040 ; : ; : ; TAB(Tabb) YEL; 2050 INPUT 'Sista filnamn, med ext? 'Sistafil$ 2060 Punkt=INSTR(1,Sistafil$,'.') 2070 IF Punkt=0 THEN GOTO 2040 2080 IF LEN(Sistafil$)>12 THEN 2040 2090 Sistafil$=FNStora$(Sistafil$) 2140 ; : ; TAB(Tabb) YEL 'Till vilken drive? '; 2150 GET Drive$ 2160 IF Drive$<>'0' AND Drive$<>'1' THEN Drive$='0' : ; TAB(Tabb+20) '0' ELSE ; TAB(Tabb+20) Drive$ 2170 ; 2180 ; TAB(Tabb) YEL '[r CAS:en klar p} avspelning? '; 2190 GET Svar$ : ; Svar$ 2200 IF Svar$<>'j' AND Svar$<>'J' THEN 2180 2205 ; 2210 Rad=PEEK(-173) 3000 WHILE Fil$<>Sistafil$ 3010 Fil$='' 3020 POKE -173,PEEK(-173)-1 3050 OPEN 'CAS:' AS FILE 1 3060 IF PEEK(64267)<>46 THEN Adr=64515 ELSE Adr=64259 3080 FOR I=Adr TO Adr+11 3090 Fil$=Fil$+CHR$(PEEK(I)) 3100 NEXT I 3110 ; CUR(PEEK(-173),0) SPACE$(18); 3120 POKE -173,PEEK(-173)-1 3130 Rad=PEEK(-173)+1 3140 ; TAB(Tabb) GRN Fil$ ' Funnen p} kassetten!'; 3150 GET #1,Block$ COUNT 253 3160 ! Typhantering 3170 Typ=0 3180 Teck=ASCII(LEFT$(Block$,1)) 3190 IF (Teck OR 1)=131 THEN Typ=1 3200 IF Teck>0 AND Teck<128 THEN Typ=2 3210 IF Teck=0 THEN Typ=3 3220 IF Teck=143 OR Teck=144 THEN Typ=4 3230 IF Typ<>0 AND Typ<>1 THEN PREPARE 'DR'+Drive$+':'+'TEMP.TMP' AS FILE 2 : Fl=9 3240 ; CUR(Rad,Tabb-1) GRN Fil$ ' Kopieras nu till disk!'; 3250 IF Typ=1 THEN ; CUR(Rad,Tabb+13) RED 'Kopieras ej! '; 3260 IF Typ=0 THEN CLOSE 1 : ; CUR(Rad,Tabb+13) RED 'Kopieras ej fel format!'; 3270 WHILE Typ=1 ! ABC80 BAC (Kopieras ej) 3280 Z=FNTesttyp1slut 3290 WHILE Flagga$<>'SLUTFIL' 3300 GET #1,Block$ COUNT 253 3305 B=B+1 3310 Z=FNTesttyp1slut 3315 Z=FNTestradom 3320 WEND 3325 GOTO 3340 3330 WEND 3340 WHILE Typ=2 ! Textfil 3350 PUT #2,Block$ 3360 WHILE Flagga$<>'SLUTFIL' 3370 Z=FNCopyblock 3380 IF LEFT$(Block$,7)=Slutbas$ THEN Typ=9 : Flagga$='SLUTFIL' 3385 Z=FNTestradom 3390 WEND 3400 WEND 3410 WHILE Typ=3 ! ABS-fil 3420 PUT #2,Block$ 3430 Z=FNTestabsslut 3440 WHILE Flagga$<>'SLUTFIL' 3450 Z=FNCopyblock 3460 Z=FNTestabsslut 3465 Z=FNTestradom 3470 WEND 3480 WEND 3490 WHILE Typ=4 ! ABC 800 BAC-fil 3500 Teck1=ASCII(MID$(Block$,5,1)) 3510 Teck2=ASCII(MID$(Block$,6,1)) 3520 L{ngd=FNTal2(Teck1,Teck2) 3530 Teck1=ASCII(MID$(Block$,11,1)) 3540 Teck2=ASCII(MID$(Block$,12,1)) 3550 L{ngd=(L{ngd+FNTal2(Teck1,Teck2)*4) 3560 Block=INT(L{ngd/253) 3570 PUT #2,Block$ 3580 FOR Y=1 TO Block 3590 Z=FNCopyblock 3600 NEXT Y 3610 Typ=9 3620 WEND 3630 IF Typ=1 OR Typ=0 THEN 3700 3640 Punkt=INSTR(1,Fil$,'.') 3650 Blank=INSTR(1,Fil$,' ') 3660 IF Blank<>0 THEN IF Blank0 THEN Fil$=LEFT$(Fil$,Blank-1) 3680 NAME 'DR'+Drive$+':'+'TEMP.TMP' AS Fil$ 3690 ; CUR(Rad,Tabb+14) 'Kopierad till disk! '; 3700 Flagga$='' : B=0 : Fl=0 3710 CLOSE 1,2 3720 ; 3730 WEND 3740 ; : ; 3750 ; TAB(Tabb) YEL 'Slut detta var sita filen!' 3760 END 10000 WHILE ERRCODE=37 10010 CLOSE 1 10020 IF Tabb=20 THEN ; CUR(Rad,Tabb+14) Ej$; ELSE ; CUR(Rad,Tabb+13) RED Ej2$; 10030 KILL 'DR'+Drive$+':'+'TEMP.TMP' 10040 RESUME 3700 10050 WEND 10060 WHILE ERRCODE=64 10070 RESUME 10080 10080 Felnamn=Felnamn+1 10090 Felnamn$=NUM$(Felnamn) 10100 NAME 'DR'+Drive$+':'+'TEMP.TMP' AS 'TEMP'+Felnamn$+'.TMP' 10110 IF Tabb=20 THEN ; CUR(Rad,Tabb+14) Ko$ Felnamn$ '.TMP'; : GOTO 3700 ELSE 10120 10120 ; CUR(Rad,Tabb+13) MAG 'Kopierad som TEMP' Felnamn$ '.TMP'; : GOTO 3700 10130 WEND 10140 WHILE ERRCODE=35 10150 CLOSE 1 10160 ; CUR(Rad,Tabb+13) RED 'Checksummafel! '; 10170 RESUME 3700 10180 WEND 10190 WHILE ERRCODE=41 10200 RESUME 10210 10210 ; CUR(Rad,Tabb+13) RED 'Kopieras ej! ' 10220 IF Fl=0 THEN 10250 10230 CLOSE 2 10240 KILL 'DR'+Drive$+':'+'TEMP.TMP' 10250 CLOSE 1 10260 ; TAB(Tabb) RED 'Skivan {r full! Avsluta (J/N) ? '; 10270 GET Svar$ 10280 IF Svar$='J' OR Svar$='j' THEN 3760 10290 ; TAB(Tabb) YEL 'Backa bandspelaren en aning och byt' 10300 ; TAB(Tabb) YEL 'skiva! Tryck n{r du {r klar! '; 10310 GET Svar$ 10320 Z=FNSudda(3) 10330 GOTO 3700 10340 WEND 10350 WHILE ERRCODE=42 10360 ; TAB(Tabb) RED 'Skivan i drive ' Drive$ ' {r ej klar!' 10370 ; TAB(Tabb) YEL 'Tryck, n{r den {r klar! '; 10380 GET Svar$ 10390 Z=FNSudda(2) 10400 RESUME 3230 10410 WEND 10420 WHILE ERRCODE=43 10430 ; TAB(Tabb) RED 'Skivan i drive ' Drive$ ' {r skrivskyddad!' 10440 ; TAB(Tabb) YEL 'Tryck, n{r du har bytt skiva! '; 10450 GET Svar$ 10460 Z=FNSudda(2) 10470 RESUME 3230 10480 WEND 10490 ; TAB(Tabb) RED 'Fel nr' ERRCODE 10500 ; TAB(Tabb) YEL 'Vill du forts{tta (J/N) '; 10510 GET Svar$ 10520 IF Svar$='N' OR Svar$='n' THEN RESUME 10620 10530 ; TAB(Tabb) YEL 'Var vill du forts{tta?' 10540 ; TAB(Tabb) YEL '1 Vid feluthoppet' 10550 ; TAB(Tabb) YEL '2 F|r inl{sning av ny fil (rad 3700)' 10560 ; TAB(Tabb) CYA 'V{lj 1 eller 2! '; 10570 GET Svar$ 10580 IF Svar$<>'1' AND Svar$<>'2' THEN 10560 ELSE ; Svar$ 10590 Z=FNSudda(7) 10600 IF Svar$='1' THEN RESUME 10610 IF Svar$='2' THEN RESUME 3700 10620 ; TAB(Tabb) YEL 'End p} detta s{tt m|jligg|r manuell' 10630 ; TAB(Tabb) YEL '}terstart med kommandot GOTO (radnr)' 10640 STOP 11000 DEF FNAnvisningar 11010 ; Rubrik$ : ; : ; 11020 ; TAB(Tabb) YEL 'Programmet kopierar f|ljande filer' 11030 ; TAB(Tabb) YEL 'fr}n en kassett, (ABC80/800):' 11040 ; 11050 ; TAB(Tabb) YEL 'Textfiler' 11060 ; TAB(Tabb) YEL 'ABS-filer' 11070 ; TAB(Tabb) YEL 'ABC800 BAC-filer' 11080 ; 11090 ; TAB(Tabb) RED 'ABC80 BAC-filer kopieras ej!' 11100 ; 11110 ; TAB(Tabb) YEL 'I princip s} kan man kopiera ocks}' 11120 ; TAB(Tabb) YEL 'ABC80 BAC-filer, men man kan ju inte ' 11130 ; TAB(Tabb) YEL 'g|ra en tillbakalistning eller k|ra' 11140 ; TAB(Tabb) YEL 'ABC80 BAC-filer p} ABC800!' 11150 ; 11160 ; TAB(Tabb) YEL '[r ABC800 BAC programmen lagrade med' 11170 ; TAB(Tabb) YEL 'SAVE kan programmet bara l{sa/kopiera' 11180 ; TAB(Tabb) YEL 'kortare filer. F|r att vara s{ker p}' 11190 ; TAB(Tabb) YEL 'att man kan kopiera fr}n kassett m}ste' 11200 ; TAB(Tabb) YEL 'filen fr}n b|rjan vara kopierad till' 11210 ; TAB(Tabb) YEL 'kassett fr}n disk.' 11220 ; TAB(Tabb) CYA 'Tryck f|r }terg}ng! '; 11230 GET Svar$ 11240 ; Rubrik$ : ; : ; : ; : ; 11250 RETURN 0 11260 FNEND 12000 DEF FNStora$(Ord$) 12010 FOR Ii=1 TO LEN(Ord$) 12015 As=ASCII(MID$(Ord$,Ii,1)) 12020 IF As>96 AND As<126 THEN MID$(Ord$,Ii,1)=CHR$(ASCII(MID$(Ord$,Ii,1)) AND 223) 12030 NEXT Ii 12040 RETURN Ord$ 12050 FNEND 12100 DEF FNCopyblock 12110 GET #1,Block$ COUNT 253 12120 PUT #2,Block$ 12130 RETURN 0 12140 FNEND 12200 DEF FNTestabsslut LOCAL I,L 12210 I=1 12220 L=ASCII(MID$(Block$,I,1)) 12230 IF L=255 THEN RETURN 0 12240 L=ASCII(MID$(Block$,I+1,1)) 12250 IF L=0 THEN Typ=9 : Flagga$='SLUTFIL' : RETURN Typ 12260 I=I+L+8 : GOTO 12220 12270 FNEND 12300 DEF FNTal2(T0,T1)=T1*256+T0 12400 DEF FNTesttyp1slut LOCAL I,L 12410 IF B=0 THEN I=2 ELSE I=1 12420 L=ASCII(MID$(Block$,I,1)) 12430 IF L=1 THEN Flagga$='SLUTFIL' : RETURN 0 12435 IF L=0 THEN RETURN 0 12440 I=I+L : GOTO 12420 12450 FNEND 12500 DEF FNSudda(Ant) LOCAL Rad 12510 Rad=PEEK(-173)-Ant+1 12520 FOR Iii=0 TO Ant-1 12530 ; CUR(Rad+Iii,Tabb) SPACE$(40); 12540 NEXT Iii 12550 ; CUR(Rad-1,Tabb); 12560 RETURN 0 12570 FNEND 12600 DEF FNTestradom 12610 IF LEFT$(Block$,7)=Slutrandom$ THEN Svar=-1 ELSE Svar=0 12620 IF Svar=-1 AND Typ<>1 THEN Typ=9 : Flagga$='SLUTFIL' 12630 RETURN 0 12640 FNEND