10 ! 1994-03-19
20 EXTEND
22 INTEGER
24 OPTION BASE 0
82 ; '*** Unsqueeze utility, for BASIC II ***'
125 ; ' Extended version, based on versions'
126 ; ' 02.07 from SH-System Elektronik and'
127 ; ' 02.10 from Luxor Datorer AB'
158 ; ' Copyright 1984 SH-System Elektronik'
160 Max=200
163 DIM G$=Max
180 H=(SYS(4)-3000)/Max
185 IF H<5 ; CHR$(7) : ; "Warning: stack size is" H "items"
196 DIM I$(H)=Max
235 G$=CHR$(8,4,0,7,3,1,0,2)
249 Netused=0 : Doused=0
253 I$(0)=CHR$(13)+SPACE$(79)+CHR$(13)
307 DATA " EQV "," IMP "," OR "," XOR "," AND ",=,=,=,<>,<>,<>
364 DATA <,<,<,>=,>=,>=,>,>,>,<=,<=,<=,+,+,+,-,-,*,*,/,/,^,^,^
421 DATA eof
428 DATA FN,FIX,INT,SIN,COS,TAN,ATN,SQR,PI,RND,SGN,ASCII,CHR$,LEFT$,RIGHT$
497 DATA MID$,LEN,INSTR,SPACE$,STRING$,SWAP%,PEEK,INP,CALL,ERRCODE,SYS,ABS
566 DATA ADD$,NUM$,TAB,SUB$,CUR,MUL$,TXPOINT,DIV$,EXP,LOG,LOG10,COMP%,VAL
634 DATA MID$,TIME$,POSIT,VARPTR,VAROOT,PEEK2,MOD,CVT%$,CVT$%,CVTF$,CVT$F
702 DATA HEX$,OCT$,DOT,eof
723 DATA BLK,RED,GRN,YEL,BLU,MAG,CYA,WHT,FLSH,STDY,ULN,NULN,NRML,DBLE,EL,,GBLK
788 DATA GRED,GGRN,GYEL,GBLU,GMAG,GCYA,GWHT,HIDE,GCON,GSEP,,BLBG
847 DATA NWBG,GHOL,GREL,eof
869 ;
870 ON ERROR GOTO 968
873 ; I$(0) "Input file" TAB(21);
901 INPUT ": "P$;
910 IF P$='' THEN GOTO 2172
921 IF INSTR(1,P$,'.')=0 THEN P$=P$+'.BAC' : ; '.BAC';
956 OPEN P$ AS FILE 1
965 GOTO 971
968 RESUME 870
971 ;
972 ON ERROR GOTO 1123
975 ; I$(0) "Output file" TAB(21);
1004 INPUT ": "Q$;
1013 IF Q$='' THEN S=0 : GOTO 1126 ELSE S=2
1034 IF INSTR(1,'PR:pr:',LEFT$(LEFT$(Q$+SPACE$(3),3),3))<>0 THEN GOTO 1103
1065 IF INSTR(1,Q$,'.')=0 THEN Q$=Q$+'.BAS' : ; '.BAS';
1103 IF S<>0 THEN PREPARE Q$ AS FILE S
1120 GOTO 1126
1123 RESUME 972
1126 ;
1127 ON ERROR GOTO 1204
1130 ; I$(0) "Offset" TAB(21);
1154 INPUT ": "T$;
1163 IF T$='' THEN ; CHR$(9,50,48) : V=20 ELSE V=VAL(T$) : ;
1201 GOTO 1207
1204 RESUME 1127
1207 ON ERROR GOTO 1272
1210 ; I$(0) 'Options (B,FS,?)' TAB(21);
1248 INPUT ": "T$;
1250 IF T$<>"?" GOTO 1257
1251 ; I$(0) "Options:"
1252 ; "B - go backwards on unknown instructions, else skip"
1254 ; "FS - add function size and variable space information"
1255 ; : GOTO 1210
1257 W=0
1265 Y=0
1269 GOTO 1275
1272 RESUME 1207
1275 WHILE LEN(T$)>0
1286 B1$=''
1292 WHILE INSTR(1,', /',CHR$(ASCII(T$)))=0 AND LEN(T$)>=1
1321 B1$=B1$+CHR$(ASCII(T$))
1336 IF LEN(T$)>=2 THEN T$=RIGHT$(T$,2) ELSE T$=''
1361 WEND
1364 E1=INSTR(1,'B b FSfs',B1$)+3
1389 ON E1/4+1 GOTO 1207,1409,1423
1409 W=-1
1413 GOTO 1430
1423 Y=-1
1430 WHILE INSTR(1,', /',CHR$(ASCII(T$)))<>0 AND LEN(T$)>=1
1459 IF LEN(T$)>=2 THEN T$=RIGHT$(T$,2) ELSE T$=''
1485 WEND
1488 WEND
1491 ;
1492 G1=(PEEK(SYS(10)+29) AND 1)=1
1510 H1$=''
1515 J1=(PEEK(SYS(10)+29) AND 2)=2
1532 ;
1533 IF G1 THEN I$(0)='INTEGER' ELSE H1$='%' : I$(0)='FLOAT'
1575 ; 'Default ' I$(0) ' mode.'
1603 IF J1 THEN GOTO 1658
1612 ; "Set EXTEND mode, if you load the BAS-file."
1658 ;
1659 POSIT #1,235
1670 FOR L=1 TO LEN(G$)
1685 IF MID$(G$,L,1)<>CHR$(FNR2173-221) THEN GOTO 1721
1712 NEXT L
1715 E1=PEEK(0)
1721 POSIT #1,0
1730 IF (FNR2173+1 AND 254)<>144 THEN ; FLSH 'Unknown BASIC version.' STDY : GOTO 2169
1778 L1=FNR2173
1786 L1=FNR2173
1794 E1=FNR2173
1802 M1=FNR2225
1810 IF (L1 AND 1)=0 THEN ; FLSH "Warning, program isn't fixed up." STDY
1862 ON ERROR GOTO
1863 POSIT #1,V
1874 N1=0
1879 O1=1
1883 P1=0
1887 L1=FNR2173
1895 WHILE NOT N1
1903 S1=L1
1910 IF S1=135 THEN S1=FNR9644(3)
1928 IF S1=141 OR S1=153 OR S1=155 THEN T1=2 ELSE T1=0
1963 IF U1-T1<0 THEN U1=0 : T1=0
1982 IF P1 THEN GOTO 2096
1990 ; #S USING "#####"+SPACE$(U1-T1+1),POSIT(1)-O1;
2028 IF S<>0 THEN ; USING CHR$(13)+'Line ##### ###%' FNR9275.(POSIT(1)-O1) FNR9275.(POSIT(1))*100./M1;
2096 P1=0
2101 O1=1
2105 E1=FNR2310
2113 IF V1$="88" THEN P1=-1 : GOTO 2149
2131 IF P1=0 THEN ; #S
2144 W1=0
2149 WEND
2152 CLOSE
2154 ;
2155 ; 'End-Of-Job'
2169 GOTO 235
2172 END
2173 DEF FNR2173 LOCAL La$=1,Lb
2189 GET #1,La$
2199 Lb=ASCII(La$)
2208 V1$=FNR2260$(Lb)
2219 RETURN Lb
2224 FNEND
2225 DEF FNR2225 LOCAL La$=2
2239 GET #1,La$ COUNT 2
2252 RETURN CVT$%(La$)
2259 FNEND
2260 DEF FNR2260$(La) LOCAL Lb$=2
2276 Lb$=HEX$(La)
2285 IF LEN(Lb$)=1 THEN Lb$="0"+Lb$
2304 RETURN Lb$
2309 FNEND
2310 DEF FNR2310
2318 ON ERROR GOTO 2580
2321 IF V1$<"80" THEN 2378
2335 IF V1$<"A5" THEN E1=FNR2641 : GOTO 2560
2356 IF V1$>"BF" THEN E1=FNR5125(0) : GOTO 2560
2378 IF X1=0 THEN GOTO 2448 ELSE ; #S,'! ';
2403 WHILE V1$<'80'
2415 ; #S,CHR$(L1);
2429 L1=FNR2173
2438 WEND
2441 X1=0
2445 RETURN 0
2448 IF W THEN E1=FNR8543+FNR8543 ELSE ; 'Synk --- ';V1$
2488 W1=W1+1
2497 IF W1<253 THEN GOTO 2560
2509 ;
2510 ; 'Illegal statement loop found, program stopped'
2558 STOP
2560 L1=FNR2173
2569 RETURN 0
2572 A2=0
2577 GOTO 2560
2580 RESUME 2572
2583 FNEND
2584 DEF FNR2584(La$)
2594 B2=POSIT(1)+1
2605 C2=FNR2225
2613 ; #S,La$;NUM$(B2+C2);
2637 RETURN 0
2640 FNEND
2641 DEF FNR2641 LOCAL La
2653 D2=L1-127
2664 IF D2>10 THEN 2859
2674 ON D2 GOTO 2702,2716,2725,2740,2757,2773,2796,2803,2845,2856
2702 RETURN FNR2584("GOTO ")
2716 RETURN FNR2584("")
2725 RETURN FNR2584("GOSUB ")
2740 RETURN FNR2584("RESTORE ")
2757 RETURN FNR2584("RESUME ")
2773 RETURN FNR2584("ON ERROR GOTO ")
2796 RETURN FNR6516
2803 E2=FNR2173
2812 L1=FNR2173
2820 L1=FNR2173
2828 N1=(E2=1)
2837 P1=-1
2842 GOTO 5121
2845 P1=0
2849 O1=2
2853 GOTO 5121
2856 GOTO 5057
2859 IF D2>20 THEN 3802
2871 ON D2-10 GOTO 2901,3050,3074,3546,3644,3672,3690,3737,3760,3782
2901 ; #S,' ELSE ';
2918 La=POSIT(1)+FNR2173+1
2936 L1=FNR2173
2944 E1=FNR2310
2952 IF V1$='88' AND POSIT(1)'8A' AND (POSIT(1)0 THEN ; #S,"(";
3277 FOR L=1 TO J2
3290 L1=FNR2173
3299 E1=FNR8843
3307 ; #S,FNR10060$;
3321 IF L0 THEN ; #S,")";
3365 L1=FNR2173
3374 IF V1$<>"B6" THEN 3499
3387 J2=FNR2173
3395 ; #S," LOCAL ";
3413 H2=-1
3419 FOR L=1 TO J2
3432 L1=FNR2173
3441 E1=FNR8843
3449 ; #S,FNR10060$;
3463 IF L30 THEN 4762
3814 ON D2-20 GOTO 3846,4083,4094,4295,4378,4549,4610,4645,4680,4759
3846 ; #S,'; ';
3859 L1=FNR2173
3868 E1=FNR8421
3876 IF FNR8486 THEN 3927
3886 IF V1$<>"B8" THEN 3927
3899 E1=FNR9304(" USING ")
3916 L1=FNR2173
3924 GOTO 3966
3927 IF FNR5336 THEN GOTO 4071
3937 L1=FNR2173
3945 IF A2>0 THEN ; #S,FNR10060$;
3966 IF FNR8486 THEN 3927
3977 IF CHR$(ASCII(V1$))<'B' THEN 4071
3993 O2=POSIT(1)
4000 L1=FNR5369
4008 IF V1$='B7' OR V1$='B8' OR V1$='B9' THEN ; #S,' '; : L1=FNR5369 : GOTO 3937
4060 POSIT #1,O2
4071 E1=FNR8543
4080 GOTO 5121
4083 E1=FNR8998
4091 GOTO 5121
4094 L1=FNR2173
4102 ; #S,"INPUT ";
4119 E1=FNR8421
4128 IF FNR5336 THEN 4169
4138 ; #S,FNR10060$;
4152 L1=FNR2173
4161 E1=FNR8486
4169 P2=0
4173 S1=FNR2173
4181 P2=P2+1
4189 IF S1<8 THEN GOTO 4173
4199 L1=FNR2173
4207 IF FNR5336 THEN 4264
4217 ; #S,FNR10060$;
4231 L1=FNR2173
4240 IF FNR5336=0 THEN ; #S,","; : GOTO 4217
4264 IF FNR8486 AND (V1$<>'87') THEN 5121
4284 E1=FNR8543
4292 GOTO 5121
4295 L1=FNR2173
4303 ; #S,"INPUT LINE ";
4325 E1=FNR8421
4334 IF FNR5336 THEN 4375
4344 ; #S,FNR10060$;
4358 L1=FNR2173
4367 E1=FNR8486
4375 GOTO 4071
4378 ; #S,'FOR ';
4393 U1=U1+2
4402 L1=FNR2173
4410 E1=FNR5369+FNR5125(0)
4425 R2$(Q2)=I$(A2+1)
4443 Q2=Q2+1
4452 L1=FNR2173
4460 IF V1$='BD' THEN ; #S,' TO '; ELSE STOP
4489 E1=FNR9304('')
4500 L1=FNR2173
4508 IF V1$='BE' THEN ; #S,' STEP '; : GOTO 4489
4538 E1=FNR2225
4546 GOTO 5121
4549 ; #S,'NEXT ';
4565 U1=U1-2
4574 E1=FNR2225
4582 Q2=Q2-1
4590 ; #S,R2$(Q2);
4607 GOTO 5121
4610 U1=U1+2
4618 C2=FNR2225
4626 E1=FNR9304("WHILE ")
4642 GOTO 5121
4645 ; #S,"WEND";
4660 U1=U1-2
4669 C2=FNR2225
4677 GOTO 5121
4680 ; #S,'READ ';
4696 C2=FNR2225
4705 E1=FNR9304('')
4715 L1=FNR2173
4723 E1=FNR8543
4731 IF V1$='B7' THEN ; #S,','; : GOTO 4696
4756 GOTO 5121
4759 GOTO 5057
4762 ON D2-30 GOTO 4788,4808,4836,4899,4995,5017,5037
4788 ; #S,"RESUME";
4805 GOTO 5121
4808 ; #S,'ON ERROR GOTO ';
4833 GOTO 5121
4836 ; #S,"RETURN ";
4854 L1=FNR2173
4863 IF FNR5336=0 THEN ; #S,FNR10060$; ELSE E1=FNR8543
4896 GOTO 5121
4899 E1=FNR10443("ON ")+FNR9716('')
4920 S1=FNR2173
4928 S1=FNR2173
4936 L1=FNR2173
4944 E1=FNR2310
4952 E1=FNR8543
4960 WHILE S1>1
4969 E1=FNR2584(",")
4981 S1=S1-1
4989 WEND
4992 GOTO 5121
4995 RETURN FNR9304('')+FNR9304(CHR$(FNR2173))
5017 ; #S,"SINGLE";
5034 GOTO 5121
5037 ; #S,"DOUBLE";
5054 GOTO 5121
5057 ; #S,' ! **** Stat1: unknown p-code segment --- ' V1$ ' ****'
5121 RETURN 0
5124 FNEND
5125 DEF FNR5125(La) LOCAL Lb,Lc
5141 IF La THEN L1=FNR2173
5155 Lc=A2
5161 Lb=POSIT(1)
5168 E1=FNR5369
5176 IF V1$<>'BD' AND V1$<>'BE' THEN 5229
5198 POSIT #1,Lb-1
5211 A2=Lc
5218 E1=FNR8998
5226 RETURN 0
5229 IF V1$>"B6" THEN RETURN FNR10492(FNR10060$)
5252 IF V1$>"B3" THEN 5299
5266 ; #S,FNR10365$ FNR10060$ "=" FNR10060$;
5296 RETURN 0
5299 E1=FNR8568(0)
5308 ; #S,FNR10060$ "=" FNR10060$;
5332 RETURN 0
5335 FNEND
5336 DEF FNR5336
5344 IF V1$<"C0" THEN RETURN -1 ELSE RETURN FNR5369
5368 FNEND
5369 DEF FNR5369 LOCAL La
5377 WHILE -1
5382 IF V1$<"7E" THEN 6512
5396 IF V1$>"80" THEN 5412
5409 GOTO 6500
5412 IF V1$>"83" THEN 5428
5425 GOTO 6500
5428 IF V1$>"A6" THEN 5482
5441 E1=FNR9977(FNR10365$+FNR10060$+FNR9620$(L1-132)+FNR10060$)
5479 GOTO 6500
5482 IF V1$>"A7" THEN 5519
5495 E1=FNR9977("("+FNR10060$+")")
5516 GOTO 6500
5519 IF V1$>"AF" THEN 5650
5532 IF V1$="AA" THEN 6437
5545 IF V1$="AB" THEN L1=FNR2173 : GOTO 6500
5566 IF V1$="AC" THEN L1=FNR2173 : GOTO 6500
5587 IF V1$="AD" THEN L1=FNR2173 : GOTO 6500
5608 IF V1$="AE" THEN 6437
5615 IF V1$="AF" THEN E1=FNR9977("NOT "+FNR10060$) : GOTO 6500
5621 E1=FNR9977("-"+FNR10060$)
5647 GOTO 6500
5650 IF V1$>"BF" THEN 5666
5660 IF V1$="B0" THEN E1=FNR9977("DL") : Z$=FNR10365$ : GOTO 6500 !
5663 GOTO 6512
5666 IF V1$>"CA" THEN 5777
5679 IF V1$="C7" THEN E1=FNR9977(NUM$(FNR9275.(FNR2225))+H1$) : GOTO 6500
5716 IF V1$>"C7" THEN 5766
5729 IF V1$="C3" THEN E1=FNR9977("DS") : GOTO 6500
5755 E1=FNR8568(0)
5763 GOTO 6500
5766 E1=FNR8568(0)
5774 GOTO 6500
5777 IF V1$>"CF" THEN 6152
5790 IF V1$<"CF" THEN 6072
5803 J2=FNR2173
5811 L1=FNR2173
5819 C2=FNR2225
5827 H2=0
5831 W2=POSIT(1)
5838 POSIT #1,W2+C2-5
5855 L1=FNR2173 AND 127
5868 E1=FNR8568(0)
5876 A2=A2-1
5884 T$=RIGHT$(I$(A2),LEN(I$(A2)))
5907 IF INSTR(1,'.%$',T$)=0 THEN T$=''
5927 X2$='R'+NUM$(POSIT(1)-5)+T$
5946 POSIT #1,W2
5957 IF J2=0 THEN E1=FNR9977('') : GOTO 6047
5978 FOR W2=1 TO J2-1
5993 E1=FNR9977(FNR10365$+FNR10060$+","+FNR10060$)
6023 NEXT W2
6026 E1=FNR9977("("+FNR10060$+")")
6047 E1=FNR9977("FN"+X2$+FNR10060$)
6069 GOTO 6500
6072 IF V1$>"CC" THEN 6149
6085 IF V1$="CB" THEN C3$='"' ELSE C3$="'"
6109 GET #1,G$ COUNT FNR2173
6112 FOR W2=1 TO LEN(G$)
6114 La=La OR (ASCII(RIGHT$(G$,W2))<32 OR ASCII(RIGHT$(G$,W2))>127)
6116 NEXT W2
6118 IF La THEN 6130
6126 E1=FNR9977(C3$+G$+C3$)
6127 GOTO 6500
6130 E1=FNR9977("CHR$(")
6132 FOR W2=1 TO LEN(G$)
6134 E1=FNR9977(FNR10060$+NUM$(ASCII(RIGHT$(G$,W2))))
6136 IF W2"D4" THEN 6309
6165 IF L1=208 THEN E1=FNR9977('') : GOTO 6282
6187 IF V1$='D4' THEN L1=FNR2173
6205 L1=L1-209
6215 FOR W2=1 TO L1
6228 E1=FNR9977(FNR10365$+FNR10060$+","+FNR10060$)
6258 NEXT W2
6261 E1=FNR9977("("+FNR10060$+")")
6282 E1=FNR9977(FNR9513$(FNR2173)+FNR10060$)
6306 GOTO 6500
6309 IF V1$>"DC" THEN 6399
6322 GET #1,G$ COUNT L1-212
6341 G$=NUM$(CVT$F(G$+STRING$(8,0)))
6357 IF (INSTR(1,G$,'.')=0) AND G1 THEN G$=G$+'.'
6385 E1=FNR9977(G$)
6396 GOTO 6500
6399 IF V1$>"ED" THEN 6437
6412 E1=FNR9977(NUM$(L1-221)+H1$)
6434 GOTO 6500
6437 ; #S,' ! **** Expr: unknown p-code segment --- ' V1$ ' ****'
6500 L1=FNR2173
6509 WEND
6512 RETURN 0
6515 FNEND
6516 DEF FNR6516 LOCAL La$=160
6530 L1=FNR2173
6539 IF L1>9 THEN 7220
6549 ON L1+1 GOTO 6579,6921,6956,6976,6995,7063,7085,7166,7184,7197
6579 ; #S,"DIM ";
6603 F3=0
6607 G3=A2
6610 L1=FNR2173
6613 E1=FNR5369
6642 IF V1$<>"CD" AND V1$<>"CE" THEN 6851
6660 L1=FNR2173
6674 IF (L1 AND 2)=2 THEN La$='='+FNR10060$ ELSE La$=''
6675 IF La$="=DS" THEN La$="" !
6825 E1=FNR8568(1)
6833 ; #S,FNR10060$ La$;
6851 IF F3 THEN POSIT #1,POSIT(1)+2
6860 L1=FNR2173
6881 IF FNR5336 THEN 6906
6891 ; #S,",";
6903 GOTO 6642
6906 E1=FNR8543
6914 ! A2=0
6918 RETURN 0
6921 ; #S,"COMMON ";
6948 F3=-1
6953 GOTO 6610
6956 RETURN FNR9304('POKE ')+FNR9370
6976 RETURN FNR9304('OUT ')+FNR9370
6995 E1=FNR9304('OPEN ')
7011 L1=FNR2173
7019 IF V1$='BB' THEN ; #S,' AS FILE '; ELSE GOTO 8243
7054 RETURN FNR9304('')
7063 E1=FNR9304('PREPARE ')
7082 GOTO 7011
7085 ; #S,'CLOSE ';
7102 L1=FNR2173
7111 IF FNR5336 THEN RETURN FNR8543
7125 E1=FNR5369
7134 A2=A2-1
7142 ; #S,I$(A2);
7159 RETURN FNR9370
7166 RETURN FNR9716("RANDOMIZE")
7184 RETURN FNR9716("STOP")
7197 RETURN FNR9304('TXPOINT ')+FNR9370
7220 IF L1>19 THEN 7459
7233 ON L1-9 GOTO 7263,7320,7335,7350,7367,7378,7394,7410,7425,7443
7263 E1=FNR9304("GET ")
7277 L1=FNR2173
7285 IF V1$='B9' THEN RETURN FNR9304(' COUNT ') ELSE RETURN FNR8543
7320 RETURN FNR9304('CHAIN ')
7335 RETURN FNR9304("TRACE ")
7350 RETURN FNR9716("NO TRACE")
7367 RETURN FNR9304("PUT ")
7378 G1=-1 : H1$=''
7380 RETURN FNR9716("INTEGER")
7394 G1=0 : H1$='%'
7396 RETURN FNR9716("FLOAT")
7410 RETURN FNR9716("EXTEND")
7425 RETURN FNR9716("NO EXTEND")
7443 RETURN FNR9304('DIGITS ')
7459 IF L1>29 THEN 7586
7472 ON L1-19 GOTO 7492,7519,7540,7563
7492 RETURN FNR9304('OPTION BASE ')+FNR9370
7519 RETURN FNR9304('POSIT ')+FNR9370
7540 RETURN FNR9304('SET DOT ')+FNR9370
7563 RETURN FNR9304('CLR DOT ')+FNR9370
7586 IF L1>165 THEN 7689
7599 IF L1<160 THEN 8243
7611 ON L1-159 GOTO 7631,7643,7657,7676,7678,7680
7631 RETURN FNR9716("BYE")
7643 RETURN FNR9304('KILL ')
7657 P1=-1
7662 RETURN FNR9304('NAME ')
7676 RETURN FNR9304(' AS ')
7678 RETURN FNR9304('CD ')
7680 E1=FNR9716('FILESTAT')
7682 L1=FNR2173
7684 IF V1$<>'23' THEN RETURN FNR8543
7686 RETURN FNR8421+FNR5125(0)
7689 IF L1>197 OR L1<192 THEN 7887
7710 ON L1-191 GOTO 7734,7757,7779,7801,7822,7845
7734 RETURN FNR9304('FGPOINT ')+FNR9370
7757 RETURN FNR9304('FGLINE ')+FNR9370
7779 RETURN FNR9304('FGFILL ')+FNR9370
7801 RETURN FNR9304('FGCTL ')+FNR9370
7822 RETURN FNR9304('FGPAINT ')+FNR9370
7845 RETURN FNR9304('FGPICTURE ')+FNR9370
7887 IF L1>210 OR L1<200 THEN GOTO 8230
7908 ON L1-199 GOTO 7944,7986,8010,8030,8069,8090,8109,8179,8193,8208,8222
7944 RETURN FNR9304('ISAM OPEN ')+FNR2173+FNR9304(' AS FILE ')
7986 E1=FNR9304('ISAM READ ')
8007 GOTO 8126
8010 RETURN FNR9304('ISAM WRITE ')
8030 RETURN FNR9304('ISAM UPDATE ')+FNR2173+FNR9304(' TO ')
8069 RETURN FNR9304('ISAM DELETE ')
8090 E1=FNR9304(' KEY ')
8106 GOTO 8126
8109 E1=FNR9304(' INDEX ')
8126 IF FNR9644(0)<>134 OR FNR9644(1)<=204 OR FNR9644(1)>=211 THEN RETURN 0
8163 L1=FNR2173
8172 RETURN FNR6516
8179 RETURN FNR9716(' FIRST')
8193 RETURN FNR9716(' LAST')
8208 RETURN FNR9716(' NEXT')
8222 RETURN FNR9716(' PREVIOUS')
8230 IF L1<>224 THEN 8235
8231 IF Netused THEN RETURN FNR9716('NET') ELSE IF Doused THEN RETURN FNR9304('DO ')
8232 IF S<>0 THEN ; CHR$(13) SPACE$(79) CHR$(13); ELSE ; : ;
8233 INPUT "Is this a LuxNet program? (y/n) Y"+CHR$(8)La$; : ; CHR$(13) SPACE$(79) CHR$(13);
8234 Doused=(La$="N" OR La$="n") : Netused=NOT Doused : GOTO 8231
8235 IF L1=225 THEN RETURN FNR9716('UFD')
8237 IF L1=227 THEN RETURN FNR9304('DO ')
8240 IF L1=249 THEN RETURN FNR8266
8243 ; #S,'XSTM' L1;
8262 RETURN 0
8265 FNEND
8266 DEF FNR8266
8274 L1=FNR2173
8283 IF L1>2 THEN GOTO 8353
8293 ON L1+1 GOTO 8307,8328,8340
8307 RETURN FNR9304('WIDTH ')+FNR9370
8328 RETURN FNR9304('ATTRIBUTE ')+FNR9370
8340 RETURN FNR9304('LAMP ')+FNR9370
8353 ; #S,' ! **** Stat3: unknown p-code segment --- ' V1$ ' ****'
8417 RETURN 0
8420 FNEND
8421 DEF FNR8421
8429 IF L1<>35 THEN RETURN 0
8442 E1=FNR10443('#')
8454 L1=FNR2173
8462 IF NOT FNR8486 THEN ; #S;" ";
8482 RETURN 0
8485 FNEND
8486 DEF FNR8486
8488 IF NOT (L1=44 OR L1=59) THEN RETURN 0
8490 WHILE L1=44 OR L1=59
8494 ; #S,CHR$(L1); : L1=FNR2173
8495 WEND
8539 RETURN -1
8542 FNEND
8543 DEF FNR8543
8551 POSIT #1,POSIT(1)-1
8564 RETURN 0
8567 FNEND
8568 DEF FNR8568(La) LOCAL Lb$=80
8576 K3=(L1 AND 3)
8586 IF L1>199 THEN 8724
8598 IF L1>122 THEN 8647
8610 C2=FNR2173
8618 IF C2=255 THEN 8674 ELSE C2=L1+SWAP%(C2) : GOTO 8705
8647 C2=FNR2225
8655 IF (SWAP%(C2) AND 255)<>255 THEN 8705
8674 C2=C2 AND 255
8684 RETURN FNR9977(FNR9746$(-1,C2/2,K3))
8705 RETURN FNR9977(FNR9746$(0,C2,K3))
8724 P2=FNR2173 : IF La P2=P2*2
8733 G$=FNR9746$(0,FNR2225,K3)+'('
8754 L3=P2
8760 WHILE P2>0
8765 IF La AND I$(A2-P2)<"" Lb$=I$(A2-P2)+":" ELSE Lb$=""
8769 IF A2>=P2 Lb$=Lb$+I$(A2-P2+La) ELSE Lb$=Lb$+"*"
8793 P2=P2-1-La
8800 G$=G$+Lb$+"," !
8801 WEND
8804 A2=A2-L3
8814 MID$(G$,LEN(G$),1)=")"
8832 RETURN FNR9977(G$)
8842 FNEND
8843 DEF FNR8843
8851 K3=(L1 AND 3)
8861 C2=FNR2173
8869 E1=FNR9977(FNR9746$(-1,G2,K3))
8889 IF H2=0 THEN 8986
8899 IF K3=1 THEN I2=I2+2
8914 IF K3=3 THEN I2=I2+8
8929 IF L1=122 OR K3=2 THEN C2=FNR2225 : E1=FNR9977(FNR10060$+"="+NUM$(C2)) : I2=I2+C2
8986 G2=G2+1
8994 RETURN 0
8997 FNEND
8998 DEF FNR8998 LOCAL La,Lb,Lc
9014 L1=FNR2173
9023 Lb=FNR5369
9031 Lc=FNR2173
9039 Lb=FNR9716("IF "+FNR10060$+" THEN")
9066 IF Lc=1 THEN ; #S,'GOTO ' NUM$(POSIT(1)); : L1=FNR2173 : GOTO 9223
9107 La=Lc+POSIT(1)
9119 L1=FNR2173
9127 Lb=FNR2310
9135 IF V1$="88" AND (POSIT(1)'8A' AND (POSIT(1)'eof'
9474 IF Lb=La THEN RETURN Lc$
9489 READ Lc$
9496 Lb=Lb+1
9505 WEND
9508 RETURN ''
9512 FNEND
9513 DEF FNR9513$(La) LOCAL Lb$=16
9529 IF La>127 THEN Lb$=FNR9596$(La-128) : GOTO 9571
9557 RESTORE 428
9560 Lb$=FNR9431$(La)
9571 IF Lb$='' THEN Lb$=FNR10138$(La)
9590 RETURN Lb$
9595 FNEND
9596 DEF FNR9596$(La)
9606 RESTORE 723
9609 RETURN FNR9431$(La)
9619 FNEND
9620 DEF FNR9620$(La)
9630 RESTORE 307
9633 RETURN FNR9431$(La)
9643 FNEND
9644 DEF FNR9644(La) LOCAL Lb$=1,Lc
9662 Lc=POSIT(1)
9670 POSIT #1,Lc+La
9685 GET #1,Lb$
9697 POSIT #1,Lc
9708 RETURN ASCII(Lb$)
9715 FNEND
9716 DEF FNR9716(La$)
9726 ; #S,La$+' ';
9742 RETURN 0
9745 FNEND
9746 DEF FNR9746$(La,Lb,Lc) LOCAL Ld,Le,Lf$=8
9770 Ld=Lc
9777 IF G1 AND Ld=1 THEN Ld=3 : GOTO 9812
9795 IF G1=0 AND Ld=0 THEN Ld=3
9812 IF La THEN Le=(Lb AND 32767) : GOTO 9846
9831 Le=(Lb AND 32767)/6+1
9846 IF Le/25<>0 THEN Lf$=NUM$(Le/25) ELSE Lf$=''
9875 Lf$=CHR$(65+MOD(Le,25))+Lf$
9896 IF La THEN Lf$="L"+Lf$ : GOTO 9944
9918 IF ((SWAP%(Lb) AND 128)=128) THEN Lf$="C"+Lf$
9944 IF Ld=3 THEN RETURN Lf$
9956 RETURN Lf$+MID$(".%$ ",Ld+1,1)
9976 FNEND
9977 DEF FNR9977(La$)
9987 ON ERROR GOTO 10056
9990 IF H0 THEN 10173
10350 RETURN 'XFN'+NUM$(La)
10364 FNEND
10365 DEF FNR10365$
10373 I$(H-1)=FNR10060$
10389 I$(H)=FNR10060$
10403 E1=FNR9977(I$(H-1))
10422 E1=FNR9977(I$(H))
10438 RETURN ''
10442 FNEND
10443 DEF FNR10443(La$)
10453 L1=FNR2173
10462 E1=FNR5369
10470 ; #S,La$ FNR10060$;
10488 RETURN 0
10491 FNEND
10492 DEF FNR10492(La$) LOCAL Lb,Lc
10508 Lb=2
10513 Lc=0
10517 WHILE Lb0 THEN 10832
10778 ; #S, USING CHR$(10,13)+'##### '+SPACE$(U1-T1) Lc+Lb;
10819 ; #S,'! ';
10832 IF MOD(Lb-2,4)<>0 THEN 10858
10846 ; #S,' ';
10858 ; #S,FNR2260$(ASCII(RIGHT$(La$,Lb))) ' ';
10886 Lb=Lb+1
10895 WEND
10898 ; #S, USING CHR$(10,13)+'##### '+SPACE$(U1-T1) Lc+Lb;
10939 ; #S,'! ------ End of Dump -------';
10978 RETURN 0
10981 FNEND