{$A+,B-,D+,E-,F+,I-,L+,N-,O+,R-,S+,V-} UNIT SysOp2K; INTERFACE PROCEDURE DisplayArcs; PROCEDURE DisplayCmt; PROCEDURE ArchiveConfiguration; IMPLEMENTATION USES Common; PROCEDURE DisplayArcs; VAR RecNumToList: Byte; BEGIN Abort := FALSE; Next := FALSE; PrintACR('^0 ##^4:^3Ext^4:^3Compression cmdline ^4:^3Decompression cmdline ^4:^3Success Code'); PrintACR('^4 ==:===:=========================:=========================:============'); RecNumToList := 1; WHILE (RecNumToList <= NumArcs) AND (NOT Abort) AND (NOT HangUp) DO BEGIN WITH General.FileArcInfo[RecNumToList] DO PrintACR(AOnOff(Active,'^5+','^1-')+ '^0'+PadRightInt(RecNumToList,2)+ ' ^3'+PadLeftStr(Ext,3)+ ' ^5'+PadLeftStr(ArcLine,25)+ ' '+PadLeftStr(UnArcLine,25)+ ' '+AOnOff(SuccLevel <> - 1,IntToStr(SuccLevel),'-1 (ignores)')); Inc(RecNumToList); END; END; PROCEDURE DisplayCmt; VAR RecNumToList: Byte; BEGIN FOR RecNumToList := 1 TO 3 DO PrintACR('^1'+IntToStr(RecNumToList)+'. Archive comment file: ^5'+ AOnOff(General.FileArcComment[RecNumToList] <> '', General.FileArcComment[RecNumToList],'*None*')); END; PROCEDURE ArchiveConfiguration; VAR TempArchive: FileArcInfoRecordType; Cmd: Char; RecNumToList: Byte; Changed : Boolean; FUNCTION DisplayArcStr(S: AStr): AStr; BEGIN IF (S <> '') THEN DisplayArcStr := S ELSE DisplayArcStr := '*None*'; IF (S[1] = '/') THEN BEGIN S := '"'+S+'" - '; CASE s[3] OF '1' : DisplayArcStr := S + '*Internal* ZIP viewer'; '2' : DisplayArcStr := S + '*Internal* ARC/PAK viewer'; '3' : DisplayArcStr := S + '*Internal* ZOO viewer'; '4' : DisplayArcStr := S + '*Internal* LZH viewer'; '5' : DisplayArcStr := S + '*Internal* ARJ viewer'; END; END; END; PROCEDURE InitArchiveVars(VAR Archive: FileArcInfoRecordType); BEGIN FillChar(Archive,SizeOf(Archive),0); WITH Archive DO BEGIN Active := FALSE; Ext := 'AAA'; ListLine := ''; ArcLine := ''; UnArcLine := ''; TestLine := ''; CmtLine := ''; SuccLevel := -1; END; END; PROCEDURE DeleteArchive(TempArchive1: FileArcInfoRecordType; RecNumToDelete: Byte); VAR RecNum: Byte; BEGIN IF (NumArcs = 0) THEN Messages(4,0,'archive records') ELSE BEGIN RecNumToDelete := 0; InputByteWOC('%LFArchive to delete?',RecNumToDelete,[NumbersOnly],1,NumArcs); IF (RecNumToDelete >= 1) AND (RecNumToDelete <= NumArcs) THEN BEGIN TempArchive1 := General.FileArcInfo[RecNumToDelete]; Print('%LFArchive: ^5'+TempArchive1.Ext); IF PYNQ('%LFAre you sure you want to delete it? ',0,FALSE) THEN BEGIN Print('%LF[> Deleting archive record ...'); FOR RecNum := RecNumToDelete TO (NumArcs - 1) DO General.FileArcInfo[RecNum] := General.FileArcInfo[RecNum + 1]; General.FileArcInfo[NumArcs].Ext := ''; Dec(NumArcs); SysOpLog('* Deleted archive: ^5'+TempArchive1.Ext); END; END; END; END; PROCEDURE CheckArchive(Archive: FileArcInfoRecordType; StartErrMsg,EndErrMsg: Byte; VAR Ok: Boolean); VAR Counter: Byte; BEGIN FOR Counter := StartErrMsg TO EndErrMsg DO CASE Counter OF 1 : IF (Archive.Ext = '') OR (Archive.Ext = 'AAA') THEN BEGIN Print('%LF^7The archive extension is invalid!^1'); OK := FALSE; END; END; END; PROCEDURE EditArchive(TempArchive1: FileArcInfoRecordType; VAR Archive: FileArcInfoRecordType; VAR Cmd1: Char; VAR RecNumToEdit: Byte; VAR Changed1: Boolean; Editing: Boolean); VAR CmdStr: AStr; Ok: Boolean; BEGIN WITH Archive DO REPEAT IF (Cmd1 <> '?') THEN BEGIN Abort := FALSE; Next := FALSE; CLS; IF (Editing) THEN PrintACR('^5Editing archive #'+IntToStr(RecNumToEdit)+ ' of '+IntToStr(NumArcs)) ELSE PrintACR('^5Inserting archive #'+IntToStr(RecNumToEdit)+' of '+IntToStr(NumArcs + 1)); NL; PrintACR('^11. Active : ^5'+ShowYesNo(Active)); PrintACR('^12. Extension name : ^5'+Ext); PrintACR('^13. Interior list method : ^5'+DisplayArcStr(ListLine)); PrintACR('^14. Compression cmdline : ^5'+DisplayArcStr(ArcLine)); PrintACR('^15. Decompression cmdline : ^5'+DisplayArcStr(UnArcLine)); PrintACR('^16. File testing cmdline : ^5'+DisplayArcStr(TestLine)); PrintACR('^17. Add comment cmdline : ^5'+DisplayArcStr(CmtLine)); PrintACR('^18. Errorlevel for success : ^5'++AOnOff(SuccLevel <> - 1,IntToStr(SuccLevel),'-1 (ignores)')); END; IF (NOT Editing) THEN CmdStr := '12345678' ELSE CmdStr := '12345678[]FJL'; LOneK('%LFModify menu [^5?^4=^5Help^4]: ',Cmd1,'Q?'+CmdStr+^M,TRUE,TRUE); CASE Cmd1 OF '1' : BEGIN Active := NOT Active; Changed1 := TRUE; END; '2' : REPEAT TempArchive1.Ext := Ext; Ok := TRUE; InputWN1('%LFNew extension: ',Ext,(SizeOf(Ext) - 1),[InterActiveEdit,UpperOnly],Changed1); CheckArchive(Archive,1,1,Ok); IF (NOT Ok) THEN Ext := TempArchive1.Ext; UNTIL (Ok) OR (HangUp); '3' : InputWN1('%LFNew interior list method: ',ListLine,(SizeOf(ListLine) - 1),[InterActiveEdit],Changed1); '4' : InputWN1('%LFNew compression command line: ',ArcLine,(SizeOf(ArcLine) - 1),[InterActiveEdit],Changed1); '5' : InputWN1('%LFNew decompression command line: ',UnArcLine,(SizeOf(UnArcLine) - 1), [InterActiveEdit],Changed1); '6' : InputWN1('%LFNew file testing command line: ',TestLine,(SizeOf(TestLine) - 1), [InterActiveEdit],Changed1); '7' : InputWN1('%LFNew add comment command line: ',CmtLine,(SizeOf(CmtLine) - 1),[InterActiveEdit],Changed1); '8' : InputIntegerWC('%LFNew errorlevel for success',SuccLevel,[DisplayValue,NumbersOnly],-1,255,Changed1); '[' : IF (RecNumToEdit > 1) THEN Dec(RecNumToEdit) ELSE BEGIN Messages(2,0,''); Cmd1 := #0; END; ']' : IF (RecNumToEdit < NumArcs) THEN Inc(RecNumToEdit) ELSE BEGIN Messages(3,0,''); Cmd1 := #0; END; 'F' : IF (RecNumToEdit <> 1) THEN RecNumToEdit := 1 ELSE BEGIN Messages(2,0,''); Cmd1 := #0; END; 'J' : BEGIN InputByteWOC('%LFJump to entry?',RecNumToEdit,[NumbersOnly],1,NumArcs); IF (RecNumToEdit < 1) OR (RecNumToEdit > NumArcs) THEN Cmd1 := #0; END; 'L' : IF (RecNumToEdit <> NumArcs) THEN RecNumToEdit := NumArcs ELSE BEGIN Messages(3,0,''); Cmd1 := #0; END; '?' : BEGIN Print('%LF^1<^3CR^1>Redisplay current screen'); Print('^31^1-^38^1:Modify item'); IF (NOT Editing) THEN LCmds(20,3,'Quit and save','') ELSE BEGIN LCmds(20,3,'[Back entry',']Forward entry'); LCmds(20,3,'First entry in list','Jump to entry'); LCmds(20,3,'Last entry in list','Quit and save'); END; END; END; UNTIL (Pos(Cmd1,'Q[]FJL') <> 0) OR (HangUp); END; PROCEDURE InsertArchive(TempArchive1: FileArcInfoRecordType; Cmd1: Char; RecNumToInsertBefore: Byte); VAR RecNum, RecNumToEdit: Byte; Ok, Changed1: Boolean; BEGIN IF (NumArcs = MaxArcs) THEN Messages(5,MaxArcs,'archive records') ELSE BEGIN RecNumToInsertBefore := 0; InputByteWOC('%LFArchive to insert before?',RecNumToInsertBefore,[NumbersOnly],1,(NumArcs + 1)); IF (RecNumToInsertBefore >= 1) AND (RecNumToInsertBefore <= (NumArcs + 1)) THEN BEGIN InitArchiveVars(TempArchive1); IF (RecNumToInsertBefore = 1) THEN RecNumToEdit := 1 ELSE IF (RecNumToInsertBefore = (NumArcs + 1)) THEN RecNumToEdit := (NumArcs + 1) ELSE RecNumToEdit := RecNumToInsertBefore; REPEAT OK := TRUE; EditArchive(TempArchive1,TempArchive1,Cmd1,RecNumToEdit,Changed1,FALSE); CheckArchive(TempArchive1,1,2,Ok); IF (NOT OK) THEN IF (NOT PYNQ('%LFContinue inserting archive? ',0,TRUE)) THEN Abort := TRUE; UNTIL (OK) OR (Abort) OR (HangUp); IF (NOT Abort) AND (PYNQ('%LFIs this what you want? ',0,FALSE)) THEN BEGIN Print('%LF[> Inserting archive record ...'); IF (RecNumToInsertBefore <> (NumArcs + 1)) THEN FOR RecNum := (NumArcs + 1) DOWNTO (RecNumToInsertBefore + 1) DO General.FileArcInfo[RecNum] := General.FileArcInfo[RecNum - 1]; General.FileArcInfo[RecNumToInsertBefore] := TempArchive1; Inc(NumArcs); SysOpLog('* Inserted archive: ^5'+TempArchive1.Ext); END; END; END; END; PROCEDURE ModifyArchive(TempArchive1: FileArcInfoRecordType; Cmd1: Char; RecNumToEdit: Byte); VAR Archive: FileArcInfoRecordType; SaveRecNumToEdit: Byte; OK, Changed1: Boolean; BEGIN IF (NumArcs = 0) THEN Messages(4,0,'archive records') ELSE BEGIN RecNumToEdit := 0; InputByteWOC('%LFArchive to modify?',RecNumToEdit,[NumbersOnly],1,NumArcs); IF (RecNumToEdit >= 1) AND (RecNumToEdit <= NumArcs) THEN BEGIN SaveRecNumToEdit := 0; Cmd1 := #0; WHILE (Cmd1 <> 'Q') AND (NOT HangUp) DO BEGIN IF (SaveRecNumToEdit <> RecNumToEdit) THEN BEGIN Archive := General.FileArcInfo[RecNumToEdit]; SaveRecNumToEdit := RecNumToEdit; Changed1 := FALSE; END; REPEAT Ok := TRUE; EditArchive(TempArchive1,Archive,Cmd1,RecNumToEdit,Changed1,TRUE); CheckArchive(Archive,1,2,Ok); IF (NOT OK) THEN BEGIN PauseScr(FALSE); IF (RecNumToEdit <> SaveRecNumToEdit) THEN RecNumToEdit := SaveRecNumToEdit; END; UNTIL (Ok) OR (HangUp); IF (Changed1) THEN BEGIN General.FileArcInfo[SaveRecNumToEdit] := Archive; Changed1 := FALSE; SysOpLog('* Modified archive: ^5'+Archive.Ext); END; END; END; END; END; BEGIN Cmd := #0; REPEAT IF (Cmd <> '?') THEN BEGIN CLS; DisplayArcs; NL; DisplayCmt; END; LOneK('%LFArchive editor [^5?^4=^5Help^4]: ',Cmd,'QDIM123?'^M,TRUE,TRUE); CASE Cmd OF 'D' : DeleteArchive(TempArchive,RecNumToList); 'I' : InsertArchive(TempArchive,Cmd,RecNumToList); 'M' : ModifyArchive(TempArchive,Cmd,RecNumToList); '1'..'3' : BEGIN Changed := FALSE; InputWNWC('%LFNew comment file #'+IntToStr(Ord(Cmd) - 48)+': ',General.FileArcComment[Ord(Cmd) - 48],40,Changed); IF (Changed) THEN SysOpLog('* Modified comment: ^5'+IntToStr(Ord(Cmd) - 48)+'.'); END; '?' : BEGIN Print('%LF^1<^3CR^1>Next screen or redisplay current screen'); Print('^1(^3?^1)Help/First archive'); Print('^31^1-^33^1:Modify Item'); LCmds(16,3,'Delete archive','Insert archive'); LCmds(16,3,'Modify archive','Quit'); END; END; UNTIL (Cmd = 'Q') OR (HangUp); END; END.