10  REM   PROGRAM  INDXUP
20  REM
30  DIM A$[72],B$[6],L$[26],W$[72],X$[72],Y$[72],Z$[30],Q[63]
40  REM
50  FILES IF1.A100,IF2.A100,IF3.A100,IF4.A100
60  REM
70  DEF FNL()=INT((+1)/2)+1
80  REM
90  LET L$="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
100  PRINT 
110  PRINT " ","SYSTEM LIBRARY ABSTRACTS UPDATE"
120  PRINT 
130  REM
140  REM      COMMAND SECTION
150  REM
160  PRINT 
170  PRINT "COMMAND ";
180  INPUT A$
190  PRINT 
200  IF A$[1,3]="DEL" THEN 520
210  IF A$[1,3]="ADD" THEN 940
220  IF A$[1,3]="HEL" THEN 280
230  IF A$[1,3]="INT" THEN 2040
240  IF A$[1,3]="LIS" THEN 330
250  IF A$[1,3]="STO" THEN 3760
260  PRINT "INVALID"
270  GOTO 160
280  PRINT "COMMANDS ARE:  DEL, ADD, HEL, INT, LIS, STO"
290  GOTO 160
300  REM
310  REM      LIST SECTION
320  REM
330  LET R9=0
340  FOR F=1 TO 4
350  IF  END #F THEN 470
360  FOR R=1 TO 999
370  READ #F,R
380  LET R9=R9+1
390  READ #F;S9
400  IF S9=0 THEN 160
410  READ #F;A$
420  PRINT "  NAME     RECORD #"
430  PRINT " ------   ----------"
440  PRINT TAB(1);A$;TAB(13);R9;
450  PRINT 
460  NEXT R
470  NEXT F
480  GOTO 160
490  REM
500  REM      DELETE SECTION
510  REM
520  PRINT "ENTER NAME ";
530  INPUT B$
540  PRINT 
550  GOSUB 2940
560  IF M=1 THEN 680
570  IF F4#0 THEN 600
580  PRINT "PROGRAM ";B$;" NOT FOUND"
590  GOTO 160
600  PRINT "FOUND IN SUBPROGRAM LIST"
610  LET R5=R4
620  LET F5=F4
630  GOSUB 3340
640  GOTO 160
650  REM
660  REM   MOVE RECORDS DOWN
670  REM
680  LET F1=F2=F3
690  LET R2=R3
700  LET R1=R3+1
710  IF  END #F2 THEN 860
720  IF  END #F1 THEN 820
730  READ #F1,R1;S
740  READ #F2,R2
750  IF S#0 THEN 780
760  PRINT #F2,R2;0
770  GOTO 160
780  GOSUB 2160
790  LET R1=R1+1
800  LET R2=R2+1
810  GOTO 730
820  LET F1=F1+1
830  IF F1>4 THEN 890
840  LET R1=1
850  GOTO 710
860  LET F2=F2+1
870  LET R2=1
880  GOTO 710
890  PRINT #4,R2;0
900  GOTO 160
910  REM
920  REM      ADD SECTION
930  REM
940  PRINT "ENTER NAME ";
950  INPUT B$
960  PRINT 
970  GOSUB 2940
980  IF M=1 THEN 1030
990  IF E=1 THEN 1200
1000  PRINT "FILES FULL"
1010  IF F4#0 THEN 1110
1020  GOTO 160
1030  PRINT "PROGRAM ";B$;" IS PRESENT"
1040  LET F5=F3
1050  LET R5=R3
1060  GOSUB 3340
1070  PRINT "DO YOU WISH TO KEEP IT ";
1080  INPUT A$
1090  IF A$[1,1]="N" THEN 1520
1100  GOTO 160
1110  PRINT "PROGRAM IS PRESENT IN SUBPROGRAM LIST"
1120  LET F5=F4
1130  LET R5=R4
1140  GOSUB 3340
1150  IF E=0 THEN 160
1160  PRINT "DO YOU WISH TO ADD IT ANYWAY ";
1170  INPUT A$
1180  IF A$[1,1]#"Y" THEN 160
1190  GOTO 1250
1200  IF F4=0 THEN 1250
1210  GOTO 1110
1220  REM
1230  REM   MOVE RECORDS OUT
1240  REM
1250  IF  END #F THEN 1290
1260  READ #F,R+1
1270  PRINT #F;0
1280  GOTO 1310
1290  IF F=4 THEN 1310
1300  PRINT #F+1,1;0
1310  IF F=F3 AND R=R3 THEN 1520
1320  LET R1=R-1
1330  LET R2=R
1340  LET F1=F2=F
1350  IF R1>0 THEN 1410
1360  LET F1=F1-1
1370  IF  END #F1 THEN 1410
1380  FOR R1=1 TO 999
1390  READ #F1,R1+1
1400  NEXT R1
1410  GOSUB 2160
1420  IF F1=F3 AND R1=R3 THEN 1520
1430  LET R2=R2-1
1440  IF R2>0 THEN 1470
1450  LET R2=R1
1460  LET F2=F1
1470  LET R1=R1-1
1480  GOTO 1350
1490  REM
1500  REM   ENTER NEW INFORMATION
1510  REM
1520  PRINT 
1530  GOSUB 3680
1540  PRINT "ENTER NUMBER OF PROGRAMS AND SUBPROGRAMS ";
1550  INPUT S
1560  PRINT 
1570  IF S<1 THEN 1540
1580  PRINT #F3,R3;S+L7*100;B$
1590  LET L=2+FNL(LEN(B$))
1600  IF S=1 THEN 1710
1610  PRINT 1;" ";B$
1620  FOR I=2 TO S
1630  PRINT I;
1640  INPUT W$
1650  IF W$[1,LEN(B$)]#B$ THEN 1680
1660  LET W$=W$[LEN(B$),LEN(W$)]
1670  LET W$[1,1]=" "
1680  PRINT #F3;W$
1690  LET L=L+FNL(LEN(W$))
1700  NEXT I
1710  REM
1720  REM
1730  PRINT #F3;A$
1740  LET L=L+FNL(LEN(A$))
1750  PRINT 
1760  PRINT "DESCRIPTION, ']]' ENDS THE INPUT"
1770  PRINT 
1780  FOR I=1 TO 999
1790  PRINT 255-2*L
1800  INPUT A$
1810  IF A$[1,2]="]]" THEN 1960
1820  IF L+FNL(LEN(A$))>128 THEN 1860
1830  PRINT #F3;A$
1840  LET L=L+FNL(LEN(A$))
1850  NEXT I
1860  PRINT 
1870  PRINT "RECORD OVERFLOW, TRY AGAIN"
1880  READ #F3,R3;S
1890  LET L=2
1900  LET S=S-INT(S/100)*100
1910  FOR I=1 TO S+1
1920  READ #F3;A$
1930  LET L=L+FNL(LEN(A$))
1940  NEXT I
1950  GOTO 1750
1960  PRINT 
1970  LET F5=F3
1980  LET R5=R3
1990  GOSUB 3340
2000  GOTO 160
2010  REM
2020  REM      INITIALIZATION SECTION
2030  REM
2040  PRINT "ARE YOU SURE YOU WANT TO INITIALIZE";
2050  INPUT A$
2060  IF A$[1,1]#"Y" THEN 160
2070  PRINT #1,1;0
2080  PRINT 
2090  PRINT "INITIALIZED!!!"
2100  GOTO 160
2110  REM
2120  REM   ***** SUBROUTINE COPY *****
2130  REM
2140  REM   READ INTO INTERNAL BUFFER
2150  REM
2160  LET P=1
2170  LET X=0
2180  READ #F1,R1;S
2190  FOR I=1 TO 63
2200  IF TYP(-F1)=4 OR TYP(F1)=3 THEN 2570
2210  READ #F1;A$
2220  LET Q[I]=LEN(A$)
2230  GOTO P OF 2240,2320,2400,2480
2240  IF X+Q[I]>72 THEN 2280
2250  LET W$[X+1]=A$
2260  LET X=LEN(W$)
2270  GOTO 2500
2280  LET W$[X+1]=A$[1,72-X]
2290  LET X$=A$[73-X]
2300  LET P=2
2310  GOTO 2340
2320  IF X+Q[I]>72 THEN 2360
2330  LET X$[X+1]=A$
2340  LET X=LEN(X$)
2350  GOTO 2500
2360  LET X$[X+1]=A$[1,72-X]
2370  LET Y$=A$[73-X]
2380  LET P=3
2390  GOTO 2420
2400  IF X+Q[I]>72 THEN 2440
2410  LET Y$[X+1]=A$
2420  LET X=LEN(Y$)
2430  GOTO 2500
2440  LET Y$[X+1]=A$[1,72-X]
2450  LET Z$=A$[73-X]
2460  LET P=4
2470  GOTO 2490
2480  LET Z$[X+1]=A$
2490  LET X=LEN(Z$)
2500  IF X<72 THEN 2530
2510  LET X=0
2520  LET P=P+1
2530  NEXT I
2540  REM
2550  REM   PRINT OUT OF THE INTERNAL BUFFER
2560  REM
2570  PRINT #F2,R2;S
2580  LET P=X=1
2590  FOR J=1 TO I-1
2600  GOTO P OF 2610,2700,2770,2840
2610  IF X+Q[J]>73 THEN 2640
2620  PRINT #F2;W$[X,X+Q[J]-1]
2630  GOTO 2850
2640  LET A$=W$[X]
2650  LET X=Q[J]-LEN(A$)+1
2660  LET A$[LEN(A$)+1]=X$[1,X-1]
2670  PRINT #F2;A$
2680  LET P=P+1
2690  GOTO 2890
2700  IF X+Q[J]>73 THEN 2730
2710  PRINT #F2;X$[X,X+Q[J]-1]
2720  GOTO 2850
2730  LET A$=X$[X]
2740  LET X=Q[J]-LEN(A$)+1
2750  LET A$[LEN(A$)+1]=Y$[1,X-1]
2760  GOTO 2670
2770  IF X+Q[J]>73 THEN 2800
2780  PRINT #F2;Y$[X,X+Q[J]-1]
2790  GOTO 2850
2800  LET A$=Y$[X]
2810  LET X=Q[J]-LEN(A$)+1
2820  LET A$[LEN(A$)+1]=Z$[1,X-1]
2830  GOTO 2670
2840  PRINT #F2;Z$[X,X+Q[J]-1]
2850  LET X=X+Q[J]
2860  IF X<73 THEN 2890
2870  LET X=1
2880  LET P=P+1
2890  NEXT J
2900  RETURN 
2910  REM
2920  REM   ***** SUBROUTINE SEARCH *****
2930  REM
2940  LET F3=R3=F4=R4=M=0
2950  FOR F=1 TO 4
2960  IF  END #F THEN 3230
2970  FOR R=1 TO 999
2980  READ #F,R;S
2990  LET S=S-INT(S/100)*100
3000  IF S=0 THEN 3260
3010  READ #F;A$
3020  IF B$#A$ THEN 3060
3030  LET F3=F
3040  LET R3=R
3050  LET M=1
3060  IF A$<B$ THEN 3110
3070  IF F3#0 THEN 3110
3080  LET F3=F
3090  LET R3=R
3100  LET M=2
3110  FOR I=2 TO S
3120  READ #F;W$
3130  IF W$[1,1]#" " THEN 3170
3140  LET Z$=A$
3150  LET Z$[LEN(A$)+1]=W$[2]
3160  LET W$=Z$
3170  IF W$=B$ THEN 3200
3180  NEXT I
3190  GOTO 3220
3200  LET F4=F
3210  LET R4=R
3220  NEXT R
3230  NEXT F
3240  LET E=0
3250  RETURN 
3260  LET E=1
3270  IF F3#0 THEN 3300
3280  LET F3=F
3290  LET R3=R
3300  RETURN 
3310  REM
3320  REM   ***** SUBROUTINE PRINTER *****
3330  REM
3340  READ #F5,R5;S,A$
3350  LET L7=INT(S/100)
3360  LET S=S-100*L7
3370  PRINT 
3380  PRINT A$
3390  PRINT 
3400  IF S=1 THEN 3510
3410  PRINT "SUBPROGS: ";
3420  FOR I=2 TO S
3430  READ #F5;W$
3440  IF W$[1,1]=" " THEN 3470
3450  PRINT W$;"  ";
3460  GOTO 3480
3470  PRINT A$;W$[2];"  ";
3480  NEXT I
3490  PRINT 
3500  PRINT 
3510  READ #F5;A$
3520  IF L7=0 THEN 3560
3530  PRINT "LIBRARY:  ";L$[L7,L7]
3540  PRINT 
3550  PRINT 
3560  PRINT "ACCESS / ";A$
3570  PRINT 
3580  FOR I=1 TO 999
3590  IF TYP(-F5)=4 OR TYP(F5)=3 THEN 3630
3600  READ #F5;A$
3610  PRINT A$
3620  NEXT I
3630  PRINT 
3640  RETURN 
3650  REM
3660  REM   ***** SUBROUTINE LIBRARY *****
3670  REM
3680  PRINT "ENTER LIBRARY ";
3690  INPUT A$
3700  PRINT 
3710  FOR L7=2 TO 26
3720  IF A$[1,1]=L$[L7,L7] THEN 3750
3730  NEXT L7
3740  LET L7=0
3750  RETURN 
3760  END 
