0 REM Extracted from Jesse Bob Overholt's RAM File Utility (RFU) program 1 CLEAR256,62299:LOADM"SUBLIB":POKE62959,MAXFILES:IFMAXFILES<2THENMAXFILES=2 2 CLEARFRE(0)/2:DEFINTA-O:DEFSTRP-Z 3 DIMU(21),F(21),V(255),K(5):Z=CHR$(27):SCREEN,0 4 W="Sort"+SPACE$(26)+"New Menu " 5 PRINTZ"U";:CLS:PRINT@280,Z"T"W 6 PRINT@91,"SORT File Utility" 7 M=0:ONKEYGOSUB11,,,,,,9,10:KEYON 8 IFMTHEN5ELSE8 9 PRINTZ"U";:CLS:CLEAR256,MAXRAM:MAXFILES=PEEK(62959):NEW 10 CLEAR256,MAXRAM:MAXFILES=PEEK(62959):MENU 11 KEYOFF:P="Select file to Sort." 13 GOSUB36:IFY=""THENM=-1:RETURN 14 IFRIGHT$(Y,3)<>".DO"THENBEEP:GOTO13 15 IF(FRE("")-400)>ETHEN18 16 CLS:PRINT"Not enough memory to sort "Y:GOSUB58 17 M=-1:RETURN 18 CLS:PRINT"Sorting file "Y:INPUT"Sort on which field";D:IFD<1ORD>100THEN18 19 PRINT@80,"";:LINEINPUT"Delimiter? ";S:IFLEN(S)<>1THEN19 20 OPENYFORINPUTAS1:PRINT@280,"Phase 1 - Read keys."; 21 FORJ=1TO255:R=CHR$(J):LINEINPUT#1,X:I=0:F=0 22 FORG=0TOD-1 23 I=F+1:F=INSTR(I,X,S):IFF=0THENF=LEN(X)+1:G=D 24 NEXT 25 V(J)=MID$(X,I,F-I)+R 26 IFEOF(1)THEN28 27 NEXT:PRINT@160,"Too many records!":PRINT"The first 255 will be sorted.";:J=255 28 CLOSE#1:PRINT@280,"Phase 2 - Sort keys."; 29 K(1)=J:K(2)=VARPTR(V(1)):CALLHIMEM+1,0,VARPTR(K(0)) 30 PRINT@280,"Phase 3 - Rewrite file.";:R=STRING$(J,0) 31 FORI=1TOJ:L=ASC(RIGHT$(V(I),1)):MID$(R,L,1)=CHR$(I):V(I)="":NEXT 32 OPENYFORINPUTAS1:FORI=1TOJ:L=ASC(MID$(R,I,1)):LINEINPUT#1,V(L):NEXT 33 CLOSE#1:KILLY:OPENYFOROUTPUTAS1 34 FORI=1TOJ:PRINT#1,V(I):V(I)="":NEXT 35 CLOSE:M=-1:RETURN 36 PRINTZ"U";:CLS:PRINT@280,Z"T";:PRINTP;CHR$(12); 38 K(1)=-1705:C=0 39 FORJ=0TO1:J=0:GOSUB63:IFNOTK(0)THENJ=1:GOTO41 40 U(C)=Y:F(C)=K(1):PRINTY" ";:C=C+1:IF(CMOD3)=0THENPRINT 41 NEXT 42 U(C)="->Quit<-":PRINTU(C):C=C+1 43 L=0:H=0:Q="":FORI=28TO31:Q=Q+CHR$(I):NEXT 44 PRINT@L*40+H*12,Z"p";:PRINTU(L*3+H);Z"q"; 45 X=INKEY$:IFX=""THEN45ELSEIFX=CHR$(13)THEN56 46 I=INSTR(Q,X):IFI=0THEN45ELSEG=L*3+H 47 ONIGOTO48,50,52,54 48 G=G+1:IFG>=CTHENG=0 49 GOTO55 50 G=G-1:IFG<0THENG=C-1 51 GOTO55 52 IFG>2THEN=G-3:ELSE45 53 GOTO55 54 IFG+3 to ";:PRINT"continue."; 60 IFINKEY$<>CHR$(13)THEN61 62 RETURN 63 Y="":L%=PEEK(64434):H%=PEEK(64435):A!=L%+H%*256:E=0:K%(2)=VARPTR(Y) 65 CALLHIMEM+1,3,VARPTR(K(0)):IFNOTK%(0)THEN67 66 B=K%(3):A!=K%(4)+65536:E=K%(5) 67 RETURN