1 ! FETCH -- GENERAL-PURPOSE FILE SEARCH AND ! REPAIR ROUTINE. DESIGNED PRIMARILY FOR USE ON ! A CRT. 2 ! 21-SEP-73 J. WARDEN WABASH COLLEGE 50 DIM M%(30),A$(85),B$(50) 60 CHANGE SYS(CHR$(6%)+CHR$(9%)) TO M% : K9%=M%(2%)/2% 65 CHANGE"01001001010001200" TO M% : K9%=M%(K9%+1%)-48% : K9$=CHR$(16%-K9%) 70 C8$=CHR$(140%)+CHR$(29%)+CHR$(31%) : C8$=MID(C8$,K9%,K9%) 75 IF K9%=2% THEN C7$=CHR$(31%) ELSE C7$=SPACE$(12%) 77 IF K9% THEN C7$=FNV$(1%,3%)+C7$+CHR$(13%)+">" ELSE C7$=">" 80 DEF FNV$(X%,Y%) 81 IF K9%=0% THEN FNV$="" : GO TO 88 82 Y%=13%+19%*K9%+3%*Y%-2%*Y%*K9% 84 IF K9%=2% THEN X%=X%+32% ELSE X%=6%*((X%-1%)/10%)+X%-1% : IF X%=9% THEN X%=8% 86 FNV$=K9$+CHR$(Y%)+CHR$(X%) 88 FNEND 95 OPEN "KB:" AS FILE 9% 100 D%=9% 120 PRINT C8$;"QUERY V01A" 130 INPUT"AUX OUTPUT DEVICE";O$ : IF O$="" THEN O$="KB:" 135 OPEN O$ FOR OUTPUT AS FILE 2% 140 IF O$="KB:" THEN 150 142 INPUT"STORE RECORD ##'S FOR LATER REF (Y/N)";Y$ : IF ASCII(Y$)-89% THEN 150 143 G9%=32767% 144 OPEN"FETCH.IDS" AS FILE 4% 145 DIM #4%,G%(1%,500%) : G%(1%,500%)=0. 146 INPUT"ARE YOU CONTINUING AN EDIT (Y/N)";Y$ : IF ASCII(Y$)-89% THEN G%(0%,0%)=0% : GO TO 150 148 G0%=G%(0%,0%) 150 N5%=1% : GOSUB 4000 155 GOSUB 3800 160 ON ERROR GO TO 170 165 GO TO 200 170 IF ERR<>5% THEN ON ERROR GO TO 0 175 PRINT"** CAN'T FIND FILE ";F1$;" **" : PRINT : RESUME 200 200 PRINT"FILE NAME"; : INPUT LINE F1$ 210 F1%=ASCII(RIGHT(F1$,LEN(F1$))) : IF F1%=13% OR F1%=10% THEN F1$=LEFT(F1$,LEN(F1$)-1%) : GO TO 210 215 IF F1$="" THEN 9999 220 OPEN F1$ AS FILE 1% 240 FIELD #1%,N1%*A% AS A$, N1% AS A$(A%) FOR A%=0% TO N6% 260 CHANGE SYS(CHR$(6%)+CHR$(-8%)+CHR$(1%)) TO M% : L%=M%(7%)+SWAP%(M%(8%)) 270 PRINT"FILE CONTAINS ABOUT";N%*L%;" RECORDS" : PRINT 280 IF L%=0% THEN PRINT"FILE ";F1$;" IS EMPTY" : PRINT : CLOSE 1% : GO TO 200 290 SLEEP(2%) 300 E%=0% : PRINT C8$;"ID:"; : INPUT LINE #9%,I$ 310 I1%=ASCII(RIGHT(I$,LEN(I$))) : IF I1%=10% OR I1%=13% THEN I$=LEFT(I$,LEN(I$)-1%) : GO TO 310 312 IF ASCII(RIGHT(I$,LEN(I$)))=27% THEN I$=LEFT(I$,LEN(I$)-1%) : E%=2% : PRINT 315 IF I$="S" OR I$="" THEN CLOSE 1% : PRINT"FILE ";F1$;" IS CLOSED" : CLOSE 2%,4%,9% : GO TO 9999 318 IF I$="?" THEN 1000 320 IF LEN(I$)<>6% THEN PRINT FNV$(5%,11%); CHR$(7%);"** ID MUST BE 6 CHARACTERS - RETYPE! **": SLEEP(2%) : GO TO 300 400 T%=L%*N% : B%=0% : L1%=LOG(T%)/LOG(2)+2% 410 FOR I%=1% TO L1% 420 R%=(T%+B%)/2% : R1%=(R%+N6%)/N% : A%=R%-1%-(R1%-1%)*N% 430 GET #1%, RECORD R1% 440 I2$=LEFT(A$(A%),6%) 450 IF I2$=I$ THEN 500 ELSE IF I2$>I$ THEN 470 455 B%=R% : GO TO 480 470 T%=R% 480 NEXT I% 490 PRINT"ID NOT FOUND" : PRINT : GO TO 300 500 A0$=A$(A%) : GOSUB 510 IF K9%>0% OR E%=0% : GOSUB 3000 502 GO TO 300 510 ! ===== LISTING SUBROUTINE ===== 515 IF D%=2% OR K9%=0% THEN 560 520 FOR I%=1% TO V0% 530 PRINT #D%,V1$(I%);V2$(I%);" ";MID(A0$,V2%(1%,I%),V2%(2%,I%)) 540 NEXT I% : GO TO 680 560 FOR I%=1% TO V0% 570 E1$=MID(A0$,V2%(1%,I%),V2%(2%,I%)) : IF E1$=SPACE$(V2%(2%,I%)) THEN 580 575 PRINT #D%,V2$(I%);" ";E1$ 580 NEXT I% 590 PRINT #D%,"--"; FOR I%=1% TO 15% : PRINT #D% 680 D%=9% 700 IF E% THEN RETURN 710 PRINT FNV$(1%,3%);"#"; : INPUT #9%,E1$ : RETURN 1000 ! GENERAL-PURPOSE SEARCH 1100 PRINT"FIELDS ARE:" : PRINT V2$(I%)+" "; FOR I%=1% TO V2%(1%,0%) 1120 PRINT : INPUT"WHICH FIELD TO SEARCH";V$ : IF V$="" THEN 300 1122 IF V$<>"??" THEN 1130 1124 INPUT"START,END COL";V2%(1%,50%),V2%(2%,50%) 1126 IF V2%(1%,50%)*V2%(2%,50%)<=0% THEN 300 ELSE I%=50% : GO TO 1150 1130 FOR I%=1% TO V2%(1%,0%) : IF V2$(I%)=V$ THEN 1150 1140 NEXT I% : GO TO 1100 1150 PRINT"SEARCH ";V2$(I%);" FIELD FOR"; 1160 INPUT LINE V$ 1170 V%=ASCII(RIGHT(V$,LEN(V$))) : IF V%=10% OR V%=13% THEN V$=LEFT(V$,LEN(V$)-1%) : GO TO 1170 1175 IF LEN(V$)=0% THEN 300 1180 IF LEN(V$)<=V2%(2%,I%) THEN 2000 1190 PRINT"FIELD LENGTH OF ";V2$(I%);" IS";V2%(2%,I%); "CHARACTERS (OR LESS)" : PRINT"PLEASE RE-ENTER" : GO TO 1150 2000 PRINT"HINT (0 ->";N%*L%;")"; : INPUT H% 2005 H%=H%/N%+1% 2010 PRINT"** WAIT PLEASE **" 2020 FOR J%=H% TO L% : GET #1%, RECORD J% 2030 FOR A%=0% TO N6% : IF ASCII(A$(A%))=92% THEN PRINT : PRINT"END OF FILE" : PRINT : GO TO 1100 2040 IF INSTR(1%,MID(A$(A%),V2%(1%,I%),V2%(2%,I%)),V$) THEN PRINT"ID: ";LEFT(A$(A%),6%) : PRINT V2$(I%);": ";MID(A$(A%),V2%(1%,I%),V2%(2%,I%)) : GO TO 2060 2050 GO TO 2100 2060 PRINT : INPUT"MORE INFO (Y/N)";Y$ : IF ASCII(Y$)=89% THEN R%=J%*N%+A%+1% : I$=LEFT(A$(A%),6%) : PRINT C8$;"ID: ";I$ : GO TO 500 2080 INPUT"CONTINUE SEARCH (Y/N)";Y$ : IF ASCII(Y$)=78% THEN 300 2100 NEXT A% 2120 NEXT J% : PRINT"END OF FILE" : PRINT : GO TO 1100 3000 ! ==== EDIT SUBROUTINE ==== 3025 IF E%=0% THEN RETURN 3050 PRINT C7$; : INPUT LINE #9%,E1$ 3100 E1%=ASCII(RIGHT(E1$,LEN(E1$))) : IF E1%=10% OR E1%=13% OR E1%=27% THEN E1$=LEFT(E1$,LEN(E1$)-1%) : GO TO 3100 3150 IF E1$="L" THEN GOSUB 510 : GO TO 3050 3160 IF E1$="EX" OR E1$="OOPS" THEN RETURN 3165 IF E1$="L:" THEN D%=2% : GOSUB 510 : GO TO 3050 3170 IF E1$="OK" THEN E%=0% : GO TO 3300 3180 E2$=LEFT(E1$,2%) : E1$=RIGHT(E1$,3%) 3200 FOR J%=1% TO V2%(1%,0%) 3220 IF E2$=V2$(J%) THEN 3250 3230 NEXT J% 3240 PRINT"* RETYPE *" : GO TO 3050 3250 E1$=LEFT(E1$+SPACE$(V2%(2%,J%)),V2%(2%,J%)) 3260 A0$=LEFT(A0$,V2%(1%,J%)-1%)+E1$+ RIGHT(A0$,V2%(1%,J%)+V2%(2%,J%)) 3265 PRINT V1$(J%);V2$(J%);" ";E1$ IF K9% 3270 GO TO 3050 3300 LSET A$(A%)=A0$ : PUT #1%,RECORD R1% 3320 IF G9% THEN G0%=G0%+1% : G%(0%,0%)=G0% : G%(0%,G0%)=A% : G%(1%,G0%)=R1% 3340 RETURN 3800 ! SET UP CRT POINTERS 3820 DIM V1$(50%) 3840 V0%=V2%(1%,0%) : V1%=V0%-(V0%/2%)*2% 3860 IF V0%<=8% THEN V1$(I%)=FNV$(1%,16%-I%) FOR I%=1% TO V0% : RETURN 3880 V2%=V0%/2% : IF V1% THEN V2%=V2%+1% 3900 V1$(I%)=FNV$(1%,16%-I%) FOR I%=1% TO V2% 3920 V1$(I%)=FNV$(34%,16%-I%+V2%) FOR I%=V2%+1% TO V0% 3940 RETURN 4000 DIM V2$(50),V2%(2,50) 4020 ON ERROR GO TO 4320 4030 INPUT"FILE TYPE";F$ : F$=LEFT(F$,3%) 4035 IF F$="ADM" THEN PRINT"PLEASE USE 'FETCH2'" : GO TO 9999 4040 OPEN V1$+"$ATRIB" FOR INPUT AS FILE 1% 4060 FIELD #1%, 255%*A% AS Z$, 255% AS A$(A%) FOR A%=0% TO 1% 4080 IF A%<1% THEN A%=A%+1% ELSE A%=0% : GET #1% : R%=R%+1% 4100 IF LEFT(A$(A%),3%)="\\\" THEN PRINT"NO SUCH FILE TYPE" : GO TO 9999 4120 IF LEFT(A$(A%),3%)<>F$ THEN 4080 4140 V2%(2%,0%),N%=VAL(MID(A$(A%),4%,2%)) : N9%=VAL(MID(A$(A%),6%,1%))*2% 4160 N1%=510%/N% : N2%=N1%-8% : N3%=N%*N1% : N6%=N%-1% 4170 V2$(50%)="??" 4180 FOR V%=1% TO 50% 4200 V2$(V%)=MID(A$(A%),42%+(V%-1%)*4%,2%) : IF V2$(V%)=" " THEN 4280 4220 V5%=CVT$%(MID(A$(A%),44%+(V%-1%)*4%,2%)) 4240 V2%(1%,V%)=ASCII(CHR$(V5%)) : V2%(2%,V%)=ASCII(CHR$(SWAP%(V5%))) 4260 NEXT V% 4280 V2%(1%,0%)=V%-1% : IF N5% THEN 4300 ELSE PRINT"CODES: "; : PRINT V2$(I%)+" "; FOR I%=1% TO V%-1% : PRINT 4300 CLOSE 1% : ON ERROR GO TO 0 : RETURN 4320 IF ERR<>5% AND ERR<>21% THEN 4380 ELSE RESUME 4340 4340 READ V1$ : GO TO 4040 4360 DATA DK2:,DK1:,DK0:,DK3: 4380 PRINT"THE FILE '$ATRIB' HAS BEEN DELETED;" : PRINT"IT MUST BE REPLACED TO PROCEED." 9999 END