1 REM . Detta {r ingen nyare 2 REM . versision av L[SFIL 3 REM . utan inskickad med 4 REM . Max radl{ngd 255 5 REM . Ist{llet f|r 80 6 REM . vilket anv{ndes vid den 7 REM . f|rra inskickningen. 8 REM . Lars-B|rje Cid 9 REM . 1983-08-24 100 REM +-----------------------------+ 110 REM +---------.L[SFIL.------------+ 120 REM +-----------------------------+ 130 REM +- L{s och {ndra p} program- + 140 REM +- filer. Ver 1.1 -+ 150 REM +-----------------------------+ 160 REM +- (c) Lars-B|rje Cid 1983 -+ 170 REM +-----------------------------+ 180 REM +- Duveholm 1983-06-05 -+ 190 REM +-----------------------------+ 200 REM 210 DIM Q0$=256%,Q1$=266%,Q2$=256%,Z$=1%,A$=300%,C$=220% 220 M$=CHR$(12%)+' L[SFIL: L{s och {ndra program-filer 1.1'+CUR(1%,0%)+CHR$(23%)+STRING$(39%,35%) : ; M$ 230 H$="0123456789ABCDEF" 240 DEFFNA%=(R%-1%)*23%+K% 250 DEFFNB%(X$)=ASC(X$)-64% 260 DEFFNC%(X$)=INSTR(1%,X$+CHR$(ASC(X$)+32%),\$) 270 DEFFNH1%(I%)=((I%/16%) AND 15%)+1% 280 DEFFNH2%(I%)=(I% AND 15%)+1% 290 ; CUR(6%,17%)SPACE$(100%+LEN(A$))CUR(6,5%)'Ange infil: '; : GOSUB 1380 : Z$='' 300 IF \$='' THEN ; : ; 'SLUT: L{sfil.' : END ELSE \9$=\$ 310 IF INSTR(1%,\$,'.')=0% THEN \$=\$+'.BAC' 320 ONERRORGOTO 290 : OPEN \$ ASFILE 1 : \%=0% 330 ONERRORGOTO 360 : Z%=CALL(28666%,1%) : Z%=CALL(28668%,\1%) : \1%=\1%+1% : GOTO 330 340 IF \1-1%<=0% THEN ; CUR(6%,5%)"Felaktigt sektors format."CHR$(7%) : F1%=-1% 350 IF F1% THEN F1%=0% : FOR P=1 TO 2000 : NEXT P : GOTO 220 360 ; M$CUR(6%,5%)'Filens sektorformat: '\1%-1% 370 D$='DR'+RIGHT$(NUM$(PEEK(-767%)),2%)+':' : CLOSE 1% : OPEN D$+\$ ASFILE 1% 380 ; M$ 390 REM 400 REM -- IN BLOCK -- 410 REM 420 IF \%>=\1%-1% OR \%<0% THEN GOSUB 1080 : GOTO 570 ELSE ONERRORGOTO 900 430 ; CUR(3%,6%)STRING$(23%,ASC("_"))CUR(17%,6%)STRING$(23%,ASC("_")) 440 Q0$="" : ; CUR(23%,8%)'V[NTA...'; : Z%=CALL(28666%,1%) : Z%=CALL(28668%,\%) 450 I1%=5% : I2%=6% : Q1$='' : Q2$='' : R%=1% : K%=0% : I9%=1% 460 FOR I%=1% TO 253% STEP 23% : ; CUR(I1%,4%-LEN(NUM$(I%)))I%": " 470 FOR I3%=1% TO 23% : A$=MID$(Q0$,I9%,1%) : I9%=I9%+1% 480 IF A$<=' ' OR A$>'' THEN A$='.' 490 IF I9%>=254% THEN 660 500 REM 510 REM -- SCREEN -- 520 REM 530 ; CUR(I1%,I2%)A$' ' : I2%=I2%+1% : NEXT I3% : I2%=6% : I1%=I1%+1% : NEXT I% : GOTO 660 540 REM 550 REM -- GET CHAR. -- 560 REM 570 ; CUR(22%,0%)SPACE$(39%); 580 GOSUB 1000 : IF LEN(Q0$)<>253% STOP ELSE ; CUR(R%+4%,K%+5%); : POKE 65013%,0% : GET Z$ 590 ; CUR(23%,0%)SPACE$(39%); 600 IF Z$<' ' THEN 760 610 IF K%*R%=1% THEN Q0$=Z$+RIGHT$(Q0$,2%) : GOTO 650 620 IF K%*R%=LEN(Q0$) THEN Q0$=LEFT$(Q0$,LEN(Q0$)-1%)+Z$ : GOTO 650 630 Q2$=RIGHT$(Q0$,FNA%+1%) : Q1$=LEFT$(Q0$,FNA%-1%) 640 Q0$=Q1$+Z$+Q2$ 650 IF Z$<' ' OR Z$>'' THEN 450 660 ; CUR(R%+4%,K%+5%)Z$ : K%=K%+1% 670 IF FNA%>253% THEN R%=12% 680 IF K%<1% THEN K%=23% : R%=R%-1% 690 IF K%>23% THEN K%=1% : R%=R%+1% 700 IF R%>11% THEN R%=11% : K%=23% 710 IF R%<1% THEN R%=1% 720 Q1$='' : Q2$='' : Z$='.' : T%=0% : GOTO 770 730 REM 740 REM -- EXECUTE COMMAND -- 750 REM 760 T%=ASC(Z$) : Z$='' 770 IF T%=8% THEN \%=\%-1% : GOTO 420 780 IF T%=9% THEN \%=\%+1% : GOTO 420 790 IF T%=1% THEN K%=K%-1% : GOTO 670 800 IF T%=FNB%('^') THEN 940 810 IF T%=FNB%('W') THEN R%=R%-1% : GOTO 670 820 IF T%=FNB%('Z') THEN R%=R%+1% : GOTO 670 830 IF T%=FNB%('S') THEN K%=K%+1% : GOTO 670 840 IF T%=FNB%('P') THEN 1150 850 IF T%=FNB%('Q') THEN 1230 860 IF T%=FNB%('B') THEN 1290 870 IF T%=FNB%('_') THEN 1680 880 IF T%=FNB%('F') THEN 1340 890 GOTO 570 900 \%=1% : GOTO 420 910 REM 920 REM -- ASCII-V[RDE <32 - >127 -- 930 REM 940 ONERRORGOTO 670 : ; CUR(22%,5%)'Ange ASCII-V{rde (0-255) ? '; : GOSUB 1380 950 A%=VAL(\$) : IF A%<0% OR A%>255% THEN ONERRORGOTO 0 : GOSUB 1110 : GOTO 570 960 Z$=CHR$(A%) : GOTO 610 970 REM 980 REM -- SUBRUTIN F\R TEXT -- 990 REM 1000 A%=ASC(RIGHT$(Q0$,FNA%)) : GOSUB 1880 1010 ; CUR(19%,7%)' ASCII:'TAB(19%-LEN(NUM$(A%)))A%' ('H1$')' 1020 ; CUR(20%,7%)' POS:'TAB(19%-LEN(NUM$(FNA%)))FNA%' ' 1030 ; CUR(18%,7%)'Sektor:'TAB(19%-LEN(NUM$(\%)))\%' ' 1040 RETURN 1050 REM 1060 REM -- ERROR -- 1070 REM 1080 ; CUR(23%,6%)'Felaktigt Sektornummer.'CHR$(7%); : IF \%<0% THEN \%=0% 1090 IF \%>\1%-1% THEN \%=\1%-1% 1100 RETURN 1110 ; CUR(23%,5%)'F|r stort decimaltal.'CHR$(7%); : RETURN 1120 REM 1130 REM -- UT BLOCK -- 1140 REM 1150 ; CUR(22%,5%)'WRITE: [r du s{ker ? '; : GOSUB 1380 1160 IF FNC%('J') THEN 1170 ELSE 570 1170 ; CUR(22%,5%)STRING$(39%,32%)CUR(22%,5%)'Skriver Sektor:'\% 1180 Z%=CALL(28666%,1%) : Z%=CALL(28670%,\%) 1190 FOR P=1 TO 500 : NEXT P : GOTO 570 1200 REM 1210 REM -- AVSLUTA ?? -- 1220 REM 1230 ; CUR(22%,5%)'AVSLUTA: [r du s{ker ? '; : GOSUB 1380 1240 IF FNC%('J') THEN CLOSE 1% : ; CHR$(12%) : END 1250 GOTO 570 1260 REM 1270 REM -- BYTA FIL ?? -- 1280 REM 1290 ; CUR(22%,5%)'BYTA FIL: [r du s{ker ? '; : GOSUB 1380 1300 IF FNC%('J') THEN 220 ELSE 570 1310 REM 1320 REM -- HOPP TILL x -- 1330 REM 1340 ; CUR(22%,5%)'Ange sektor ? (0-'RIGHT$(NUM$(\1%-1%),2%)') '; : GOSUB 1380 1350 ; CUR(22%,0%)STRING$(39%,32%); : ONERRORGOTO 570 : A%=VAL(\$) 1360 IF A%<0% OR A%>\1%-1% THEN ONERRORGOTO 0 : GOSUB 1080 : GOTO 570 1370 \%=A% : GOTO 420 1380 REM 1390 REM -- INMATNINGS-RUTIN -- 1400 REM 1410 DIM \$=38%,J$=38%,]$=3% 1420 ]$=CHR$(8%,32%,8%) : ]1%=1% 1430 IF K%<0% OR K%>37% THEN K%=37% 1440 ]%=0% : \$='' : ; TAB(K%); 1450 FOR L%=0% TO 120% : [0%=INP(56%) 1460 IF [0%<128% THEN ]%=0% : GOTO 1510 1470 IF ]1% THEN 1500 1480 IF [0%-[2% THEN ]%=0% : GOTO 1510 1490 IF ]%=1% AND L%>11% THEN 1510 1500 NEXT L% : ]%=1% 1510 ]1%=0% : FOR L%=0% TO 198% 1520 [0%=INP(56%) : IF [0%>127% THEN 1550 1530 IF L%=99% THEN ; '_'; 1540 NEXT L% : ; ]$; : GOTO 1510 1550 IF L%>99% THEN ; ]$; 1560 [2%=[0% : [%=[0%-128% 1570 IF [%=8% IF LEN(\$) THEN \$=LEFT$(\$,LEN(\$)-1%) : ; ]$; 1580 IF [%=9% IF LEN(J$) THEN [%=ASC(J$) : J$=RIGHT$(J$,2%) 1590 IF [%=13% THEN J$='' : ; : GET ]$ : RETURN 1600 IF [%=24% THEN FOR L%=1% TO LEN(\$) : ; ]$; : NEXT L% : \$='' 1610 IF [%<33% THEN 1450 1620 IF LEN(\$)-38%+K% THEN 1640 1630 ; CHR$(7%); : GOTO 1450 1640 \$=\$+CHR$([%) : ; CHR$([%); : GOTO 1450 1650 REM 1660 REM -- PRINTER -- 1670 REM 1680 ; CUR(22%,5%)'PRINTER: [r du s{ker ? '; : GOSUB 1380 1690 IF FNC%('J') THEN OPEN "PR:" ASFILE 2 ELSE 420 1700 ; CUR(22%,5%)"HEX eller DEC ? (H/D) "; : GOSUB 1380 1710 IF \$<>"H" THEN H%=0% ELSE H%=-1% 1720 IF H% THEN H2$="HEX" ELSE H2$="DEC" 1730 ; CUR(22%,0%)STRING$(39%,32%)CUR(22%,1%)"Avbryt med DEL (CTRL-< )."; 1740 FOR I%=\% TO \1%-1% : Z%=CALL(28666%,1%) : Z%=CALL(28668%,I%) : ; #2% 1750 IF INP(56%)-128%=127% THEN POKE 65013%,0% : GOTO 420 1760 ; #2%CHR$(15%)"Sektor: "I%" Fil: "\9$" "H2$ : ; #2% 1770 FOR I1%=1% TO 253% STEP 23% : C$=SPACE$(6%-LEN(NUM$(I1%)))+NUM$(I1%)+": " 1780 FOR I2%=I1% TO I1%+22% : A$=MID$(Q0$,I2%,1%) 1790 IF INP(56%)-128%=127% THEN POKE 65013%,0% : GOTO 420 1800 IF NOT H% THEN C$=C$+SPACE$(4%-LEN(NUM$(ASC(RIGHT$(Q0$,I2%)))))+NUM$(ASC(RIGHT$(Q0$,I2%))) 1810 IF H% THEN A%=ASC(RIGHT$(Q0$,I2%)) : GOSUB 1880 : C$=C$+" "+H1$ 1820 IF A$<"!" OR A$>"" THEN B$=B$+"." ELSE B$=B$+A$ 1830 NEXT I2% : C$=C$+" "+B$ : ; #2%C$ : C$="" : B$="" : A$="" : NEXT I1% : NEXT I% 1840 GOTO 420 1850 REM 1860 REM -- SUB F\R HEX -- 1870 REM 1880 H1$=MID$(H$,FNH1%(A%),1%)+MID$(H$,FNH2%(A%),1%) 1890 RETURN