home *** CD-ROM | disk | FTP | other *** search
/ PC-SIG Library 8 / PC-SIG Library CD-ROM (8th Edition) (1990-04).iso / 1901_000 / disk1983 / menutest.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1989-07-06  |  22.1 KB  |  724 lines

  1. Program MenuTest;
  2.  
  3. Uses DOS,CRT,Mouse,Graph,Menu;
  4.  
  5. Var I,J,K,X,Y,Code,Fore,
  6.     Back,Sh,ShD,Driver,Mode : Integer;
  7.     Ch                      : Char;
  8.     M                       : MouseType;
  9.     Screen                  : Polygon;
  10.     MainMenu,ModeMenu,
  11.     ColorMenu,ShadowMenu,
  12.     ShadDirMenu,TestMenu,
  13.     InterMenu               : MenuType;
  14.  
  15. {------------------------------------------------------------------------}
  16.  
  17. Procedure InitSystem;
  18.  
  19.   Var GraphDriver,GraphMode,ErrorCode : Integer;
  20.       Ends                            : Char;
  21.  
  22.     Begin
  23.       GraphDriver := Detect;
  24.       InitGraph(GraphDriver,GraphMode,'');
  25.       ErrorCode := Graphresult;
  26.       If ErrorCode <> grOK then
  27.         Begin
  28.           Writeln('Graphics error: ',GraphErrorMsg(ErrorCode));
  29.           Writeln('Program aborted...');
  30.           Ends := ReadKey;
  31.           Halt(1);
  32.         End;
  33.     End;
  34.  
  35. {------------------------------------------------------------------------}
  36.  
  37. Function ReadKbd : Char;
  38.  
  39.   Var Ch      : Char;
  40.       FuncKey : Boolean;
  41.  
  42.     Begin
  43.       Ch := ReadKey;
  44.       If Ch <> #0 then FuncKey := False else
  45.         Begin
  46.           FuncKey := True;
  47.           Ch      := ReadKey;
  48.         End;
  49.       ReadKbd := Ch;
  50.     End;
  51.  
  52. {-------------------------------------------------------------------------}
  53.  
  54. Procedure SetMainMenu(Var MainMenu : MenuType);
  55.  
  56.   Var OneOpt : OneList;
  57.       I      : Byte;
  58.  
  59.     Begin
  60.       OneOpt[1] := 'Show Menu';
  61.       OneOpt[2] := 'Mode';
  62.       OneOpt[3] := 'Colors';
  63.       OneOpt[4] := 'Shadow';
  64.       OneOpt[5] := 'Quit';
  65.       SetUpMenu(MainMenu,5,0,GraphMenu,OneOpt);
  66.       SetMenuColors(MainMenu,Black,LightBlue);
  67.       For I := 1 to 5 do
  68.         SetMenuOptionCode(MainMenu,I,0,100 * I);
  69.     End;
  70.  
  71. {------------------------------------------------------------------------}
  72.  
  73. Procedure SetModeMenu(Var ModeMenu : MenuType);
  74.  
  75.   Var OneOpt : OneList;
  76.       I      : Byte;
  77.  
  78.     Begin
  79.       OneOpt[1] := 'Text';
  80.       OneOpt[2] := 'CGA';
  81.       OneOpt[3] := 'Hercules';
  82.       OneOpt[4] := 'EGA';
  83.       OneOpt[5] := 'VGA';
  84.       SetUpMenu(ModeMenu,0,5,GraphMenu,OneOpt);
  85.       SetMenuColors(ModeMenu,Black,LightBlue);
  86.       For I := 1 to 5 do
  87.         SetMenuOptionCode(ModeMenu,0,I,200 + I);
  88.     End;
  89.  
  90. {------------------------------------------------------------------------}
  91.  
  92. Procedure SetColorMenu(Var ColorMenu : MenuType; NumCol : Byte; Free : Boolean);
  93.  
  94.   Var OneOpt : OneList;
  95.       I      : Byte;
  96.  
  97.     Begin
  98.       If Free then FreeList(ColorMenu);
  99.       If NumCol = 16 then
  100.         Begin
  101.           OneOpt[ 1] := 'Black';
  102.           OneOpt[ 2] := 'Blue';
  103.           OneOpt[ 3] := 'Green';
  104.           OneOpt[ 4] := 'Cyan';
  105.           OneOpt[ 5] := 'Red';
  106.           OneOpt[ 6] := 'Magenta';
  107.           OneOpt[ 7] := 'Brown';
  108.           OneOpt[ 8] := 'Light Gray';
  109.           OneOpt[ 9] := 'Dark Gray';
  110.           OneOpt[10] := 'Light Blue';
  111.           OneOpt[11] := 'Light Green';
  112.           OneOpt[12] := 'Light Cyan';
  113.           OneOpt[13] := 'Light Red';
  114.           OneOpt[14] := 'Light Magenta';
  115.           OneOpt[15] := 'Yellow';
  116.           OneOpt[16] := 'White';
  117.           SetUpMenu(ColorMenu,0,16,GraphMenu,OneOpt);
  118.           For I := 1 to 16 do
  119.             SetMenuOptionCode(ColorMenu,0,I,300 + I);
  120.         End else
  121.           Begin
  122.             OneOpt[1] := 'Black';
  123.             OneOpt[2] := 'Light Green';
  124.             OneOpt[3] := 'Light Red';
  125.             OneOpt[4] := 'Yellow';
  126.             SetUpMenu(ColorMenu,0,4,GraphMenu,OneOpt);
  127.             For I := 1 to 4 do
  128.               SetMenuOptionCode(ColorMenu,0,I,300 + I);
  129.           End;
  130.       SetMenuColors(ColorMenu,Black,LightBlue);
  131.     End;
  132.  
  133. {------------------------------------------------------------------------}
  134.  
  135. Procedure SetShadowMenu(Var ShadowMenu : MenuType);
  136.  
  137.   Var OneOpt : OneList;
  138.       I      : Byte;
  139.  
  140.     Begin
  141.       OneOpt[1] := 'Direction';
  142.       OneOpt[2] := 'Colors';
  143.       SetUpMenu(ShadowMenu,0,2,GraphMenu,OneOpt);
  144.       SetMenuColors(ShadowMenu,Black,LightBlue);
  145.       For I := 1 to 2 do
  146.         SetMenuOptionCode(ShadowMenu,0,I,400 + I);
  147.     End;
  148.  
  149. {------------------------------------------------------------------------}
  150.  
  151. Procedure SetShadDirMenu(Var ShadDirMenu : MenuType);
  152.  
  153.   Var OneOpt : OneList;
  154.       I      : Byte;
  155.  
  156.     Begin
  157.       OneOpt[1] := 'No Shadow';
  158.       OneOpt[2] := 'Upper Left';
  159.       OneOpt[3] := 'Upper Right';
  160.       OneOpt[4] := 'Lower Left';
  161.       OneOpt[5] := 'Lower Right';
  162.       SetUpMenu(ShadDirMenu,0,5,GraphMenu,OneOpt);
  163.       SetMenuColors(ShadDirMenu,Black,LightBlue);
  164.       For I := 1 to 5 do
  165.         SetMenuOptionCode(ShadDirMenu,0,I,500 + I);
  166.     End;
  167.  
  168. {------------------------------------------------------------------------}
  169.  
  170. Procedure SetInterMenu(Var InterMenu : MenuType);
  171.  
  172.   Var OneOpt : OneList;
  173.       I      : Byte;
  174.  
  175.     Begin
  176.       OneOpt[1] := 'Foreground';
  177.       OneOpt[2] := 'Background';
  178.       SetUpMenu(InterMenu,0,2,GraphMenu,OneOpt);
  179.       SetMenuColors(InterMenu,Black,LightBlue);
  180.       For I := 1 to 2 do
  181.         SetMenuOptionCode(InterMenu,0,I,600 + I);
  182.     End;
  183.  
  184.  
  185. {------------------------------------------------------------------------}
  186.  
  187. Procedure SetTestMenu(Var TestMenu : MenuType);
  188.  
  189.   Var TwoOpt : TwoList;
  190.       I,J,K  : Integer;
  191.  
  192.     Begin
  193.       TwoOpt[1,1] := 'Pascal';
  194.       TwoOpt[2,1] := 'C';
  195.       TwoOpt[3,1] := 'BASIC';
  196.       TwoOpt[4,1] := 'Prolog';
  197.       TwoOpt[1,2] := 'Fortran';
  198.       TwoOpt[2,2] := 'Cobal';
  199.       TwoOpt[3,2] := 'Modula';
  200.       TwoOpt[4,2] := 'Forth';
  201.       TwoOpt[1,3] := 'IBM';
  202.       TwoOpt[2,3] := 'Compaq';
  203.       TwoOpt[3,3] := 'Tandy';
  204.       TwoOpt[4,3] := 'AST Research';
  205.       SetUpMenu(TestMenu,4,3,GraphMenu,TwoOpt);
  206.       K := 700;
  207.       For J := 1 to 3 do
  208.         For I := 1 to 4 do
  209.           Begin
  210.             Inc(K);
  211.             SetMenuOptionCode(TestMenu,I,J,K);
  212.           End;
  213.     End;
  214.  
  215. {------------------------------------------------------------------------}
  216.  
  217. Procedure ChangeVideoModes(Var Name : MenuType; Mode : Boolean);
  218.  
  219.   Begin
  220.     Name.Mode := Mode;
  221.     If Name.Direction then
  222.       Begin
  223.         If Mode then
  224.           SetMenuSpaces(Name,5,3) else
  225.             SetMenuSpaces(Name,3,0);
  226.         SetMenuSpacing(Name);
  227.       End else
  228.         Begin
  229.           If Mode then
  230.             Begin
  231.               If Driver <> CGA then
  232.                 SetMenuSpaces(Name,65,5) else
  233.                   SetMenuSpaces(Name,10,5);
  234.             End else
  235.               SetMenuSpaces(Name,8,0);
  236.           SetMenuSpacing(Name);
  237.           If Mode then
  238.             SetMenuRect(Name,MenuMinX(Name),MenuMinY(Name),
  239.                              GetMaxX - 2,MenuMaxY(Name)) else
  240.              SetMenuRect(Name,MenuMinX(Name),MenuMinY(Name),79,MenuMaxY(Name));
  241.         End;
  242.     If Not Mode then
  243.       Begin
  244.         If Driver = HercMono then
  245.           SetMenuColors(Name,White,Black);
  246.       End else
  247.         SetMenuColors(Name,Black,LightBlue);
  248.   End;
  249.  
  250. {------------------------------------------------------------------------}
  251.  
  252. Procedure MenuProcessor(Code : Integer);
  253.  
  254.   Var I : Integer;
  255.  
  256.   Begin
  257.     Case Code of
  258.       100 : Begin
  259.               SetMenuColors(TestMenu,Fore,Back);
  260.               SetMenuShadow(TestMenu,Sh,ShD);
  261.               If MenuMode(TestMenu) then
  262.                 SetMenuSpaces(TestMenu,5,5) else
  263.                   SetMenuSpaces(TestMenu,3,0);
  264.               SetMenuSpacing(TestMenu);
  265.               If MenuOpen(List[1]^) then
  266.                 MenuToggle;
  267.               If MenuMode(TestMenu) then
  268.                 OpenMenu(TestMenu,10,100) else
  269.                   OpenMenu(TestMenu,5,10);
  270.             End;
  271.  
  272.       200 : Begin
  273.               If MenuOpen(List[1]^) then
  274.                 MenuToggle;
  275.               OpenMenu(ModeMenu,OptMinX(MainMenu),MenuMaxY(MainMenu));
  276.             End;
  277.       201 : Begin
  278.               If (MenuOpen(List[MenuNum]^)) and (MenuNum > 0) then
  279.                 MenuToggle;
  280.               If MenuOpen(List[0]^) then CloseMenu(List[0]^);
  281.               DetectGraph(Driver,Mode);
  282.               If Driver = HercMono then
  283.                 TextMode(Mono) else
  284.                   TextMode(Co80);
  285.               SetColorMenu(ColorMenu,16,True);
  286.               ChangeVideoModes(MainMenu,TextMenu);
  287.               ChangeVideoModes(ModeMenu,TextMenu);
  288.               ChangeVideoModes(ColorMenu,TextMenu);
  289.               ChangeVideoModes(ShadowMenu,TextMenu);
  290.               ChangeVideoModes(ShadDirMenu,TextMenu);
  291.               ChangeVideoModes(InterMenu,TextMenu);
  292.               ChangeVideoModes(TestMenu,TextMenu);
  293.               If MouseExists then ResetMouse;
  294.               TextBackGround(Green);
  295.               ClrScr;
  296.               CursorOff;
  297.               OpenMenu(MainMenu,1,1);
  298.               If MouseExists then ShowMouse;
  299.             End;
  300.       202 : Begin
  301.               If (MenuOpen(List[MenuNum]^)) and (MenuNum > 0) then
  302.                 MenuToggle;
  303.               If MenuOpen(List[0]^) then CloseMenu(List[0]^);
  304.               If ScreenMode then CloseGraph;
  305.               Driver := CGA;
  306.               Mode   := CGAC0;
  307.               InitGraph(Driver,Mode,'');
  308.               Screen[1].X :=       0; Screen[1].Y :=       0;
  309.               Screen[2].X :=       0; Screen[2].Y := GetMaxY;
  310.               Screen[3].X := GetMaxX; Screen[3].Y := GetMaxY;
  311.               Screen[4].X := GetMaxX; Screen[4].Y :=       0;
  312.               Screen[5] := Screen[1];
  313.               SetColorMenu(ColorMenu,4,True);
  314.               ChangeVideoModes(MainMenu,GraphMenu);
  315.               ChangeVideoModes(ModeMenu,GraphMenu);
  316.               ChangeVideoModes(ColorMenu,GraphMenu);
  317.               ChangeVideoModes(ShadowMenu,GraphMenu);
  318.               ChangeVideoModes(ShadDirMenu,GraphMenu);
  319.               ChangeVideoModes(InterMenu,GraphMenu);
  320.               ChangeVideoModes(TestMenu,GraphMenu);
  321.               SetFillStyle(InterLeaveFill,Green);
  322.               FillPoly(5,Screen);
  323.               DrawPoly(5,Screen);
  324.               OpenMenu(MainMenu,1,1);
  325.               If MouseExists then ShowMouse;
  326.             End;
  327.       203 : Begin
  328.               If (MenuOpen(List[MenuNum]^)) and (MenuNum > 0) then
  329.                 MenuToggle;
  330.               If MenuOpen(List[0]^) then CloseMenu(List[0]^);
  331.               If ScreenMode then CloseGraph;
  332.               Driver := HercMono;
  333.               Mode   := HercMonoHi;
  334.               InitGraph(Driver,Mode,'');
  335.               Screen[1].X :=       0; Screen[1].Y :=       0;
  336.               Screen[2].X :=       0; Screen[2].Y := GetMaxY;
  337.               Screen[3].X := GetMaxX; Screen[3].Y := GetMaxY;
  338.               Screen[4].X := GetMaxX; Screen[4].Y :=       0;
  339.               Screen[5] := Screen[1];
  340.               ChangeVideoModes(MainMenu,GraphMenu);
  341.               ChangeVideoModes(ModeMenu,GraphMenu);
  342.               ChangeVideoModes(ColorMenu,GraphMenu);
  343.               ChangeVideoModes(ShadowMenu,GraphMenu);
  344.               ChangeVideoModes(ShadDirMenu,GraphMenu);
  345.               ChangeVideoModes(InterMenu,GraphMenu);
  346.               ChangeVideoModes(TestMenu,GraphMenu);
  347.               SetFillStyle(InterLeaveFill,Green);
  348.               FillPoly(5,Screen);
  349.               DrawPoly(5,Screen);
  350.               OpenMenu(MainMenu,1,1);
  351.               If MouseExists then ShowMouse;
  352.             End;
  353.       204 : Begin
  354.               If (MenuOpen(List[MenuNum]^)) and (MenuNum > 0) then
  355.                 MenuToggle;
  356.               If MenuOpen(List[0]^) then CloseMenu(List[0]^);
  357.               If ScreenMode then CloseGraph;
  358.               Driver := EGA;
  359.               Mode   := EGAHi;
  360.               InitGraph(Driver,Mode,'');
  361.               Screen[1].X :=       0; Screen[1].Y :=       0;
  362.               Screen[2].X :=       0; Screen[2].Y := GetMaxY;
  363.               Screen[3].X := GetMaxX; Screen[3].Y := GetMaxY;
  364.               Screen[4].X := GetMaxX; Screen[4].Y :=       0;
  365.               Screen[5] := Screen[1];
  366.               SetColorMenu(ColorMenu,16,True);
  367.               ChangeVideoModes(MainMenu,GraphMenu);
  368.               ChangeVideoModes(ModeMenu,GraphMenu);
  369.               ChangeVideoModes(ColorMenu,GraphMenu);
  370.               ChangeVideoModes(ShadowMenu,GraphMenu);
  371.               ChangeVideoModes(ShadDirMenu,GraphMenu);
  372.               ChangeVideoModes(InterMenu,GraphMenu);
  373.               ChangeVideoModes(TestMenu,GraphMenu);
  374.               SetFillStyle(InterLeaveFill,Green);
  375.               FillPoly(5,Screen);
  376.               DrawPoly(5,Screen);
  377.               OpenMenu(MainMenu,1,1);
  378.               If MouseExists then ShowMouse;
  379.             End;
  380.       205 : Begin
  381.               If (MenuOpen(List[MenuNum]^)) and (MenuNum > 0) then
  382.                 MenuToggle;
  383.               If MenuOpen(List[0]^) then CloseMenu(List[0]^);
  384.               If ScreenMode then CloseGraph;
  385.               Driver := VGA;
  386.               Mode   := VGAHi;
  387.               InitGraph(Driver,Mode,'');
  388.               Screen[1].X :=       0; Screen[1].Y :=       0;
  389.               Screen[2].X :=       0; Screen[2].Y := GetMaxY;
  390.               Screen[3].X := GetMaxX; Screen[3].Y := GetMaxY;
  391.               Screen[4].X := GetMaxX; Screen[4].Y :=       0;
  392.               Screen[5] := Screen[1];
  393.               SetColorMenu(ColorMenu,16,True);
  394.               ChangeVideoModes(MainMenu,GraphMenu);
  395.               ChangeVideoModes(ModeMenu,GraphMenu);
  396.               ChangeVideoModes(ColorMenu,GraphMenu);
  397.               ChangeVideoModes(ShadowMenu,GraphMenu);
  398.               ChangeVideoModes(ShadDirMenu,GraphMenu);
  399.               ChangeVideoModes(InterMenu,GraphMenu);
  400.               ChangeVideoModes(TestMenu,GraphMenu);
  401.               SetFillStyle(InterLeaveFill,Green);
  402.               FillPoly(5,Screen);
  403.               DrawPoly(5,Screen);
  404.               OpenMenu(MainMenu,1,1);
  405.               If MouseExists then ShowMouse;
  406.             End;
  407.  
  408.       300 : Begin
  409.               If MenuOpen(List[1]^) then
  410.                 MenuToggle;
  411.               OpenMenu(InterMenu,OptMinX(MainMenu),MenuMaxY(MainMenu));
  412.             End;
  413.  
  414.       400 : Begin
  415.               If MenuOpen(List[1]^) then
  416.                 MenuToggle;
  417.               OpenMenu(ShadowMenu,OptMinX(MainMenu),MenuMaxY(MainMenu));
  418.             End;
  419.       401 : OpenMenu(ShadDirMenu,OptMinX(ShadowMenu),OptMaxY(ShadowMenu));
  420.       402 : Begin
  421.               OpenMenu(ColorMenu,OptMinX(ShadowMenu),OptMaxY(ShadowMenu));
  422.               For I := 1 to 16 do
  423.                 SetMenuOptionCode(ColorMenu,0,I,3000 + I);
  424.             End;
  425.  
  426.       500 : Begin
  427.               CloseGraph;
  428.               TextBackground(Black);
  429.               ClrScr;
  430.               CursorOn;
  431.               Halt;
  432.             End;
  433.       501 : Begin
  434.                Sh := 0;
  435.                MenuBackOut(List);
  436.              End;
  437.       502 : Begin
  438.                Sh := 1;
  439.                MenuBackOut(List);
  440.              End;
  441.       503 : Begin
  442.                Sh := 2;
  443.                MenuBackOut(List);
  444.              End;
  445.       504 : Begin
  446.                Sh := 3;
  447.                MenuBackOut(List);
  448.              End;
  449.       505 : Begin
  450.                Sh := 4;
  451.                MenuBackOut(List);
  452.              End;
  453.  
  454.       601 : Begin
  455.               OpenMenu(ColorMenu,OptMinX(InterMenu),OptMaxY(InterMenu));
  456.               For I := 1 to 16 do
  457.                 SetMenuOptionCode(ColorMenu,0,I,1000 + I);
  458.             End;
  459.       602 : Begin
  460.               OpenMenu(ColorMenu,OptMinX(InterMenu),OptMaxY(InterMenu));
  461.               For I := 1 to 16 do
  462.                 SetMenuOptionCode(ColorMenu,0,I,2000 + I);
  463.             End;
  464.  
  465.       1001 : Begin
  466.                Fore := 0;
  467.                MenuBackOut(List);
  468.              End;
  469.       1002 : Begin
  470.                Fore := 1;
  471.                MenuBackOut(List);
  472.              End;
  473.       1003 : Begin
  474.                Fore := 2;
  475.                MenuBackOut(List);
  476.              End;
  477.       1004 : Begin
  478.                Fore := 3;
  479.                MenuBackOut(List);
  480.              End;
  481.       1005 : Begin
  482.                Fore := 4;
  483.                MenuBackOut(List);
  484.              End;
  485.       1006 : Begin
  486.                Fore := 5;
  487.                MenuBackOut(List);
  488.              End;
  489.       1007 : Begin
  490.                Fore := 6;
  491.                MenuBackOut(List);
  492.              End;
  493.       1008 : Begin
  494.                Fore := 7;
  495.                MenuBackOut(List);
  496.              End;
  497.       1009 : Begin
  498.                Fore := 8;
  499.                MenuBackOut(List);
  500.              End;
  501.       1010 : Begin
  502.                Fore := 9;
  503.                MenuBackOut(List);
  504.              End;
  505.       1011 : Begin
  506.                Fore := 10;
  507.                MenuBackOut(List);
  508.              End;
  509.       1012 : Begin
  510.                Fore := 11;
  511.                MenuBackOut(List);
  512.              End;
  513.       1013 : Begin
  514.                Fore := 12;
  515.                MenuBackOut(List);
  516.              End;
  517.       1014 : Begin
  518.                Fore := 13;
  519.                MenuBackOut(List);
  520.              End;
  521.       1015 : Begin
  522.                Fore := 14;
  523.                MenuBackOut(List);
  524.              End;
  525.       1016 : Begin
  526.                Fore := 15;
  527.                MenuBackOut(List);
  528.              End;
  529.       2001 : Begin
  530.                Back := 0;
  531.                MenuBackOut(List);
  532.              End;
  533.       2002 : Begin
  534.                Back := 1;
  535.                MenuBackOut(List);
  536.              End;
  537.       2003 : Begin
  538.                Back := 2;
  539.                MenuBackOut(List);
  540.              End;
  541.       2004 : Begin
  542.                Back := 3;
  543.                MenuBackOut(List);
  544.              End;
  545.       2005 : Begin
  546.                Back := 4;
  547.                MenuBackOut(List);
  548.              End;
  549.       2006 : Begin
  550.                Back := 5;
  551.                MenuBackOut(List);
  552.              End;
  553.       2007 : Begin
  554.                Back := 6;
  555.                MenuBackOut(List);
  556.              End;
  557.       2008 : Begin
  558.                Back := 7;
  559.                MenuBackOut(List);
  560.              End;
  561.       2009 : Begin
  562.                Back := 8;
  563.                MenuBackOut(List);
  564.              End;
  565.       2010 : Begin
  566.                Back := 9;
  567.                MenuBackOut(List);
  568.              End;
  569.       2011 : Begin
  570.                Back := 10;
  571.                MenuBackOut(List);
  572.              End;
  573.       2012 : Begin
  574.                Back := 11;
  575.                MenuBackOut(List);
  576.              End;
  577.       2013 : Begin
  578.                Back := 12;
  579.                MenuBackOut(List);
  580.              End;
  581.       2014 : Begin
  582.                Back := 13;
  583.                MenuBackOut(List);
  584.              End;
  585.       2015 : Begin
  586.                Back := 14;
  587.                MenuBackOut(List);
  588.              End;
  589.       2016 : Begin
  590.                Back := 15;
  591.                MenuBackOut(List);
  592.              End;
  593.       3001 : Begin
  594.                ShD := 0;
  595.                MenuBackOut(List);
  596.              End;
  597.       3002 : Begin
  598.                ShD := 1;
  599.                MenuBackOut(List);
  600.              End;
  601.       3003 : Begin
  602.                ShD := 2;
  603.                MenuBackOut(List);
  604.              End;
  605.       3004 : Begin
  606.                ShD := 3;
  607.                MenuBackOut(List);
  608.              End;
  609.       3005 : Begin
  610.                ShD := 4;
  611.                MenuBackOut(List);
  612.              End;
  613.       3006 : Begin
  614.                ShD := 5;
  615.                MenuBackOut(List);
  616.              End;
  617.       3007 : Begin
  618.                ShD := 6;
  619.                MenuBackOut(List);
  620.              End;
  621.       3008 : Begin
  622.                ShD := 7;
  623.                MenuBackOut(List);
  624.              End;
  625.       3009 : Begin
  626.                ShD := 8;
  627.                MenuBackOut(List);
  628.              End;
  629.       3010 : Begin
  630.                ShD := 9;
  631.                MenuBackOut(List);
  632.              End;
  633.       3011 : Begin
  634.                ShD := 10;
  635.                MenuBackOut(List);
  636.              End;
  637.       3012 : Begin
  638.                ShD := 11;
  639.                MenuBackOut(List);
  640.              End;
  641.       3013 : Begin
  642.                ShD := 12;
  643.                MenuBackOut(List);
  644.              End;
  645.       3014 : Begin
  646.                ShD := 13;
  647.                MenuBackOut(List);
  648.              End;
  649.       3015 : Begin
  650.                ShD := 14;
  651.                MenuBackOut(List);
  652.              End;
  653.       3016 : Begin
  654.                ShD := 15;
  655.                MenuBackOut(List);
  656.              End;
  657.     End;
  658.   End;
  659.  
  660. {------------------------------------------------------------------------}
  661.  
  662. Begin
  663.   InitSystem;
  664.   Screen[1].X :=       0; Screen[1].Y :=       0;
  665.   Screen[2].X :=       0; Screen[2].Y := GetMaxY;
  666.   Screen[3].X := GetMaxX; Screen[3].Y := GetMaxY;
  667.   Screen[4].X := GetMaxX; Screen[4].Y :=       0;
  668.   Screen[5] := Screen[1];
  669.   SetMainMenu(MainMenu);
  670.   SetModeMenu(ModeMenu);
  671.   SetColorMenu(ColorMenu,16,False);
  672.   SetShadowMenu(ShadowMenu);
  673.   SetShadDirMenu(ShadDirMenu);
  674.   SetInterMenu(InterMenu);
  675.   SetTestMenu(TestMenu);
  676.   SetFillStyle(InterleaveFill,Green);
  677.   FillPoly(5,Screen);
  678.   DrawPoly(5,Screen);
  679.   ChangeVideoModes(MainMenu,GraphMenu);
  680.   ChangeVideoModes(ModeMenu,GraphMenu);
  681.   ChangeVideoModes(ColorMenu,GraphMenu);
  682.   ChangeVideoModes(ShadowMenu,GraphMenu);
  683.   ChangeVideoModes(ShadDirMenu,GraphMenu);
  684.   ChangeVideoModes(InterMenu,GraphMenu);
  685.   OpenMenu(MainMenu,1,1);
  686.   ResetMouse;
  687.   If MouseExists then ShowMouse;
  688.  
  689.   M.Count := 0;
  690.   Ch      := #0;
  691.   Repeat
  692.     Case Ch of
  693.       #27 : MenuBackOut(List);
  694.       #13 : MenuProcessor(ReturnCode(List[MenuNum]^));
  695.       #61 : If (Not MenuOpen(MainMenu)) and (ScreenMode = MenuMode(MainMenu))
  696.               then OpenMenu(MainMenu,1,1);
  697.       #67 : CloseMenu(List[MenuNum]^);
  698.       #68 : MenuToggle;
  699.       #71 : JumpCursor(List[MenuNum]^,First);
  700.       #79 : JumpCursor(List[MenuNum]^,Last);
  701.       #75 : MoveCursor(List[MenuNum]^,Left);
  702.       #77 : MoveCursor(List[MenuNum]^,Right);
  703.       #72 : MoveCursor(List[MenuNum]^,Up);
  704.       #80 : MoveCursor(List[MenuNum]^,Down);
  705.     End;
  706.     Ch := #0;
  707.     If KeyPressed then Ch := ReadKBD
  708.       else If MouseExists then Released(0,M);
  709.     If M.Count > 0 then
  710.       Begin
  711.         If Driver <> CGA then
  712.           Code := MenuMouse(List,M.Column,M.Row) else
  713.             Code := MenuMouse(List,M.Column div 2,M.Row);
  714.         MenuProcessor(Code);
  715.         Code := 0;
  716.         M.Count := 0;
  717.       End;
  718.   Until Ch = #45;
  719.  
  720.   CloseGraph;
  721.   TextBackground(Black);
  722.   ClrScr;
  723.   CursorOn;
  724. End.