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 >
Pascal/Delphi Source File  |  1988-12-06  |  16KB  |  343 lines

  1.     PROCEDURE Option_Editor (Opt_Nbr : BYTE);
  2.     CONST Return = #13;
  3.           Escape = #27;
  4.           Null = #0;
  5.     VAR Reply,s,Old_Opt_Name : STRING;
  6.         Extended,Done,Opt_Changed : BOOLEAN;
  7.         y2,Opt_Num,i : BYTE;
  8.         c : CHAR;
  9.         Option_Scr_Ptr : POINTER;
  10.         Temp_Menu_Ptr : Menu_Ptr;
  11.  
  12.       PROCEDURE Down_Arrow;
  13.       BEGIN
  14.         WITH Cur_Menu_Ptr^.Opts[Opt_Nbr] DO
  15.           CASE Opt_Type OF
  16.             Batch : IF y2 < 14 THEN
  17.                       y2 := y2 + 1
  18.                     ELSE
  19.                       y2 := 5;
  20.             Delim : CASE y2 OF
  21.                        5 : y2 := 7;
  22.                        7 : y2 := 5;
  23.                     END;
  24.             Menu : CASE y2 OF
  25.                       5 : y2 := 6;
  26.                       6 : y2 := 7;
  27.                       7 : y2 := 12;
  28.                      12 : y2 := 5;
  29.                    END;
  30.           END;
  31.       END;
  32.  
  33.       PROCEDURE Up_Arrow;
  34.       BEGIN
  35.         WITH Cur_Menu_Ptr^.Opts[Opt_Nbr] DO
  36.           CASE Opt_Type OF
  37.             Batch : IF y2 > 5 THEN
  38.                       y2 := y2 - 1
  39.                     ELSE
  40.                       y2 := 14;
  41.             Delim : CASE y2 OF
  42.                        5 : y2 := 7;
  43.                        7 : y2 := 5;
  44.                     END;
  45.             Menu : CASE y2 OF
  46.                       5 : y2 := 12;
  47.                       6 : y2 := 5;
  48.                       7 : y2 := 6;
  49.                      12 : y2 := 7;
  50.                    END;
  51.           END;
  52.       END;
  53.  
  54.     BEGIN { Option_Editor }
  55.       IF NOT(Chk_Password(Cur_Menu_Ptr^.Opts[Opt_Nbr].Password)) THEN
  56.         EXIT;
  57.  
  58.       IF Help_Toggle THEN
  59.         Erase_Help;
  60.       Save_Scr (3,3,14,76,Option_Scr_Ptr);
  61.       Draw_Box (3,3,13,74,Black+bgWarn,No_Border,-1,Shade,fgMain+bgMain-8);
  62.       QWrite (3,3,(bgWarn DIV 16)+bBlack+8,Justify('Option Editor',Center,74,' '));
  63.  
  64.       QWrite ( 5,4,fgWarn+bgWarn,'Option Type ?  [BATCH] [LINE] [MENU]');
  65.       QWrite ( 6,4,fgWarn+bgWarn,'Select Key     [ ]');
  66.       QWrite ( 7,4,fgWarn+bgWarn,CONCAT('Option Name    [',Make_String(Max_Opt_Len,' '),']'));
  67.       QWrite ( 8,4,fgWarn+bgWarn,'Directory Name [                                                       ]');
  68.       QWrite ( 9,4,fgWarn+bgWarn,'Program Name   [            ]');
  69.       QWrite (10,4,fgWarn+bgWarn,'Parameters     [                                                       ]');
  70.       QWrite (11,4,fgWarn+bgWarn,'Batch Filename [        ]');
  71.       QWrite (12,4,fgWarn+bgWarn,'Password       [        ]');
  72.       QWrite (13,4,fgWarn+bgWarn,'Pause/Return ? [YES] [NO]');
  73.       QWrite (14,4,fgWarn+bgWarn,'Prompt/Parms ? [YES] [NO]');
  74.  
  75.       IF Help_Toggle THEN
  76.         Show_Help (5,18,3,fgHelp+bgHelp); { option editor help }
  77.       WITH Cur_Menu_Ptr^.Opts[Opt_Nbr] DO
  78.         BEGIN
  79.           CASE Opt_Type OF
  80.             Batch : BEGIN
  81.                       QAttr (5,20,1,5,fgInpt+bgInpt);
  82.                       QWrite (7,4,fgWarn+bgWarn,'Option Name');
  83.                     END;
  84.             Delim : BEGIN
  85.                       QAttr (5,28,1,4,fgInpt+bgInpt);
  86.                       QWrite (7,4,fgWarn+bgWarn,'Delimiter  ');
  87.                     END;
  88.             Menu  : BEGIN
  89.                       QAttr (5,35,1,4,fgInpt+bgInpt);
  90.                       QWrite (7,4,fgWarn+bgWarn,'Menu Name  ');
  91.                     END;
  92.           END;
  93.           QWrite ( 6,20,-1,Select_Key);
  94.           QWrite ( 7,20,-1,Opt_Name);
  95.           QWrite ( 8,20,-1,Prg_Dir);
  96.           QWrite ( 9,20,-1,Prg_Name);
  97.           QWrite (10,20,-1,Parms);
  98.           QWrite (11,20,-1,Bat_Name);
  99.           QWrite (12,20,-1,Password);
  100.           IF Pause THEN
  101.             QAttr (13,20,1,3,fgInpt+bgInpt)
  102.           ELSE
  103.             QAttr (13,26,1,2,fgInpt+bgInpt);
  104.           IF Prompts THEN
  105.             QAttr (14,20,1,3,fgInpt+bgInpt)
  106.           ELSE
  107.             QAttr (14,26,1,2,fgInpt+bgInpt);
  108.  
  109.           Done := FALSE;
  110.           Opt_Changed := FALSE;
  111.           y2 := 5;
  112.           REPEAT
  113.             CASE y2 OF
  114.                5 : BEGIN
  115.                      CASE Opt_Type OF
  116.                        Batch : BEGIN
  117.                                  Opt_Num := 1;
  118.                                  QAttr (y2,20,1,5,fgWarn+bgWarn);
  119.                                END;
  120.                        Delim : BEGIN
  121.                                  Opt_Num := 2;
  122.                                  QAttr (y2,28,1,4,fgWarn+bgWarn);
  123.                                END;
  124.                        Menu  : BEGIN
  125.                                  Opt_Num := 3;
  126.                                  QAttr (y2,35,1,4,fgWarn+bgWarn);
  127.                                END;
  128.                      END;
  129.                      HSelect (y2,19,0,fgInpt+bgInpt,Opt_Num,'[',']',c,Extended);
  130.                      IF NOT(Extended) AND (c = Return) THEN
  131.                        BEGIN
  132.                          Changes := TRUE;
  133.                          Opt_Changed := TRUE;
  134.                          CASE Opt_Num OF
  135.                            1 : BEGIN
  136.                                  Opt_Type := Batch;
  137.                                  QWrite (7,4,fgWarn+bgWarn,'Option Name');
  138.                                END;
  139.                            2 : BEGIN
  140.                                  Opt_Type := Delim;
  141.                                  QWrite (7,4,fgWarn+bgWarn,'Delimiter  ');
  142.                                END;
  143.                            3 : BEGIN
  144.                                  Opt_Type := Menu;
  145.                                  QWrite (7,4,fgWarn+bgWarn,'Menu Name  ');
  146.                                END;
  147.                          END;
  148.                        END;
  149.                      CASE Opt_Type OF
  150.                        Batch : QAttr (y2,20,1,5,fgInpt+bgInpt);
  151.                        Delim : QAttr (y2,28,1,4,fgInpt+bgInpt);
  152.                        Menu  : QAttr (y2,35,1,4,fgInpt+bgInpt);
  153.                      END;
  154.                    END;
  155.                6 : Input (1,y2,20,fgInpt+bgInpt,Reply,c,Extended,Visible_Chrs);
  156.                7 : Input (Max_Opt_Len,y2,20,fgInpt+bgInpt,Reply,c,Extended,Visible_Chrs);
  157.                8 : Input (55,y2,20,fgInpt+bgInpt,Reply,c,Extended,Visible_Chrs);
  158.                9 : Input (12,y2,20,fgInpt+bgInpt,Reply,c,Extended,Visible_Chrs);
  159.               10 : Input (55,y2,20,fgInpt+bgInpt,Reply,c,Extended,Visible_Chrs);
  160.               11 : Input (8,y2,20,fgInpt+bgInpt,Reply,c,Extended,Visible_Chrs);
  161.               12 : Input (8,y2,20,fgInpt+bgInpt,Reply,c,Extended,Visible_Chrs);
  162.               13 : BEGIN
  163.                      IF Pause THEN
  164.                        BEGIN
  165.                          Opt_Num := 1;
  166.                          QAttr (y2,20,1,3,fgWarn+bgWarn);
  167.                        END
  168.                      ELSE
  169.                        BEGIN
  170.                          Opt_Num := 2;
  171.                          QAttr (y2,26,1,2,fgWarn+bgWarn);
  172.                        END;
  173.                      HSelect (y2,19,0,fgInpt+bgInpt,Opt_Num,'[',']',c,Extended);
  174.                      IF NOT(Extended) AND (c = Return) THEN
  175.                        BEGIN
  176.                          Changes := TRUE;
  177.                          Pause := Opt_Num = 1;
  178.                        END;
  179.                      IF Pause THEN
  180.                        QAttr (y2,20,1,3,fgInpt+bgInpt)
  181.                      ELSE
  182.                        QAttr (y2,26,1,2,fgInpt+bgInpt);
  183.                    END;
  184.               14 : BEGIN
  185.                      IF Prompts THEN
  186.                        Opt_Num := 1
  187.                      ELSE
  188.                        Opt_Num := 2;
  189.                      IF Prompts THEN
  190.                        QAttr (y2,20,1,3,fgWarn+bgWarn)
  191.                      ELSE
  192.                        QAttr (y2,26,1,2,fgWarn+bgWarn);
  193.                      HSelect (y2,19,0,fgInpt+bgInpt,Opt_Num,'[',']',c,Extended);
  194.                      IF NOT(Extended) AND (c = Return) THEN
  195.                        BEGIN
  196.                          Changes := TRUE;
  197.                          Prompts := Opt_Num = 1;
  198.                        END;
  199.                      IF Prompts THEN
  200.                        QAttr (y2,20,1,3,fgInpt+bgInpt)
  201.                      ELSE
  202.                        QAttr (y2,26,1,2,fgInpt+bgInpt);
  203.                    END;
  204.             END;
  205.  
  206.             IF Extended THEN
  207.               CASE ORD(c) OF
  208.                 F1 : BEGIN
  209.                        Help_Toggle := NOT Help_Toggle;
  210.                        Env_Changes := TRUE;
  211.                        IF Help_Toggle THEN
  212.                          Show_Help (5,18,3,fgHelp+bgHelp)
  213.                        ELSE
  214.                          Erase_Help;
  215.                      END;
  216.                 61 : Done := TRUE;
  217.                 72,75 : Up_Arrow; { up arrow/left arrow }
  218.                 80,77 : Down_Arrow; { down arrow/right arrow }
  219.                 71 : y2 := 5; { home }
  220.                 79 : IF Opt_Type = Batch THEN { end }
  221.                        y2 := 14
  222.                      ELSE
  223.                        IF Opt_Type = Delim THEN
  224.                          y2 := 7
  225.                        ELSE
  226.                          y2 := 12;
  227.                 ELSE
  228.                   Sound_Bell;
  229.               END
  230.             ELSE
  231.               CASE ORD(c) OF
  232.                  0 : BEGIN { something was entered }
  233.                        Changes := TRUE;
  234.                        CASE y2 OF
  235.                           6 : BEGIN
  236.                                 Select_Key := Reply[1];
  237.                                 QWrite (y2,20,-1,Select_Key);
  238.                                 Opt_Changed := TRUE;
  239.                               END;
  240.                           7 : BEGIN
  241.                                 IF Opt_Type = Menu THEN
  242.                                   BEGIN
  243.                                     Temp_Menu_Ptr := Head_Menu_Ptr;
  244.                                     WHILE (Temp_Menu_Ptr^.Menu_Name <> Opt_Name) AND
  245.                                           (Temp_Menu_Ptr^.Next_Menu_Ptr <> NIL) DO
  246.                                       Temp_Menu_Ptr := Temp_Menu_Ptr^.Next_Menu_Ptr;
  247.                                     IF Temp_Menu_Ptr^.Menu_Name = Opt_Name THEN { menu already exists }
  248.                                       BEGIN
  249.                                         { now, check to see if new name is an
  250.                                           already existing menu }
  251.                                         Temp_Menu_Ptr := Head_Menu_Ptr;
  252.                                         WHILE (Temp_Menu_Ptr^.Menu_Name <> Reply) AND
  253.                                               (Temp_Menu_Ptr^.Next_Menu_Ptr <> NIL) DO
  254.                                           Temp_Menu_Ptr := Temp_Menu_Ptr^.Next_Menu_Ptr;
  255.                                         IF Temp_Menu_Ptr^.Menu_Name = Reply THEN
  256.                                           BEGIN
  257.                                             { new name is an existing menu; user must want to reassign it }
  258.                                             Opt_Name := Reply;
  259.                                           END
  260.                                         ELSE
  261.                                           BEGIN
  262.                                             { new name does not exist... }
  263.                                             { do you wish to rename or create ? }
  264.                                             i := Opt_Question('Rename/Create Existing Menu',
  265.                                                'Rename the existing menu, or Create a new one ? [RENAME] [CREATE]',11,13,14);
  266.                                             IF i = 1 THEN
  267.                                               BEGIN
  268.                                                 { must search all options for
  269.                                                   old menu name, and change to
  270.                                                   new name, as well as the menu
  271.                                                   itself }
  272.                                                 Temp_Menu_Ptr := Head_Menu_Ptr;
  273.                                                 Old_Opt_Name := Opt_Name;
  274.                                                 REPEAT
  275.                                                   FOR i := 1 TO Max_Nbr_Opts DO
  276.                                                     IF (Temp_Menu_Ptr^.Opts[i].Opt_Type = Menu) AND
  277.                                                        (Temp_Menu_Ptr^.Opts[i].Opt_Name = Old_Opt_Name) THEN
  278.                                                       Temp_Menu_Ptr^.Opts[i].Opt_Name := Reply;
  279.                                                   IF Temp_Menu_Ptr^.Menu_Name = Old_Opt_Name THEN
  280.                                                     Temp_Menu_Ptr^.Menu_Name := Reply;
  281.                                                   Temp_Menu_Ptr := Temp_Menu_Ptr^.Next_Menu_Ptr;
  282.                                                 UNTIL Temp_Menu_Ptr = NIL;
  283.                                               END
  284.                                             ELSE
  285.                                               Opt_Name := Reply;
  286.                                           END;
  287.                                       END
  288.                                     ELSE
  289.                                       BEGIN
  290.                                         { old name does not exist... }
  291.                                         Opt_Name := Reply;
  292.                                       END;
  293.                                   END
  294.                                 ELSE
  295.                                   Opt_Name := Reply;
  296.                                 QWrite (y2,20,-1,Justify(Opt_Name,Left,Max_Opt_Len,' '));
  297.                                 Opt_Changed := TRUE;
  298.                               END;
  299.                           8 : BEGIN
  300.                                 Prg_Dir := Reply;
  301.                                 QWrite (y2,20,-1,Justify(Prg_Dir,Left,55,' '));
  302.                               END;
  303.                           9 : BEGIN
  304.                                 Prg_Name := Reply;
  305.                                 QWrite (y2,20,-1,Justify(Prg_Name,Left,12,' '));
  306.                               END;
  307.                          10 : BEGIN
  308.                                 Parms := Reply;
  309.                                 QWrite (y2,20,-1,Justify(Parms,Left,55,' '));
  310.                               END;
  311.                          11 : BEGIN
  312.                                 Bat_Name := Reply;
  313.                                 QWrite (y2,20,-1,Justify(Bat_Name,Left,8,' '));
  314.                               END;
  315.                          12 : BEGIN
  316.                                 Password := Reply;
  317.                                 QWrite (y2,20,-1,Justify(Password,Left,8,' '));
  318.                               END;
  319.                        END;
  320.                        Down_Arrow;
  321.                      END;
  322.                 13 : Down_Arrow; { enter }
  323.                 27 : Done := TRUE; { escape }
  324.                 ELSE
  325.                   Sound_Bell;
  326.               END;
  327.           UNTIL Done;
  328.         END; { WITH Opts[Opt_Nbr] }
  329.       IF Help_Toggle THEN
  330.         Erase_Help;
  331.       Show_Scr (3,3,14,76,Option_Scr_Ptr);
  332.       IF Help_Toggle THEN
  333.         Show_Help (0,Get_Help_Row(Cur_Menu_Ptr),3,fgHelp+bgHelp); { menu help }
  334.  
  335.       IF Opt_Changed THEN
  336.         WITH Cur_Menu_Ptr^ DO
  337.           WITH Opts[y-Row] DO
  338.             IF Opt_Type = Delim THEN
  339.               QWrite (y,Col+1,-1,Justify(Opt_Name,Center,Max_Opt_Len+4,'─'))
  340.             ELSE
  341.               QWrite (y,Col+1,-1,CONCAT(Select_Key,'   ',Justify(Opt_Name,Left,Max_Opt_Len,' ')));
  342.     END;
  343.