1 REM ...Egils programmeri
5 REM ... list  SKIVSERV.BAS fr}n Egils programmeri.
6 NOTRACE 
10 REM *********************************
20 REM * Med detta program kan man l{sa*
30 REM * och skriva tillbaka p} val-   *
40 REM * fritt sp}r och sektor.        *
50 REM * [ = {ndra byte  S = skriv     *
55 REM * - = bryta listningen          *
60 REM *********************************
62 DIM D$=128%
70 ; CHR$(12);'       SKIVSERV.BAS     ver 1.0' : ; 
80 ; '          ABC-bladet 81 nr 3'
82 ; 'Automatiskt en serie v{rden = A         Enskilt sp}r och sektor = E             Kopiera 0 -> 1 = K'
83 ; 'R{dda sektor(er)=R                      S|ka efter file =S                      Sudda en skiva = X'
84 GET A$ : ON INSTR(1,'AaKkXxRrEeSs',A$)+1 GOTO 82,86,86,88,88,89,89,85,85,90,90,87,87
85 S%=4% : GOTO 350 : REM ... l{ser sektor som skrivae till annan skiva
86 S%=1% : GOTO 90 : REM ... automatisk serie
87 S%=5% : GOTO 90 : REM ... s|ker file med given nyckel
88 S%=2% : GOTO 500 : REM ... automatisk kopiering
89 S%=3% : GOTO 800 : REM ...automatisk suddning av skivans bibliotek
90 ONERRORGOTO 90 : ; 'Vilken drive vill du l{sa ur (0/1)'; : INPUT A1%
92 IF NOT (A1%=0% OR A1%=1%) GOTO 90
100 POKE -767%,A1%
105 IF S%=5% ; 'Vilket sp}r {r det f|rsta du skall l{sa'; : INPUT A% : GOTO 120
110 ONERRORGOTO 110 : ; 'Vilket sp}r vill du l{sa (0/39)'; : INPUT A%
120 IF NOT (A%>=0% AND A%<=39%) GOTO 110
125 IF S%=5% ; 'Vilken sektor skall du starta p}?'; : INPUT B% : GOTO 140
130 ; 'Vilken sektor vill du l{sa (0/7)'; : INPUT B%
140 IF NOT (B%>=0% AND B%<=7%) GOTO 130
145 IF S%=5% GOTO 650 : REM ... s|ka efter file
150 ; CHR$(12);'S} h{r ser sp}r'A%' sektor'B%' ut'
160 ; '--------------------------------';
170 IF A%>=10% THEN ; '-' ELSE ; 
180 ; 
190 Z%=CALL(24678%,A%*256%+B%*32%)
195 IF S%=0% GOTO 208
196 IF S%=4% GOTO 400
200 FOR I%=62720% TO 62975%
203 IF S%=1% ; CHR$(PEEK(I%)); : NEXT I% : GET Z$ : GOTO 290
208 FOR I%=62720% TO 62975%
210 ; 'Byte'I%-62720%;
220 ; TAB(9%)'=';PEEK(I%);
230 ; TAB(15%)'ASCII=';CHR$(PEEK(I%))
240 GET A$ : IF A$='S' THEN 250 ELSE IF A$='[' THEN 280 ELSE IF A$='-' THEN 90 ELSE NEXT I% : GOTO 270
250 ONERRORGOTO 250 : ; 'Vad vill du skriva'; : INPUT D% : POKE I%,D% : I%=I%+1%
260 Z%=CALL(24675%,A%*256%+B%*32%) : GOTO 210
270 C%=INP(56%)-128% : IF C%=ASC('-') END ELSE 90
280 ; 'Ange nytt byte'; : INPUT I% : I%=I%+62720% : GOTO 210
290 IF B%=7% THEN B%=0% : GOTO 300 ELSE B%=B%+1% : ; : ; 'Sp}r'A%' sektor'B% : ; : GOTO 310
300 IF A%<39% THEN A%=A%+1% ELSE ; : ; 'slut p} sp}r' : END 
310 C%=INP(56%)-128% : IF C%=ASC('-') END 
320 IF S%=4% POKE -767%,A1%
330 GOTO 190
350 REM ...V{lja mottagande filnamn F$
360 ; : ; 'Namn p} mottagande fil nnnnnnnn.eee' : INPUT F$ : PREPARE F$ ASFILE 1 : ONERRORGOTO 370 : GOTO 90
370 CLOSE 1 : ; : ; F$' {r st{ngd' : END 
400 REM ...skriva sektor till ny file F$
410 ONERRORGOTO 370 : D$=''
411 FOR I%=62723% TO 62974%
420 E%=PEEK(I%) : C$=CHR$(E%) : IF E%=13% GOTO 440
425 IF LEN(D$)>127% GOTO 370
430 D$=D$+C$ : GOTO 450
440 ; D$ : PRINT #1,D$ : D$=''
450 NEXT I%
460 ; #1,D$;'@?@' : D$=''
470 ; : ; 'N=n{sta sektor, V=v{lja sektor, S=sluta'
480 GET A$ : ON INSTR(1,'NnVvSs',A$)+1 GOTO 480,290,290,100,100,370,370
500 REM :            :            :            Kopiera fr}n DR0 :             till DR1 :
510 ; CHR$(12) : ; : ; 'NU KOMMER DISKETTEN I DR1: ATT HELT F\R-ST\RAS AV ATT HELA DR0: FYLLAR UPP DEN !'
520 ; : ; 'Svara J om du vill detta skall h{nda ' : GET A$ : IF A$<>'J' ; 'Jas}. ..Tryck -' : GET A$ : GOTO 70
530 ; : ; 'Din sista chans --- se ordentligt efter vad du har i driverna innan du trycker -';
535 GET A$ : IF A$<>'-' GOTO 530
540 ; CUR(22%,1%)'!'TAB(32%)'!'
550 FOR T%=0% TO 319%
560 ; CUR(23%,INT(T%/10%+1%))'-'CUR(22%,10%)T%;
570 POKE -767%,0% : Z%=CALL(24678%,T%*32%)
580 POKE -767%,1% : Z%=CALL(24675%,T%*32%)
590 NEXT T%
600 ; : ; : ; 'Slut p} disketten. Kopierad'T%' sektorer' : STOP 
650 REM ... S|ker men skriver inte p} skiva
655 ; 'Vilken nyckel (f|rsta satsen i filen)' : INPUT S$
656 ; '>>>>>>>>>>>>>> Avsluta med - <<<<<<<<<<<';
658 S1%=A%*256%+B%*32%
660 Z%=CALL(24678%,S1%) : D$=''
670 FOR I%=62723% TO 62974% : E%=PEEK(I%) : C$=CHR$(E%) : IF E%=13% GOTO 700
680 D$=D$+C$ : IF LEN(D$)>127% GOTO 710
690 GOTO 720
700 IF INSTR(1%,D$,S$)=0 GOTO 710
702 S2%=S1%/32% : S3%=S2%/8% : S3=S2%/8 : S4%=(S3-S3%)*8% : ; 'Sp}r'S3%' Sekt'S4%' 'D$
710 I%=62974% : GOTO 720
720 NEXT I%
725 C%=INP(56%)-128% : IF C%=ASC('-') ; CHR$(13) : END 
730 S1%=S1%+32% : IF S1%=10240% 740 ELSE 660
740 S2%=(S1%-32%)/32% : S3%=S2%/8% : S3=S2%/8 : S4%=(S3-S3%)*8%
750 ; 'Det var sp}r'S3%' sektor'S4%'  RETURN' : GET C$ : GOTO 80
800 REM ... Sudda bibliotekssp}ret
810 ; CHR$(12%);CUR(10%,0%)'Nu kommer du att f|rst|ra inneh}llet p} en skiva' : ; : ; '[r du absolut s{ker '
820 GET A$ : IF A$='J' OR A$='j' GOTO 830 ELSE ; 'Jas} - inte det' : END 
830 ; : ; 'Vilken drive (0/1) '; : GET A$
840 A%=VAL(A$) : POKE -767%,A%
850 ; : ; 'Det blir drive ';A%
860 ; : ; 'Sista chans. Tryck - f|r att fors{tta' : GET A$ : IF A$<>'-' END 
870 REM ... fixa tom bitkarta ...
880 Z%=CALL(24678%,32%*7%)
890 Z%=CALL(24675%,32%*6%)
900 FOR I%=62720% TO 62975%
910 IF I%-62720%>15% POKE I%,255% ELSE POKE I%,0%
920 ; I%-62720%; : NEXT I%
930 REM ... sudda biblioteksblocken ...
940 FOR I%=0% TO 7% : Z%=CALL(24675%,256%+32%*I%)+CALL(24675%,512%+32%*I%) : NEXT I%
950 IF PEEK(64789%) ; 'Ingen skiva i drive'A% ELSE ; : ; 'OK! utf|rt!!!'
960 END 
