misc/MENUEDIT.PAS

7.6 KB 88fc4b16f6c27e2d…
{
  infusion bbs, external menu editor started on 11/01/98 by skaboy!
}
Program menuedit;
        uses crt,dos,menusys,control,extense,gentypes,skashit,configrt,
             little,skamouse;
{::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::}
type mFileType = array[1..50] of string[12];
var  mFileData : ^mFileType;
     mTotal    : byte;
     mOldScrn  : array[0..3999] of byte;
{::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::}
Procedure mSelectionScrn; External; {$L MENUSEL.OBJ}
Procedure mMainEditor;    External; {$L MENUED.OBJ }
{::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::}
Procedure mWrite(mStr : string);
 begin
 if (mStr='') then mStr := '|08----------';
 skaWrite(mStr);
 end;
{::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::}
Procedure mGetMenuData(fileName: string; var mTitle,mDisplay,mEntry : string);
var mFile : file;
    mTmpM : menuRec;
 begin
 assign(mFile,cfg.menuDir+fileName);
 reset(mFile,1);
 blockRead(mFile,mTmpM,sizeOf(menuRec));
 close(mFile);
 mTitle   := mTmpM.title;
 mDisplay := mTmpM.helpMenu;
 if (mTmpM.usePullBar=true) then mEntry := 'Pull Bar' else
     mEntry := 'Forum Style';
 end;
{::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::}
Procedure mInitSelectionData(mNum : byte);
var mDirData     : searchRec;
    mMenuTitle   : string[20];
    mEntryType   : string[20];
    mDisplayFile : string[12];
 begin
 if (mNum=1) then
  begin
  if (mFileData<>nil) then dispose(mFileData);
  new(mFileData);
  fillChar(mFileData^,sizeOf(mFileData^),0);
  mTotal := 0;
  sBarData^.barShown := 5;
  sBarData^.barXPos  := 5;
  sBarData^.barYPos  := 6;
  findFirst(cfg.menuDir+'*.MNU',archive,mDirData);
  while (dosError=0) do
   begin
   inc(mTotal);
   mFileData^[mTotal] := mDirData.name;
   mGetMenuData(mDirData.name,mMenuTitle,mDisplayFile,mEntryType);
   sAddMenuSelection(1,'|B3|00'+tab(mDirData.name,16)+tab(mMenuTitle,27)+
                       tab(mDisplayFile,15)+tab(mEntryType,14),
                       '|B0|07'+tab(mDirData.name,16)+tab(mMenuTitle,27)+
                       tab(mDisplayFile,15)+tab(mEntryType,14));
   findNext(mDirData);
   end;
  end else
 if (mNum=2) then
  begin
  sBarData^.barShown := 20;
  sBarData^.barXPos  := 5;
  sBarData^.barYPos  := 4;
  sAddMenuSelection(1,'|B3|00 Menu Title         ','|B0|07 Menu Title         ');
  sAddMenuSelection(1,'|B3|00 Fallback Menu      ','|B0|07 Fallback Menu      ');
  sAddMenuSelection(1,'|B3|00 Display File       ','|B0|07 Display File       ');
  sAddMenuSelection(1,'|B3|00 Password           ','|B0|07 Password           ');
  sAddMenuSelection(1,'|B3|00 Required ACS       ','|B0|07 Required ACS       ');
  sAddMenuSelection(1,'|B3|00 Use Pullbars       ','|B0|07 Use Pullbars       ');
  sAddMenuSelection(1,'|B3|00 Use Hotkeys        ','|B0|07 Use Hotkeys        ');
  sAddMenuSelection(1,'|B3|00 Clear Screen       ','|B0|07 Clear Screen       ');
  sAddMenuSelection(1,'|B3|00 Force Help Level   ','|B0|07 Force Help Level   ');
  sAddMenuSelection(1,'|B3|00 Use Prompt         ','|B0|07 Use Prompt         ');
  sAddMenuSelection(1,'|B3|00 Prompt Line 1      ','|B0|07 Prompt Line 1      ');
  sAddMenuSelection(1,'|B3|00 Prompt Line 2      ','|B0|07 Prompt Line 2      ');
  sAddMenuSelection(1,'|B3|00 Msg Conference     ','|B0|07 Msg Conference     ');
  sAddMenuSelection(1,'|B3|00 File Conference    ','|B0|07 File Conference    ');
  sAddMenuSelection(1,'|B3|00 Upkey Increment    ','|B0|07 Upkey Increment    ');
  sAddMenuSelection(1,'|B3|00 Downkey Decrement  ','|B0|07 Downkey Decrement  ');
  sAddMenuSelection(1,'|B3|00 Rightkey Increment ','|B0|07 Rightkey Increment ');
  sAddMenuSelection(1,'|B3|00 Leftkey Decrement  ','|B0|07 Leftkey Decrement  ');
  sAddMenuSelection(1,'|B3|00 Edit Commands      ','|B0|07 Edit Commands      ');
  sAddMenuSelection(1,'|B3|00 Quit / Return      ','|B0|07 Quit / Return      ');
  end;
 end;
{::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::}
Function mBoolean(b : boolean) : string;
 begin
 if (b=true) then mBoolean := '|15Yes' else mBoolean := '|15No';
 end;
{::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::}
Procedure mEditMenu(mNum : byte);
var mDone   : boolean;
    mResult : byte;
    mCount  : byte;
    mMenuD  : ^menuRec;

    Procedure mLoadMenuData;
    var mFile : file;
     begin
     assign(mFile,cfg.menuDir+mFileData^[mNum]);
     reset(mFile,1);
     blockRead(mFile,mMenuD^,sizeOf(mMenuD^));
     close(mFile);
     end;

    Procedure mUpdateMenuData(mID : byte);
     begin
     gotoXY(27,4+pred(mID));
     textAttr := 15;
      case mID of
       1 : mWrite(mMenuD^.title);
       2 : mWrite(mMenuD^.fallBack);
       3 : mWrite(mMenuD^.helpMenu);
       4 : mWrite(mMenuD^.password);
       5 : mWrite(mMenuD^.acs);
       6 : mWrite(mBoolean(mMenuD^.usePullBar));
      end;
     end;

 begin
 move(@mMainEditor^,mem[$b800:0],4000);
 sInitMenuSys(false); sInitMenuSys(true);
 mInitSelectionData(2);
 new(mMenuD);
 mLoadMenuData;
 for mCount := 1 to 20 do mUpdateMenuData(mCount);
 mDone := false;
 repeat
 mResult := sMenuSelection;
  case mResult of
   20 : mDone := true;


  end;
 until (mDone=true);
 dispose(mMenuD);
 sInitMenuSys(false);
 end;
{::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::}
Procedure mMainProc;
const mKeys    : array[1..4] of string[15] = (' Edit ',' Insert ',' Delete ',' Quit ');
      mXPos    : array[1..4] of byte = (20,26,34,42);
var   mDone    : boolean;
      mInKey   : string[2];
      mBars    : array[1..2] of byte;
      mCount   : byte;

   Procedure mUpdateStatus(mStr : string);
    begin
    gotoXY(51,12);
    skaWrite('|B0|15'+tab(mStr,27));
    end;

   Procedure mUpdateBars;
    begin
    gotoXY(mXPos[mBars[1]],12);
    skaWrite('|B0|07'+mKeys[mBars[1]]);
    gotoXY(mXPos[mBars[2]],12);
    skaWrite('|B3|00'+mKeys[mBars[2]]);
    end;

 begin
 readCfg(false);
 mInitSelectionData(1);
 move(@mSelectionScrn^,mem[$b800:0],4000);
 mUpdateStatus('Select menu function');
 mDone := false;
 mBars[1] := 1; mBars[2] := 1;
 mUpdateBars;
 asm mov ah, 1; mov cx, 2000h; int 10h; end;
 for mCount := 1 to sBarData^.barShown do
  begin
  gotoXY(sBarData^.barXPos,sBarData^.barYPos+mCount-1);
  skaWrite(sMenuData^[mCount].menuOff);
  end;
  repeat
  repeat mInKey := eReadKey until (mInKey[1] in [#75,#77,'4','6','B',#27,#13]);
   case mInKey[1] of
  #75,'4' : if (mBars[2]>1) then
           begin
           mBars[1] := mBars[2];
           dec(mBars[2]);
           mUpdateBars;
           end;
  #77,'6' : if (mBars[2]<4) then
           begin
           mBars[1] := mBars[2];
           inc(mBars[2]);
           mUpdateBars;
           end;
  #13,'B' : begin
          if (mBars[2]=1) then
           begin
           move(mem[$b800:0],mOldScrn,4000);
           mUpdateStatus('Select menu to edit');
           eClearMouse;
           mEditMenu(sMenuSelection);
           move(mOldScrn,mem[$b800:0],4000);
           sInitMenuSys(true);
           mInitSelectionData(1);
           end else
          if (mBars[2]=4) then
           begin
           mDone := true;
           gotoXY(1,17);
           end;
          eClearMouse;
          end;
    #27 : mDone := true;
   end;
  until (mDone=true);
 cursor_on;
 end;
{::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::}
begin
 sInitMenuSys(true);
 mMainProc;
 sInitMenuSys(false);
end.