65020 D=" ":WIDTH 80:INPUT "number of lines per page [55]";N:INPUT "Starting line # [1]";ZM:INPUT "Ending line # [64999]";ZN:ZN=ZN-64999!*(ZN=0):ZM=ZM-(ZM=0):N=N-55*(N=0)
65030 ON ERROR GOTO 65460:INPUT "name of file to list";F$:IF INSTR(F$,".")=0 THEN F$=F$+".BAS"
65040 PRINT "File saved in ASCII format (y/n)?";:GOSUB 65340:CLS:IF AN="n" THEN Z=FRE:CHAIN MERGE F$,65050!,ALL ELSE OPEN "I",1,F$:Z=LOF(1):GOTO 65060
65050 Z=Z-FRE:SAVE "TEMP",A:OPEN "I",1,"TEMP.BAS"
65060 ON ERROR GOTO 65440:DEFSTR A-H:DEFINT I-W:OPEN "O",2,"TEMP.BBS":OPEN "O",3,"TEMP.BCS":LPRINT "LISTING OF " F$ " " DATE$:LPRINT "Length of file =" Z
65070 DATA IF , THEN , ELSE ,WHILE ,WEND,NEXT ,FOR
65080 LINE INPUT #1,A:E=LEFT$(A,INSTR(A,D)-1):IF VAL(E)>ZN THEN 65350 ELSE IF VAL(E)<ZM THEN 65080 ELSE QM=QM+1:LPRINT E:GOSUB 65330
65090 A=MID$(A,INSTR(A,D)+1)+D:S=1:SS=0:T=3:IF LEFT$(A,5)="DATA " THEN GOSUB 65130:GOTO 65120
65100 WHILE S<LEN(A):R=0:O=255:FOR I=1 TO 14:TT=INSTR(S,A,G(I)):IF TT>0 AND TT<O THEN O=TT:R=I
65380 KILL "TEMP.B?S":PRINT "Press PF2 to list another program":DELETE 1-64999:'This aborts to system
65390 FOR I=1 TO Q:INPUT #2,X(I,0),X(I,1):NEXT:CLOSE:O=Q:PRINT "Total items to sort =";Q
65400 WHILE O\2>0:O=O\2:K=Q-O:J=1:PRINT "Sorting interval =";O
65410 WHILE J<=K:I=J:WHILE I>=1:L=I+O:IF X(I,1)>X(L,1) OR (X(I,1)=X(L,1) AND X(I,0)>X(L,0)) THEN SWAP X(I,1),X(L,1):SWAP X(I,0),X(L,0)
65420 I=I-O:WEND:J=J+1:WEND:WEND:FOR I=1 TO Q:IF X(I,0)>0 THEN IF X(I,1)<>X(I-1,1) OR X(I,1)=0 THEN LPRINT:GOSUB 65330:LPRINT X(I,1),X(I,0);:MM=0 ELSE LPRINT X(I,0);:MM=MM+1:IF MM/9=MM\9 AND I>1 THEN LPRINT:GOSUB 65330:LPRINT "",
65430 NEXT:CLOSE:LPRINT:RETURN
65440 IF ERR=13 AND ERL=65390 THEN INPUT #2,A:LPRINT "syntax error in line" ERL ":" A:X(I,0)=0:X(I,1)=0:RESUME NEXT ELSE ON ERROR GOTO 0
65450 IF ERR=5 AND ERL=65380 THEN END ELSE 65470
65460 IF ERR=53 THEN PRINT "not found":FILES "*.BAS":RESUME 65030