1  REM  ****  HP BASIC PROGRAM LIBRARY  *******************************
2  REM
3  REM         INV : CTC ACCOUNTS RECEIVABLE 
4  REM
5  REM         36214 REV  B  PART 1 OF 13   2/73 
6  REM
7  REM  ****  CONTRIBUTED PROGRAM  ************************************
70  H$='13'26'30'29'31
100  FILES G1,G2,G3,G4,G10A,G10B,G10C,G12,G0
110  DIM H$[5],C$[10],Z$[10]
115  DIM A$[7],B$[8],R$[54],S$[54],T$[54]
116  DIM L[7],O[8,4]
120  READ C9,C8,E9,E8
125  DATA 2,3,8,4
130  C[1]=5
135  C[2]=0
140  FOR I=1 TO E9
142  READ E[I]
144  NEXT I
145  DATA 1,2,3,5,6,7,8,0
150  READ #(E8+C8+2),1;A9,M9
152  PRINT #(E8+C8+2),1;A9,M9
170  C$="0123456789"
190  IF  END #(E8+C8+1) THEN 240
200  FOR I1=1 TO 200
203  READ #(E8+C8+1),I1
205  FOR I=1 TO 2
210  READ #(E8+C8+1);U6,T$,A$,Z0,S1,S2,C0,S5,S6,P0
212  NEXT I
215  NEXT I1
220  PRINT '7'7"T-ILE FULL"
225  STOP 
230  PRINT '7'7"T-FILE EOF"
235  STOP 
240  IF  END #(E8+C8+1) THEN 230
242  PRINT #(E8+C8+1); END 
245  GOTO 300
250  S2=S2*10^4+S3*100+S4
252  PRINT #(E8+C8+1);U6,T$[1,26],A$[6,7],Z0,S1,S2,C0,S5,S6,P0
255  IF TYP(-(E8+C8+1))=3 THEN 220
260  PRINT #(E8+C8+1); END 
300  PRINT H$[4,5];H$[5,5];H$[5,5];
310  Z0=0
315  GOSUB 2970
320  U6=Z
325  GOSUB 4550
330  IF  NOT B3 THEN 345
335  PRINT '7'7"CUST# NOT IN USE"
340  GOTO 300
345  PRINT T$;
350  INPUT B$
355  IF B$[1,1]#"Y" THEN 300
360  IF A$[6,7]="NL" THEN 420
365  IF A$[6,7]="NS" THEN 420
370  IF A$[6,6]="P" THEN 980
380  IF A$[6,7]="CL" THEN 1210
385  IF A$[6,7]="CS" THEN 1210
390  IF A$[6,6]="M" THEN 1600
400  PRINT "BAD CODE";H$[1,3]
410  GOTO 300
420  C0=1
510  GOSUB 3090
515  IF W2=0 THEN 300
520  GOSUB 4700
530  IF  NOT B4 THEN 590
540  PRINT '1'7'7"INVOICE ALREADY ON FILE"
550  GOTO 300
590  GOSUB 3190
600  GOSUB 3550
620  F1=0
621  GOSUB 650
625  GOSUB 1300
640  GOTO 250
650  REM
660  IF T#0 THEN 690
662  K8=0
665  GOSUB 2440
670  GOSUB 800
675  RETURN 
690  K9=D[L2,2]
695  GOSUB 900
700  RETURN 
800  K9=A9
805  GOSUB 5200
807  IF F1 THEN 845
810  A9=L[7]
815  PRINT #(E8+C8+2),1;A9,M9
820  L[1]=SGN(W2)
825  L[2]=ABS(W2)
830  L[3]=C0
832  L[4]=D3
835  L[5]=C1
840  L[6]=D4
845  L[7]=K8
850  GOSUB 5300
855  RETURN 
900  REM
905  FOR P9=1 TO T
910  GOSUB 5205
915  IF C1<L[5] THEN 935
917  K7=K9
920  K9=L[7]
925  NEXT P9
930  K8=0
932  GOTO 947
935  K8=K9
940  IF P9=1 THEN 965
942  K9=K7
945  GOSUB 5200
947  L[7]=A9
950  GOSUB 5300
955  GOSUB 800
960  RETURN 
965  GOSUB 2440
970  GOTO 955
980  REM
1030  GOSUB 3090
1035  IF W2=0 THEN 300
1040  GOSUB 4700
1050  IF  NOT B4 THEN 1410
1060  C0=0
1070  GOSUB 3550
1072  K9=K8
1073  GOSUB 5200
1074  V1=L[5]
1075  GOSUB 3800
1076  C4=C4+70
1077  W2=L[1]*L[2]
1078  GOSUB 1360
1080  X=L[3]*L[4]-D3
1085  X1=L[3]*L[6]-D4
1090  GOSUB 1500
1095  IF X=0 AND X1=0 THEN 1135
1100  L[3]=SGN(X)
1105  IF X#0 THEN 1115
1110  L[3]=SGN(X1)
1115  L[4]=ABS(X)
1120  L[6]=ABS(X1)
1125  GOSUB 5300
1130  GOTO 250
1135  L0=L[7]
1140  MAT L=ZER
1145  L[7]=A9
1150  GOSUB 5300
1155  A9=K8
1160  PRINT #(C8+E8+2),1;A9,M9
1165  IF T1=1 THEN 1200
1170  K9=K6
1175  GOSUB 5200
1180  L[7]=L0
1185  GOSUB 5300
1190  P0=A9
1195  GOTO 250
1200  D[L2,2]=L0
1205  GOSUB 2447
1207  GOTO 1190
1210  C0=-1
1220  GOTO 510
1300  REM
1310  S1=W2
1315  S2=C4
1320  S3=C2
1325  S4=C3
1330  S5=D3
1335  S6=D4
1340  P0=A9
1350  RETURN 
1360  X=C4
1365  C4=C2
1370  C2=C3
1375  C3=X
1380  GOTO 1300
1410  PRINT '7'7"INVOICE NOT ON FILE"
1415  GOTO 300
1500  IF X1>-100 THEN 1530
1510  X=X-1
1515  X1=X1+100
1530  IF X1>99 THEN 1560
1535  IF SGN(X)*SGN(X1) >= 0 THEN 1550
1540  X=X-SGN(X)
1545  X1=X1-100*SGN(X1)
1550  RETURN 
1560  X=X-INT((X1*.01))*100
1565  X1=(X1*.01-INT(X1*.01))*100
1566  IF X1-INT(X1)<.9 THEN 1580
1570  X1=INT(X1)+1
1580  RETURN 
1600  PRINT 
1605  K9=D[L2,2]
1610  IF K9=0 THEN 1660
1615  GOSUB 5200
1620  IF L[1]=1 THEN 1630
1625  PRINT "*";
1630  PRINT TAB(2);L[2];
1635  V1=L[5]
1640  GOSUB 3800
1642  PRINT C2;"/";C3;"/";C4+70;
1644  Z$="$ "
1646  IF L[3]>-1 THEN 1648
1647  Z$="$-"
1648  PRINT Z$;L[4];".";L[6]
1650  K9=L[7]
1655  GOTO 1610
1660  GOSUB 3090
1665  IF W2=0 THEN 300
1670  GOSUB 4700
1675  IF  NOT B4 THEN 1410
1680  K9=K8
1685  GOSUB 5200
1690  PRINT "1.CUST# - A";U6
1695  PRINT "2.CUST NM - ";T$
1700  PRINT "3.INV# - ";
1705  IF L[1]=1 THEN 1715
1710  PRINT "*";
1715  PRINT L[2]
1720  PRINT "4.DATE - ";
1725  V1=L[5]
1730  GOSUB 3800
1732  C4=C4+70
1735  PRINT C2;"/";C3;"/";C4
1737  C0=L[3]
1740  IF L[3]=-1 THEN 1755
1745  PRINT "5.INV ";
1750  GOTO 1760
1755  PRINT "5.CRD ";
1760  PRINT "AMT - $";L[4];".";L[6]
1765  PRINT "6.LDEL"
1770  PRINT "7.SDEL"
1775  PRINT "8.NO CHANGE"
1780  PRINT 
1785  PRINT "MOD#";
1790  INPUT Z
1795  IF Z>0 AND Z<9 THEN 1810
1800  PRINT '7'7"INVALID MOD#";H$[1,3];
1805  GOTO 1785
1810  Z0=Z
1815  GOTO Z0 OF 1820,1820,1830,1870,1960,1990,1990,300
1820  PRINT '7'7"CUST# AND NAME CANNOT BE CHANGED WITH THIS PROGRAM";H$[1,3];
1825  GOTO 1785
1830  GOSUB 3090
1832  IF W2=0 THEN 300
1834  D3=L[4]
1835  D4=L[6]
1836  GOSUB 1360
1837  L0=K8
1838  GOSUB 4700
1839  IF B4 THEN 540
1840  K9=L0
1845  GOSUB 5200
1850  L[2]=ABS(W2)
1855  L[1]=SGN(W2)
1860  GOSUB 5300
1865  GOTO 250
1870  GOSUB 3190
1872  L[5]=C1
1873  L0=L[7]
1874  W2=L[1]*L[2]
1875  D3=L[4]
1876  D4=L[6]
1877  GOSUB 1300
1880  GOSUB 5300
1885  IF T=1 THEN 250
1890  IF T1#1 THEN 1910
1895  D[L2,2]=L0
1900  GOSUB 2447
1905  GOTO 1927
1910  K9=K6
1915  GOSUB 5200
1920  L[7]=L0
1925  GOSUB 5300
1927  T=T-1
1930  A8=A9
1935  A9=K8
1937  K9=D[L2,2]
1938  F1=1
1940  GOSUB 900
1945  A9=A8
1950  GOTO 250
1960  GOSUB 3550
1965  L[4]=D3
1970  L[6]=D4
1975  GOSUB 5300
1980  GOSUB 1360
1985  GOTO 250
1990  L0=L[7]
1995  D3=L[4]
2000  D4=L[6]
2002  W2=L[1]*L[2]
2005  MAT L=ZER
2010  L[7]=A9
2011  GOSUB 5300
2012  A9=K8
2013  PRINT #(E8+C8+2),1;A9,M9
2014  GOSUB 1360
2015  IF T1#1 THEN 2035
2020  D[L2,2]=L0
2025  GOSUB 2447
2030  GOTO 250
2035  K9=K6
2040  GOSUB 5200
2045  L[7]=L0
2050  GOSUB 5300
2055  GOTO 250
2440  D[L2,2]=A9
2447  PRINT #(L+E8),L1;R$,D[1,1],D[1,2],S$,D[2,1],D[2,2]
2450  RETURN 
2550  Z=B1=0
2570  FOR I1=1 TO LEN(Z$)
2580  FOR I2=1 TO 10
2590  IF Z$[I1,I1]=C$[I2,I2] THEN 2630
2600  NEXT I2
2610  B1=1
2620  RETURN 
2630  Z=Z*10+I2-1
2640  NEXT I1
2650  RETURN 
2970  PRINT "CUST# AND CODE";
3000  INPUT A$
3005  IF A$="END" THEN 9999
3010  IF LEN(A$)<6 THEN 3055
3020  IF A$[1,1]#"A" THEN 3055
3030  Z$=A$[2,5]
3040  GOSUB 2550
3050  IF  NOT B1 AND (Z>0 AND Z <= C8*400) THEN 3070
3055  PRINT '7'7"INVALID CUST#";H$[1,3];
3060  GOTO 2970
3070  X=Z
3075  RETURN 
3090  PRINT "INV#";
3100  INPUT B$
3110  IF LEN(B$)<4 THEN 3170
3120  Z$=B$[1,LEN(B$)-1]
3130  GOSUB 2550
3140  IF B1 THEN 3170
3141  IF Z=0 THEN 3150
3142  H5=1
3144  IF B$[LEN(B$)]="A" THEN 3150
3145  IF B$[LEN(B$)]#"B" THEN 3170
3147  H5=-1
3150  W2=Z*H5
3160  RETURN 
3170  PRINT "BAD INV#";H$[1,3];
3180  GOTO 3090
3190  PRINT "DATE";
3200  INPUT V1
3205  GOSUB 3800
3210  IF C4<1 OR C4>12 THEN 3530
3215  IF C2<1 OR C2>31 THEN 3530
3220  IF C3<71 OR C3>72 THEN 3530
3230  C1=(C3-INT(C3/10)*10)*10^4+C4*100+C2
3280  RETURN 
3530  PRINT '7'7"INVALID DATE";H$[1,3];
3540  GOTO 3190
3550  IF C0>0 THEN 3610
3560  IF C0<0 THEN 3590
3570  PRINT "PAY ";
3580  GOTO 3620
3590  PRINT "CRD ";
3600  GOTO 3620
3610  PRINT "INV ";
3620  PRINT "AMT";
3630  INPUT B$
3640  L0=LEN(B$)
3650  IF L0<4 OR L0>8 THEN 3780
3660  IF B$[L0-2,L0-2]#"." THEN 3780
3690  Z$=B$[1,L0-3]
3700  GOSUB 2550
3710  IF B1 THEN 3780
3720  D3=Z
3730  Z$=B$[L0-1]
3740  GOSUB 2550
3750  IF B1 THEN 3780
3760  D4=Z
3770  RETURN 
3780  PRINT '7'7"INVALID AMT";H$[1,3];
3790  GOTO 3550
3800  C4=INT(V1/10^4)
3805  C2=INT((V1-C4*10^4)/100)
3810  C3=V1-C4*10^4-C2*100
3830  RETURN 
4550  K9=U6
4552  B3=0
4555  FOR I=1 TO C9
4565  A[I]=C[I]
4570  NEXT I
4575  Q9=C9
4580  Q8=C8
4585  GOSUB 5000
4586  L=N
4587  L1=R
4588  L2=R1
4590  READ #(L+E8),L1;R$,D[1,1],D[1,2],S$,D[2,1],D[2,2]
4595  IF D[L2,2]#-1 THEN 4610
4600  B3=1
4605  RETURN 
4610  T$=R$
4615  IF L2=1 THEN 4625
4620  T$=S$
4625  FOR I=1 TO LEN(T$)
4630  IF T$[I,I]='17 THEN 4645
4635  NEXT I
4645  T$=T$[1,I-1]
4650  RETURN 
4700  T=B4=K7=0
4705  IF D[L2,2]=0 THEN 4770
4710  K9=D[L2,2]
4715  GOSUB 5200
4720  IF L[2]*L[1]=W2 THEN 4745
4725  T=T+1
4727  K7=K9
4730  IF L[7]=0 THEN 4770
4735  K9=L[7]
4740  GOTO 4715
4745  K8=K9
4750  T1=T+1
4755  K6=K7
4757  B4=1
4760  GOTO 4725
4770  RETURN 
5000  X=K9/Q9
5010  I9=INT(X)
5020  D9=INT((X-I9)*10)
5030  R=I9
5035  IF D9=0 THEN 5050
5040  R=R+1
5050  FOR R1=1 TO Q9
5055  IF D9=A[R1] THEN 5080
5060  NEXT R1
5070  PRINT '7"ERR1"
5075  STOP 
5080  REM
5085  FOR N=1 TO Q8
5090  IF R<201 THEN 5115
5095  R=R-200
5100  NEXT N
5105  PRINT '7"ERR2"
5110  STOP 
5115  RETURN 
5200  REM
5205  Q9=E9
5210  Q8=E8
5211  FOR I=1 TO E9
5212  A[I]=E[I]
5213  NEXT I
5215  GOSUB 5000
5216  M=N
5217  M1=R
5218  M2=R1
5219  MAT  READ #M,M1;O
5220  L[1]=SGN(O[M2,1])
5222  L[2]=ABS(O[M2,1])
5225  L[3]=SGN(O[M2,2])
5226  IF O[M2,2]#0 THEN 5230
5227  L[3]=SGN(O[M2,3])
5230  L[4]=ABS(O[M2,2])
5232  X=ABS(O[M2,3])
5235  L[5]=INT(X/10)
5240  L[6]=X-L[5]*10
5245  X=INT(O[M2,4]/10^5)
5250  L[7]=O[M2,4]-X*10^5
5255  L[6]=L[6]*10+X
5260  RETURN 
5300  O[M2,1]=L[1]*L[2]
5305  O[M2,2]=L[3]*L[4]
5310  X=INT(L[6]/10)
5315  O[M2,3]=L[3]*(L[5]*10+X)
5320  O[M2,4]=(L[6]-X*10)*10^5+L[7]
5325  MAT  PRINT #M,M1;O
5330  RETURN 
9999  END 
