1  PRINT "ENTER FILES STATEMENT IN LINE 1"
1000  REM   PROGRAM INDEXR
1010  REM
1020  DIM A$[72],B$[72],C$[72],D$[72],E$[72],F$[72],K$[8],Y$[72],Z$[72]
1030  REM
1040  LET K$="POIS"
1050  LET Z$="^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"
1060  LET Z$[37]=Z$
1070  LET Y$="ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"
1090  LET Y$[37]=Y$
1095  REM
1100  PRINT '10" ","INDEXR"'10
1110  PRINT "TOTAL NUMBER OF FILES ";
1120  INPUT Q
1130  IF Q<2 OR Q>4 OR Q#INT(Q) THEN 1110
1150  FOR F=1 TO Q
1160  READ #F,1
1170  READ #F,2
1180  NEXT F
1190  REM
1200  PRINT '10'10"INSTRUCTIONS ";
1210  INPUT A$
1220  IF A$[1,1]#"Y" THEN 1900
1300  PRINT '10'10"THIS PROGRAM WAS CREATED TO FACILITATE THE CREATION OF ";
1310  PRINT "INDEXES FOR "
1320  PRINT "PUBLICATIONS.  ONE ENTERS THE PAGE NUMBER FOLLOWED BY AS ";
1330  PRINT "MANY ENTRIES"
1340  PRINT "AS DESIRED.  THE PROGRAM IS CONTROLLED BY THE FOLLOWING ";
1350  PRINT "COMMANDS:"
1360  PRINT '10"P:    NEW PAGE"
1370  PRINT "O:    OUTPUT"
1380  PRINT "I:    INITIALIZE"
1390  PRINT "S:    STOP"
1400  PRINT '10"ALL COMMANDS ARE INDICATED WITH A 'CTRL A' AS A FIRST ";
1410  PRINT "CHARACTER"
1420  PRINT "FOLLOWED BY THE SINGLE LETTER OF THE COMMAND."
1430  PRINT '10"ENTRIES MAY BE DELETED BY ENTERING THEM ON PAGE '**'."
1900  PRINT '10'10
1990  REM
1994  REM       INPUT SECTION
1998  REM
2000  FOR F=1 TO Q-1
2002  READ #F,1
2005  IF TYP(F)#2 THEN 2020
2010  READ #F;A$
2015  GOTO 2005
2020  IF F=Q-1 THEN 2050
2022  READ #F+1,1
2024  IF TYP(F+1)#2 THEN 2050
2028  NEXT F
2030  PRINT "ERROR"
2035  GOTO 9999
2050  IF  END #F THEN 8000
2060  LET B$=""
2100  INPUT A$
2110  IF A$[1,1]='1 THEN 3000
2150  IF LEN(B$)>0 THEN 2300
2200  PRINT "PLEASE ENTER PAGE NUMBER ";
2210  INPUT B$
2290  GOTO 2100
2300  LET M=1
2305  PRINT #F;A$
2310  LET M=2
2315  PRINT #F;B$, END 
2320  GOTO 2100
2990  REM
2994  REM       CHECK ON COMMAND
2997  REM
3000  FOR K=1 TO 4
3010  IF A$[2,2]=K$[K,K] THEN 3100
3020  NEXT K
3030  PRINT '10"UNRECOGNIZED COMMAND"
3040  GOTO 2100
3100  GOTO K OF 2200,4000,7000,9999
3990  REM
3994  REM       OUTPUT SECTION
3997  REM
4000  PRINT '10'10'10"-"'10'10'10'10'10'10,"INDEX";TAB(60);1;'10'10
4010  LET C$=""
4020  FOR F=1 TO Q
4030  READ #F,1
4040  READ #F,2
4050  NEXT F
4060  LET L=9
4070  LET P=1
4090  REM       LOOK FOR WORD
4100  LET D$=Z$
4110  LET F=1
4120  READ #F,1
4130  IF  END #F THEN 4250
4150  LET M=1
4160  READ #F;A$
4170  LET M=2
4180  READ #F;B$
4190  IF A$ <= C$ THEN 4150
4200  IF A$>D$ THEN 4150
4210  LET D$=A$
4220  GOTO 4150
4250  LET F=F+1
4260  IF F=Q THEN 4500
4270  READ #F,1
4280  IF  END #F THEN 4250
4290  GOTO M OF 4160,4180
4490  REM       STORE CITATIONS
4500  PRINT #Q,1; END 
4510  LET F=1
4520  READ #F,1
4530  IF  END #F THEN 4700
4550  LET M=1
4560  READ #F;A$
4570  LET M=2
4580  READ #F;B$
4590  IF A$#D$ THEN 4550
4595  IF B$="**" THEN 5510
4600  PRINT #Q;B$, END 
4610  GOTO 4550
4700  LET F=F+1
4710  IF F=Q THEN 5000
4720  READ #F,1
4730  IF  END #F THEN 4700
4740  GOTO M OF 4560,4580
4990  REM       PRINT ENTRY
5000  IF D$=Z$ THEN 6000
5010  PRINT D$;" ";
5011  IF LEN(D$)/2#INT(LEN(D$)/2) THEN 5015
5012  PRINT " ";
5015  FOR J=1 TO (29-LEN(D$))/2
5016  PRINT ". ";
5017  NEXT J
5018  LET G=1
5019  LET C=30 MAX INT(LEN(D$)/2)*2+2
5020  LET E$=""
5090  REM       SORT CITATIONS
5100  READ #Q,1
5110  LET F$=Y$
5200  IF TYP(Q)#2 THEN 5400
5210  READ #Q;B$
5215  IF B$=F$ THEN 5200
5217  IF B$=E$ THEN 5200
5220  LET L2=L3=0
5222  LET J1=J2=J3=1
5225  IF J1>LEN(B$) THEN 5390
5230  FOR I1=J1 TO LEN(B$)
5232  IF B$[I1,I1]<"0" THEN 5250
5234  IF B$[I1,I1]>"Z" THEN 5250
5236  IF B$[I1,I1] >= "A" THEN 5240
5238  IF B$[I1,I1]>"9" THEN 5250
5240  NEXT I1
5250  LET I1=I1-1
5255  IF L2 THEN 5300
5260  FOR I2=J2 TO LEN(E$)
5262  IF E$[I2,I2]<"0" THEN 5280
5264  IF E$[I2,I2]>"Z" THEN 5280
5266  IF E$[I2,I2] >= "A" THEN 5270
5268  IF E$[I2,I2]>"9" THEN 5280
5270  NEXT I2
5280  LET I2=I2-1
5282  IF I1-J1<I2-J2 THEN 5200
5284  IF I1-J1>I2-J2 THEN 5300
5286  IF B$[J1,I1]<E$[J2,I2] THEN 5200
5288  IF B$[J1,I1]>E$[J2,I2] THEN 5295
5290  IF B$[I1+1,I1+1]<E$[I2+1,I2+1] THEN 5200
5291  IF B$[I1+1,I1+1]=E$[I2+1,I2+1] THEN 5300
5295  LET L2=1
5300  IF L3 THEN 5350
5302  FOR I3=J3 TO LEN(F$)
5304  IF F$[I3,I3]<"0" THEN 5320
5306  IF F$[I3,I3]>"Z" THEN 5320
5308  IF F$[I3,I3] >= "A" THEN 5310
5309  IF F$[I3,I3]>"9" THEN 5320
5310  NEXT I3
5320  LET I3=I3-1
5322  IF I1-J1>I3-J3 THEN 5200
5324  IF I1-J1<I3-J3 THEN 5350
5326  IF B$[J1,I1]>F$[J3,I3] THEN 5200
5328  IF B$[J1,I1]<F$[J3,I3] THEN 5340
5330  IF B$[I1+1,I1+1]>F$[I3+1,I3+1] THEN 5200
5332  IF B$[I1+1,I1+1]=F$[I3+1,I3+1] THEN 5350
5340  LET L3=1
5350  IF I1=LEN(B$) OR (L2 AND L3) THEN 5390
5360  LET J1=I1+2
5362  LET J2=I2+2
5365  IF J2 <= LEN(E$) THEN 5370
5367  LET L2=1
5370  LET J3=I3+2
5372  IF J3 <= LEN(F$) THEN 5225
5375  LET L3=1
5380  GOTO 5225
5390  LET F$=B$
5395  GOTO 5200
5398  REM       PRINT CITATIONS
5400  IF F$=Y$ THEN 5500
5410  IF G THEN 5415
5412  PRINT ",";
5413  LET C=C+1
5415  IF C+LEN(F$)+1<72 THEN 5420
5416  PRINT 
5417  LET L=L+1
5418  PRINT TAB(30);
5419  LET C=30
5420  PRINT F$;
5425  LET G=0
5430  LET E$=F$
5432  LET C=C+LEN(F$)
5435  GOTO 5100
5500  PRINT 
5505  LET L=L+1
5510  LET C$=D$
5600  IF L<60 THEN 4100
5610  FOR J=1 TO 66-L
5620  PRINT '10;
5630  NEXT J
5640  LET P=P+1
5650  PRINT "-"'10'10'10;TAB(60);P;'10'10
5660  LET L=6
5670  GOTO 4100
6000  FOR J=1 TO 66-L
6010  PRINT '10;
6020  NEXT J
6030  PRINT "-"'10'10'10'10'10
6040  GOTO 2000
6990  REM
6994  REM       INITIALIZATION
6997  REM
7000  PRINT '10"DO REALLY WANT TO INITIALIZE ";
7010  INPUT A$
7020  IF A$[1,1]#"Y" THEN 2100
7030  PRINT "SO BE IT!!"
7100  FOR F=1 TO Q
7110  IF  END #F THEN 7200
7120  FOR R=1 TO 999
7130  PRINT #F,R; END 
7140  READ #1,R
7150  NEXT R
7200  NEXT F
7210  GOTO 2000
7990  REM       ADVANCE TO NEXT FILE
8000  LET F=F+1
8010  IF F<Q THEN 8100
8015  LET F=F-1
8020  PRINT "FILES FULL"
8030  GOTO 2100
8100  IF  END #F THEN 8000
8110  READ #F,1
8150  GOTO M OF 8200,8300
8200  PRINT #F;A$
8300  PRINT #F;B$
8350  GOTO 2100
9999  END 
