1.10 A14 to 1.10 A15 menu converter WIP
This commit is contained in:
parent
92e963ce7a
commit
3725817427
|
@ -0,0 +1,292 @@
|
|||
Program CvtMenus;
|
||||
|
||||
{$I M_OPS.PAS}
|
||||
|
||||
Uses
|
||||
DOS,
|
||||
m_Strings,
|
||||
m_FileIO,
|
||||
Classes;
|
||||
|
||||
{$I RECORDS.PAS}
|
||||
|
||||
Type
|
||||
OldMenuFlags = Record
|
||||
Header : String[255];
|
||||
Prompt : String[255];
|
||||
DispCols : Byte;
|
||||
Access : String[30];
|
||||
Password : String[15];
|
||||
DispFile : String[20];
|
||||
FallBack : String[20];
|
||||
MenuType : Byte; { 0 = standard, 1 = lightbar, 2 = lightbar grid }
|
||||
InputType : Byte; { 0 = user setting, 1 = longkey, 2 = hotkey }
|
||||
DoneX : Byte;
|
||||
DoneY : Byte;
|
||||
Global : Byte; { 0 = no, 1 = yes }
|
||||
End;
|
||||
|
||||
OldMenuItem = Record
|
||||
Text : String[79];
|
||||
TextLo : String[79];
|
||||
TextHi : String[79];
|
||||
HotKey : String[8];
|
||||
LongKey : String[8];
|
||||
Access : string[30];
|
||||
Command : String[2];
|
||||
Data : String[79];
|
||||
X : Byte;
|
||||
Y : Byte;
|
||||
cUp : Byte;
|
||||
cDown : Byte;
|
||||
cLeft : Byte;
|
||||
cRight : Byte;
|
||||
End;
|
||||
|
||||
Function DeleteFile (FN : String) : Boolean;
|
||||
Var
|
||||
F : File;
|
||||
Begin
|
||||
Assign (F, FN);
|
||||
{ SetFAttr (F, Archive);}
|
||||
{$I-} Erase (F); {$I+}
|
||||
DeleteFile := (IoResult = 0);
|
||||
End;
|
||||
|
||||
Function RenameFile (Old, New: String) : Boolean;
|
||||
Var
|
||||
OldF : File;
|
||||
Begin
|
||||
DeleteFile(New);
|
||||
|
||||
Assign (OldF, Old);
|
||||
{$I-} ReName (OldF, New); {$I+}
|
||||
|
||||
Result := (IoResult = 0);
|
||||
End;
|
||||
|
||||
Procedure ConvertMenuDirectory (Path: String);
|
||||
Var
|
||||
Dir : SearchRec;
|
||||
OldF : Text;
|
||||
NewF : Text;
|
||||
Menu : OldMenuFlags;
|
||||
MenuCmd : Array[1..100] of OldMenuItem;
|
||||
Cmds : LongInt;
|
||||
FlagStr : String[20];
|
||||
NewItem : Array[1..100] of RecMenuItem;
|
||||
NewItems : LongInt;
|
||||
NewCmds : LongInt;
|
||||
DoneList : TStringList;
|
||||
Count : LongInt;
|
||||
Loop : LongInt;
|
||||
|
||||
Function FindGridJump (Mode: Byte; Loc: Word) : Word;
|
||||
Var
|
||||
TempKey : String;
|
||||
TempLoop : Word;
|
||||
Begin
|
||||
Result := 0;
|
||||
|
||||
Case Mode of
|
||||
1 : If MenuCmd[Loc].cUP = 0 Then Exit;
|
||||
2 : If MenuCmd[Loc].cDOWN = 0 Then Exit;
|
||||
3 : If MenuCmd[Loc].cLEFT = 0 Then Exit;
|
||||
4 : If MenuCmd[Loc].cRIGHT = 0 Then Exit;
|
||||
End;
|
||||
|
||||
// look at hotkey for jump command and then find it in new menu
|
||||
|
||||
Case Mode of
|
||||
1 : TempKey := MenuCmd[MenuCmd[Loc].cUP].HotKey;
|
||||
2 : TempKey := MenuCmd[MenuCmd[Loc].cDOWN].HotKey;
|
||||
3 : TempKey := MenuCmd[MenuCmd[Loc].cLEFT].HotKey;
|
||||
4 : TempKey := MenuCmd[MenuCmd[Loc].cRIGHT].HotKey;
|
||||
End;
|
||||
|
||||
For TempLoop := 1 to NewItems Do
|
||||
If NewItem[TempLoop].HotKey = TempKey Then Begin
|
||||
Result := TempLoop;
|
||||
Exit;
|
||||
End;
|
||||
End;
|
||||
|
||||
Begin
|
||||
Path := DirSlash(Path);
|
||||
|
||||
FindFirst (Path + '*.mnu', AnyFile, Dir);
|
||||
|
||||
While DosError = 0 Do Begin
|
||||
|
||||
WriteLn ('Converting: ' + Dir.Name);
|
||||
|
||||
If Not ReNameFile(Path + Dir.Name, Path + JustFileName(Dir.Name) + '.old') Then Begin
|
||||
WriteLn('Unable to rename menu file: ' + Dir.Name);
|
||||
Halt;
|
||||
End;
|
||||
|
||||
Assign (OldF, Path + JustFileName(Dir.Name) + '.old');
|
||||
Reset (OldF);
|
||||
|
||||
Assign (NewF, Path + Dir.Name);
|
||||
ReWrite (NewF);
|
||||
|
||||
ReadLn (OldF, Menu.Header);
|
||||
ReadLn (OldF, Menu.Prompt);
|
||||
ReadLn (OldF, Menu.DispCols); //toggle
|
||||
ReadLn (OldF, Menu.Access);
|
||||
ReadLn (OldF, Menu.Password);
|
||||
ReadLn (OldF, Menu.DispFile);
|
||||
ReadLn (OldF, Menu.FallBack);
|
||||
ReadLn (OldF, Menu.MenuType); //toggle
|
||||
ReadLn (OldF, Menu.InputType); //toggle
|
||||
ReadLn (OldF, Menu.DoneX);
|
||||
ReadLn (OldF, Menu.DoneY);
|
||||
ReadLn (OldF, Menu.Global); //toggle
|
||||
|
||||
Cmds := 0;
|
||||
|
||||
While Not Eof(OldF) Do Begin
|
||||
Inc (Cmds);
|
||||
|
||||
ReadLn (OldF, MenuCmd[Cmds].Text);
|
||||
ReadLn (OldF, MenuCmd[Cmds].HotKey);
|
||||
ReadLn (OldF, MenuCmd[Cmds].LongKey);
|
||||
ReadLn (OldF, MenuCmd[Cmds].Access);
|
||||
ReadLn (OldF, MenuCmd[Cmds].Command);
|
||||
ReadLn (OldF, MenuCmd[Cmds].Data);
|
||||
ReadLn (OldF, MenuCmd[Cmds].X);
|
||||
ReadLn (OldF, MenuCmd[Cmds].Y);
|
||||
ReadLn (OldF, MenuCmd[Cmds].cUP);
|
||||
ReadLn (OldF, MenuCmd[Cmds].cDOWN);
|
||||
ReadLn (OldF, MenuCmd[Cmds].cLEFT);
|
||||
ReadLn (OldF, MenuCmd[Cmds].cRIGHT);
|
||||
ReadLn (OldF, MenuCmd[Cmds].TextLo);
|
||||
ReadLn (OldF, MenuCmd[Cmds].TextHi);
|
||||
|
||||
If MenuCmd[Cmds].HotKey = '' Then MenuCmd[Cmds].HotKey := MenuCmd[Cmds].LongKey;
|
||||
End;
|
||||
|
||||
DoneList := TStringList.Create;
|
||||
NewItems := 0;
|
||||
|
||||
FillChar (NewItem, SizeOf(NewItem), #0);
|
||||
|
||||
For Count := 1 to Cmds Do Begin
|
||||
If DoneList.IndexOf(MenuCmd[Count].HotKey) <> -1 Then Continue;
|
||||
|
||||
DoneList.Add(MenuCmd[Count].HotKey);
|
||||
|
||||
Inc (NewItems);
|
||||
|
||||
NewItem[NewItems].Hotkey := MenuCmd[Count].HotKey;
|
||||
NewItem[NewItems].Access := MenuCmd[Count].Access;
|
||||
NewItem[NewItems].Text := MenuCmd[Count].Text;
|
||||
NewItem[NewItems].X := MenuCmd[Count].X;
|
||||
NewItem[NewItems].Y := MenuCmd[Count].Y;
|
||||
NewItem[NewItems].TextLo := MenuCmd[Count].TextLo;
|
||||
NewItem[NewItems].TextHi := MenuCmd[Count].TextHi;
|
||||
|
||||
NewItem[NewItems].Commands := 0;
|
||||
|
||||
For Loop := Count to Cmds Do
|
||||
If MenuCmd[Count].HotKey = MenuCmd[Loop].HotKey Then Begin
|
||||
Inc (NewItem[NewItems].Commands);
|
||||
|
||||
NewCmds := NewItem[NewItems].Commands;
|
||||
|
||||
New (NewItem[NewItems].CmdData[NewCmds]);
|
||||
|
||||
NewItem[NewItems].CmdData[NewCmds].MenuCmd := MenuCmd[Loop].Command;
|
||||
NewItem[NewItems].CmdData[NewCmds].Access := MenuCmd[Loop].Access;
|
||||
NewItem[NewItems].CmdData[NewCmds].Data := MenuCmd[Loop].Data;
|
||||
End;
|
||||
|
||||
NewItem[NewItems].JumpUp := FindGridJump(1, Count);
|
||||
NewItem[NewItems].JumpDown := FindGridJump(2, Count);
|
||||
NewItem[NewItems].JumpLeft := FindGridJump(3, Count);
|
||||
NewItem[NewItems].JumpRight := FindGridJump(4, Count);
|
||||
End;
|
||||
|
||||
DoneList.Free;
|
||||
|
||||
FlagStr := strPadR(
|
||||
'0' + // char type
|
||||
strI2S(Menu.MenuType) +
|
||||
strI2S(Menu.InputType) +
|
||||
strI2S(Menu.DispCols) +
|
||||
strI2S(Menu.Global)
|
||||
, 20, '0');
|
||||
|
||||
WriteLn (NewF, 'Menu description');
|
||||
WriteLn (NewF, Menu.Access);
|
||||
WriteLn (NewF, Menu.Password);
|
||||
WriteLn (NewF, FlagStr);
|
||||
WriteLn (NewF, '');
|
||||
WriteLn (NewF, ''); // node status
|
||||
WriteLn (NewF, Menu.Header);
|
||||
WriteLn (NewF, Menu.Prompt);
|
||||
WriteLn (NewF, Menu.DispFile);
|
||||
WriteLn (NewF, Menu.DoneX);
|
||||
WriteLn (NewF, Menu.DoneY);
|
||||
WriteLn (NewF, '');
|
||||
WriteLn (NewF, '');
|
||||
WriteLn (NewF, '');
|
||||
|
||||
For Count := 1 to NewItems Do Begin
|
||||
NewItem[Count].ReDraw := 1;
|
||||
|
||||
WriteLn (NewF, NewItem[Count].Text);
|
||||
WriteLn (NewF, NewItem[Count].TextLo);
|
||||
WriteLn (NewF, NewItem[Count].TextHi);
|
||||
WriteLn (NewF, NewItem[Count].HotKey);
|
||||
WriteLn (NewF, NewItem[Count].Access);
|
||||
WriteLn (NewF, NewItem[Count].ReDraw);
|
||||
WriteLn (NewF, NewItem[Count].ShowType);
|
||||
WriteLn (NewF, NewItem[Count].Timer);
|
||||
WriteLn (NewF, NewItem[Count].X);
|
||||
WriteLn (NewF, NewItem[Count].Y);
|
||||
WriteLn (NewF, '');
|
||||
WriteLn (NewF, '');
|
||||
WriteLn (NewF, '');
|
||||
WriteLn (NewF, NewItem[Count].JumpUp);
|
||||
WriteLn (NewF, NewItem[Count].JumpDown);
|
||||
WriteLn (NewF, NewItem[Count].JumpLeft);
|
||||
WriteLn (NewF, NewItem[Count].JumpRight);
|
||||
WriteLn (NewF, NewItem[Count].JumpEscape);
|
||||
WriteLn (NewF, NewItem[Count].JumpTab);
|
||||
WriteLn (NewF, NewItem[Count].JumpPgUp);
|
||||
WriteLn (NewF, NewItem[Count].JumpPgDn);
|
||||
WriteLn (NewF, NewItem[Count].JumpHome);
|
||||
WriteLn (NewF, NewItem[Count].JumpEnd);
|
||||
|
||||
WriteLn (NewF, NewItem[Count].Commands);
|
||||
|
||||
For Loop := 1 to NewItem[Count].Commands Do Begin
|
||||
WriteLn (NewF, NewItem[Count].CmdData[Loop].MenuCmd);
|
||||
WriteLn (NewF, NewItem[Count].CmdData[Loop].Access);
|
||||
WriteLn (NewF, NewItem[Count].CmdData[Loop].Data);
|
||||
WriteLn (NewF, NewItem[Count].CmdData[Loop].JumpID);
|
||||
WriteLn (NewF, '');
|
||||
WriteLn (NewF, '');
|
||||
End;
|
||||
End;
|
||||
|
||||
Close (NewF);
|
||||
Close (OldF);
|
||||
|
||||
FindNext(Dir);
|
||||
End;
|
||||
|
||||
FindClose(Dir);
|
||||
End;
|
||||
|
||||
Begin
|
||||
WriteLn;
|
||||
WriteLn ('Mystic BBS Menu File Converter for Mystic BBS v1.10');
|
||||
WriteLn;
|
||||
WriteLn ('THIS SHOULD ONLY BE EXECUTED ONCE IN YOUR MENUS DIRECTORY!');
|
||||
WriteLn;
|
||||
|
||||
ConvertMenuDirectory(JustPath(ParamStr(0)));
|
||||
End.
|
Loading…
Reference in New Issue