1 REM Ins{nt av 350
10 REM
20 REM DISKEDIT.BAC Ver 1.0
30 REM (c) 16/12-1981
40 REM Roland Eiworth j : r medl.350
50 REM Margretelundsbacken 27
60 REM 183 42 T[BY Tel.0762-13854
70 REM
80 DIM A$=120%
90 H$='0123456789ABCDEF'
100 REM Snabbflyttning av tecken i BUF.
110 POKE -122%,237%,75%,128%,255%,237%,91%,130%,255%,42%,132%,255%,237%,176%,201%
120 ; 'Vill du ha hj{lp (Nej)'; : INPUT A$
130 IF A$<>'' AND A$<>'N' AND A$<>'n' THEN GOSUB 150
140 GOTO 330
150 ; CHR$(12%)'Kommandon {r:'
160 ; : ; 'HJ{lp skriver denna text.' : ; 'L[s l{ser en sektor fr}n skivan till'
170 ; TAB(7)'en buffert.'
180 ; 'Fram}t l{ser n{sta sektor.'
190 ; 'Bak}t l{ser f|reg}ende sektor.'
200 ; 'DUmpa dumpar bufferten du arbetar med.' : ; 'DElete tar bort ett antal tecken fr}n' : ; TAB(7)'bufferten.'
210 ; 'INsert skjuter in ett antal tecken i' : ; TAB(7)'bufferten.' : ; 'SKriv skriver bufferten till skivan.'
220 ; : ; ' Kommandona kan f|rkortas som markerat. F|r att sektorn skall {ndras p} skivan,m}ste';
230 ; ' du ge kommandot SKriv efter dina {ndringar.' : ; : ; ' TRYCK!'; : GET A$ : ; CHR$(12%)
240 ; ' Vid anv{ndning av DElete fylls slutet av bufferten med CHR$(32%). Detta kan'
250 ; '{ndras p} rad 810.' : ; ' Vid anv{ndning av INsert, f|rsvinner' : ; 'lika m}nga tecken i slutet av bufferten'
260 ; 'som du skjuter in.'
270 ; ' Om du har l{st in en sektor till' : ; 'bufferten och vill skriva bufferten p}'
280 ; 'ett annat st{lle,beh|ver du bara trycka n}gra g}nger vid fr}gan' : ; '"Kommando?". Programmet ';
290 ; 'fr}gar d} efter' : ; 'drive, sp}r och sektor. Vid n{sta SKriv-kommando kommer bufferten att hamna p}'
300 ; 'senaste angivna st{lle.' : ; ' Allts}, vid varje tryck p} ' : ; 'kommer man n{rmare utg}ngspunkten i'
310 ; 'programmet.' : ; : ; ' Ha det s} roligt!' : ;
320 RETURN
330 GOSUB 420
340 GOSUB 540
350 REM KOMMANDO
360 ; 'Kommando'; : INPUT A$ : A$=A$+'A' : IF LEN(A$)<2% THEN GOTO 390
370 A$=CHR$(ASC(LEFT$(A$,1%)) AND 223%)+CHR$(ASC(RIGHT$(A$,2%)) AND 223%)
380 ON (INSTR(2%,'HJL[SKDUDEINFABA',A$)+2%)/2% GOSUB 150,540,580,610,770,850,480,510 : GOTO 360
390 GOSUB 450 : GOTO 360
400 ; : ; CHR$(7%)'P} }terseende!' : END
410 REM V[LJ SEKTOR
420 ONERRORGOTO 400 : ; 'Vilken drive'TAB(14%); : INPUT D% : ONERRORGOTO 0
430 POKE -767%,D%
440 ONERRORGOTO 420 : ; 'Vilket sp}r'TAB(14%); : INPUT T% : ONERRORGOTO 0
450 ONERRORGOTO 440 : ; 'Vilken sektor'TAB(14%); : INPUT S% : ONERRORGOTO 0
460 RETURN
470 REM FRAM]TBL[DDRING
480 S%=S%+1% : IF S%>7% THEN S%=0% : T%=T%+1% : IF T%>39% THEN T%=0%
490 GOTO 540
500 REM BAK]TBL[DDRING
510 S%=S%-1% : IF S%<0% THEN S%=7% : T%=T%-1% : IF T%<0% THEN T%=39%
520 GOTO 540
530 REM L[S SEKTOR
540 Z%=CALL(24678%,SWAP%(T%)+S%*32%)
550 GOSUB 610
560 RETURN
570 REM SKRIV SEKTOR
580 Z%=CALL(24675%,SWAP%(T%)+S%*32%)
590 RETURN
600 REM DUMPA
610 ; CHR$(12%)TAB(9%)'Sp}r'T%', Sektor'S% : ; 'BYTE'TAB(12%)'HEX-display'TAB(32%)'ASCII'
620 FOR J%=62720% TO 62968% STEP 8%
630 ; J%-62720%TAB(4%)': ';
640 FOR I%=0% TO 7%
650 H1%=PEEK(I%+J%)/16% : H2%=PEEK(I%+J%)-H1%*16%
660 H1$=MID$(H$,H1%+1%,1%)+MID$(H$,H2%+1%,1%)
670 ; H1$+' ';
680 NEXT I% : ; ' ';
690 FOR X%=J% TO J%+7%
700 IF PEEK(X%)<32% OR PEEK(X%)>127% ; "."; ELSE ; CHR$(PEEK(X%));
710 NEXT X%
720 IF J%>62872% THEN ; : GET C$ : IF C$=CHR$(13%) THEN 750
730 IF J%=62936% THEN OUT 6%,0%,6%,131%
740 NEXT J%
750 RETURN
760 REM DELETE
770 ONERRORGOTO 830 : ; 'Fr.o.m. vilken byte'; : INPUT Y% : ONERRORGOTO 0
780 ; 'Hur m}nga tecken'; : INPUT L%
790 POKE 65408%,256%-L%-Y%,0%,62720%+Y%,SWAP%(62720%+Y%),62720%+Y%+L%,SWAP%(62720%+Y%+L%)
800 POKE -110%,176% : Z%=CALL(65414%)
810 FOR X%=62975% TO 62976%-L% STEP -1%
820 POKE X%,32% : NEXT X%
830 RETURN
840 REM INSERT
850 ; CUR(23%,0%)'Ascii,Hex eller Decimalt'; : INPUT A$ : A$=CHR$(ASC(A$) AND 223%)
860 A%=INSTR(1%,'AHD',A$) : IF A%=0% THEN 1220
870 ON A% GOTO 890,930,1050
880 REM Ascii input
890 E%=1% : ; 'Skriv en str{ng:';
900 INPUTLINE A$ : A$=LEFT$(A$,LEN(A$)-2%) : IF A$='' ;
910 GOTO 1140
920 REM Hex input
930 E%=2% : ; 'Skriv en HEX-str{ng:';
940 INPUTLINE A$ : IF LEN(A$)<4% THEN A$='' : ; : GOTO 1030
950 FOR X%=1% TO LEN(A$)
960 A%=ASC(A$) : A$=RIGHT$(A$,2%)
970 IF (A%>47% AND A%<58%) OR (A%>64% AND A%<71%) THEN B$=B$+CHR$(A%)
980 NEXT X% : A$=''
990 FOR X%=1% TO LEN(B$)/2%*2% STEP 2%
1000 IF LEN(B$)<2% THEN 1030
1010 A$=A$+CHR$((INSTR(1%,H$,MID$(B$,X%,1%))-1%)*16%+INSTR(1%,H$,MID$(B$,X%+1%,1%))-1%)
1020 NEXT X% : B$=''
1030 GOTO 1140
1040 REM Decimal input
1050 E%=3% : A$='' : C$='' : ; 'Skriv decimala tal med "," emellan:'
1060 INPUTLINE D$ : D$=LEFT$(D$,LEN(D$)-1%)
1070 FOR I%=1% TO LEN(D$)
1080 B$=MID$(D$,I%,1%)
1090 IF ASC(B$)<48% OR ASC(B$)>57% THEN GOSUB 1110 ELSE C$=C$+B$
1100 NEXT I% : GOTO 1140
1110 IF C$='' 1120 ELSE A$=A$+CHR$(VAL(C$)) : B$='' : C$=''
1120 RETURN
1130 REM INSERT-----
1140 IF A$='' GOTO 850
1150 L%=LEN(A$)
1160 ONERRORGOTO 1230 : ; : ; 'Fr.o.m. vilken byte'; : INPUT Y% : ONERRORGOTO 0
1170 POKE 65408%,256%-L%-Y%,0%,62975%,SWAP%(62975%),62975%-L%,SWAP%(62975%-L%)
1180 POKE -110%,184% : Z%=CALL(65414%)
1190 FOR X%=Y% TO L%+Y%-1%
1200 POKE 62720%+X%,ASC(MID$(A$,X%-Y%+1%,1%))
1210 NEXT X%
1220 RETURN
1230 ON E% GOTO 890,930,1050