1 REM Ins{nt av 397 10 ! =============================================== 20 ! program BASICFIL.800 30 ! 1984-02-21 40 ! version 1.4 50 ! {ndrad 1984-03-24 60 ! 70 ! (C) Leif Eriksson <397> 026-195271 80 ! 90 ! passar till alla modeller av ABC 800 100 ! filen ska vara lagrad med "list" 110 ! utskriften blir "PASCAL-liknande" 120 ! utskrift g}r utm{rkt att g|ra fr}n ram-floppy 130 ! 140 ! ins{nd av <397> 150 ! =============================================== 160 FLOAT : EXTEND 170 DIM Rad$=160%,Radnr%(800%) 180 ! 190 ! initiera 200 S|k$(1%)='GOTO' 210 S|k$(2%)='GOSUB' 220 S|k$(3%)='RESUME' 230 S|k$(4%)='THEN' 240 S|k$(5%)='ELSE' 250 ! 260 ! 270 ! 280 DEF FNS|k% 290 FOR S|kning%=1% TO 5% 300 Start%=1% : Temp$='' 310 WHILE 1% 320 Pos%=INSTR(Start%,Rad$,S|k$(S|kning%)) 330 IF Pos%=0% THEN 470 340 Start%=Pos% 350 Pos%=INSTR(Start%,Rad$,' ') 360 IF Pos%=0% THEN 470 370 Start%=Pos% 380 Nr%=Start%+1% 390 P$=MID$(Rad$,Nr%,1%) 400 Nr%=Nr%+1% 410 IF ASCII(P$)>47% AND ASCII(P$)<58% THEN Temp$=Temp$+P$ : GOTO 390 420 IF P$=',' THEN Z%=FNSorterain% : GOTO 390 430 IF P$=' ' THEN Z%=FNSorterain% 440 IF P$=CHR$(13%) THEN Z%=FNSorterain% : GOTO 470 450 Start%=Nr%-1% : Temp$='' 460 WEND 470 NEXT S|kning% 480 RETURN 0% 490 FNEND 500 ! 510 DEF FNSorterain% LOCAL Temp% 520 ON ERROR GOTO 580 530 Temp%=VAL(Temp$) 540 Temp$='' 550 IF Ant%<>0% THEN 590 560 Ant%=1% 570 Radnr%(Ant%)=Temp% 580 RETURN 0% 590 IF Temp%>Radnr%(Ant%) THEN Ant%=Ant%+1% : Radnr%(Ant%)=Temp% : RETURN 0% 600 FOR I%=1% TO Ant% 610 IF Temp%=Radnr%(I%) THEN RETURN 0% 620 IF Temp%>Radnr%(I%) THEN 700 630 ! flytta upp 640 FOR J%=Ant% TO I% STEP -1% 650 Radnr%(J%+1%)=Radnr%(J%) 660 NEXT J% 670 Radnr%(I%)=Temp% 680 Ant%=Ant%+1% 690 RETURN 0% 700 NEXT I% 710 RETURN 0% 720 FNEND 730 ! 740 DEF FNKolla% LOCAL Temp$=15 750 FOR I%=1% TO Ant% 760 IF Temp%CHR$(13%) 910 Temp$='' 920 WHILE P$<>CHR$(13%) AND P$<>' ' 930 IF ASCII(P$)<>34% AND ASCII(P$)<>39% THEN 1020 940 Temp$=Temp$+P$ 950 P$=MID$(Rad$,Pos%,1%) 960 WHILE ASCII(P$)<>34% AND ASCII(P$)<>39% 970 Temp$=Temp$+P$ 980 Pos%=Pos%+1% 990 P$=MID$(Rad$,Pos%,1%) 1000 WEND 1010 Pos%=Pos%+1% 1020 Temp$=Temp$+P$ 1030 P$=MID$(Rad$,Pos%,1%) 1040 Pos%=Pos%+1% 1050 WEND 1060 ! 1070 ! 1080 IF Temp$='ISAM' THEN 1110 1090 IF Temp$<>'!' AND Temp$<>'REM' AND Temp$<>'DATA' THEN 1130 1100 IF Temp$<>'DATA' THEN Rad$='! '+RIGHT$(Rad$,Pos%) 1110 Rad$=LEFT$(Rad$,LEN(Rad$)-2%) 1120 PRINT #10%,Rad$ : PRINT Rad$ : GOTO 1410 1130 IF Temp$<>'FOR' AND Temp$<>'DEF' AND Temp$<>'WHILE' THEN 1170 1140 PRINT #10%,Temp$+' '; : PRINT Temp$+' '; 1150 IF Temp$='DEF' THEN IF INSTR(1%,Rad$,'LOCAL')=0% THEN IF INSTR(1%,Rad$,'=') THEN 1360 1160 Tabb%=Tabb%+1% : GOTO 1360 1170 IF Temp$=':' THEN PRINT #10% : PRINT : GOSUB 1550 : GOTO 1360 1180 IF Temp$='IF' THEN IF NOT Tabbjust% THEN Tabbif%=Tabb% : Tabbjust%=-1% 1190 IF Temp$<>'NEXT' AND Temp$<>'FNEND' AND Temp$<>'WEND' THEN 1220 1200 Tabb%=Tabb%-1% 1210 PRINT #10%,Temp$+' '; : PRINT Temp$+' '; : GOTO 1360 1220 IF Temp$=';' THEN PRINT #10%,'PRINT '; : PRINT 'PRINT '; : GOTO 1360 1230 IF Temp$<>'THEN' AND Temp$<>'ELSE' THEN 1330 1240 PRINT #10%,CHR$(13%) : PRINT CHR$(13%) 1250 Tabb%=Tabb%+1% 1260 IF Temp$='THEN' THEN Ta%=Tabb% 1270 IF Temp$='ELSE' THEN Tabb%=Ta% 1280 PRINT #10%,SPACE$(Tabb%+9%) Temp$; : PRINT SPACE$(Tabb%+9%) Temp$; 1290 Tabb%=Tabb%+1% 1300 Thenelse%=-1% 1310 PRINT #10%,CHR$(13%) : PRINT CHR$(13%) 1320 PRINT #10%,SPACE$(Tabb%+9%); : PRINT SPACE$(Tabb%+9%); : GOTO 1360 1330 IF Thenelse% THEN IF ASCII(LEFT$(Temp$,1%))>47% AND ASCII(LEFT$(Temp$,1%))<58% THEN Temp$='GOTO '+Temp$ 1340 PRINT #10%,Temp$+' '; : PRINT Temp$+' '; 1350 Thenelse%=0% 1360 IF P$=CHR$(13%) THEN 1390 1370 P$=MID$(Rad$,Pos%,1%) 1380 Pos%=Pos%+1% 1390 WEND 1400 PRINT #10%,CHR$(13%) : PRINT CHR$(13%) 1410 IF Tabbjust% THEN Tabb%=Tabbif% 1420 RETURN 0% 1430 ! subr NEXT FNEND WEND 1440 Q$=P$ : P%=2% : T$='' : Off%=0% 1450 WHILE Q$<>' ' AND Q$<>CHR$(13%) 1460 T$=T$+Q$ 1470 Q$=MID$(Rad$,P%,1%) 1480 P%=P%+1% 1490 WEND 1500 IF T$='NEXT' OR T$='FNEND' OR T$='WEND' THEN 1510 ELSE 1530 1510 PRINT #10%,SPACE$(Tabb%-1%+Off%); : ; SPACE$(Tabb%-1%+Off%); 1520 RETURN 1530 PRINT SPACE$(Tabb%+Off%); : PRINT #10%,SPACE$(Tabb%+Off%); 1540 RETURN 1550 P%=Pos% : T$='' 1560 Off%=9% 1570 Q$=MID$(Rad$,P%,1%) : P%=P%+1% 1580 GOTO 1450 1590 FNEND 1600 ! 1610 ! ******************** huvudprogram ******************** 1620 PRINT CHR$(12%) 1630 PRINT CUR(2%,0%) STRING$(80%,61%) 1640 PRINT CUR(1%,27%) '***** BASICFIL *****' 1650 ON ERROR GOTO 1680 1660 PRINT CUR(3%,5%) 'ANGE DATUM YY,MM,DD '; : INPUT '19'Yy%,Mm%,Dd% 1670 GOTO 1690 1680 PRINT TAB(6%) 'FEL inmatning !!' : GOTO 1650 1690 POKE -17%,Yy%,Mm%,Dd% 1700 ON ERROR GOTO 1700 1710 PRINT TAB(6%) 'FILNAMN /utan .EXT/'; : INPUT ' >>'Fil$ 1720 IF INSTR(1%,Fil$,'.')<>0% THEN 1710 1730 Fil$=Fil$+'.BAS' 1740 PRINT : PRINT TAB(6%) 'PASS 1 , ett |gonblick.' 1750 ON ERROR GOTO 1820 1760 ! pass 1 1770 OPEN Fil$ AS FILE 7% 1780 WHILE 1% 1790 INPUT LINE #7%,Rad$ 1800 Z%=FNS|k% 1810 WEND 1820 CLOSE 1830 ON ERROR GOTO 2010 1840 ! 1850 ! pass 2 1860 OPEN Fil$ AS FILE 7% 1870 PREPARE 'PR:VSA36C72.5' AS FILE 10% 1880 PRINT #10%,STRING$(78%,61%) 1890 PRINT #10%,TAB(10%) 'Programlista ABC 800-802-806' TAB(60%) LEFT$(TIME$,10%) 1900 PRINT #10%,STRING$(78%,61%)+CHR$(10%) 1910 Tabb%=2% 1920 WHILE 1% 1930 INPUT LINE #7%,Rad$ 1940 Pos%=INSTR(1%,Rad$,' ') 1950 Temp%=VAL(LEFT$(Rad$,Pos%-1%)) 1960 Z%=FNKolla% 1970 Rad$=RIGHT$(Rad$,Pos%+1%) 1980 Z%=FNSkrivrad% 1990 WEND 2000 ; : ; : ; 'SLUT' 2010 PRINT #10%,CHR$(10%)+STRING$(78%,61%) 2020 INPUT 'En till listning (J/N) 'P$ 2030 IF P$='N' OR P$='n' THEN 2110 2040 IF P$<>'J' AND P$<>'j' THEN ; CHR$(7%) : GOTO 2020 2050 ! nollst{llning av variabler 2060 FOR I%=1% TO Ant% 2070 Radnr%(I%)=0% 2080 NEXT I% 2090 Ant%=0% 2100 GOTO 1700 2110 PRINT CHR$(12%) 2120 PRINT CUR(5%,0%) 'TACK f|r idag.' 2130 PRINT CUR(7%,0%) 'Ha en trevlig dag.' 2140 END