100 CLEAR256,62299:LOADM"SUBL10":POKE62959,MAXFILES:IFMAXFILES<2THENMAXFILES=2 110 CLEARFRE(0)/2:DEFINTA-Z:ONERRORGOTO60000 120 DIMFL$(21),FL(21),KY$(255),PL(5):ES$=CHR$(27):SCREEN,0 130 LB$="Dir Find Sort Name "+"Copy Kill New Menu " 200 PRINTES$;"U";:CLS:PRINT@280,ES$;"T";LB$ 210 PRINT@92,"RAM File Utility";:PRINT@170,"Olivetti Version 1.0";:PRINT@214,"for US M10"; 220 PRINT@129,"by Jesse Bob ";:PRINT"Overholt";:LINE(50,12)-(182,50),1,B 230 RS=0:ONKEYGOSUB1000,2000,3000,4000,5000,6000,400,500:KEYON 300 PRINT@8,DATE$;" ";DAY$;" ";:PRINTTIME$;:IFRSTHEN200ELSE300 400 PRINTES$;"U";:CLS:CLEAR256,MAXRAM:MAXFILES=PEEK(62959):NEW 500 CLEAR256,MAXRAM:MAXFILES=PEEK(62959):MENU 1000 'Display Directory 1010 KEYOFF:PL(1)=-1702:LC=5:PRINTES$;"U";:CLS 1020 PRINT@280,ES$;"T";:PRINT"Push to scroll.":PRINT@0,"File Name Address Length CRC" 1030 FORLV=0TO1:LV=0:GOSUB20000:IFPL(0)THEN1060 1040 LV=1:PRINT@280,ES$;"U";"***END***":PRINT"Push for Summary."; 1050 GOSUB12000:GOTO1100 1060 PRINTNM$;:PRINTUSING"########";AD!;:PRINT" ";:PRINTUSING"######";LN; 1070 FL(1)=AD!-65536:FL(2)=LN:CALLHIMEM+2,2,VARPTR(FL(0)):X!=FL(3)-65536*(FL(3)<0):PRINTUSING"########";X!; 1080 IFLC>0THENPRINT:LC=LC-1:GOTO1100 1090 GOSUB12000:I=CSRLIN:PRINT@40,ES$;"M";:PRINT@I*40,""; 1100 NEXTLV:RM!=PEEK(64440)+PEEK(64441)*256:X!=PEEK(64195)+PEEK(64196)*256:TL!=RM!-X! 1110 PRINTES$;"U";:CLS:PRINT"Total RAM used: ";TL! 1120 PRINT"Next free address: ";RM!:X!=HIMEM 1130 PRINT"Bytes available: ";:PRINTX!-TL!-32924 1140 IFPEEK(64178)=0THENX$="Undefined":GOTO1170 1150 X$="":FORI=0TO15:X=PEEK(64178+I):IFX=13THEN1170ELSEX$=X$+CHR$(X) 1160 NEXTI 1170 PRINT"IPL: ";X$:GOSUB11000 1190 RS=-1:RETURN 2000 'Find a string 2010 KEYOFF:PRINTES$;"U";:CLS 2020 PRINT"Enter string to search for:":LINEINPUTS$:PL(1)=-1702 2100 FORLV=0TO1:LV=0:GOSUB20000:IFNM$=""THENLV=1:GOTO2190 2110 CLS:PRINT"Searching ";NM$ 2120 FL(1)=AD!-65536:FL(2)=VARPTR(S$):FL(3)=LN:CALLHIMEM+1,1,VARPTR(FL(0)) 2130 IFNOTFL(0)THENPRINT"Not found.":GOTO2190 2140 X!=FL(1)+65536:PRINT"Found at byte";:PRINTX!-AD!:BEEP 2150 GOSUB11000 2190 NEXTLV:RS=-1:RETURN 3000 'Sort files 3010 KEYOFF:PR$="Select file to Sort." 3020 GOSUB10000:IFNM$=""THENRS=-1:RETURN 3030 IFRIGHT$(NM$,3)<>".DO"THENBEEP:GOTO3020 3040 IF(FRE("")-400)>LNTHEN3100 3050 CLS:PRINT"Not enough memory to sort ";NM$:GOSUB11000 3060 RS=-1:RETURN 3100 CLS:PRINT"Sorting file ";NM$:INPUT"Sort on which field";LC:IFLC<1ORLC>100THEN3100 3110 PRINT@80,"";:LINEINPUT"Delimiter? ";S$:IFLEN(S$)<>1THEN3110 3120 OPENNM$FORINPUTAS1:PRINT@280,"Phase 1 - Read keys."; 3200 FORLV=1TO255:R$=CHR$(LV):LINEINPUT#1,X$:I=0:F=0 3210 FORX=0TOLC-1 3220 I=F+1:F=INSTR(I,X$,S$):IFF=0THENF=LEN(X$)+1:X=LC 3230 NEXTX 3240 KY$(LV)=MID$(X$,I,F-I)+R$ 3250 IFEOF(1)THEN3300 3260 NEXTLV:PRINT@160,"Too many records!":PRINT"The first 255 will be sorted.";:LV=255 3300 CLOSE#1:PRINT@280,"Phase 2 - Sort keys."; 3310 PL(1)=LV:PL(2)=VARPTR(KY$(1)):CALLHIMEM+1,0,VARPTR(PL(0)) 3320 PRINT@280,"Phase 3 - Rewrite file.";:R$=STRING$(LV,0) 3330 FORI=1TOLV:L=ASC(RIGHT$(KY$(I),1)):MID$(R$,L,1)=CHR$(I):KY$(I)="":NEXTI 3340 OPENNM$FORINPUTAS1:FORI=1TOLV:L=ASC(MID$(R$,I,1)):LINEINPUT#1,KY$(L):NEXTI 3350 CLOSE#1:KILLNM$:OPENNM$FOROUTPUTAS1 3360 FORI=1TOLV:PRINT#1,KY$(I):KY$(I)="":NEXTI 3370 CLOSE:RS=-1:RETURN 4000 'Rename files 4010 KEYOFF:PR$="Select file to Rename." 4100 GOSUB10000:IFNM$=""THENRS=-1:RETURN 4110 CLS:PRINT"File selected: ";NM$:PRINT:PRINT"New name: ";:LINEINPUTX$ 4120 IFX$=""THEN4150 4130 IFLEN(X$)>9THEN4110 4140 NAMENM$ASX$ 4150 RS=-1:RETURN 5000 'Copy files 5010 KEYOFF:PR$="Select file to Copy." 5020 GOSUB10000:IFNM$=""THENRS=-1:RETURN 5030 IFRIGHT$(NM$,3)<>".DO"THENBEEP:GOTO5020 5100 CLS:PRINT"File selected: ";NM$:PRINT:PRINT"Copy to: ";:LINEINPUTDS$ 5110 CLS:PRINT"Copy Options:":PRINT"<1> As-Is, no changes":PRINT"<2> Remove tabs, spaces" 5120 PRINT"<3> Text replacement":PRINT"<4> Remove CR/LF's" 5130 PRINT@280,"Which option? ";:PRINT"< >";:PRINT@296,ES$;"P"; 5140 X$=INKEY$:IFX$=""THEN5130ELSECO=INSTR("1234",X$):IFCO=0THEN5130ELSEPRINTX$;ES$;"Q"; 5150 OPENNM$FORINPUTAS1:OPENDS$FOROUTPUTAS2:CLS:IFCO<>3THEN5170 5160 S$="":R$="":LINEINPUT"Search for: ";S$:LINEINPUT"Replace with: ";R$:IFS$=""THENCO=1 5170 X=0:PRINT@160,"Bytes copied: ";:PRINT@280,SPACE$(39);:IFEOF(1)THEN5900 5180 ONCOGOTO5200,5300,5400,5500 5200 LN=LN-1:LC=FIX(LN/255):IFLC=0THEN5240 5210 FORLV=1TOLC:PRINT#2,INPUT$(255,1); 5220 X=X+255:PRINT@174,X;:LN=LN-255 5230 NEXTLV 5240 IFLN=0THEN5250ELSEPRINT#2,INPUT$(LN,1);:X=X+LN 5250 GOTO5900 5300 LC=-1:FORLV=0TO1:LV=0:I=ASC(INPUT$(1,1)):IFI=13THENLC=-1:GOTO5330 5310 IFI=34THENLC=NOTLC:GOTO5330 5320 IFI=32ORI=9THENIFLCTHEN5340 5330 PRINT#2,CHR$(I);:X=X+1:PRINT@174,X;:IFEOF(1)THENLV=1 5340 NEXTLV:GOTO5900 5400 RM$=S$:LC=LEN(S$):FORI=1TOLC 5410 :MID$(RM$,I,1)=INPUT$(1,1):IFEOF(1)THENRM$=LEFT$(RM$,I):GOTO5470 5420 NEXTI 5430 IFRM$=S$THENPRINT#2,R$;:X=X+LEN(R$)+2:PRINT@174,X;:GOTO5400 5450 PRINT#2,LEFT$(RM$,1);:X=X+1:PRINT@174,X; 5460 MID$(RM$,1,LC-1)=MID$(RM$,2):MID$(RM$,LC,1)=INPUT$(1,1):IFNOTEOF(1)THEN5430 5470 PRINT#2,RM$;:X=X+LEN(RM$):PRINT@174,X;:GOTO5900 5500 LC=0:FORLV=0TO1:LV=0:LINEINPUT#1,X$ 5510 IFLEN(X$)>0THEN5540 5520 PRINT#2,"":IFLCTHENPRINT#2,"":X=X+4ELSEX=X+2 5530 LC=0:GOTO5550 5540 PRINT#2,X$;" ";:X=X+LEN(X$)+1:LC=-1 5550 PRINT@174,X;:IFEOF(1)THENLV=1:PRINT#2,"" 5560 NEXTLV 5900 CLOSE:PRINT@174,X+1;:GOSUB11000:RS=-1:RETURN 6000 'Kill files 6010 KEYOFF:PR$="Select file to Kill." 6100 GOSUB10000:IFNM$=""THENRS=-1:RETURN 6110 BEEP:PRINT@280,"Ok to Kill ";:PRINTNM$;" (Y/N)? ";ES$;"P"; 6120 X$=INKEY$:IFX$=""THEN6120ELSEI=INSTR("YyNn",X$):IFI=0THEN6120 6130 PRINTMID$("YYNN",I,1);ES$;"Q";:IFI>2THEN6100 6140 KILLNM$:GOTO6100 10000 'File selection 10010 PRINTES$;"U";:CLS:PRINT@280,ES$;"T";:PRINTPR$;CHR$(12); 10020 PL(1)=-1702:FX=0 10100 FORLV=0TO1:LV=0:GOSUB20000:IFNOTPL(0)THENLV=1:GOTO10120 10110 FL$(FX)=NM$:FL(FX)=PL(1):PRINTNM$;" ";:FX=FX+1:IF(FXMOD3)=0THENPRINT 10120 NEXTLV 10130 FL$(FX)="->Quit<-":PRINTFL$(FX):FX=FX+1 10140 L=0:H=0:RM$="":FORI=28TO31:RM$=RM$+CHR$(I):NEXTI 10200 PRINT@L*40+H*12,ES$;"p";:PRINTFL$(L*3+H);ES$;"q"; 10210 X$=INKEY$:IFX$=""THEN10210ELSEIFX$=CHR$(13)THEN10400 10220 I=INSTR(RM$,X$):IFI=0THEN10210ELSEX=L*3+H 10230 ONIGOTO10300,10310,10320,10330 10300 X=X+1:IFX>=FXTHENX=0 10301 GOTO10350 10310 X=X-1:IFX<0THENX=FX-1 10311 GOTO10350 10320 IFX>2THENX=X-3:ELSE10210 10321 GOTO10350 10330 IFX+3 to ";:PRINT"continue."; 12000 'WaitforENTERkey 12010 IFINKEY$<>CHR$(13)THEN12010 12020 RETURN 20000 'Get next directory entry 20010 NM$="":L%=PEEK(64440):H%=PEEK(64441):AD!=L%+H%*256:LN=0:PL%(2)=VARPTR(NM$) 20020 CALLHIMEM+1,3,VARPTR(PL(0)):IFNOTPL%(0)THEN20040 20030 FT=PL%(3):AD!=PL%(4)+65536:LN=PL%(5) 20040 RETURN 60000 'Error trap 60010 PRINTES$;"U";CHR$(12);:PRINT"Error trap entered.":PRINT 60020 IFERL>=4000ANDERL<6000THEN60050 60030 PRINT"Probable programming ";:PRINT"or RAM error.":PRINT 60040 PRINT"Diagnostic:":PRINT"Error #";ERR;"in line";:PRINTERL:END 60050 IFERR<>7THEN60070 60060 PRINT"Out of memory!";:PRINT:GOTO60080 60070 PRINT"Improper or illegal ";:PRINT"file name.":PRINT 60080 PRINT"The function has been ";:PRINT"aborted." 60090 PRINT@280,"Push to ";:PRINT"restart.";:GOSUB12000:RUN