home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / cpm / basic / egbas.lbr / FINDEX.BZS / FINDEX.BAS
Encoding:
BASIC Source File  |  1988-01-24  |  4.3 KB  |  110 lines

  1. 0 REM 02-02-85 <-- last backup
  2. 10 PRINT CHR$(26)
  3. 20 PRINT"Eric Gans"
  4. 30 PRINT"French Department UCLA"
  5. 40 PRINT"Los Angeles, CA 90024"
  6. 50 PRINT"02/02/85"
  7. 60 PRINT:PRINT TAB(35)"FINDEX":PRINT
  8. 70 REM file indexer by E. Gans 10/17/84
  9. 80 REM 10/20 added ( to array variables, #!$% at end, . allowed within
  10. 90 DEFINT A-Z
  11. 100 WIDTH 255
  12. 110 PRINT TAB(30)"PROGRAM INDEXER":PRINT
  13. 120 PRINT"This program produces an index of the variables and reserved words used"
  14. 130 PRINT"in an MBASIC program file.  The file to be indexed MUST be saved in the"
  15. 140 PRINT"'A' (=ASCII) mode.  The file RESWD.DAT must be on disk."
  16. 150 PRINT:PRINT"To gain space and speed, multiple mentions on the same line are not shown."
  17. 160 PRINT
  18. 170 DIM RES$(133)
  19. 180 GOSUB 820
  20. 190 DIM WD$(150),R$(150),WDSUP$(30),RSUP$(30)
  21. 200 N1=1:N=1:SI=1
  22. 210 INPUT "Program to index";FILE$
  23. 220 FOR I=1 TO LEN(FILE$):IF ASC(MID$(FILE$,I,1))>96 THEN MID$(FILE$,I,1)=CHR$(ASC(MID$(FILE$,I,1))AND NOT 32)
  24. 230 NEXT
  25. 240 INPUT "Index reserved words (y/n)";Y$
  26. 250 IF Y$="n" THEN NORES=-1 ELSE IF Y$<>"y" GOTO 240
  27. 260 OPEN "I",1,FILE$
  28. 270 LINE INPUT#1,L$
  29. 280 I=1
  30. 290 WHILE MID$(L$,I,1)<>" "
  31. 300 IF ASC(MID$(L$,I,1))<48 OR ASC(MID$(L$,I,1))>57 THEN PRINT CHR$(7)"Invalid file":END
  32. 310 I=I+1
  33. 320 WEND
  34. 330 LIN$=LEFT$(L$,I)
  35. 340 I=I+1:IF I>LEN(L$) THEN 460
  36. 350 IF MID$(L$,I,1)=CHR$(34) THEN I=I+1:WHILE MID$(L$,I,1)<>CHR$(34):I=I+1:WEND
  37. 360 K=I
  38. 370 IF ASC(MID$(L$,I,1))<65 OR ASC(MID$(L$,I,1))>90 THEN 340
  39. 380 WHILE (ASC(MID$(L$,I,1))>64 AND ASC(MID$(L$,I,1))<91) OR MID$(L$,I,1)="." OR (ASC(MID$(L$,I,1))>47 AND ASC(MID$(L$,I,1))<58)
  40. 390 I=I+1:IF I>LEN(L$) THEN 440
  41. 400 WEND
  42. 410 IF I=K THEN 340
  43. 420 IF MID$(L$,I,1)="!" OR ASC(MID$(L$,I,1))>34 AND ASC(MID$(L$,I,1))<38 THEN I=I+1
  44. 430 IF MID$(L$,I,1)="(" THEN I=I+1
  45. 440 WD$(N)=MID$(L$,K,I-K):GOSUB 880:N=N+1:I=I-1:IF MID$(L$,K,I+1-K)="REM" THEN 460
  46. 450 GOTO 340
  47. 460 J=N1
  48. 470 FOR I=N1 TO N-1
  49. 480 IF ASC(WD$(I))=1 THEN WD$(I)="":GOTO 500
  50. 490 WD$(J)=WD$(I):R$(J)=R$(I):J=J+1
  51. 500 NEXT
  52. 510 N1=J:N=J
  53. 520 PRINT LIN$;:IF NOT EOF(1) GOTO 270
  54. 530 PRINT:PRINT"Sorting ";
  55. 540 FOR I=1 TO N-1
  56. 550 FOR J=1 TO I-1
  57. 560 IF WD$(I)<WD$(J) THEN SWAP WD$(I),WD$(J):SWAP R$(I),R$(J):GOTO 560
  58. 570 NEXT J
  59. 580 PRINT"*";
  60. 590 NEXT I
  61. 600 PRINT
  62. 610 PRINT"To print out, ready printer.  Type any key -->";:E$=INPUT$(1)
  63. 620 PRINT:PRINT:LPRINT:LPRINT
  64. 630 PRINT"Index of program "FILE$
  65. 640 LPRINT"Index of program "FILE$
  66. 650 PRINT:LPRINT
  67. 660 IF NORES THEN PRINT"Variables:" ELSE PRINT"Reserved words:"
  68. 670 IF NORES THEN LPRINT"Variables:" ELSE LPRINT"Reserved words:"
  69. 680 ZAP=NORES
  70. 690 FOR I=1 TO N-1
  71. 700 IF NOT ZAP THEN IF ASC(WD$(I))>0 THEN PRINT:LPRINT:PRINT"Variables:":LPRINT"Variables:":ZAP=-1
  72. 710 LN=LN+1:IF LN=12 THEN LN=0:PRINT"[More]"CHR$(13);:E$=INPUT$(1):PRINT SPC(6)CHR$(13);
  73. 720 PRINT WD$(I)" "R$(I)
  74. 730 LPRINT WD$(I)" "R$(I)
  75. 740 NEXT
  76. 750 IF SI>1 THEN PRINT:LPRINT:PRINT"Supplementary list:":LPRINT "Supplementary list:" ELSE GOTO 800
  77. 760 FOR I=1 TO SI-1
  78. 770 PRINT WDSUP$(I)" "RSUP$(I)
  79. 780 LPRINT WDSUP$(I)" "RSUP$(I)
  80. 790 NEXT
  81. 800 WIDTH 80
  82. 810 END
  83. 820 REM res wds
  84. 830 OPEN "I",2,"RESWD.DAT"
  85. 840 FOR I=1 TO 133
  86. 850 INPUT#2,RES$(I)
  87. 860 NEXT
  88. 870 RETURN
  89. 880 REM see if res wd
  90. 890 IF ASC(WD$(N))=72 THEN IF MID$(L$,K-1,1)="&" THEN WD$(N)="":N=N-1:RETURN
  91. 900 FOR J=N1 TO N-1
  92. 910 IF WD$(N)=WD$(J) OR WD$(J)=CHR$(1)+WD$(N) OR WD$(J)=CHR$(0)+WD$(N) THEN WD$(N)="":N=N-1:RETURN
  93. 920 NEXT
  94. 930 FOR J=1 TO N1-1
  95. 940 IF NORES THEN IF WD$(N)=WD$(J) THEN R$(J)=R$(J)+LIN$:WD$(N)=CHR$(1)+WD$(N):GOTO 1070 ELSE GOTO 960
  96. 950 IF WD$(N)=WD$(J) OR WD$(J)=CHR$(0)+WD$(N) THEN R$(J)=R$(J)+LIN$:IF ASC(WD$(N))=0 THEN MID$(WD$(N),1,1)=CHR$(1):GOTO 1070 ELSE WD$(N)=CHR$(1)+WD$(N):GOTO 1070
  97. 960 NEXT
  98. 970 IF RIGHT$(WD$(N),1)="#" OR RIGHT$(WD$(N),1)="(" THEN WT$=WD$(N):WD$(N)=LEFT$(WD$(N),LEN(WD$(N))-1)
  99. 980 FOR U=1 TO 133
  100. 990 IF WD$(N)=RES$(U) THEN 1030
  101. 1000 NEXT
  102. 1010 IF WT$<>"" THEN WD$(N)=WT$:WT$=""
  103. 1020 R$(N)=LIN$:RETURN
  104. 1030 IF NORES THEN WD$(N)="":N=N-1 ELSE WD$(N)=CHR$(0)+WD$(N):R$(N)=LIN$
  105. 1040 IF RIGHT$(WT$,1)="#" THEN WD$(N)=WD$(N)+"#"
  106. 1050 IF WT$<>"" THEN WT$=""
  107. 1060 RETURN
  108. 1070 IF LEN(R$(J))>249 THEN WDSUP$(SI)=WD$(N):RSUP$(SI)=R$(J):SI=SI+1:R$(J)="[See supplementary listing] ":RETURN
  109. 1080 RETURN
  110. 070 IF LEN(R$(J))>249 THEN WDSUP$(SI)=WD$(N):RSUP$(SI)=R$(J):SI=SI+1:R$(J)="[See supplementary li