1  COM F$[7],R1,R2,E,T,S,O,P,G$[7],N7,A[10],B[10]
3  REM
4  REM       FINDIT:  FILE INFORMATION DIALOGUE TECHNIQUE
5  REM       IRV1:  PART 8 OF 8
6  REM 36250C, 6/74
7  REM
10  PRINT "PLEASE GET AND RUN YOUR ORIGINAL PROGRAM."
20  STOP 
30  FILES *,*,*
40  DIM A$[72],B$[72],C$[72],D$[72],E$[1],H$[64],I$[64],J$[1],X$[72],Y$[72]
50  X$="AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
60  Y$="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
70  DIM I[550],P[550],L[550],R[550],K[550]
80  N5=550
90  ASSIGN "$CHARS",3,A
100  IF A=3 THEN 130
110  READ #3;H$,I$
120  GOTO 150
130  H$=" !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ["'92
140  I$="abcdefghijklmnopqrstuvwxyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz"
150  ASSIGN F$,1,A
160  GOTO P OF 190,170
170  ASSIGN G$,2,A
180  IF  END #2 THEN 1320
190  S1=1
200  S2=0
210  S3=2*T+S-2
215  N8=0
220  S4=TIM(0)
225  N8=0
230  MAT I=ZER
240  MAT P=ZER
250  MAT L=ZER
260  MAT R=ZER
270  MAT K=ZER
280  N=0
290  FOR R=R1 TO R2
300  IF S4=TIM(0) THEN 330
310  S4=TIM(0)
320  PRINT '7'7;
330  A1=A2=0
340  READ #1,R
350  GOSUB 6000
360  A2=1
370  IF A1 THEN 1000
380  IF S1 THEN 540
390  GOTO S3 OF 400,430,460,500
400  IF X1<X THEN 540
410  IF X1=X AND X2<R THEN 540
420  GOTO 1000
430  IF X1>X THEN 540
440  IF X1=X AND X2<R THEN 540
450  GOTO 1000
460  IF D$<A$ THEN 540
470  IF D$>A$ THEN 1000
480  IF X2<R THEN 540
490  GOTO 1000
500  IF D$>A$ THEN 540
510  IF D$<A$ THEN 1000
520  IF X2<R THEN 540
530  GOTO 1000
540  IF N=N5 THEN 580
550  N6=N=N+1
560  S2=S2+1
570  GOTO 590
580  GOSUB 4000
590  GOTO T OF 600,620
600  I[N6]=M=X
610  GOTO 650
620  GOSUB 7000
630  I[N6]=M
640  B$=A$
650  IF N#1 THEN 680
660  K[1]=R
670  GOTO 1000
680  IF N6=1 THEN 710
690  J=1
700  GOTO 720
710  J=2
720  IF P[J]=0 THEN 750
730  J=P[J]
740  GOTO 720
750  GOTO T OF 760,790
760  IF I[J]<M THEN 940
770  IF I[J]>M THEN 870
780  GOTO S OF 940,870
790  IF M=0 OR I[J]=0 THEN 820
800  IF I[J]<M THEN 940
810  IF I[J]>M THEN 870
820  READ #1,K[J]
830  GOSUB 6000
840  IF A$<B$ THEN 940
850  IF A$>B$ THEN 870
860  GOTO S OF 940,870
870  IF L[J]=0 THEN 900
880  J=L[J]
890  GOTO T OF 760,790
900  L[J]=N6
910  P[N6]=J
920  K[N6]=R
930  GOTO 1000
940  IF R[J]=0 THEN 970
950  J=R[J]
960  GOTO T OF 760,790
970  R[J]=N6
980  P[N6]=J
990  K[N6]=R
1000  NEXT R
1010  IF N#N5 THEN 1040
1020  GOSUB 4000
1030  S2=S2-1
1040  GOTO P OF 1050,1140
1050  IF  NOT S1 THEN 1140
1060  PRINT LIN(2);"FILENAME: "F$"          RECORDS"R1"THROUGH"R2
1070  PRINT LIN(2)
1080  GOTO O OF 1090,1110,1130,1140,1140
1090  PRINT "ITEM"LIN(2)
1100  GOTO 1140
1110  PRINT "RECORD"LIN(2)
1120  GOTO 1140
1130  PRINT "RECORD   ITEM"LIN(2)
1140  IF K[1]=0 THEN 1170
1150  K=1
1160  GOTO 1180
1170  K=2
1180  IF P[K]=0 THEN 1210
1190  K=P[K]
1200  GOTO 1180
1210  GOTO S OF 1220,1380
1220  IF L[K]=0 THEN 1250
1230  K=L[K]
1240  GOTO 1220
1250  GOSUB 8000
1260  K2=K
1270  IF R[K]=0 THEN 1300
1280  K=R[K]
1290  GOTO 1220
1300  IF P[K]#0 THEN 1340
1310  GOTO 1470
1320  PRINT "NO ROOM LEFT IN FILE "G$".  OUTPUT NOT COMPLETED."
1330  STOP 
1340  J=K
1350  K=P[K]
1360  IF R[K]=J THEN 1300
1370  GOTO 1250
1380  IF R[K]=0 THEN 1410
1390  K=R[K]
1400  GOTO 1380
1410  GOSUB 8000
1420  K2=K
1430  IF L[K]=0 THEN 1460
1440  K=L[K]
1450  GOTO 1380
1460  IF P[K]#0 THEN 1620
1470  IF S2=R2-R1+1 THEN 1580
1480  S1=0
1490  GOTO T OF 1500,1530
1500  X1=I[K2]
1510  X2=K[K2]
1520  GOTO 230
1530  READ #1,K[K2]
1540  GOSUB 6000
1550  D$=A$
1560  X2=K[K2]
1570  GOTO 230
1580  IF P=1 OR O=4 THEN 1600
1590  PRINT #2; END 
1600  PRINT LIN(3)"SORT COMPLETED."
1610  STOP 
1620  J=K
1630  K=P[K]
1640  IF L[K]=J THEN 1460
1650  GOTO 1410
4000  N6=1
4010  IF P[N6]=0 THEN 4040
4020  N6=P[N6]
4030  GOTO 4010
4040  GOTO S OF 4050,4140
4050  IF R[N6]=0 THEN 4080
4060  N6=R[N6]
4070  GOTO 4050
4080  IF P[N6]=0 THEN 4100
4090  R[P[N6]]=L[N6]
4100  IF L[N6]=0 THEN 4120
4110  P[L[N6]]=P[N6]
4120  GOTO 4210
4130  RETURN 
4140  IF L[N6]=0 THEN 4170
4150  N6=L[N6]
4160  GOTO 4140
4170  IF P[N6]=0 THEN 4190
4180  L[P[N6]]=R[N6]
4190  IF R[N6]=0 THEN 4210
4200  P[R[N6]]=P[N6]
4210  P[N6]=L[N6]=R[N6]=I[N6]=K[N6]=0
4220  RETURN 
6000  IF TYP(-1)=3 THEN 6190
6010  FOR E1=1 TO E
6020  GOTO TYP(-1) OF 6030,6060,6090,6090
6030  READ #1;X
6040  T1=1
6050  GOTO 6110
6060  READ #1;A$
6070  T1=2
6080  GOTO 6110
6090  PRINT "THERE ARE ONLY"E1-1"ELEMENTS IN RECORD"R"."
6100  STOP 
6110  NEXT E1
6120  IF T=T1 THEN 6230
6130  PRINT "ELEMENT NUMBER"E"OF RECORD"R"IS NOT A ";
6140  GOTO T OF 6150,6170
6150  PRINT "NUMBER."
6160  STOP 
6170  PRINT "STRING."
6180  STOP 
6190  IF A2 THEN 6230
6200  A1=1
6210  IF S1=0 THEN 6230
6220  S2=S2+1
6230  RETURN 
7000  E$=A$[1,1]
7010  GOSUB 7130
7020  IF M1#0 THEN 7050
7030  M=0
7040  RETURN 
7050  M=M1
7060  E$=A$[2,2]
7070  GOSUB 7130
7080  IF M1#0 THEN 7110
7090  M=0
7100  RETURN 
7110  M=M*1000+M1
7120  RETURN 
7130  N1=1
7140  N2=129
7150  FOR M2=1 TO 8
7160  M1=INT((N1+N2)/2)
7170  IF M1>64 THEN 7200
7180  J$=H$[M1,M1]
7190  GOTO 7210
7200  J$=I$[M1-64,M1-64]
7210  IF E$<J$ THEN 7240
7220  IF E$>J$ THEN 7260
7230  RETURN 
7240  N2=M1
7250  GOTO 7270
7260  N1=M1
7270  NEXT M2
7280  M1=0
7290  RETURN 
8000  GOTO P*10+O*2+T-12 OF 8020,8060,8100,8100,8120,8160,8200,8200,8340,8340
8010  GOTO P*10+O*2+T-22 OF 8500,8540,8580,8580,8600,8640,8680,8680,8340,8340
8020  READ #1,K[K]
8030  GOSUB 6000
8040  PRINT X
8050  RETURN 
8060  READ #1,K[K]
8070  GOSUB 6000
8080  PRINT A$
8090  RETURN 
8100  PRINT K[K]
8110  RETURN 
8120  READ #1,K[K]
8130  GOSUB 6000
8140  PRINT K[K];X
8150  RETURN 
8160  READ #1,K[K]
8170  GOSUB 6000
8180  PRINT K[K];A$
8190  RETURN 
8200  PRINT 
8210  PRINT "RECORD"K[K]
8220  READ #1,K[K]
8230  GOTO TYP(-1) OF 8240,8270,8300,8320
8240  READ #1;X
8250  PRINT X
8260  GOTO 8230
8270  READ #1;A$
8280  PRINT A$
8290  GOTO 8230
8300  PRINT "E O F"
8310  RETURN 
8320  PRINT "E O R"
8330  RETURN 
8340  FOR I=1 TO N7
8350  READ #1,K[K]
8360  E=A[I]
8370  GOSUB 6000
8380  C$="#,"
8390  IF I#1 OR B[1]=1 THEN 8410
8400  C$[LEN(C$)+1]=Y$[1,B[1]-1]
8410  IF I=N7 THEN 8450
8420  C$[LEN(C$)+1]=X$[1,B[I+1]-B[I]-1]
8430  C$[LEN(C$)+1]="X"
8440  GOTO 8460
8450  C$[LEN(C$)+1]=X$[1,LEN(A$)]
8460  PRINT  USING C$;A$
8470  NEXT I
8480  PRINT 
8490  RETURN 
8500  READ #1,K[K]
8510  GOSUB 6000
8520  PRINT #2;X
8530  RETURN 
8540  READ #1,K[K]
8550  GOSUB 6000
8560  PRINT #2;A$
8570  RETURN 
8580  PRINT #2;K[K]
8590  RETURN 
8600  READ #1,K[K]
8610  GOSUB 6000
8620  PRINT #2;K[K],X
8630  RETURN 
8640  READ #1,K[K]
8650  GOSUB 6000
8660  PRINT #2;K[K],A$
8670  RETURN 
8680  READ #1,K[K]
8690  N8=N8+1
8700  PRINT #2,N8
8710  GOTO TYP(-1) OF 8720,8750,8780,8790
8720  READ #1;X
8730  PRINT #2;X
8740  GOTO 8710
8750  READ #1;A$
8760  PRINT #2;A$
8770  GOTO 8710
8780  PRINT #2; END 
8790  RETURN 
9999  END 
