home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / INFO / BASIC / EZLIST.ZIP / EZLIST2.BAS < prev    next >
Encoding:
BASIC Source File  |  1987-05-22  |  4.1 KB  |  50 lines

  1. 65000 CLS:PRINT"EZ-list":PRINT"formatted listing of BASIC programs":PRINT"copyright (c) 1985 by Joseph E. Laferriere":PRINT
  2. 65010 DEFINT I-W:DEFSTR A-H:DIM G(14),H(3):FOR I=3 TO 9: READ G(I):NEXT:G(12)=CHR$(34):G(1)=":":G(2)="'":G(10)="NEXT:":G(11)="WEND:":G(13)="GOSUB ":G(14)="GOTO ":H(1)=",":H(2)=":":H(3)=G(5)
  3. 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)
  4. 65030 ON ERROR GOTO 65460:INPUT "name of file to list";F$:IF INSTR(F$,".")=0 THEN F$=F$+".BAS"
  5. 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
  6. 65050 Z=Z-FRE:SAVE "TEMP",A:OPEN "I",1,"TEMP.BAS"
  7. 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
  8. 65070 DATA  IF , THEN , ELSE ,WHILE ,WEND,NEXT ,FOR
  9. 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
  10. 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
  11. 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
  12. 65110 NEXT:S=O:ON R+1 GOSUB 65130,65190,65130,65200,65160,65230,65200,65210,65220,65200,65210,65210,65140,65260,65280:S=S+1:WEND
  13. 65120 IF EOF(1) THEN 65350 ELSE 65080
  14. 65130 B=A:GOSUB 65300:S=255:RETURN:'zilch,apos,data
  15. 65140 S=INSTR(S+1,A,CHR$(34)):IF S>LEN(A)-2 OR S=0 THEN S=255:B=A:GOSUB 65300
  16. 65150 RETURN:'quote
  17. 65160 B=LEFT$(A,S-1):GOSUB 65300:T=T+3
  18. 65170 IF ASC(MID$(A,S+5,1))<58 THEN GOSUB 65280
  19. 65180 RETURN:'then
  20. 65190 B=LEFT$(A,S):GOSUB 65300:RETURN:'colon
  21. 65200 T=T+3:RETURN:'while,for
  22. 65210 IF T>5 THEN T=T-3:RETURN ELSE RETURN:'next:,wend,wend:
  23. 65220 GOSUB 65210:U=S+4:WHILE MID$(A,U,1)<>":" AND U<LEN(A) AND MID$(A,U,6)<>G(5) AND T>5:U=U+1:T=T+3*(MID$(A,U,1)=","):WEND:RETURN:'next
  24. 65230 B=LEFT$(A,S-1):GOSUB 65300:T=T-3
  25. 65240 IF ASC(MID$(A,S+5,1))<58 THEN GOSUB 65280
  26. 65250 RETURN:'else
  27. 65260 U=S+5:R2=0:WHILE U<LEN(A) AND R2<2:R2=0:O=255:K=U:FOR J=1 TO 3:TT=INSTR(U+1,A,H(J)):IF TT>0 AND TT<O THEN O=TT:R2=J
  28. 65270 NEXT:U=O:PRINT #2,E;",";MID$(A,K+1,U-K-1):Q=Q+1:WEND:RETURN:'gosub
  29. 65280 R2=0:U=S+4:WHILE U<LEN(A) AND R2<2:R2=0:O=255:K=U:FOR J=1 TO 3:TT=INSTR(U+1,A,H(J)):IF TT>0 AND TT<O THEN O=TT:R2=J
  30. 65290 NEXT:U=O:PRINT #3,E;",";MID$(A,K+1,U-K-1):P=P+1:WEND:RETURN:'goto
  31. 65300 F=MID$(B,SS+1)
  32. 65310 IF LEN(F)+T>76 THEN C=LEFT$(F,76-T):LPRINT SPC(T);C:SS=SS+LEN(C):GOSUB 65330:GOTO 65300
  33. 65320 LPRINT SPC(T);F:SS=SS+LEN(F):GOSUB 65330:RETURN
  34. 65330 M=M+1:IF (M/N=M\N) THEN LPRINT CHR$(12)
  35. 65335 RETURN
  36. 65340 AN=INKEY$:IF AN<>"y" AND AN<>"n" THEN 65340 ELSE PRINT AN:RETURN
  37. 65350 CLOSE:LPRINT "Number of lines =" QM "      Number of statements = " M-QM:ERASE G,H:DIM X(1000,1):LPRINT CHR$(12):M=1:LPRINT Q "GOSUB STATEMENTS":LPRINT "  TO","FROM":OPEN "I",2,"TEMP.BBS":GOSUB 65390
  38. 65360 LPRINT CHR$(12):M=1:LPRINT P "GOTO STATEMENTS":LPRINT "  TO","FROM":OPEN "I",2,"TEMP.BCS":Q=P:GOSUB 65390
  39. 65370 LPRINT CHR$(13);CHR$(12);CHR$(27);"@":CLS:PRINT "Done."
  40. 65380 KILL "TEMP.B?S":PRINT "Press PF2 to list another program":DELETE 1-64999:'This aborts to system
  41. 65390 FOR I=1 TO Q:INPUT #2,X(I,0),X(I,1):NEXT:CLOSE:O=Q:PRINT "Total items to sort =";Q
  42. 65400 WHILE O\2>0:O=O\2:K=Q-O:J=1:PRINT "Sorting interval =";O
  43. 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)
  44. 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 "",
  45. 65430 NEXT:CLOSE:LPRINT:RETURN
  46. 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
  47. 65450 IF ERR=5 AND ERL=65380 THEN END ELSE 65470
  48. 65460 IF ERR=53 THEN PRINT "not found":FILES "*.BAS":RESUME 65030
  49. 65470 ON ERROR GOTO 0
  50.