1  COM F$[7],R1,R2,E,T,S,O,P,G$[7]
2  REM      FINDIT:  FILE INFORMATION DIALOGUE TECHNIQUE
3  REM      FIND1:  PART 7 OF 8
4  REM 36250C, 6/74
5  CHAIN "$FINDOR"
10  FILES *,*
20  DIM A$[72],B$[72],C$[72],D$[72],E$[1],H$[64],I$[64],J$[1]
50  DIM I[700],P[700],L[700],R[700],K[700]
60  N5=700
110  H$=" !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ["'92
120  I$="abcdefghijklmnopqrstuvwxyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz"
145  ASSIGN F$,1,A
150  ASSIGN G$,2,A
160  IF  END #2 THEN 1280
170  S1=1
180  S2=0
185  S4=TIM(0)
190  S3=2*T+S-2
195  N8=0
200  MAT I=ZER
210  MAT P=ZER
220  MAT L=ZER
230  MAT R=ZER
240  MAT K=ZER
250  N=0
260  FOR R=R1 TO R2
262  A1=A2=0
264  IF TIM(0)=S4 THEN 270
266  S4=TIM(0)
268  PRINT '7'7;
270  READ #1,R
280  GOSUB 6000
282  A2=1
285  IF A1 THEN 910
290  IF S1 THEN 450
300  GOTO S3 OF 310,340,370,410
310  IF X1<X THEN 450
320  IF X1=X AND X2<R THEN 450
330  GOTO 910
340  IF X1>X THEN 450
350  IF X1=X AND X2<R THEN 450
360  GOTO 910
370  IF D$<A$ THEN 450
380  IF D$>A$ THEN 910
390  IF X2<R THEN 450
400  GOTO 910
410  IF D$>A$ THEN 450
420  IF D$<A$ THEN 910
430  IF X2<R THEN 450
440  GOTO 910
450  IF N=N5 THEN 490
460  N6=N=N+1
470  S2=S2+1
480  GOTO 500
490  GOSUB 4000
500  GOTO T OF 510,530
510  I[N6]=M=X
520  GOTO 560
530  GOSUB 7000
540  I[N6]=M
550  B$=A$
560  IF N#1 THEN 590
570  K[1]=R
580  GOTO 910
590  IF N6=1 THEN 620
600  J=1
610  GOTO 630
620  J=2
630  IF P[J]=0 THEN 660
640  J=P[J]
650  GOTO 630
660  GOTO T OF 670,700
670  IF I[J]<M THEN 850
680  IF I[J]>M THEN 780
690  GOTO S OF 850,780
700  IF M=0 OR I[J]=0 THEN 730
710  IF I[J]<M THEN 850
720  IF I[J]>M THEN 780
730  READ #1,K[J]
740  GOSUB 6000
745  IF A1 THEN 910
750  IF A$<B$ THEN 850
760  IF A$>B$ THEN 780
770  GOTO S OF 850,780
780  IF L[J]=0 THEN 810
790  J=L[J]
800  GOTO T OF 670,700
810  L[J]=N6
820  P[N6]=J
830  K[N6]=R
840  GOTO 910
850  IF R[J]=0 THEN 880
860  J=R[J]
870  GOTO T OF 670,700
880  R[J]=N6
890  P[N6]=J
900  K[N6]=R
910  NEXT R
920  IF N#N5 THEN 1000
930  GOSUB 4000
940  S2=S2-1
1000  REM
1100  IF K[1]=0 THEN 1130
1110  K=1
1120  GOTO 1140
1130  K=2
1140  IF P[K]=0 THEN 1170
1150  K=P[K]
1160  GOTO 1140
1170  REM
1180  IF L[K]=0 THEN 1210
1190  K=L[K]
1200  GOTO 1180
1210  GOSUB 8000
1220  K2=K
1230  IF R[K]=0 THEN 1260
1240  K=R[K]
1250  GOTO 1180
1260  IF P[K]#0 THEN 1300
1270  GOTO 1430
1280  PRINT "NO ROOM LEFT IN FILE "G$".  OUTPUT NOT COMPLETED."
1290  STOP 
1300  J=K
1310  K=P[K]
1320  IF R[K]=J THEN 1260
1330  GOTO 1210
1430  IF S2=R2-R1+1 THEN 1540
1440  S1=0
1450  GOTO T OF 1460,1490
1460  X1=I[K2]
1470  X2=K[K2]
1480  GOTO 200
1490  READ #1,K[K2]
1500  GOSUB 6000
1510  D$=A$
1520  X2=K[K2]
1530  GOTO 200
1540  IF P=1 OR O=4 THEN 1560
1550  PRINT #2; END 
1560  PRINT LIN(2),"SORT COMPLETED."
1570  CHAIN "$FINDOR",9999
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)>2 THEN 6180
6005  IF O=4 THEN 6030
6010  READ #1;Z,Z
6020  IF TYP(1)=1 THEN 6180
6030  FOR E1=1 TO E
6050  READ #1;A$
6100  NEXT E1
6101  IF T=2 THEN 6165
6102  D=X=0
6104  D1=1
6105  IF A$="-" THEN 6160
6106  IF A$[1,1]#"$" THEN 6110
6108  A$=A$[2]
6110  FOR I=1 TO LEN(A$)
6112  FOR I1=11 TO 25
6115  IF A$[I,I]#H$[I1,I1] THEN 6155
6120  GOTO I1-10 OF 6170,6170,6136,6145,6170
6130  IF D THEN 6140
6132  X=10*X+I1-16
6135  GOTO 6170
6136  D=-1
6138  GOTO 6170
6140  X=X+(I1-16)/10^D
6145  D=D+1
6150  GOTO 6170
6155  NEXT I1
6160  X=-1.E+37
6165  RETURN 
6170  NEXT I
6175  X=D1*X
6178  RETURN 
6180  IF A2 THEN 6190
6182  A1=1
6184  IF S1=0 THEN 6190
6186  S2=S2+1
6190  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  IF O=4 THEN 8030
8010  PRINT #2;K[K]
8020  RETURN 
8030  READ #1,K[K]
8040  N8=N8+1
8050  PRINT #2,N8
8060  IF TYP(-1)#2 THEN 8100
8070  READ #1;A$
8080  PRINT #2;A$
8090  GOTO 8060
8100  RETURN 
9999  END 
