1  REM  ****  HP BASIC PROGRAM LIBRARY  *******************************
2  REM
3  REM        SLABUP:   SYSTEM LIBRARY ABSTRACTS
4  REM
5  REM        36647 REV  A   2 OF 2    10/73
6  REM
7  REM  ****  CONTRIBUTED PROGRAM  ************************************
1000  REM   PROGRAM SLABUP
1010  REM
1020  DIM A$[72],B$[6],L$[26],W$[72],X$[72],Y$[72],Z$[30],Q[63]
1030  REM
1040  FILES IF1,IF2,IF3,IF4
1050  REM
1060  DEF FNL()=INT((+1)/2)+1
1070  REM
1080  LET L$="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
1100  PRINT 
1110  PRINT " ","SYSTEM LIBRARY ABSTRACTS UPDATE"
1120  PRINT 
1190  REM
1195  REM      COMMAND SECTION
1198  REM
1200  PRINT 
1210  PRINT "COMMAND ";
1220  INPUT A$
1230  PRINT 
1250  IF A$[1,3]="DEL" THEN 2000
1260  IF A$[1,3]="ADD" THEN 3000
1261  IF A$[1,3]="HEL" THEN 1500
1263  IF A$[1,3]="INT" THEN 5000
1264  IF A$[1,3]="LIS" THEN 1600
1265  IF A$[1,3]="STO" THEN 9999
1270  PRINT "INVALID"
1280  GOTO 1200
1500  PRINT "COMMANDS ARE:  DEL, ADD, HEL, INT, LIS, STO"
1510  GOTO 1200
1590  REM
1595  REM      LIST SECTION
1598  REM
1600  LET R9=0
1605  FOR F=1 TO 4
1610  IF  END #F THEN 1700
1620  FOR R=1 TO 999
1630  READ #F,R
1635  LET R9=R9+1
1640  READ #F;S9
1650  IF S9=0 THEN 1200
1660  READ #F;A$
1670  PRINT R9;A$
1680  NEXT R
1700  NEXT F
1710  GOTO 1200
1990  REM
1995  REM      DELETE SECTION
1998  REM
2000  PRINT "ENTER NAME ";
2010  INPUT B$
2020  PRINT 
2030  GOSUB 8020
2040  IF M=1 THEN 2300
2100  IF F4#0 THEN 2200
2110  PRINT "PROGRAM ";B$;" NOT FOUND"
2120  GOTO 1200
2200  PRINT "FOUND IN SUBPROGRAM LIST"
2210  LET R5=R4
2220  LET F5=F4
2230  GOSUB 9020
2240  GOTO 1200
2290  REM
2295  REM   MOVE RECORDS DOWN
2298  REM
2300  LET F1=F2=F3
2310  LET R2=R3
2320  LET R1=R3+1
2400  IF  END #F2 THEN 2850
2410  IF  END #F1 THEN 2800
2450  READ #F1,R1;S
2460  READ #F2,R2
2500  IF S#0 THEN 2550
2510  PRINT #F2,R2;0
2520  GOTO 1200
2550  GOSUB 7020
2700  LET R1=R1+1
2710  LET R2=R2+1
2720  GOTO 2450
2800  LET F1=F1+1
2810  IF F1>4 THEN 2900
2820  LET R1=1
2830  GOTO 2400
2850  LET F2=F2+1
2860  LET R2=1
2870  GOTO 2400
2900  PRINT #4,R2;0
2950  GOTO 1200
2990  REM
2995  REM      ADD SECTION
2998  REM
3000  PRINT "ENTER NAME ";
3010  INPUT B$
3020  PRINT 
3030  GOSUB 8020
3040  IF M=1 THEN 3200
3100  IF E=1 THEN 3400
3110  PRINT "FILES FULL"
3120  IF F4#0 THEN 3300
3130  GOTO 1200
3200  PRINT "PROGRAM ";B$;" IS PRESENT"
3202  LET F5=F3
3206  LET R5=R3
3210  GOSUB 9020
3220  PRINT "DO YOU WISH TO KEEP IT ";
3230  INPUT A$
3240  IF A$[1,1]="N" THEN 4000
3250  GOTO 1200
3300  PRINT "PROGRAM IS PRESENT IN SUBPROGRAM LIST"
3302  LET F5=F4
3306  LET R5=R4
3310  GOSUB 9020
3315  IF E=0 THEN 1200
3320  PRINT "DO YOU WISH TO ADD IT ANYWAY ";
3330  INPUT A$
3340  IF A$[1,1]#"Y" THEN 1200
3350  GOTO 3500
3400  IF F4=0 THEN 3500
3410  GOTO 3300
3490  REM
3495  REM   MOVE RECORDS OUT
3498  REM
3500  IF  END #F THEN 3550
3510  READ #F,R+1
3520  PRINT #F;0
3530  GOTO 3600
3550  IF F=4 THEN 3600
3560  PRINT #F+1,1;0
3600  IF F=F3 AND R=R3 THEN 4000
3610  LET R1=R-1
3620  LET R2=R
3630  LET F1=F2=F
3700  IF R1>0 THEN 3800
3710  LET F1=F1-1
3720  IF  END #F1 THEN 3800
3730  FOR R1=1 TO 999
3740  READ #F1,R1+1
3750  NEXT R1
3800  GOSUB 7020
3900  IF F1=F3 AND R1=R3 THEN 4000
3910  LET R2=R2-1
3920  IF R2>0 THEN 3950
3930  LET R2=R1
3940  LET F2=F1
3950  LET R1=R1-1
3960  GOTO 3700
3990  REM
3995  REM   ENTER NEW INFORMATION
3998  REM
4000  PRINT 
4005  GOSUB 9510
4010  PRINT "ENTER NUMBER OF PROGRAMS AND SUBPROGRAMS ";
4020  INPUT S
4030  PRINT 
4050  IF S<1 THEN 4010
4070  PRINT #F3,R3;S+L7*100;B$
4080  LET L=2+FNL(LEN(B$))
4090  IF S=1 THEN 4200
4100  PRINT 1;" ";B$
4110  FOR I=2 TO S
4120  PRINT I;
4130  INPUT W$
4140  IF W$[1,LEN(B$)]#B$ THEN 4170
4150  LET W$=W$[LEN(B$),LEN(W$)]
4160  LET W$[1,1]=" "
4170  PRINT #F3;W$
4180  LET L=L+FNL(LEN(W$))
4190  NEXT I
4200  PRINT "SOURCE ";
4210  INPUT A$
4220  PRINT #F3;A$
4230  LET L=L+FNL(LEN(A$))
4240  PRINT 
4300  PRINT "DESCRIPTION, '$$END$$' ENDS THE INPUT"
4310  PRINT 
4320  FOR I=1 TO 999
4325  PRINT 255-2*L
4330  INPUT A$
4335  IF A$[1,7]="$$END$$" THEN 4500
4340  IF L+FNL(LEN(A$))>128 THEN 4400
4350  PRINT #F3;A$
4355  LET L=L+FNL(LEN(A$))
4360  NEXT I
4400  PRINT 
4410  PRINT "RECORD OVERFLOW, TRY AGAIN"
4420  READ #F3,R3;S
4425  LET L=2
4427  LET S=S-INT(S/100)*100
4430  FOR I=1 TO S+1
4440  READ #F3;A$
4445  LET L=L+FNL(LEN(A$))
4450  NEXT I
4460  GOTO 4240
4500  PRINT 
4502  LET F5=F3
4506  LET R5=R3
4510  GOSUB 9020
4520  GOTO 1200
4990  REM
4995  REM      INITIALIZATION SECTION
4998  REM
5000  PRINT "ARE YOU SURE YOU WANT TO INITIALIZE";
5010  INPUT A$
5020  IF A$[1,1]#"Y" THEN 1200
5030  PRINT #1,1;0
5035  PRINT 
5040  PRINT "INITIALIZED!!!"
5050  GOTO 1200
6990  REM
7000  REM   ***** SUBROUTINE COPY *****
7002  REM
7005  REM   READ INTO INTERNAL BUFFER
7010  REM
7020  LET P=1
7030  LET X=0
7040  READ #F1,R1;S
7050  FOR I=1 TO 63
7060  IF TYP(-F1)=4 OR TYP(F1)=3 THEN 7500
7070  READ #F1;A$
7080  LET Q[I]=LEN(A$)
7090  GOTO P OF 7100,7200,7300,7400
7100  IF X+Q[I]>72 THEN 7150
7110  LET W$[X+1]=A$
7120  LET X=LEN(W$)
7130  GOTO 7450
7150  LET W$[X+1]=A$[1,72-X]
7160  LET X$=A$[73-X]
7170  LET P=2
7180  GOTO 7220
7200  IF X+Q[I]>72 THEN 7250
7210  LET X$[X+1]=A$
7220  LET X=LEN(X$)
7230  GOTO 7450
7250  LET X$[X+1]=A$[1,72-X]
7260  LET Y$=A$[73-X]
7270  LET P=3
7280  GOTO 7320
7300  IF X+Q[I]>72 THEN 7350
7310  LET Y$[X+1]=A$
7320  LET X=LEN(Y$)
7330  GOTO 7450
7350  LET Y$[X+1]=A$[1,72-X]
7360  LET Z$=A$[73-X]
7370  LET P=4
7380  GOTO 7410
7400  LET Z$[X+1]=A$
7410  LET X=LEN(Z$)
7450  IF X<72 THEN 7480
7460  LET X=0
7470  LET P=P+1
7480  NEXT I
7490  REM
7495  REM   PRINT OUT OF THE INTERNAL BUFFER
7498  REM
7500  PRINT #F2,R2;S
7510  LET P=X=1
7520  FOR J=1 TO I-1
7530  GOTO P OF 7600,7700,7800,7900
7600  IF X+Q[J]>73 THEN 7640
7610  PRINT #F2;W$[X,X+Q[J]-1]
7620  GOTO 7940
7640  LET A$=W$[X]
7650  LET X=Q[J]-LEN(A$)+1
7660  LET A$[LEN(A$)+1]=X$[1,X-1]
7670  PRINT #F2;A$
7680  LET P=P+1
7690  GOTO 7950
7700  IF X+Q[J]>73 THEN 7740
7710  PRINT #F2;X$[X,X+Q[J]-1]
7720  GOTO 7940
7740  LET A$=X$[X]
7750  LET X=Q[J]-LEN(A$)+1
7760  LET A$[LEN(A$)+1]=Y$[1,X-1]
7770  GOTO 7670
7800  IF X+Q[J]>73 THEN 7840
7810  PRINT #F2;Y$[X,X+Q[J]-1]
7820  GOTO 7940
7840  LET A$=Y$[X]
7850  LET X=Q[J]-LEN(A$)+1
7860  LET A$[LEN(A$)+1]=Z$[1,X-1]
7870  GOTO 7670
7900  PRINT #F2;Z$[X,X+Q[J]-1]
7940  LET X=X+Q[J]
7942  IF X<73 THEN 7950
7944  LET X=1
7946  LET P=P+1
7950  NEXT J
7960  RETURN 
7970  REM
8000  REM   ***** SUBROUTINE SEARCH *****
8010  REM
8020  LET F3=R3=F4=R4=M=0
8050  FOR F=1 TO 4
8060  IF  END #F THEN 8500
8100  FOR R=1 TO 999
8110  READ #F,R;S
8115  LET S=S-INT(S/100)*100
8120  IF S=0 THEN 8600
8130  READ #F;A$
8140  IF B$#A$ THEN 8200
8150  LET F3=F
8160  LET R3=R
8170  LET M=1
8200  IF A$<B$ THEN 8300
8210  IF F3#0 THEN 8300
8220  LET F3=F
8230  LET R3=R
8240  LET M=2
8300  FOR I=2 TO S
8310  READ #F;W$
8320  IF W$[1,1]#" " THEN 8350
8330  LET Z$=A$
8335  LET Z$[LEN(A$)+1]=W$[2]
8340  LET W$=Z$
8350  IF W$=B$ THEN 8380
8360  NEXT I
8370  GOTO 8400
8380  LET F4=F
8390  LET R4=R
8400  NEXT R
8500  NEXT F
8510  LET E=0
8520  RETURN 
8600  LET E=1
8610  IF F3#0 THEN 8640
8620  LET F3=F
8630  LET R3=R
8640  RETURN 
8650  REM
9000  REM   ***** SUBROUTINE PRINTER *****
9010  REM
9020  READ #F5,R5;S,A$
9025  LET L7=INT(S/100)
9027  LET S=S-100*L7
9030  PRINT 
9040  PRINT A$
9060  PRINT 
9070  IF S=1 THEN 9220
9080  PRINT "SUBPROGS: ";
9090  FOR I=2 TO S
9100  READ #F5;W$
9110  IF W$[1,1]=" " THEN 9140
9120  PRINT W$;"  ";
9130  GOTO 9150
9140  PRINT A$;W$[2];"  ";
9150  NEXT I
9200  PRINT 
9210  PRINT 
9220  READ #F5;A$
9223  IF L7=0 THEN 9230
9225  PRINT "LIBRARY:  ";L$[L7,L7]
9226  PRINT 
9227  PRINT 
9230  PRINT "SOURCE:  ";A$
9240  PRINT 
9300  FOR I=1 TO 999
9310  IF TYP(-F5)=4 OR TYP(F5)=3 THEN 9400
9320  READ #F5;A$
9330  PRINT A$
9340  NEXT I
9400  PRINT 
9450  RETURN 
9460  REM
9500  REM   ***** SUBROUTINE LIBRARY *****
9505  REM
9510  PRINT "ENTER LIBRARY ";
9520  INPUT A$
9525  PRINT 
9530  FOR L7=2 TO 26
9540  IF A$[1,1]=L$[L7,L7] THEN 9570
9550  NEXT L7
9560  LET L7=0
9570  RETURN 
9999  END 
