1 REM Ins{nd av Johan Olofsson <5809> 1987-08-01 15.16.41 (DUMP)
10 ! --------------------------------------------------
20 ! CROSSREF Ver 2.00 - L{ser en BAS-fil
30 ! F|r ABC800-BASIC, med diskett-station
40 ! F}r kopieras fritt endast i icke-komersiella syften.
70 ! --------------------------------------------------
99 !
100 INTEGER : EXTEND
101 !
102 COMMON Sep$=18,E$=160,G$=30,Text$(0:6)=20,L$=1,W$=1,R$=1
103 COMMON Rub$=80,Fil$=16,Tmpfil$=16,Pr$=16,Order$=7
104 COMMON Typstring,Typvar,Typlocal,Typfn,Typbas,Typtal,Typrad
106 COMMON Infil,Tmp,Utfil,Bas,Order,Flaglist,Flagkill,K9,T0,Utfilpos.
112 !
180 OPEN Fil$ AS FILE Infil
200 PREPARE Tmpfil$ AS FILE Tmp
215 WHILE Flaglist
220 PREPARE Pr$ AS FILE Utfil
221 IF INSTR(1,Pr$,'PR:')<>1 THEN WIDTH #Utfil,78
225 IF 0 WEND
230 T=SYS(4)-3000 : DIM T$=T : POKE VAROOT(T$)+4,2,0 : T0=1
235 MID$(T$,T0,2)=W$+' '
340 !
350 Z=FNL{s
351 K9=POSIT(Tmp)/4 ! antalet poster i #Tmp
352 PUT #Tmp,CHR$(0,0,0,0)
353 PUT #Tmp,CVT%$(LEN(T$))
354 PUT #Tmp,T$
360 !
365 IF Flaglist THEN Utfilpos.=POSIT(Utfil)
370 CHAIN 'cref3'
400 !
410 ! ------------------------------------------------------------------------
420 !
1000 DEF FNL{s LOCAL Ord$=160,A$=200,Aa$=80,P$=1,R,S,Typ
1005 ON ERROR GOTO 1485
1010 IF Flaglist ; #Utfil 'Listning av programmet "'+Fil$+'"' : ; #Utfil
1015 WHILE -1
1020 INPUT LINE #Infil,A$
1025 IF Flaglist ; #Utfil,LEFT$(A$,LEN(A$)-2)
1030 !
1035 R=VAL(LEFT$(A$,INSTR(1,A$,' ')))
1040 ! R = radnummer
1045 A$=RIGHT$(A$,INSTR(1,A$,' '))
1050 A$=LEFT$(A$,LEN(A$)-2)+' '
1055 ! A$ {r nu rensad fr}n radnummer och CRLF
1060 !
1065 Flagdef=(1=INSTR(1,A$,' DEF FN'))
1070 WHILE Flagdef
1075 P$=L$
1080 Flagfn=-1
1085 Posfn=T0
1090 ! Flagdef {r satt f|r pgm-raden med ' DEF FN'
1095 ! Flagfn {r satt till pgm-raden med ' FNEND'
1100 ! Posfn anv{nds f|r att kolla om variabler {r lokala
1105 IF 0 WEND
1110 IF 2=INSTR(1,A$,'FNEND') THEN Flagfn=0 : Posfn=1
1115 !
1120 S=0
1125 Flaggo=0 : Flagif=0 : Flagon=0
1130 FOR P=1 TO LEN(A$)
1135 IF NOT Flagdef THEN P$=''
1140 IF MID$(A$,P,1)=':' THEN Flaggo=0 : Flagif=0 : Flagon=0
1145 IF MID$(A$,P,1)='"' THEN P=INSTR(P+1,A$,'"') : P$='"'
1150 IF MID$(A$,P,1)="'" THEN P=INSTR(P+1,A$,"'") : P$="'"
1155 IF MID$(A$,P,1)='!' THEN GOTO 1475 ! skippa kommentar !
1160 IF INSTR(P,A$,'REM')=P THEN GOTO 1475
1165 WHILE INSTR(1,Sep$,MID$(A$,P,1))
1170 WHILE S>0 AND P>S
1175 ! Det finns n}got mellan S och P
1180 Ord$=MID$(A$,S,P-S)
1185 Typ=FNTyp(Ord$)
1190 IF Typ=Typvar IF MID$(A$,P,1)='(' THEN Ord$=Ord$+'()'
1195 ! f|r indexerade variabler
1200 IF Order