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