60000 CLS:CLEAR:S=1:E=59999!:DIM Z$(250),Z1$(250),Z2$(250),Z3$(250):D#=0:TA$=CHR$(9)+CHR$(9)+CHR$(9):REM Varifile  09.01.89 V7
60010 INPUT "Start line number or Auto (A)";P$
60020 IF P$="A"OR P$="a"THEN CLS:GOTO 60040
60030 S=VAL(P$):INPUT "End line number ";E:IF E<S THEN 60030:ELSE IF E=0 THEN E=59999!:CLS:GOTO 60040:ELSE CLS
60040 PRINT CHR$(15);:AD=&H8408:REM This for Extended Basic. Otherwise PEEK(&H2601)+256*PEEK(&H2602)
60050 AE=AD+1:IF AE>32767 THEN AE=AE-65536!
60060 AF=AD+2:IF AF>32767 THEN AF=AF-65536!
60070 AG=AD+3:IF AG>32767 THEN AG=AG-65536!
60080 NA=PEEK(AE)*256+PEEK(AD):IF NA>32767 THEN NA=NA-65536!
60090 LN=PEEK(AG)*256+PEEK(AF)
60100 PRINT@1840,LN;:IF LN<S THEN AD=NA:GOTO 60050
60110 IF AD=0 OR LN>E THEN 60520
60120 J=AD+4:IF J=>32767 THEN J=J-65536!
60130 P=PEEK(J):IF P=34 THEN GOSUB 60450:IF PEEK(J)=0 THEN AD=NA:GOTO 60050:REM If a string skip it
60140 IF P=132 THEN GOSUB 60420:GOTO 60130:REM Skip data
60150 IF P=143 OR P=220 THEN AD=NA:GOTO 60050:REM skip rems
60160 IF P=14 OR P=15 OR P=28 OR P=29 OR P=31 THEN GOSUB 60480:GOTO 60130:REM These precede packed numbers so skip
60170 IF P<65 OR P>90 OR P=32 THEN 60390:REM If a space skip it
60180 P$=""
60190 P$=P$+CHR$(P):J=J+1:IF J=32768! THEN J=-32768!
60200 P=PEEK(J):IF (P>64 AND P<91)OR (P>47 AND P<58)THEN 60190:REM Vars must be U/C or numbers
60210 IF (P=35 OR P=36 OR P=37 OR P=40) THEN P$=P$+CHR$(P):REM If followed by #,$,% or ( put it in.
60220 J=J+1:IF J=32768! THEN J=-32768!
60230 P=PEEK(J):IF P=40 THEN P$=P$+CHR$(P):GOTO 60250:REM If #,$ or % and ( after then add (
60240 J=J-1:IF J=-32769! THEN J=32767:REM If not ( then back one
60250 IF LEFT$(P$,2)="AS"THEN IF LEN(P$)>2 THEN P$=RIGHT$(P$,LEN(P$)-2) ELSE J=J+1:GOSUB 60500:GOTO 60130:REM Sort out Field strings
60260 T=0:FOR I=1 TO K:IF P$=Z$(I)THEN T=I:REM See if we have it already
60270 NEXT
60280 IF T=0 THEN 60370:ELSE M=LEN(Z1$(T))-1:REM Have it so inc.count by 1
60290 IF MID$(Z1$(T),M,1)<>" "THEN M=M-1:GOTO 60290
60300 J$=RIGHT$(Z1$(T),LEN(Z1$(T))-M):IF INSTR(J$,"/")=0 AND VAL(J$)=LN THEN Z1$(T)=Z1$(T)+"/2":GOTO 60330
60310 IF INSTR(J$,"/")<>0 AND VAL(J$)=LN THEN M=INSTR(J$,"/"):A=VAL(RIGHT$(J$,LEN(J$)-M)):A=A+1:Z1$(T)=LEFT$(Z1$(T),LEN(Z1$(T))-LEN(J$)+M)+RIGHT$(STR$(A),LEN(STR$(A))-1):GOTO 60330
60320 Z1$(T)=Z1$(T)+","+STR$(LN)
60330 IF LEN(Z1$(T))>245 THEN Z3$(T)=Z2$(T):Z2$(T)=Z1$(T):Z1$(T)="":ELSE 60370
60340 M=LEN(Z2$(T))-2
60350 IF MID$(Z2$(T),M,1)<>" "THEN M=M-1:GOTO 60350
60360 Z1$(T)=RIGHT$(Z2$(T),LEN(Z2$(T))-M):Z2$(T)=LEFT$(Z2$(T),M-1):Z1$(T)=" "+Z1$(T)
60370 IF T=0 THEN K=K+1:Z$(K)=P$:Z1$(K)=STR$(LN):REM Add new var.
60380 REM IF P=34 THEN GOSUB 60450:GOTO 60130
60390 IF PEEK(J)=0 THEN AD=NA:GOTO 60050
60400 J=J+1:IF J=32768! THEN J=-32768!
60410 GOTO 60130
60420 J=J+1:IF J=32768! THEN J=-32768!:REM Skip data
60430 IF PEEK(J)<>58 AND PEEK(J)<>0 THEN 60420:ELSE IF PEEK(J)=0 THEN RETURN :ELSE IF PEEK(J)=58 THEN J=J+1:IF J=32768! THEN J=-32768!:REM Skip colons
60440 P=PEEK(J):RETURN 
60450 J=J+1:IF J=32768! THEN J=-32768!:REM Skip strings
60460 P=PEEK(J):IF P<>34 AND P<>0 THEN 60450 ELSE IF P=0 THEN RETURN ELSE IF P=34 THEN J=J+1:IF J=32768! THEN J=-32768!
60470 P=PEEK(J):RETURN 
60480 IF P=14 THEN J=J+3:GOTO 60500:ELSE IF P=15 THEN J=J+2:GOTO 60500:ELSE IF P=28 THEN J=J+4:GOTO 60500:ELSE IF P=29 THEN J=J+5:GOTO 60500:ELSE IF P=31 THEN J=J+9:REM Skip numbers
60500 IF J>32767 THEN J=J-65536!
60510 P=PEEK(J):RETURN
60520 SYSTEM"SORT",K,Z$(1),Z1$,Z2$,Z3$
60530 PRINT:SOUND 5,5:LINE INPUT "Title?  ";T$
60540 LINE INPUT"Drive Number? ";DR$:IF DR$<>"0" AND DR$<>"1" THEN 60540 ELSE DR$=RIGHT$(DR$,1)
60550 T$=T$+":"+DR$:OPEN"O",1,T$
60560 FOR I=1 TO K
60570 IF RIGHT$(Z$(I),1)=" " THEN Z$(I)=LEFT$(Z$(I),LEN(Z$(I)-1):GOTO 60570
60580 Z$=Z$(I)+CHR$(9)+CHR$(9)
60590 IF RIGHT$(Z1$(I),1)=" " THEN Z1$(I)=LEFT$(Z1$(I),LEN(Z1$(I)-1):GOTO 60590
60600 Z1$=Z1$(I)
60610 IF Z2$(I)=""THEN Z2=0:GOTO 60640:ELSE Z2=1
60620 IF RIGHT$(Z2$(I),1)=" " THEN Z2$(I)=LEFT$(Z2$(I),LEN(Z2$(I)-1):GOTO 60620
60630 Z2$=TA$+Z2$(I)
60640 IF Z3$(I)=""THEN Z3=0:GOTO 60670:ELSE Z3=1
60650 IF RIGHT$(Z3$(I),1)=" " THEN Z3$(I)=LEFT$(Z3$(I),LEN(Z3$(I)-1):GOTO 60650
60660 Z3$=TA$+Z3$(I)
60670 PRINT#1,Z$+Z1$
60680 IF Z2 THEN PRINT#1,Z2$
60690 IF Z3 THEN PRINT#1,Z3$
60700 NEXT:CLOSE:END
