home *** CD-ROM | disk | FTP | other *** search
/ World of Shareware - Software Farm 2 / wosw_2.zip / wosw_2 / PASCAL / MMSRC.ZIP / SETTINGS.PAS < prev    next >
Pascal/Delphi Source File  |  1988-12-02  |  11KB  |  328 lines

  1.     PROCEDURE Settings_Editor;
  2.     VAR Extended,Done : BOOLEAN;
  3.         x,y2,Old_x,Old_y2,i : BYTE;
  4.         c : CHAR;
  5.         Option_Scr_Ptr : POINTER;
  6.         Redraw : BOOLEAN;
  7.  
  8.       PROCEDURE Down_Arrow;
  9.       VAR Bot_y2 : BYTE;
  10.       BEGIN
  11.         IF x = 7 THEN
  12.           Bot_y2 := 15
  13.         ELSE
  14.           Bot_y2 := 20;
  15.         IF y2 < Bot_y2 THEN
  16.           y2 := y2 + 1
  17.         ELSE
  18.           BEGIN
  19.             y2 := 5;
  20.             CASE x OF
  21.                7 : x := 30;
  22.               30 : x := 53;
  23.               53 : x := 7;
  24.             END;
  25.           END;
  26.       END;
  27.  
  28.       PROCEDURE Right_Arrow;
  29.       BEGIN
  30.         CASE x OF
  31.            7 : x := 30;
  32.           30 : x := 53;
  33.           53 : IF y2 = 20 THEN
  34.                  BEGIN
  35.                    x := 7;
  36.                    y2 := 5;
  37.                  END
  38.                ELSE
  39.                  BEGIN
  40.                    IF y2 >= 15 THEN
  41.                      x := 30
  42.                    ELSE
  43.                      x := 7;
  44.                    y2 := y2 + 1;
  45.                  END;
  46.         END;
  47.       END;
  48.  
  49.       PROCEDURE Up_Arrow;
  50.       BEGIN
  51.         IF y2 > 5 THEN
  52.           y2 := y2 - 1
  53.         ELSE
  54.           IF x = 30 THEN
  55.             BEGIN
  56.               y2 := 15;
  57.               x := 7;
  58.             END
  59.           ELSE
  60.             BEGIN
  61.               y2 := 20;
  62.               IF x = 7 THEN
  63.                 x := 53
  64.               ELSE
  65.                 x := 30;
  66.             END;
  67.       END;
  68.  
  69.       PROCEDURE Left_Arrow;
  70.       BEGIN
  71.         CASE x OF
  72.            7 : BEGIN
  73.                  x := 53;
  74.                  IF y2 = 5 THEN
  75.                    y2 := 20
  76.                  ELSE
  77.                    y2 := y2 - 1;
  78.                END;
  79.           30 : IF y2 > 15 THEN
  80.                  BEGIN
  81.                    x := 53;
  82.                    y2 := y2 - 1;
  83.                  END
  84.                ELSE
  85.                  x := 7;
  86.           53 : x := 30;
  87.         END;
  88.       END;
  89.  
  90.       PROCEDURE Erase_Brackets (Row,Col : BYTE);
  91.       BEGIN
  92.         QWrite (Row,Col-2,Black+bgWarn,' ');
  93.         QAttr (Row,Col-1,1,1,fgWarn+bgWarn);
  94.         QWrite (Row,Col+21,Black+bgWarn,' ');
  95.         QAttr (Row,Col+20,1,1,fgWarn+bgWarn);
  96.       END;
  97.  
  98.       PROCEDURE Show_Brackets (Row,Col : BYTE);
  99.       BEGIN
  100.         QWrite (Row,Col-2,fgHOpt+bgHOpt,CHR(16));
  101.         QAttr (Row,Col-1,1,1,fgHOpt+bgHOpt);
  102.         QWrite (Row,Col+21,fgHOpt+bgHOpt,CHR(17));
  103.         QAttr (Row,Col+20,1,1,fgHOpt+bgHOpt);
  104.       END;
  105.  
  106.       PROCEDURE Get_Attrs (Row,Col : BYTE; VAR fgAttrPtr,bgAttrPtr : POINTER);
  107.       BEGIN
  108.         CASE Col OF
  109.            7 : CASE Row OF
  110.                   5 : BEGIN fgAttrPtr := @fgMain; bgAttrPtr := @bgMain; END;
  111.                   6 : BEGIN fgAttrPtr := @fgCmnd; bgAttrPtr := @bgCmnd; END;
  112.                   7 : BEGIN fgAttrPtr := @fgName; bgAttrPtr := @bgName; END;
  113.                   8 : BEGIN fgAttrPtr := @fgHOpt; bgAttrPtr := @bgHOpt; END;
  114.                   9 : BEGIN fgAttrPtr := @fgSlct; bgAttrPtr := @bgSlct; END;
  115.                  10 : BEGIN fgAttrPtr := @fgHelp; bgAttrPtr := @bgHelp; END;
  116.                  11 : BEGIN fgAttrPtr := @fgNErr; bgAttrPtr := @bgNErr; END;
  117.                  12 : BEGIN fgAttrPtr := @fgNote; bgAttrPtr := @bgNote; END;
  118.                  13 : BEGIN fgAttrPtr := @fgFErr; bgAttrPtr := @bgFErr; END;
  119.                  14 : BEGIN fgAttrPtr := @fgWarn; bgAttrPtr := @bgWarn; END;
  120.                  15 : BEGIN fgAttrPtr := @fgInpt; bgAttrPtr := @bgInpt; END;
  121.                END;
  122.           30 : BEGIN
  123.                  fgAttrPtr := @fgMenu[Row-4];
  124.                  bgAttrPtr := @bgMenu[Row-4];
  125.                END;
  126.           53 : BEGIN
  127.                  fgAttrPtr := @fgTitl[Row-4];
  128.                  bgAttrPtr := @bgTitl[Row-4];
  129.                END;
  130.         END;
  131.       END;
  132.  
  133.       PROCEDURE Inc_Foreground (Row,Col : BYTE);
  134.       VAR fgAttrPtr,bgAttrPtr : POINTER;
  135.       BEGIN
  136.         Redraw := TRUE;
  137.         Env_Changes := TRUE;
  138.         Get_Attrs (Row,Col,fgAttrPtr,bgAttrPtr);
  139.         IF BYTE(fgAttrPtr^) < 15 THEN
  140.           BYTE(fgAttrPtr^) := BYTE(fgAttrPtr^) + 1
  141.         ELSE
  142.           BYTE(fgAttrPtr^) := 0;
  143.         QAttr (Row,Col,1,20,BYTE(fgAttrPtr^)+BYTE(bgAttrPtr^));
  144.       END;
  145.  
  146.       PROCEDURE Dec_Foreground (Row,Col : BYTE);
  147.       VAR fgAttrPtr,bgAttrPtr : POINTER;
  148.       BEGIN
  149.         Redraw := TRUE;
  150.         Env_Changes := TRUE;
  151.         Get_Attrs (Row,Col,fgAttrPtr,bgAttrPtr);
  152.         IF BYTE(fgAttrPtr^) > 0 THEN
  153.           BYTE(fgAttrPtr^) := BYTE(fgAttrPtr^) - 1
  154.         ELSE
  155.           BYTE(fgAttrPtr^) := 15;
  156.         QAttr (Row,Col,1,20,BYTE(fgAttrPtr^)+BYTE(bgAttrPtr^));
  157.       END;
  158.  
  159.       PROCEDURE Inc_Background (Row,Col : BYTE);
  160.       VAR fgAttrPtr,bgAttrPtr : POINTER;
  161.       BEGIN
  162.         Redraw := TRUE;
  163.         Env_Changes := TRUE;
  164.         Get_Attrs (Row,Col,fgAttrPtr,bgAttrPtr);
  165.         IF (BYTE(bgAttrPtr^) DIV 16) < 7 THEN
  166.           BYTE(bgAttrPtr^) := BYTE(bgAttrPtr^) + 16
  167.         ELSE
  168.           BYTE(bgAttrPtr^) := 0;
  169.         QAttr (Row,Col,1,20,BYTE(fgAttrPtr^)+BYTE(bgAttrPtr^));
  170.       END;
  171.  
  172.       PROCEDURE Dec_Background (Row,Col : BYTE);
  173.       VAR fgAttrPtr,bgAttrPtr : POINTER;
  174.       BEGIN
  175.         Redraw := TRUE;
  176.         Env_Changes := TRUE;
  177.         Get_Attrs (Row,Col,fgAttrPtr,bgAttrPtr);
  178.         IF (BYTE(bgAttrPtr^) DIV 16) > 0 THEN
  179.           BYTE(bgAttrPtr^) := BYTE(bgAttrPtr^) - 16
  180.         ELSE
  181.           BYTE(bgAttrPtr^) := 7 * 16;
  182.         QAttr (Row,Col,1,20,BYTE(fgAttrPtr^)+BYTE(bgAttrPtr^));
  183.       END;
  184.  
  185.       PROCEDURE Redraw_Screen;
  186.       VAR Temp_Menu_Nbr : WORD;
  187.  
  188.         PROCEDURE Redraw_Menus (Draw_Menu_Ptr : Menu_Ptr; VAR Menu_Nbr : WORD);
  189.         VAR Temp_Menu_Ptr : Menu_Ptr;
  190.             Temp_Help_Toggle : BOOLEAN;
  191.         BEGIN
  192.           Menu_Nbr := Menu_Nbr + 1;
  193.           Menu_Idx := Menu_Nbr MOD 16;
  194.           Temp_Help_Toggle := Help_Toggle;
  195.           Help_Toggle := FALSE;
  196.           FreeMem (Draw_Menu_Ptr^.Menu_Scr_Ptr,(Max_Nbr_Opts+2)*(Max_Opt_Len+8)shl 1);
  197.           Show_Menu (Draw_Menu_Ptr);
  198.           Help_Toggle := Temp_Help_Toggle;
  199.           IF Draw_Menu_Ptr <> Cur_Menu_Ptr THEN
  200.             BEGIN
  201.               Temp_Menu_Ptr := Head_Menu_Ptr;
  202.               WHILE Temp_Menu_Ptr^.Exit_Menu_Name <> Draw_Menu_Ptr^.Menu_Name DO
  203.                 Temp_Menu_Ptr := Temp_Menu_Ptr^.Next_Menu_Ptr;
  204.               Redraw_Menus (Temp_Menu_Ptr,Menu_Nbr);
  205.             END;
  206.         END;
  207.  
  208.       BEGIN { Redraw_Screen }
  209.         Init_Scr (fgMain,bgMain);
  210.         Temp_Menu_Nbr := 0;
  211.         Redraw_Menus (Head_Menu_Ptr,Temp_Menu_Nbr);
  212.         IF Help_Toggle THEN
  213.           Show_Help (0,Get_Help_Row(Cur_Menu_Ptr),3,fgHelp+bgHelp); { menu help }
  214.       END;
  215.  
  216.     BEGIN { Settings_Editor }
  217.       { might want to add password ability to this option. }
  218.       { if so, would want to check for password here...    }
  219.  
  220.       IF Help_Toggle THEN
  221.         Erase_Help;
  222.       Save_Scr (3,4,20,74,Option_Scr_Ptr);
  223.       Draw_Box (3,4,19,72,Black+bgWarn,No_Border,-1,Shade,fgMain+bgMain-8);
  224.       QWrite (3,4,(bgWarn DIV 16)+bBlack+8,Justify('Settings Editor',Center,72,' '));
  225.  
  226.       QWrite ( 5, 7,fgMain+bgMain,CONCAT(Make_String(8,Shade),'MAIN',Make_String(8,Shade)));
  227.       QWrite ( 6, 7,fgCmnd+bgCmnd,'       COMMAND      ');
  228.       QWrite ( 7, 7,fgName+bgName,'        NAME        ');
  229.       QWrite ( 8, 7,fgHOpt+bgHOpt,' OPTION HIGHLIGHTS  ');
  230.       QWrite ( 9, 7,fgSlct+bgSlct,' OPTION SELECT KEYS ');
  231.       QWrite (10, 7,fgHelp+bgHelp,'        HELP        ');
  232.       QWrite (11, 7,fgNErr+bgNErr,'       ERRORS       ');
  233.       QWrite (12, 7,fgNote+bgNote,'        NOTES       ');
  234.       QWrite (13, 7,fgFErr+bgFErr,'    FATAL ERRORS    ');
  235.       QWrite (14, 7,fgWarn+bgWarn,'      WARNINGS      ');
  236.       QWrite (15, 7,fgInpt+bgInpt,'    INPUT FIELDS    ');
  237.       FOR i := 5 TO 15 DO
  238.         BEGIN
  239.           QWrite (i,6,fgWarn+bgWarn,'[');
  240.           QWrite (i,27,fgWarn+bgWarn,']');
  241.         END;
  242.       FOR i := 1 TO 16 DO
  243.         BEGIN
  244.           QWrite (i+4,30,fgMenu[i]+bgMenu[i],CONCAT('    MENU BOX ',Justify(CIS(i),Right,2,' '),'     '));
  245.           QWrite (i+4,29,fgWarn+bgWarn,'[');
  246.           QWrite (i+4,50,fgWarn+bgWarn,']');
  247.           QWrite (i+4,53,fgTitl[i]+bgTitl[i],CONCAT('   MENU ',Justify(CIS(i),Right,2,' '),' TITLE    '));
  248.           QWrite (i+4,52,fgWarn+bgWarn,'[');
  249.           QWrite (i+4,73,fgWarn+bgWarn,']');
  250.         END;
  251.  
  252.       IF Help_Toggle THEN
  253.         Show_Help (7,16,1,fgHelp+bgHelp); { settings editor help }
  254.  
  255.       x := 7;
  256.       Old_x := x;
  257.       y2 := 5;
  258.       Old_y2 := y2;
  259.       Done := FALSE;
  260.       Redraw := FALSE;
  261.       REPEAT
  262.         IF (x <> Old_x) OR (y2 <> Old_y2) THEN
  263.           BEGIN
  264.             Erase_Brackets (Old_y2,Old_x);
  265.             Old_x := x;
  266.             Old_y2 := y2;
  267.           END;
  268.         Show_Brackets (y2,x);
  269.         REPEAT
  270.           IF Date_Time_Toggle THEN
  271.             Show_Date_And_Time;
  272.         UNTIL KeyPressed;
  273.         Wait_For_Key (c,Extended);
  274.         IF Extended THEN
  275.           CASE ORD(c) OF
  276.             F1 : BEGIN         { F1 }
  277.                    Help_Toggle := NOT Help_Toggle;
  278.                    Env_Changes := TRUE;
  279.                    IF Help_Toggle THEN
  280.                      Show_Help (7,16,1,fgHelp+bgHelp)
  281.                    ELSE
  282.                      Erase_Help;
  283.                  END;
  284.             61 : Done := TRUE; { F3 }
  285.             72 : Up_Arrow;     { up arrow }
  286.             75 : Left_Arrow;   { left arrow }
  287.             77 : Right_Arrow;  { right arrow }
  288.             80 : Down_Arrow;   { down arrow }
  289.             71 : BEGIN         { home }
  290.                    y2 := 5;
  291.                    x := 7;
  292.                  END;
  293.             79 : BEGIN         { end }
  294.                    y2 := 20;
  295.                    x := 53;
  296.                  END;
  297.             ELSE
  298.               Sound_Bell;
  299.           END
  300.         ELSE
  301.           CASE ORD(c) OF
  302.             13 : Down_Arrow;           { enter }
  303.             27 : Done := TRUE;         { escape }
  304.             73,                        { I }
  305.             62,                        { > }
  306.             43 : Inc_Foreground(y2,x); { + }
  307.             68,                        { D }
  308.             60,                        { < }
  309.             95 : Dec_Foreground(y2,x); { _ }
  310.             105,                       { i }
  311.             46,                        { . }
  312.             61 : Inc_Background(y2,x); { = }
  313.             100,                       { d }
  314.             44,                        { , }
  315.             45 : Dec_Background(y2,x); { - }
  316.             ELSE
  317.               Sound_Bell;
  318.           END;
  319.       UNTIL Done;
  320.       IF Help_Toggle THEN
  321.         Erase_Help;
  322.       Show_Scr (3,4,20,74,Option_Scr_Ptr);
  323.       IF Help_Toggle THEN
  324.         Show_Help (0,Get_Help_Row(Cur_Menu_Ptr),3,fgHelp+bgHelp); { menu help }
  325.       IF Redraw THEN
  326.         Redraw_Screen;
  327.     END;
  328.