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.