1 ! RETREV -- RETRIEVES FILE WHICH HAS BEEN SORTED; ! KEY FILE IS IDENTIFIED BY TYPE OF SORT. ! (IDC, CYR, ZIP, OR KEY ANYTHING ELSE) 2 ! J. WARDEN WABASH COLLEGE 100 T3=TIME(0%) : PRINT"RETREV VERSION 1" 120 DIM I$(63),O$(63),A$(63),P$(63),A2$(16) 160 INPUT"TYPE OF SORT (I,C,Z, OR O)";F$ 165 IF F$="I" THEN E$=".IDC" : L2%=6% : GO TO 210 170 IF F$="C" THEN E$=".CYR" : L2%=2% : GO TO 210 175 IF F$="Z" THEN E$=".ZIP" : L2%=5% : GO TO 210 180 IF F$="O" THEN E$=".KEY" ELSE GO TO 160 200 INPUT" KEY LENGTH";L2% : IF L2%<1% OR L2%>6% THEN 200 210 L2%=L2%+1% 220 INPUT"FILE TO BE RETRIEVED (DEV:FILE/N)";F$ : R%=INSTR(1%,F$,"/") : IF R%=0% THEN PRINT"** PLEASE GIVE ## RECORDS/BLOCK **" : GO TO 220 240 N%=VAL(RIGHT(F$,R%+1%)) : F$=LEFT(F$,R%-1%) : R%=INSTR(1%,F$,".") : IF R% THEN F$=LEFT(F$,R%-1%) 260 P1$=F$+E$ 280 INPUT"OUTPUT FILE (DEV:FILE)";F2$ 300 N1%=510%/N% : N6%=N%-1% : N3%=N1%*N% : N2%=N1%-8% 320 F3%=INSTR(1%,F2$,"DT0:") : IF F3%=0% THEN F3%=INSTR(1%,F2$,"DT1:") 340 OPEN F$ FOR INPUT AS FILE 5% 350 FIELD #5%, N1%*R% AS Z$, N1% AS I$(R%) FOR R%=0% TO N6% 360 OPEN P1$ FOR INPUT AS FILE 1% 380 FIELD #1%,8%*A% AS Z$,8% AS A$(A%) FOR A%=0% TO 62% 400 OPEN F2$ FOR OUTPUT AS FILE 6% 420 FIELD #6,N1%*S% AS Z$,N1% AS O$(S%) FOR S%=0% TO N6% 440 S%=0% 480 IF A%<62% THEN A%=A%+1% ELSE A%=0% : GET #1% 490 IF ASCII(A$(A%))=92% THEN 640 500 I2%=CVT$%(MID(A$(A%),L2%,2%)) 520 R1%=(I2%+N6%)/N% 540 R%=I2%-1%-(R1%-1%)*N% 560 GET #5%,RECORD R1% 580 LSET O$(S%)=I$(R%) 600 GOSUB 1200 620 GO TO 480 640 GOSUB 1340 660 CLOSE 1%,5%,6% 680 PRINT M%*N%+S%;" RECORDS WRITTEN" 700 PRINT USING "TIME ####.# MINUTES",(TIME(0%)-T3)/60 : GO TO 1460 720 ! OPEN NEW FILE SUBROUTINE 740 GOSUB 1340 760 CLOSE 6% 780 PRINT M%*N%+S%;" RECORDS WRITTEN" 800 ON ERROR GO TO 960 820 INPUT"NEW OUTPUT FILE";F2$ 840 OPEN F2$ FOR OUTPUT AS FILE 6% 860 FIELD #6%,N1%*S% AS Z$, N1% AS O$(S%) FOR S%=0% TO N6% 880 S%,M%=0% 900 F3%=INSTR(1%,F2$,"DT0:") 920 IF F3%=0% THEN F3%=INSTR(1%,F2$,"DT1:") 940 GO TO 1020 960 IF ERR=2% THEN PRINT"ILLEGAL FILE NAME - RETYPE!" : RESUME 820 980 IF ERR=14% THEN PRINT"DEVICE OK ???" : RESUME 820 1000 ON ERROR GO TO 0 1020 RETURN 1180 ! 'PUT' SUBROUTINE 1200 IF S% < N6% THEN S%=S%+1% : RETURN 1220 S%=0% : PUT #6%, COUNT N3% 1240 M%=M%+1% 1260 IF F3%=0% THEN 1320 1280 IF M%<530% THEN 1320 ! TAPE FULL? 1300 GOSUB 720 ! YES -- OPEN NEW ONE 1320 RETURN 1340 ! CLOSE SUBROUTINE 1360 FOR R%=S% TO N6% 1380 LSET O$(R%)="\\\\\\"+SPACE$(N2%)+CHR$(13%)+CHR$(10%) 1400 NEXT R% 1420 PUT #6,COUNT N3% 1440 RETURN 1460 END