Unit bbs_cfg_menuedit; {$I M_OPS.PAS} Interface Uses DOS, m_Strings, m_FileIO, bbs_Common, bbs_Core, bbs_User, bbs_Menus; Procedure Menu_Editor; Implementation Var MenuFile : Text; Procedure Menu_Editor; Procedure ModifyMenu; var a,b{,c} : byte; { tempcmd : menucmdrec;} Begin Session.io.OutRaw ('Menu to Edit: '); Session.Menu.MenuName := Session.io.GetInput(mysMaxMenuNameLen, mysMaxMenuNameLen, 11, ''); If Session.Menu.LoadMenu(False, False, False) <> 1 Then Exit; Repeat Session.io.OutFullLn ('|CL|14Menu Command List|CR|03'); Session.io.OutFullLn ('|15## Hot-Key Cmd Text ## Hot-Key Cmd Text'); Session.io.OutFullLn ('|09-- -------- --- --------------------- -- -------- --- ---------------------|03'); For A := 1 to Session.Menu.CmdNum Do Begin Session.io.OutRaw (strPadR(strI2S(A), 3, ' ') + strPadR(Session.Menu.MenuList[A].HotKey, 9, ' ') + strPadR(Session.Menu.MenuList[A].Command, 4, ' ') + strPadR(Session.Menu.MenuList[A].Text, 21, ' ') + ' '); If (A = Session.Menu.CmdNum) or (A Mod 2 = 0) Then Session.io.OutRawLn(''); End; Session.io.OutFull ('|CR|09(E)dit, (I)nsert, (D)elete, (F)lags, (V)iew, (Q)uit: '); Case Session.io.OneKey('EIDFVQ', True) of 'D' : begin Session.io.OutRaw('Delete which? '); a := strS2I(Session.io.GetInput(2, 2, 11, '')); if (a > 0) and (a <= Session.Menu.CmdNum) then begin for b := a to Session.Menu.CmdNum do Session.Menu.Menulist[b] := Session.Menu.Menulist[b+1]; dec (Session.Menu.cmdnum); end; end; 'I' : if Session.Menu.CmdNum < mysMaxMenuCmds Then Begin Session.io.OutRaw ('Insert before which (1-' + strI2S(Session.Menu.CmdNum + 1) + '): '); A := strS2I(Session.io.GetInput(2, 2, 11, '')); If (A > 0) And (A <= Session.Menu.CmdNum + 1) Then Begin Inc (Session.Menu.CmdNum); For B := Session.Menu.CmdNum DownTo A + 1 Do Session.Menu.MenuList[B] := Session.Menu.MenuList[B - 1]; Session.Menu.MenuList[A].Text := '[XXX] New Command'; Session.Menu.MenuList[A].HotKey := 'XXX'; Session.Menu.MenuList[A].LongKey := 'XXX'; Session.Menu.MenuList[A].ACS := ''; Session.Menu.MenuList[A].Command := ''; Session.Menu.MenuList[A].X := 0; Session.Menu.MenuList[A].Y := 0; Session.Menu.MenuList[A].lText := ''; Session.Menu.MenuList[A].lhText := ''; End; End; 'F' : Begin repeat Session.io.OutFullLn ('|CL|14Menu Flags (' + Session.Menu.MenuName + ')|CR|03'); Session.io.OutRawLn ('A. Menu Header : ' + strPadR(Session.Menu.Menu.header, 59, ' ')); Session.io.OutRawLn ('B. Menu Prompt : ' + strPadR(Session.Menu.menu.prompt, 59, ' ')); Session.io.OutRawLn ('C. Display Cols : ' + strI2S(Session.Menu.Menu.DispCols)); Session.io.OutRawLn ('D. ACS : ' + Session.Menu.menu.acs); Session.io.OutRawLn ('E. Password : ' + Session.Menu.menu.password); Session.io.OutRawLn ('F. Display File : ' + Session.Menu.Menu.TextFile); Session.io.OutRawLn ('G. Fallback Menu : ' + Session.Menu.Menu.Fallback); Session.io.OutRaw ('H. Menu Type : '); Case Session.Menu.Menu.MenuType of 0 : Session.io.OutRawLn ('Standard'); 1 : Session.io.OutRawLn ('Lightbar'); 2 : Session.io.OutRawLn ('Lightbar Grid'); End; Session.io.OutRawLn ('I. Finish X/Y : ' + strPadR(strI2S(Session.Menu.menu.donex), 3, ' ') + strI2S(Session.Menu.menu.doney)); Session.io.OutRawLn ('J. Use Global MNU: ' + Session.io.OutYN(Session.Menu.Menu.Global=1)); Session.io.OutRaw ('K. Input Type : '); Case Session.Menu.Menu.InputType of 0 : Session.io.OutRawLn ('User setting'); 1 : Session.io.OutRawLn ('Hotkey'); 2 : Session.io.OutRawLn ('Longkey'); End; Session.io.OutFull ('|CR|09(V)iew or (Q)uit: '); Case Session.io.OneKey('ABCDEFGHIJKQV', True) of 'A' : Session.Menu.Menu.Header := Session.io.InXY(20, 3, 60, 255, 11, Session.Menu.Menu.Header); 'B' : Session.Menu.Menu.Prompt := Session.io.InXY(20, 4, 60, 255, 11, Session.Menu.Menu.Prompt); 'C' : Begin Session.Menu.Menu.DispCols := strS2I(Session.io.InXY(20, 5, 1, 1, 12, strI2S(Session.Menu.Menu.DispCols))); If Session.Menu.Menu.DispCols < 1 Then Session.Menu.Menu.DispCols := 1; If Session.Menu.Menu.DispCols > 3 Then Session.Menu.Menu.DispCols := 3; End; 'D' : Session.Menu.Menu.ACS := Session.io.InXY(20, 6, 20, 20, 11, Session.Menu.Menu.ACS); 'E' : Session.Menu.Menu.Password := Session.io.InXY(20, 7, 15, 15, 12, Session.Menu.Menu.Password); 'F' : Session.Menu.Menu.TextFile := Session.io.InXY(20, 8, 20, 20, 11, Session.Menu.Menu.TextFile); 'G' : Session.Menu.Menu.Fallback := Session.io.InXY(20, 9, mysMaxMenuNameLen, mysMaxMenuNameLen, 11, Session.Menu.Menu.Fallback); 'H' : If Session.Menu.Menu.MenuType = 2 Then Session.Menu.Menu.MenuType := 0 Else Inc(Session.Menu.Menu.MenuType); 'I' : Begin Session.Menu.Menu.donex := strS2I(Session.io.InXY(20, 11, 2, 2, 12, strI2S(Session.Menu.Menu.donex))); Session.Menu.Menu.doney := strS2I(Session.io.InXY(23, 11, 2, 2, 12, strI2S(Session.Menu.Menu.doney))); End; 'J' : If Session.Menu.Menu.Global = 1 Then dec(Session.Menu.Menu.global) else Session.Menu.Menu.global := 1; 'K' : If Session.Menu.Menu.InputType = 2 Then Session.Menu.Menu.InputType := 0 Else Inc(Session.Menu.Menu.InputType); 'Q' : Break; 'V' : Session.Menu.ExecuteMenu (False, False, True); End; Until False; End; 'E' : Begin Session.io.OutRaw ('Edit which? '); a := strS2I(Session.io.GetInput(2, 2, 11, '')); If (a > 0) and (a <= Session.Menu.CmdNum) then Begin Repeat Session.io.OutFullLn ('|CL|14Menu command ' + strI2S(a) + ' of ' + strI2S(Session.Menu.CmdNum) + '|CR|03'); Session.io.OutRawln ('A. Text : ' + Session.Menu.MenuList[A].text); Session.io.OutRawln ('B. Hot Key : ' + Session.Menu.MenuList[A].HotKey); Session.io.OutRawLn ('C. Long Key: ' + Session.Menu.MenuList[A].LongKey); Session.io.OutRawln ('D. ACS : ' + Session.Menu.MenuList[A].acs); Session.io.OutRawln ('E. Command : ' + Session.Menu.MenuList[A].command); Session.io.OutRawln ('F. Data : ' + Session.Menu.MenuList[A].data); Session.io.OutFullLn ('|CRG. Lightbar X/Y : ' + strPadR(strI2S(Session.Menu.MenuList[a].x), 3, ' ') + strI2S(Session.Menu.MenuList[a].y)); Session.io.OutRawln ('H. Lightbar Text : ' + Session.Menu.MenuList[a].ltext); Session.io.OutRawln ('I. Lightbar High : ' + Session.Menu.MenuList[a].lhtext); Session.io.OutRawln (''); Session.io.OutRawln ('J. Lightbar Up : ' + strI2S(Session.Menu.MenuList[a].cUP)); Session.io.OutRawln ('K. Lightbar Down : ' + strI2S(Session.Menu.MenuList[a].cDOWN)); Session.io.OutRawln ('L. Lightbar Left : ' + strI2S(Session.Menu.MenuList[a].cLEFT)); Session.io.OutRawln ('M. Lightbar Right: ' + strI2S(Session.Menu.MenuList[a].cRIGHT)); Session.io.OutFull ('|CR|09([) Previous, (]) Next, (Q)uit: '); case session.io.onekey('[]ABCDEFGHIJKLMQ', True) of '[' : If A > 1 Then Dec(A); ']' : If A < Session.Menu.CmdNum Then Inc(A); 'A' : Session.Menu.MenuList[A].Text := Session.io.InXY(14, 3, 60, 79, 11, Session.Menu.MenuList[A].Text); 'B' : Session.Menu.MenuList[A].HotKey := Session.io.InXY(14, 4, 8, 8, 12, Session.Menu.MenuList[A].HotKey); 'C' : Session.Menu.MenuList[A].LongKey := Session.io.InXY(14, 5, 8, 8, 12, Session.Menu.MenuList[A].LongKey); 'D' : Session.Menu.MenuList[A].ACS := Session.io.InXY(14, 6, 20, 20, 11, Session.Menu.MenuList[A].ACS); 'E' : Repeat Session.io.OutFull ('|09Menu Command (?/List): '); Session.Menu.MenuList[A].command := Session.io.GetInput(2, 2, 12, ''); If Session.Menu.MenuList[A].Command = '?' Then session.io.OutFile ('menucmds', True, 0) Else Break; Until False; 'F' : Session.Menu.MenuList[A].Data := Session.io.InXY(14, 8, 60, 79, 11, Session.Menu.MenuList[a].data); 'G' : Begin Session.Menu.MenuList[A].X := strS2I(Session.io.InXY(20, 10, 2, 2, 12, strI2S(Session.Menu.MenuList[A].X))); Session.Menu.MenuList[A].Y := strS2I(Session.io.InXY(23, 10, 2, 2, 12, strI2S(Session.Menu.MenuList[A].Y))); End; 'H' : Session.Menu.MenuList[A].LText := Session.io.InXY(20, 11, 59, 79, 11, Session.Menu.MenuList[A].LText); 'I' : Session.Menu.MenuList[A].LHText := Session.io.InXY(20, 12, 59, 79, 11, Session.Menu.MenuList[A].LHText); 'J' : Session.Menu.MenuList[A].cUP := strS2I(Session.io.InXY(20, 14, 2, 2, 12, strI2S(Session.Menu.MenuList[A].cUP))); 'K' : Session.Menu.MenuList[A].cDOWN := strS2I(Session.io.InXY(20, 15, 2, 2, 12, strI2S(Session.Menu.MenuList[A].cDOWN))); 'L' : Session.Menu.MenuList[A].cLEFT := strS2I(Session.io.InXY(20, 16, 2, 2, 12, strI2S(Session.Menu.MenuList[A].cLEFT))); 'M' : Session.Menu.MenuList[A].cRIGHT := strS2I(Session.io.InXY(20, 17, 2, 2, 12, strI2S(Session.Menu.MenuList[A].cRIGHT))); 'Q' : Break; end; until false; End; End; (* 'P' : begin Session.io.OutRaw('Move which? '); a := strS2I(Session.io.GetInput(2, 2, 11, '')); Session.io.OutRaw('Move before which (1-' + strI2S(Session.Menu.CmdNum+1) + '): '); b := strS2I(Session.io.GetInput(2, 2, 11, '')); end; *) 'Q' : break; 'V' : Session.Menu.ExecuteMenu(False, False, True); end; Until false; Session.io.OutFullLn ('|14Saving...'); assign (menufile, Session.Theme.menupath + Session.Menu.menuname + '.mnu'); rewrite (menufile); writeln (menufile, Session.Menu.Menu.header); writeln (menufile, Session.Menu.Menu.prompt); writeln (menufile, Session.Menu.Menu.dispcols); writeln (menufile, Session.Menu.Menu.acs); writeln (menufile, Session.Menu.Menu.password); writeln (menufile, Session.Menu.Menu.textfile); WriteLn (MenuFile, Session.Menu.Menu.Fallback); writeln (menufile, Session.Menu.Menu.MenuType); WriteLn (MenuFile, Session.Menu.Menu.InputType); WriteLn (MenuFile, Session.Menu.Menu.DoneX); WriteLn (MenuFile, Session.Menu.Menu.DoneY); WriteLn (MenuFile, Session.Menu.Menu.Global); for a := 1 to Session.Menu.CmdNum do begin writeln (menufile, Session.Menu.MenuList[a].text); writeln (menufile, Session.Menu.MenuList[a].HotKey); WriteLn (MenuFile, Session.Menu.MenuList[A].LongKey); writeln (menufile, Session.Menu.MenuList[a].acs); writeln (menufile, Session.Menu.MenuList[a].command); writeln (menufile, Session.Menu.MenuList[a].data); writeln (menufile, Session.Menu.MenuList[a].x); writeln (menufile, Session.Menu.MenuList[a].y); writeln (menufile, Session.Menu.MenuList[a].cUP); WriteLn (MenuFile, Session.Menu.MenuList[A].cDOWN); WriteLn (MenuFile, Session.Menu.MenuList[A].cLEFT); WriteLn (MenuFile, Session.Menu.MenuList[A].cRIGHT); writeln (menufile, Session.Menu.MenuList[a].ltext); writeln (menufile, Session.Menu.MenuList[a].lhtext); end; close (menufile); End; Var Old : String[8]; OldLang : RecTheme; DirInfo: SearchRec; A : Byte; {format dir output} Begin If session.Theme.filename = '' then exit; Old := Session.Menu.MenuName; OldLang := Session.Theme; Session.SystemLog ('*MENU EDITOR*'); Session.io.OutFull ('|CL'); Session.User.GetLanguage; Repeat Session.io.OutFullLn ('|CL|14Menu Editor (Language: ' + Session.Theme.Desc + ')|CR'); Session.io.OutFullLn ('|08Directory of ' + Session.Theme.MenuPath + '*.MNU|CR|03'); a := 0; FindFirst (Session.Theme.MenuPath + '*.mnu', Archive, DirInfo); While DosError = 0 Do Begin inc (a); Session.io.OutRaw (strPadR(DirInfo.Name, 25, ' ')); FindNext (DirInfo); if (a = 3) or (DosError <> 0) then begin Session.io.OutRawln(''); a := 0 end; End; Session.io.OutFull ('|CR|09(E)dit, (I)nsert, (D)elete, (Q)uit? '); Case session.io.OneKey('EIDQ', True) of 'E' : ModifyMenu; 'I' : Begin; Session.io.OutRaw ('Menu Name: '); Session.menu.MenuName := Session.io.GetInput(mysMaxMenuNameLen, mysMaxMenuNameLen, 11, ''); If Session.Menu.MenuName <> '' Then Begin Assign (MenuFile, Session.Theme.MenuPath + Session.Menu.MenuName + '.mnu'); {$I-} Reset(MenuFile); {$I+} If IoResult = 0 Then Session.io.OutRawLn ('Menu already exists') Else Begin Rewrite (MenuFile); WriteLn (MenuFile, 'New Menu'); WriteLn (MenuFile, 'Command: '); WriteLn (MenuFile, '2'); WriteLn (MenuFile, ''); WriteLn (MenuFile, ''); WriteLn (MenuFile, ''); WriteLn (MenuFile, 'main'); WriteLn (MenuFile, '0'); WriteLn (MenuFile, '0'); WriteLn (MenuFile, '0'); WriteLn (MenuFile, '0'); WriteLn (MenuFile, '1'); Close (MenuFile); End; End; End; 'D' : Begin Session.io.OutRaw ('Menu to delete: '); Session.Menu.MenuName := Session.io.GetInput(mysMaxMenuNameLen, mysMaxMenuNameLen, 11, ''); FileErase(Session.Theme.MenuPath + Session.Menu.MenuName + '.mnu'); End; 'Q' : Break; End; Until False; Session.Menu.MenuName := Old; Session.Theme := OldLang; Close (Session.PromptFile); Assign (Session.PromptFile, Config.DataPath + Session.Theme.FileName + '.thm'); Reset (Session.PromptFile); End; End.