2  COM G$[7],T$[7],W$[7],S1,Z1,Z2,Z6,R[16]
4  COM Z3,C0,Z4,C2,C3,C4,C5,C6,C9,D0,D,D1,E,Z7,Z8,E0,F,I4,K2
6  COM L1,L2,L3,N,O,O1,O2,Z5,P,P1,P2,P3,R1,R2,R5,T,T2
8  COM A[30],Z[1,30],N[1,30],X[30],Y[30]
10  COM Q[15],E[100],F[15],G[15],J[15],K[10]
12  COM A$[72],B$[72],C$[52],D$[14],E$[72],F$[72],H$[72],I$[72]
14  COM J$[72],K$[72],L$[72],M$[72],N$[72],O$[72],P$[72],Q$[72]
16  COM R$[72],S$[72],U$[72],V$[72],Z$[72],X$[72],Y$[72]
17  REM      FINDIT:  FILE INFORMATION DIALOGUE TECHNIQUE
18  REM      CAL:  PART 5 OF 8
19  REM HP 36250C, 6/74
20  PRINT "STANDARD PRECISION COMPUTATIONAL MODE - SUPPLY THE FOLLOWING STATEMENTS:"
22  PRINT 
24  PRINT "100 N= (NO. OF DIFFERENT ELEMENTS)"
26  PRINT "101 E= (NO. OF EQUATIONS)"
28  PRINT "200-202 DATA (ELEMENTS USED IN INCREASING ORDER)"
30  PRINT "300-390 (EQUATIONS - USE X(1)-X(N) FOR VARIABLES, WHERE SUBSCRIPTS"
32  PRINT "         CORRESPOND TO ELEMENT POSITION IN DATA STATEMENT."
34  PRINT "         USE A(1)-A(E) FOR COMPUTED VALUES.)"
36  PRINT "400 (DISREGARD IF COMPUTED VALUES ARE TO BE PRINTED FOR EACH RECORD)"
38  PRINT "400 REM (TO SUPPRESS PRINTOUT FOR EACH RECORD)"
40  PRINT "400-490 (TYPE IN SPECIAL PRINT FORMATS, IF DESIRED - SEE MANUAL)"
42  PRINT 
44  PRINT "HIGH PRECISION SUMS FOR 1-4 ELEMENTS - SUPPLY THE FOLLOWING STATEMENTS:"
46  PRINT 
48  PRINT "100 N= (NO. OF ELEMENTS - 1-4)"
50  PRINT "101 E=0"
52  PRINT "102 D= (NO. OF DECIMAL PLACES - 1-6)"
54  PRINT "200 DATA (ELEMENTS USED IN INCREASING ORDER)"
56  PRINT 
58  PRINT "    ONLY COLUMN TOTALS ARE PRINTED. NO EQUATIONS OR SPECIAL PRINT"
60  PRINT "    FORMATS ARE REQUIRED."
62  PRINT 
64  PRINT "AFTER SUPPLYING THE STATEMENTS, NAME THE PROGRAM AND 'CSAV' IT."
90  STOP 
91  REM ****  HP BASIC PROGRAM LIBRARY *********************************
92  REM
93  REM       FINDIT:  FILE INFORMATION DIALOGUE TECHNIQUE
94  REM       CAL:  PART 5 OF 8
95  REM       36250  REV A    10/72
96  REM
97  REM ****  CONTRIBUTED PROGRAM **************************************
100  N=0
101  E=0
102  D=0
185  IF  NOT N THEN 211
186  IF  NOT E THEN 190
187  MAT A=ZER[E]
188  MAT Z=ZER[1,E]
189  MAT N=ZER[1,E]
190  MAT X=ZER[N]
191  MAT Y=ZER[N]
194  D1=P=0
195  C$=""
196  X$=""
197  V$=""
198  Y$=""
200  REM--DATA
204  MAT  READ Y[N]
211  FILES *
212  CHAIN "$SEARCH",6790
214  ASSIGN G$,1,X
216  READ #1,R1;Z,Z
217  IF  NOT N THEN 1000
218  K1=1
220  FOR I1=1 TO Y[N]
222  READ #1;A$
224  IF I1#Y[K1] THEN 290
226  IF E THEN 242
228  Z9=1
230  GOSUB K1 OF 710,720,730,740
232  GOTO 288
242  Y=D=0
243  D2=1
244  FOR J=1 TO LEN(A$)
246  FOR K=1 TO 14
248  IF A$[J,J]#D$[K,K] THEN 274
250  GOTO K-10 OF 258,284,254,282
252  GOTO 262
254  D2=-1
256  GOTO 282
258  D=1
260  GOTO 282
262  IF D THEN 268
264  Y=10*Y+K-1
266  GOTO 282
268  Y=Y+(K-1)/10^D
270  D=D+1
272  GOTO 282
274  NEXT K
276  PRINT "**BAD DATA**"
278  D1=D1+1
280  GOTO 504
282  NEXT J
284  X[K1]=Y*D2
288  K1=K1+1
290  NEXT I1
300  IF  NOT E OR P1=5 THEN 504
399  MAT Z=TRN(A)
400  MAT  PRINT Z;
502  MAT N=N+Z
504  CHAIN "$SEARCH",1540
506  IF  NOT N THEN 706
507  PRINT LIN(-1);"COMPUTED TOTALS:"
508  PRINT 
509  IF E THEN 600
510  P=1
512  FOR I=1 TO N
513  GOSUB I OF 710,720,730,740
514  PRINT Z$"  ";
516  NEXT I
517  PRINT 
518  GOTO 700
600  MAT  PRINT N;
700  IF  NOT D1 THEN 706
702  PRINT "RECORDS WITH BAD DATA (NOT IN COMPUTED TOTALS)="D1
704  PRINT 
706  CHAIN "$SEARCH",9190
710  Z$=C$
712  IF P THEN 718
714  GOSUB 9000
716  C$=Z$
718  RETURN 
720  Z$=X$
722  IF P THEN 728
724  GOSUB 9000
726  X$=Z$
728  RETURN 
730  Z$=V$
732  IF P THEN 738
734  GOSUB 9000
736  V$=Z$
738  RETURN 
740  Z$=Y$
742  IF P THEN 748
744  GOSUB 9000
746  Y$=Z$
748  RETURN 
1000  REM--SPECIAL PRINT FORMATS
8999  GOTO 504
9000  DIM B[16],C[16]
9002  MAT A=CON[16]
9004  MAT B=CON
9006  MAT C=CON
9008  R=0
9010  W=15
9012  GOTO 9374
9014  GOTO 9094
9016  GOTO 9158
9018  GOTO 9168
9020  GOTO 9172
9022  REM-- OUTPUT ROUTINE.
9024  Z$=""
9026  A=ABS(A[1])
9028  A1=(A[1]<0)+4*(A-3 MAX 0)+1+(D>0)+D-(A >= 4)*(2+(A[A]<100)+(A[A]<10))
9030  IF A[1] >= 0 THEN 9034
9032  Z$[1,1]="-"
9034  A2=3
9036  IF A >= 4 THEN 9042
9038  Z$[LEN(Z$)+1,LEN(Z$)+1]="0"
9040  GOTO 9044
9042  GOSUB 9072
9044  A1=0
9046  FOR A=A-1 TO 4 STEP -1
9048  GOSUB 9072
9050  NEXT A
9052  IF D=0 THEN 9068
9054  Z$[LEN(Z$)+1,LEN(Z$)+1]="."
9056  A2=D MIN 3
9058  A=3
9060  GOSUB 9072
9062  A2=(D-3) MIN 3
9064  A=2
9066  GOSUB 9072
9068  IF W<0 THEN 9070
9070  RETURN 
9072  A3=A[A]*(A <= ABS(A[1]))
9074  A4=INT(A3/100)
9076  A5=INT((A3-100*A4)/10)
9078  A6=A3-100*A4-10*A5
9080  IF A4=0 AND A1 OR A2<1 THEN 9084
9082  Z$[LEN(Z$)+1,LEN(Z$)+1]=D$[A4+1,A4+1]
9084  IF A3<10 AND A1 OR A2<2 THEN 9088
9086  Z$[LEN(Z$)+1,LEN(Z$)+1]=D$[A5+1,A5+1]
9088  IF A2<3 THEN 9092
9090  Z$[LEN(Z$)+1,LEN(Z$)+1]=D$[A6+1,A6+1]
9092  RETURN 
9094  REM--A=B+C
9096  B=ABS(B[1])
9098  C=ABS(C[1])
9100  A1=0
9102  IF B[1]*C[1]<0 THEN 9122
9104  FOR A=2 TO B MAX C
9106  A2=A1+B[A]*(A <= B)+C[A]*(A <= C)
9108  A1=(A2>999)
9110  A[A]=A2-1000*A1
9112  NEXT A
9114  IF  NOT A1 THEN 9118
9116  A[A]=1
9118  A[1]=(A-( NOT A1))*SGN(B[1])
9120  RETURN 
9122  A3=1
9124  GOTO SGN(B-C)+2 OF 9136,9126,9138
9126  FOR A=B TO 2 STEP -1
9128  GOTO SGN(B[A]-C[A])+2 OF 9136,9130,9138
9130  NEXT A
9132  A[1]=1
9134  RETURN 
9136  A3=-1
9138  FOR A=2 TO B MAX C
9140  A2=A1+(B[A]*(B >= A)-C[A]*(C >= A))*A3
9142  A1=-(A2<0)
9144  A[A]=A2-1000*A1
9146  NEXT A
9148  FOR A=A-1 TO 2 STEP -1
9150  IF A[A]>0 THEN 9154
9152  NEXT A
9154  A[1]=A*A3*SGN(B[1])
9156  RETURN 
9158  REM--A=B-C
9160  C[1]=-C[1]
9162  GOSUB 9094
9164  C[1]=-C[1]
9166  RETURN 
9168  A8=1
9170  GOTO 9174
9172  A8=0
9174  A9=1
9176  A3=0
9178  A[1]=3
9180  A[2]=A[3]=0
9182  FOR A1=1 TO LEN(A$)
9184  IF A$[A1,A1]#" " THEN 9188
9186  NEXT A1
9188  IF A$[A1,A1]#"-" THEN 9196
9190  A9=-1
9192  A1=A1+1
9194  GOTO 9188
9196  IF A$[A1,A1]#" " THEN 9202
9198  A$=A$[A1]
9200  GOTO 9248
9202  IF A3=.1 THEN 9192
9204  FOR A2=1 TO 10
9206  IF D$[A2,A2]=A$[A1,A1] THEN 9216
9208  NEXT A2
9210  IF A$[A1,A1]#"." THEN 9192
9212  A3=100000.
9214  GOTO 9192
9216  A2=A2-1
9218  IF A3=0 THEN 9230
9220  A4=INT(A3/1000)
9222  A[3]=A[3]+A2*A4
9224  A[2]=A[2]+A2*(A3-1000*A4)
9226  A3=A3/10
9228  GOTO 9192
9230  FOR A4=4 TO A[1]
9232  A5=10*A[A4]+A2
9234  A2=INT(A5/1000)
9236  A[A4]=A5-1000*A2
9238  NEXT A4
9240  IF A2=0 THEN 9192
9242  A[1]=A[1]+1
9244  A[A[1]]=A2
9246  GOTO 9192
9248  IF A[A[1]] THEN 9254
9250  A[1]=A[1]-1
9252  GOTO 9248
9254  A[1]=A[1]*A9
9256  RETURN 
9258  REM--SCALE B AND C.
9260  FOR B1=B TO 4 STEP -1
9262  B[B1]=B[B1-2]
9264  NEXT B1
9266  B[2]=B[3]=0
9268  IF C=2 THEN 9356
9270  B1=INT(1000/(C[C]+1))
9272  B[B+1]=0
9274  IF B1=1 THEN 9302
9276  B2=0
9278  FOR B3=4 TO B
9280  B4=B1*B[B3]+B2
9282  B2=INT(B4/1000)
9284  B[B3]=B4-1000*B2
9286  NEXT B3
9288  B[B3]=B2
9290  B2=0
9292  FOR B3=2 TO C
9294  B4=B1*C[B3]+B2
9296  B2=INT(B4/1000)
9298  C[B3]=B4-1000*B2
9300  NEXT B3
9302  FOR B1=B+1 TO C+1 STEP -1
9304  A=INT((1000*B[B1]+B[B1-1])/C[C]) MIN 999
9306  IF C[C-1]*A-B[B1-2] <= (B[B1]*1000+B[B1-1]-A*C[C])*1000 THEN 9312
9308  A=A-1
9310  GOTO 9306
9312  B2=0
9314  B5=B1-C-1
9316  FOR B3=2 TO C
9318  B4=B2+B[B5+B3]-A*C[B3]
9320  B2=INT(B4/1000)
9322  B[B5+B3]=B4-1000*B2
9324  NEXT B3
9326  IF B2+B[B1] >= 0 THEN 9342
9328  A=A-1
9330  B2=0
9332  FOR B3=2 TO C
9334  B4=B2+B[B5+B3]+C[B3]
9336  B2=INT(B4/1000)
9338  B[B5+B3]=B4-1000*B2
9340  NEXT B3
9342  A[B5+2]=A
9344  NEXT B1
9346  A=B+2-C MAX 1
9348  IF A=1 THEN 9354
9350  A=(A-(A[A]=0)-(A[A]+A[A-1]=0))*SGN(B[1]*C[1])
9352  A[1]=A+2*(A=-1)
9354  RETURN 
9356  REM--SIMPLE CASE--C IS ONLY 1 WORD.
9358  C1=C[2]
9360  B2=0
9362  FOR B1=B TO 2 STEP -1
9364  B3=1000*B2+B[B1]
9366  A[B1]=INT(B3/C1)
9368  B2=B3-A[B1]*C1
9370  NEXT B1
9372  GOTO 9346
9374  REM
9376  IF Z9<1 OR Z9>4 THEN 9396
9378  GOSUB 9018
9380  MAT B=A
9382  A$=Z$
9384  GOSUB 9018
9386  MAT C=A
9388  GOSUB Z9 OF 9014,9016
9390  GOSUB 9022
9392  GOSUB 9402
9394  RETURN 
9396  PRINT "**BAD DATA**"
9398  D1=D1+1
9400  RETURN 
9402  Z8=0
9404  FOR I=1 TO LEN(Z$)
9406  FOR J=1 TO 10
9408  IF Z$[I,I]=D$[J,J] THEN 9414
9410  NEXT J
9412  GOTO 9416
9414  Z8=Z8+1
9416  NEXT I
9418  RETURN 
9999  END 
