home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
World of Shareware - Software Farm 2
/
wosw_2.zip
/
wosw_2
/
PASCAL
/
MMSRC.ZIP
/
OPTION_E.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1988-12-06
|
16KB
|
343 lines
PROCEDURE Option_Editor (Opt_Nbr : BYTE);
CONST Return = #13;
Escape = #27;
Null = #0;
VAR Reply,s,Old_Opt_Name : STRING;
Extended,Done,Opt_Changed : BOOLEAN;
y2,Opt_Num,i : BYTE;
c : CHAR;
Option_Scr_Ptr : POINTER;
Temp_Menu_Ptr : Menu_Ptr;
PROCEDURE Down_Arrow;
BEGIN
WITH Cur_Menu_Ptr^.Opts[Opt_Nbr] DO
CASE Opt_Type OF
Batch : IF y2 < 14 THEN
y2 := y2 + 1
ELSE
y2 := 5;
Delim : CASE y2 OF
5 : y2 := 7;
7 : y2 := 5;
END;
Menu : CASE y2 OF
5 : y2 := 6;
6 : y2 := 7;
7 : y2 := 12;
12 : y2 := 5;
END;
END;
END;
PROCEDURE Up_Arrow;
BEGIN
WITH Cur_Menu_Ptr^.Opts[Opt_Nbr] DO
CASE Opt_Type OF
Batch : IF y2 > 5 THEN
y2 := y2 - 1
ELSE
y2 := 14;
Delim : CASE y2 OF
5 : y2 := 7;
7 : y2 := 5;
END;
Menu : CASE y2 OF
5 : y2 := 12;
6 : y2 := 5;
7 : y2 := 6;
12 : y2 := 7;
END;
END;
END;
BEGIN { Option_Editor }
IF NOT(Chk_Password(Cur_Menu_Ptr^.Opts[Opt_Nbr].Password)) THEN
EXIT;
IF Help_Toggle THEN
Erase_Help;
Save_Scr (3,3,14,76,Option_Scr_Ptr);
Draw_Box (3,3,13,74,Black+bgWarn,No_Border,-1,Shade,fgMain+bgMain-8);
QWrite (3,3,(bgWarn DIV 16)+bBlack+8,Justify('Option Editor',Center,74,' '));
QWrite ( 5,4,fgWarn+bgWarn,'Option Type ? [BATCH] [LINE] [MENU]');
QWrite ( 6,4,fgWarn+bgWarn,'Select Key [ ]');
QWrite ( 7,4,fgWarn+bgWarn,CONCAT('Option Name [',Make_String(Max_Opt_Len,' '),']'));
QWrite ( 8,4,fgWarn+bgWarn,'Directory Name [ ]');
QWrite ( 9,4,fgWarn+bgWarn,'Program Name [ ]');
QWrite (10,4,fgWarn+bgWarn,'Parameters [ ]');
QWrite (11,4,fgWarn+bgWarn,'Batch Filename [ ]');
QWrite (12,4,fgWarn+bgWarn,'Password [ ]');
QWrite (13,4,fgWarn+bgWarn,'Pause/Return ? [YES] [NO]');
QWrite (14,4,fgWarn+bgWarn,'Prompt/Parms ? [YES] [NO]');
IF Help_Toggle THEN
Show_Help (5,18,3,fgHelp+bgHelp); { option editor help }
WITH Cur_Menu_Ptr^.Opts[Opt_Nbr] DO
BEGIN
CASE Opt_Type OF
Batch : BEGIN
QAttr (5,20,1,5,fgInpt+bgInpt);
QWrite (7,4,fgWarn+bgWarn,'Option Name');
END;
Delim : BEGIN
QAttr (5,28,1,4,fgInpt+bgInpt);
QWrite (7,4,fgWarn+bgWarn,'Delimiter ');
END;
Menu : BEGIN
QAttr (5,35,1,4,fgInpt+bgInpt);
QWrite (7,4,fgWarn+bgWarn,'Menu Name ');
END;
END;
QWrite ( 6,20,-1,Select_Key);
QWrite ( 7,20,-1,Opt_Name);
QWrite ( 8,20,-1,Prg_Dir);
QWrite ( 9,20,-1,Prg_Name);
QWrite (10,20,-1,Parms);
QWrite (11,20,-1,Bat_Name);
QWrite (12,20,-1,Password);
IF Pause THEN
QAttr (13,20,1,3,fgInpt+bgInpt)
ELSE
QAttr (13,26,1,2,fgInpt+bgInpt);
IF Prompts THEN
QAttr (14,20,1,3,fgInpt+bgInpt)
ELSE
QAttr (14,26,1,2,fgInpt+bgInpt);
Done := FALSE;
Opt_Changed := FALSE;
y2 := 5;
REPEAT
CASE y2 OF
5 : BEGIN
CASE Opt_Type OF
Batch : BEGIN
Opt_Num := 1;
QAttr (y2,20,1,5,fgWarn+bgWarn);
END;
Delim : BEGIN
Opt_Num := 2;
QAttr (y2,28,1,4,fgWarn+bgWarn);
END;
Menu : BEGIN
Opt_Num := 3;
QAttr (y2,35,1,4,fgWarn+bgWarn);
END;
END;
HSelect (y2,19,0,fgInpt+bgInpt,Opt_Num,'[',']',c,Extended);
IF NOT(Extended) AND (c = Return) THEN
BEGIN
Changes := TRUE;
Opt_Changed := TRUE;
CASE Opt_Num OF
1 : BEGIN
Opt_Type := Batch;
QWrite (7,4,fgWarn+bgWarn,'Option Name');
END;
2 : BEGIN
Opt_Type := Delim;
QWrite (7,4,fgWarn+bgWarn,'Delimiter ');
END;
3 : BEGIN
Opt_Type := Menu;
QWrite (7,4,fgWarn+bgWarn,'Menu Name ');
END;
END;
END;
CASE Opt_Type OF
Batch : QAttr (y2,20,1,5,fgInpt+bgInpt);
Delim : QAttr (y2,28,1,4,fgInpt+bgInpt);
Menu : QAttr (y2,35,1,4,fgInpt+bgInpt);
END;
END;
6 : Input (1,y2,20,fgInpt+bgInpt,Reply,c,Extended,Visible_Chrs);
7 : Input (Max_Opt_Len,y2,20,fgInpt+bgInpt,Reply,c,Extended,Visible_Chrs);
8 : Input (55,y2,20,fgInpt+bgInpt,Reply,c,Extended,Visible_Chrs);
9 : Input (12,y2,20,fgInpt+bgInpt,Reply,c,Extended,Visible_Chrs);
10 : Input (55,y2,20,fgInpt+bgInpt,Reply,c,Extended,Visible_Chrs);
11 : Input (8,y2,20,fgInpt+bgInpt,Reply,c,Extended,Visible_Chrs);
12 : Input (8,y2,20,fgInpt+bgInpt,Reply,c,Extended,Visible_Chrs);
13 : BEGIN
IF Pause THEN
BEGIN
Opt_Num := 1;
QAttr (y2,20,1,3,fgWarn+bgWarn);
END
ELSE
BEGIN
Opt_Num := 2;
QAttr (y2,26,1,2,fgWarn+bgWarn);
END;
HSelect (y2,19,0,fgInpt+bgInpt,Opt_Num,'[',']',c,Extended);
IF NOT(Extended) AND (c = Return) THEN
BEGIN
Changes := TRUE;
Pause := Opt_Num = 1;
END;
IF Pause THEN
QAttr (y2,20,1,3,fgInpt+bgInpt)
ELSE
QAttr (y2,26,1,2,fgInpt+bgInpt);
END;
14 : BEGIN
IF Prompts THEN
Opt_Num := 1
ELSE
Opt_Num := 2;
IF Prompts THEN
QAttr (y2,20,1,3,fgWarn+bgWarn)
ELSE
QAttr (y2,26,1,2,fgWarn+bgWarn);
HSelect (y2,19,0,fgInpt+bgInpt,Opt_Num,'[',']',c,Extended);
IF NOT(Extended) AND (c = Return) THEN
BEGIN
Changes := TRUE;
Prompts := Opt_Num = 1;
END;
IF Prompts THEN
QAttr (y2,20,1,3,fgInpt+bgInpt)
ELSE
QAttr (y2,26,1,2,fgInpt+bgInpt);
END;
END;
IF Extended THEN
CASE ORD(c) OF
F1 : BEGIN
Help_Toggle := NOT Help_Toggle;
Env_Changes := TRUE;
IF Help_Toggle THEN
Show_Help (5,18,3,fgHelp+bgHelp)
ELSE
Erase_Help;
END;
61 : Done := TRUE;
72,75 : Up_Arrow; { up arrow/left arrow }
80,77 : Down_Arrow; { down arrow/right arrow }
71 : y2 := 5; { home }
79 : IF Opt_Type = Batch THEN { end }
y2 := 14
ELSE
IF Opt_Type = Delim THEN
y2 := 7
ELSE
y2 := 12;
ELSE
Sound_Bell;
END
ELSE
CASE ORD(c) OF
0 : BEGIN { something was entered }
Changes := TRUE;
CASE y2 OF
6 : BEGIN
Select_Key := Reply[1];
QWrite (y2,20,-1,Select_Key);
Opt_Changed := TRUE;
END;
7 : BEGIN
IF Opt_Type = Menu THEN
BEGIN
Temp_Menu_Ptr := Head_Menu_Ptr;
WHILE (Temp_Menu_Ptr^.Menu_Name <> Opt_Name) AND
(Temp_Menu_Ptr^.Next_Menu_Ptr <> NIL) DO
Temp_Menu_Ptr := Temp_Menu_Ptr^.Next_Menu_Ptr;
IF Temp_Menu_Ptr^.Menu_Name = Opt_Name THEN { menu already exists }
BEGIN
{ now, check to see if new name is an
already existing menu }
Temp_Menu_Ptr := Head_Menu_Ptr;
WHILE (Temp_Menu_Ptr^.Menu_Name <> Reply) AND
(Temp_Menu_Ptr^.Next_Menu_Ptr <> NIL) DO
Temp_Menu_Ptr := Temp_Menu_Ptr^.Next_Menu_Ptr;
IF Temp_Menu_Ptr^.Menu_Name = Reply THEN
BEGIN
{ new name is an existing menu; user must want to reassign it }
Opt_Name := Reply;
END
ELSE
BEGIN
{ new name does not exist... }
{ do you wish to rename or create ? }
i := Opt_Question('Rename/Create Existing Menu',
'Rename the existing menu, or Create a new one ? [RENAME] [CREATE]',11,13,14);
IF i = 1 THEN
BEGIN
{ must search all options for
old menu name, and change to
new name, as well as the menu
itself }
Temp_Menu_Ptr := Head_Menu_Ptr;
Old_Opt_Name := Opt_Name;
REPEAT
FOR i := 1 TO Max_Nbr_Opts DO
IF (Temp_Menu_Ptr^.Opts[i].Opt_Type = Menu) AND
(Temp_Menu_Ptr^.Opts[i].Opt_Name = Old_Opt_Name) THEN
Temp_Menu_Ptr^.Opts[i].Opt_Name := Reply;
IF Temp_Menu_Ptr^.Menu_Name = Old_Opt_Name THEN
Temp_Menu_Ptr^.Menu_Name := Reply;
Temp_Menu_Ptr := Temp_Menu_Ptr^.Next_Menu_Ptr;
UNTIL Temp_Menu_Ptr = NIL;
END
ELSE
Opt_Name := Reply;
END;
END
ELSE
BEGIN
{ old name does not exist... }
Opt_Name := Reply;
END;
END
ELSE
Opt_Name := Reply;
QWrite (y2,20,-1,Justify(Opt_Name,Left,Max_Opt_Len,' '));
Opt_Changed := TRUE;
END;
8 : BEGIN
Prg_Dir := Reply;
QWrite (y2,20,-1,Justify(Prg_Dir,Left,55,' '));
END;
9 : BEGIN
Prg_Name := Reply;
QWrite (y2,20,-1,Justify(Prg_Name,Left,12,' '));
END;
10 : BEGIN
Parms := Reply;
QWrite (y2,20,-1,Justify(Parms,Left,55,' '));
END;
11 : BEGIN
Bat_Name := Reply;
QWrite (y2,20,-1,Justify(Bat_Name,Left,8,' '));
END;
12 : BEGIN
Password := Reply;
QWrite (y2,20,-1,Justify(Password,Left,8,' '));
END;
END;
Down_Arrow;
END;
13 : Down_Arrow; { enter }
27 : Done := TRUE; { escape }
ELSE
Sound_Bell;
END;
UNTIL Done;
END; { WITH Opts[Opt_Nbr] }
IF Help_Toggle THEN
Erase_Help;
Show_Scr (3,3,14,76,Option_Scr_Ptr);
IF Help_Toggle THEN
Show_Help (0,Get_Help_Row(Cur_Menu_Ptr),3,fgHelp+bgHelp); { menu help }
IF Opt_Changed THEN
WITH Cur_Menu_Ptr^ DO
WITH Opts[y-Row] DO
IF Opt_Type = Delim THEN
QWrite (y,Col+1,-1,Justify(Opt_Name,Center,Max_Opt_Len+4,'─'))
ELSE
QWrite (y,Col+1,-1,CONCAT(Select_Key,' ',Justify(Opt_Name,Left,Max_Opt_Len,' ')));
END;