home *** CD-ROM | disk | FTP | other *** search
/ CD Actual 14 / CDACTUAL.iso / cdactual / demobin / share / program / Pascal / TMENUSYS.ZIP / MENUTEST.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1989-08-08  |  23.3 KB  |  754 lines

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