10  COM J$[7],D$[7],E$[7],S2,U1
12  REM
13  REM       FINDIT:  FILE INFORMATION DIALOGUE TECHNIQUE
14  REM       CREATE:  PART 4 OF 8
15  REM 36250C, 6/74
16  REM
20  DIM A$[72],B$[72],C$[52],F$[6],G$[6],H$[6],I$[72]
30  DIM K$[10],R[16]
40  MAT R=ZER
50  C$="etoanirshdlcwumfygpbvkxqjzETOANIRSHDLCWUMFYGPBVKXQJZ"
60  B6=C=K=L=R=R1=S1=0
65  L1=2
70  B1=1
80  FILES *,*,*,*
90  PRINT "FILE NAME? ";
95  L1=7
100  A1=0
110  GOSUB 1860
120  A=C=R1=1
130  ASSIGN A$,1,X
140  GOSUB 2890
150  IF A1=2 THEN 90
160  ASSIGN A$,3,X
170  J$=A$
180  K=(TYP(1)#3)
190  DEF FNA()=1+INT((+1)/2)
200  IF K THEN 410
220  IF  END #3 THEN 260
230  R1=10
235  R2=32768.
240  R3=INT((R1+R2)/2)
245  READ #3,R3
250  R1=R3
255  GOTO 262
260  R2=R3
262  IF R2-R1>1 THEN 240
264  IF R1>13 THEN 270
266  PRINT "**FILE '"A$"' IS TOO SMALL. REFER TO MANUAL FOR SIZE FORMULA."
268  STOP 
270  R[4]=R1-2
280  PRINT "NAME OF AUXILIARY FILE? ";
285  L1=8
290  GOSUB 1860
295  L1=7
300  GOTO A1 OF 90,280,280
310  GOSUB 2880
320  IF A1=2 THEN 280
330  D$=A$
340  PRINT "NAME OF GATE FILE? ";
350  GOSUB 1860
360  GOTO A1 OF 280,340,340
370  GOSUB 2880
380  IF A1=2 THEN 340
390  E$=A$
400  IF  NOT K THEN 490
410  READ #1,2;D$,E$,F$,G$,H$
412  GOSUB 5000
414  GOSUB 5200
420  PRINT "PASSWORD? ";
430  GOSUB 1860
440  IF A$=H$ THEN 720
450  IF A$=F$ THEN 470
460  IF A$#G$ THEN 410
470  B6=1
480  GOTO 3580
490  GOSUB 2640
500  PRINT "WHAT IS THE "A$"SEARCH PASSWORD? ";
510  GOSUB 1860
520  GOTO A1+1 OF 540,530,490,540
530  GOTO K+1 OF 340,90
540  IF K AND A1=3 THEN 560
550  F$=A$
560  GOSUB 2640
570  PRINT "WHAT IS THE "A$"UPDATE PASSWORD? ";
580  GOSUB 1860
590  GOTO A1 OF 490,560
600  IF K AND A1=3 THEN 620
610  G$=A$
620  GOSUB 2640
630  PRINT "WHAT IS THE "A$"CREATE PASSWORD? ";
640  L=0
650  GOSUB 1860
660  GOTO A1 OF 490,620
670  IF K AND A1=3 THEN 700
680  H$=A$
690  IF  NOT K THEN 1564
700  PRINT 
710  IF B6 THEN 3580
720  PRINT "OPERATION? ";
730  B4=1
740  GOSUB 1860
750  PRINT 
760  GOTO A1+1 OF 790,90,720,720
770  GOSUB 2360
780  GOTO 710
790  IF A$="1" THEN 490
800  IF A$[1,2]="PA" THEN 490
870  IF A$="5" THEN 890
880  IF A$[1,2]#"FI" THEN 990
890  PRINT "HOW MANY RECORDS IN THE NEW FILE? ";
900  GOSUB 1860
910  GOTO A1 OF 700,890,890
920  GOSUB 4400
930  IF A1 THEN 890
935  GOSUB 5000
940  MAT  READ #1,1;R
950  R[4]=Y-2
960  MAT  PRINT #1,1;R
965  GOSUB 5200
970  PRINT LIN(-1);"**THE NEW VALUE HAS BEEN ENTERED**";LIN(-1)
980  GOTO 700
990  IF A$="2" THEN 1010
1000  IF A$[1,2]#"RE" THEN 3040
1010  MAT  READ #1,1;R
1020  K1=L=S1=0
1030  B=-1
1040  R1=A=1
1050  R2=4
1060  ASSIGN D$,4,X
1070  ASSIGN J$,1,X
1080  READ #1,3
1100  PRINT 
1110  PRINT "CURRENT NAME? ";
1120  B1=L=0
1130  GOSUB 1860
1140  IF A$[1,1]>"9" THEN 1180
1150  IF A$[1,1]<"0" THEN 1180
1160  PRINT "**YOU MUST USE THE ELEMENT NAME."
1170  GOTO 1110
1180  GOTO A1 OF 700,1110,700
1190  GOSUB 2690
1200  IF A1=2 THEN 1110
1210  IF J <= R[3] THEN 1240
1220  PRINT "**NO ELEMENT WITH THIS NAME."
1230  GOTO 1110
1240  L1=FNA(LEN(A$))
1250  B=J-B-2
1252  GOSUB 5000
1254  ASSIGN E$,4,X
1256  PRINT #4,3
1260  FOR I=1 TO B
1270  READ #R1;A$
1280  PRINT #R2;A$
1290  K1=K1+1
1300  NEXT I
1310  GOSUB 5200
1315  IF S1 THEN 1020
1320  PRINT "NEW NAME? ";
1330  GOSUB 1860
1340  GOTO A1 OF 1020,1320,1020
1342  GOSUB 5250
1344  IF A1 THEN 1320
1350  B1=1
1360  GOSUB 2690
1370  IF A1=2 THEN 1320
1380  IF L+FNA(LEN(A$))-L1 <= 512 THEN 1410
1390  GOSUB 2960
1400  GOTO 1020
1410  READ #1;B$
1420  PRINT #4;A$
1430  K1=K1+1
1440  IF K1=R[3] THEN 1510
1450  FOR I=K1+1 TO R[3]
1460  READ #1;A$
1470  PRINT #4;A$
1480  K1=K1+1
1490  IF K1=R[3] THEN 1510
1500  NEXT I
1510  B=R[3]
1520  R1=4
1530  R2=S1=1
1535  GOSUB 5000
1540  READ #4,3
1550  READ #1,2
1560  PRINT #1,3
1562  GOTO 1260
1564  PRINT "WHAT IS THE NUMBER (3-6) OF THE ORDERED ELEMENT? ";
1568  GOSUB 1860
1570  GOTO A1+1 OF 1572,1580,1564,1564
1572  GOSUB 4400
1574  IF Y<3 OR Y>6 THEN 1564
1576  IF A1=2 THEN 1564
1578  R[16]=Y
1580  PRINT "TYPE THE ELEMENT NAMES IN THEIR CORRECT SEQUENCE:";LIN(1)
1590  PRINT #1,3;"ID","FLAG"
1600  L=5
1610  PRINT " 1     ID"
1620  PRINT " 2     FLAG"
1630  FOR I=3 TO 99
1640  PRINT I;"?";
1650  GOSUB 1860
1660  GOTO A1 OF 1580,1640,1735
1670  GOSUB 2690
1680  IF A1=2 THEN 1640
1682  GOSUB 5250
1684  IF A1 THEN 1640
1690  I$=A$
1700  GOSUB 2940
1710  IF A1 THEN 1580
1720  PRINT #1;A$
1730  NEXT I
1735  IF I<3 THEN 1540
1740  R[3]=I-1
1770  IF I<R[16] THEN 1564
1780  R[1]=10
1790  R[2]=10
1800  MAT  PRINT #1,1;R
1810  FOR I=7 TO 9
1820  PRINT #1,I;0
1830  NEXT I
1835  GOSUB 5000
1840  PRINT #1,2;D$,E$,F$,G$,H$
1845  PRINT #1,5; END 
1846  READ #1,6
1848  GOSUB 5200
1850  GOTO K+1 OF 9999,9994
1860  A1=0
1870  ENTER 255,Y,A$
1880  IF Y#-256 THEN 1890
1885  GOTO B6+1 OF 1870,3660
1890  PRINT 
1900  IF A$="" THEN 2600
1910  FOR Z=1 TO LEN(A$)
1920  IF A$[Z,Z]#" " THEN 2000
1930  IF Z#1 THEN 1960
1940  A$=A$[2]
1950  GOTO 1910
1960  IF A$[Z+1,Z+1]#" " THEN 2000
1970  IF Z>LEN(A$) THEN 2000
1980  A$[Z]=A$[Z+1]
1990  GOTO 1920
2000  IF A$[Z,Z] <= "^" THEN 2060
2010  FOR Z1=1 TO 26
2020  IF A$[Z,Z]#C$[Z1,Z1] THEN 2050
2030  A$[Z,Z]=C$[Z1+26,Z1+26]
2040  GOTO 2060
2050  NEXT Z1
2060  NEXT Z
2070  IF A$[LEN(A$),LEN(A$)]#" " THEN 2090
2080  A$=A$[1,LEN(A$)-1]
2090  IF A$[1,2]="//" THEN 2150
2100  IF R1 OR L THEN 2140
2110  IF LEN(A$)<L1 THEN 2140
2120  PRINT "**NOT MORE THAN 6 CHARACTERS ALLOWED."
2130  GOTO 2400
2140  RETURN 
2150  IF A$[1,4]#"//ER" THEN 2180
2160  A1=1
2170  RETURN 
2180  IF A$[1,4]#"//ST" THEN 2230
2190  A1=4
2200  IF B6 THEN 3660
2210  IF  NOT K THEN 9990
2220  GOTO 1835
2230  IF A$[1,4]#"//EL" THEN 2330
2240  IF  NOT K THEN 2530
2250  PRINT 
2260  READ #3,1;Z,Z,R3
2270  READ #3,3
2280  FOR J1=1 TO R3
2290  READ #3;A$
2300  PRINT J1;A$
2310  NEXT J1
2320  GOTO 2390
2330  IF A$[1,4]#"//HE" THEN 2420
2340  IF B6 THEN 2550
2350  GOTO B4+1 OF 2620,2360,2390
2360  PRINT "**OPERATIONS: 1-PASSWORD CHANGE; 2-RENAME ELEMENTS; 3-ADD ELEMENTS;"
2370  PRINT "              4-DELETE 'DO' FORMATS; 5-FILE LENGTH."
2380  GOTO 2400
2390  PRINT 
2400  A1=2
2410  RETURN 
2420  IF A$[1,4]#"//DU" THEN 2520
2430  GOSUB 4590
2440  GOTO 2400
2520  IF B6 THEN 2550
2525  IF K THEN 2570
2530  A$="//STOP AND //ERROR."
2540  GOTO 2580
2550  A$="//STOP, //ELEMENTS, //ERROR AND //DUMP."
2560  GOTO 2580
2570  A$="//STOP, //ELEMENTS, AND //ERROR."
2580  PRINT "**LEGAL COMMANDS ARE "A$
2590  GOTO 2390
2600  A1=3
2610  RETURN 
2620  GOSUB 4970
2630  GOTO 2210
2640  IF K THEN 2670
2650  A$=""
2660  GOTO 2680
2670  A$="NEW "
2680  RETURN 
2690  K0=1+2*K
2700  IF K THEN 2730
2710  B2=I-1
2720  GOTO 2750
2730  B2=R[3]
2740  ASSIGN J$,3,X
2750  READ #K0,3
2760  FOR J=1 TO B2
2770  READ #K0;I$
2780  IF ( NOT B1 AND R1) OR  NOT K THEN 2810
2790  GOSUB 2940
2800  IF A1 THEN 2870
2810  IF A$#I$ THEN 2860
2820  IF  NOT B1 AND J>2 THEN 2870
2830  PRINT "**THE NAME '"A$"' IS ALREADY ASSIGNED TO ELEMENT #";J
2840  A1=2
2850  GOTO 2870
2860  NEXT J
2870  RETURN 
2880  ASSIGN A$,2,X
2890  IF X#3 THEN 2920
2900  PRINT "**NO SUCH FILE."
2910  A1=2
2920  RETURN 
2930  I$=A$
2940  L=L+FNA(LEN(I$))
2950  IF 512-L >= 0 THEN 3030
2960  PRINT "**THE LAST INPUT OVERFLOWS THE ALLOTTED STORAGE."
2970  IF B4 THEN 3000
2980  PRINT "  BEGIN AGAIN AND ABBREVIATE WHERE POSSIBLE."
2990  IF K THEN 3010
3000  PRINT 
3010  A1=1
3020  L=0
3030  RETURN 
3040  IF A$="3" THEN 3060
3050  IF A$[1,2]#"AD" THEN 3520
3060  MAT  READ #1,1;R
3070  PRINT "INPUT NAMES OF NEW ELEMENTS:"'10
3080  S1=0
3090  R1=1
3100  R2=3
3110  ASSIGN "DO",3,X
3112  IF  NOT X THEN 3120
3114  PRINT "SCRATCH FILE IN USE - TRY AGAIN LATER."
3116  ASSIGN J$,3,X
3118  GOTO 700
3120  PRINT #3,1
3130  FOR I=1 TO R[3]
3140  READ #R1;A$
3150  PRINT #R2;A$
3160  NEXT I
3170  IF S1 THEN 3380
3180  B3=R[3]
3190  FOR I=1 TO 99-B3
3200  PRINT "ELEMENT NO."B3+I"?";
3210  GOSUB 1860
3220  GOTO A1+1 OF 3250,3230,3200,3380
3230  PRINT 
3240  GOTO (I>1)+1 OF 720,3060
3250  L=0
3252  GOSUB 5250
3254  IF A1 THEN 3200
3260  GOSUB 2690
3270  I$=A$
3280  GOSUB 2940
3290  IF A1 THEN 3200
3300  PRINT #3;A$
3310  R[3]=R[3]+1
3320  NEXT I
3330  R2=S1=1
3340  R1=3
3350  READ #3,1
3355  GOSUB 5000
3360  PRINT #1,3
3370  GOTO 3130
3380  IF  NOT R[5] THEN 3500
3385  PRINT 
3390  PRINT "THERE WILL BE A DELAY AS DUMMY VALUES ARE INSERTED."'10
3400  R=R[2]
3410  READ #1,R;F,Z
3420  FOR I=1 TO B3
3430  READ #1;A$
3440  NEXT I
3450  FOR I=1 TO R[3]-B3
3460  PRINT #1;"-"
3470  NEXT I
3480  R=F
3490  IF R THEN 3410
3492  GOSUB 5000
3500  MAT  PRINT #1,1;R
3505  GOSUB 5200
3506  ASSIGN J$,3,X
3510  GOTO 700
3520  IF A$[1,2]="DE" THEN 4920
3530  IF A$="4" THEN 4920
3540  PRINT "**INVALID OPERATION."
3550  GOTO 700
3560  B6=1
3565  PRINT "YOU WILL BE ENTERING 'DO' FORMATS."
3570  ASSIGN J$,1,X
3580  PRINT LIN(-1);"FORMAT NUMBER? ";
3590  B7=L=S1=0
3600  B4=R1=1
3610  R2=2
3620  GOSUB 1860
3630  GOTO A1+1 OF 3670,3640,3580,3640
3640  PRINT 
3650  CHAIN "$SEARCH"
3660  CHAIN "$SEARCH",9999
3670  GOSUB 4400
3680  IF A1=2 THEN 3580
3720  READ #1,5
3730  F$=E$
3740  E$="DO"
3750  GOSUB 5000
3760  IF A1=0 THEN 3770
3762  PRINT "ANOTHER 'DO' FORMAT IN PROGRESS - TRY AGAIN LATER."
3764  GOTO 3650
3770  PRINT #2,2
3780  PRINT #2,1
3870  Z1=0
3880  GOTO TYP(1) OF 3960,3910,3890
3890  PRINT #2;Y
3900  GOTO 4070
3910  READ #1;A$
3920  GOSUB 2930
3930  IF A1=1 THEN 3580
3940  PRINT #2;A$
3950  GOTO 3880
3960  READ #1;A
3970  GOSUB 2930
3980  IF A1=1 THEN 3580
3990  PRINT #2;A
4000  IF A#Y THEN 3880
4010  PRINT "WARNING ONLY - YOU ARE CHANGING A CURRENT FORMAT."
4020  PRINT 
4030  IF TYP(1)#2 THEN 4070
4040  READ #1;A$
4050  GOSUB 2930
4060  GOTO 4030
4070  PRINT "INPUT THE CONDITIONS:"
4080  PRINT "? ";
4090  GOSUB 1860
4100  GOTO A1+1 OF 4140,4120,4080,4140
4110  IF A1#1 THEN 4140
4120  S1=1
4130  GOTO 3770
4140  IF A$="/" THEN 4190
4150  GOSUB 2930
4160  IF A1=1 THEN 3580
4170  PRINT #2;A$
4180  GOTO 4080
4190  GOTO TYP(R1) OF 4200,4270,4330
4200  READ #R1;A
4210  IF S1 THEN 4250
4220  L=L+2
4230  GOSUB 2950
4240  IF A1=1 THEN 3580
4250  PRINT #R2;A
4260  GOTO 4190
4270  READ #R1;A$
4280  IF S1 THEN 4310
4290  GOSUB 2930
4300  IF A1 THEN 3580
4310  PRINT #R2;A$
4320  GOTO 4190
4330  PRINT #R2; END 
4340  IF  NOT S1 THEN 4350
4342  GOSUB 5200
4344  E$=F$
4346  GOTO 3580
4350  R2=S1=1
4360  R1=2
4370  READ #2,1
4380  PRINT #1,5
4390  GOTO 4190
4400  Y=0
4410  K$="0123456789"
4420  FOR I=1 TO LEN(A$)
4430  FOR J=1 TO 10
4440  IF A$[I,I]>"9" THEN 4510
4450  IF A$[I,I]<"0" THEN 4510
4460  IF A$[I,I]#K$[J,J] THEN 4480
4470  Y=10*Y+J-1
4480  NEXT J
4490  NEXT I
4500  RETURN 
4510  PRINT "**USE AN INTEGER."
4520  A1=2
4530  RETURN 
4540  I$=A$
4550  GOSUB 2940
4560  IF A1=1 THEN 4580
4570  PRINT #R2;A$
4580  RETURN 
4590  READ #1,5
4600  PRINT 
4610  PRINT "NOTE: (R)='RETURN'"
4620  GOTO TYP(1)-1 OF 4700,4850
4630  READ #1;A
4640  B7=1
4650  L=5
4660  PRINT 
4670  PRINT  USING "#,DD";A
4680  PRINT " - ";
4690  GOTO 4620
4700  READ #1;A$
4710  IF A$#"" THEN 4760
4720  L=L+5
4730  GOSUB 4870
4740  PRINT ", (R)";
4750  GOTO 4620
4760  IF B7 THEN 4800
4770  L=L+2
4780  GOSUB 4870
4790  PRINT ", ";
4800  L=L+LEN(A$)
4810  GOSUB 4870
4820  PRINT A$;
4830  B7=0
4840  GOTO 4620
4850  PRINT LIN(-1)
4860  RETURN 
4870  IF L<73 THEN 4910
4880  PRINT 
4890  PRINT TAB(7);
4900  L=7+LEN(A$)
4910  RETURN 
4920  PRINT "DELETE ALL 'DO' FORMATS (YES/NO)? ";
4922  GOSUB 1860
4924  GOTO A1 OF 700,4920,4920
4926  IF A$[1,1]="N" THEN 700
4928  IF A$[1,1]#"Y" THEN 4920
4929  GOSUB 5000
4930  PRINT #1,5; END 
4935  PRINT #1,6
4936  GOSUB 5200
4940  PRINT 
4950  PRINT "**ALL 'DO' FORMATS DELETED**"
4960  GOTO 700
4970  PRINT "**REFER TO PROGRAM MANUAL FOR INSTRUCTIONS."
4980  RETURN 
5000  ASSIGN E$,2,Z
5002  IF  NOT B6 THEN 5010
5004  IF Z<3 THEN 5010
5006  PRINT "PLEASE TYPE 'OPEN-DO,2'"
5007  ASSIGN D$,2,X
5008  GOTO 3660
5010  IF Z THEN 5170
5030  READ #2,1
5040  IF TYP(2)#3 THEN 5100
5045  IF B6 THEN 5070
5050  ENTER #S3
5055  PRINT #2,1;S3
5060  READ #2,2
5070  RETURN 
5100  IF B6 THEN 5070
5105  READ #2;X
5110  PRINT "**THE BREAK KEY AT PORT ";
5120  PRINT  USING "#,DDX";X
5130  PRINT "WAS USED DURING A FILE UPDATE. THE FILES"
5140  PRINT "  '"A$"' AND '"E$"' MUST BE RELOADED FROM THE BACKUP MAG TAPE."
5160  STOP 
5170  ASSIGN D$,2,X
5175  IF B6 THEN 5280
5180  ENTER 2,Z,Z
5190  GOTO 5000
5200  PRINT #2,1; END 
5210  PRINT #2,2
5220  ASSIGN D$,2,X
5230  RETURN 
5250  A1=0
5260  IF A$[1,1]<":" THEN 5270
5262  IF A$[1,3]="DO-" THEN 5270
5264  FOR I1=1 TO LEN(A$)
5265  IF A$[I1,I1]="," THEN 5270
5266  NEXT I1
5268  RETURN 
5270  PRINT "**INVALID NAME."
5280  A1=2
5290  RETURN 
9990  PRINT LIN(-1);'7'7"**NOTHING ENTERED**"
9992  GOTO 9999
9994  PRINT LIN(-1);"**ALL CHANGES ENTERED**"
9999  END 
