home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 2: PC / frozenfish_august_1995.bin / bbs / d09xx / d0938.lha / Angie / AngieGUI.mod < prev    next >
Text File  |  1993-12-20  |  16KB  |  442 lines

  1. MODULE AngieGUI;
  2.  
  3. (*
  4.  *  Source generated with OG 38.02 (18.6.93) by Stefan Kurtz - Original Version by Thomas Igracki
  5.  *  OG is based on GenOberon V1.0 by Kai Bolay & Jan van den Baard
  6.  *  GenOberon is based on internal GenOberon by Kai Bolay
  7.  *  internal GenOberon is based on GenC by Jan van den Baard
  8.  *
  9.  *  GUI Designed by : fSchwarz
  10.  * 
  11.  *  Source heavily modified, optimized & adapted for V39 Intuition 'best look'
  12.  *  & V39 interface modules by fSchwarz
  13.  *)
  14.  
  15. IMPORT
  16.   e: Exec, I: Intuition, gt: GadTools, g: Graphics, u: Utility, y: SYSTEM,
  17.   b: BlackMagic, ie: InputEvent, st: Strings;
  18.  
  19. CONST
  20.   AngieHotKeys * = "E\000XYBPKSHNALCITDUOWR"; 
  21.   GDdefinition                      * = 0;
  22.   GDhotkeys                         * = 1;
  23.   GDpri                             * = 2;
  24.   GDdelay                           * = 3;
  25.   GDstable                          * = 4;
  26.   GDpop                             * = 5;
  27.   GDkeyact                          * = 6;
  28.   GDincwintaskpri                   * = 7;
  29.   GDhuntalways                      * = 8;
  30.   GDhuntwintofront                  * = 9;
  31.   GDtype                            * = 10;
  32.   GDshufflebdrop                    * = 11;
  33.   GDscrsteps                        * = 12;
  34.   GDwinsteps                        * = 13;
  35.   GDhuntdefpub                      * = 14;
  36.   GDadd                             * = 15;
  37.   GDdel                             * = 16;
  38.   GDup                              * = 17;
  39.   GDdown                            * = 18;
  40.   GDshufflepat                      * = 19;
  41.   GDattrs                           * = 20;
  42.  
  43.  
  44. (* menuLabels *)
  45.   MNsave                          * = 4000H;
  46.   MNabout                         * = 4001H;
  47.   MNhide                          * = 4002H;
  48.   MNquit                          * = 4003H;
  49.  
  50. CONST
  51.   AngieCNT = 21;
  52.   AngieLeft = 5;
  53.   AngieTop = 12;
  54.   AngieWidth = 631;
  55.   AngieHeight = 174;
  56. VAR
  57.   Scr-: I.ScreenPtr;
  58.   VisualInfo-: e.APTR;
  59.   AngieWnd-: I.WindowPtr;
  60.   AngieGList-: I.GadgetPtr;
  61.   AngieGadgets*: ARRAY AngieCNT OF I.GadgetPtr;
  62.   AngieMenus-: I.MenuPtr;
  63.   AngieZoom-: ARRAY 4 OF INTEGER;
  64.   Font-: g.TextAttrPtr;
  65.   Attr-: g.TextAttr;
  66.   FontX, FontY: INTEGER;
  67.   OffX, OffY: INTEGER;
  68.  
  69. TYPE
  70.   attrs0LArray = ARRAY     9 OF e.STRPTR;
  71. CONST
  72.   attrs0Labels = attrs0LArray (
  73.     y.ADR ("--------,--------,--------"),
  74.     y.ADR ("WinFront,--------,--------"),
  75.     y.ADR ("--------,NoScrAct,--------"),
  76.     y.ADR ("WinFront,NoScrAct,--------"),
  77.     y.ADR ("--------,--------,Repeatbl"),
  78.     y.ADR ("WinFront,--------,Repeatbl"),
  79.     y.ADR ("--------,NoScrAct,Repeatbl"),
  80.     y.ADR ("WinFront,NoScrAct,Repeatbl"),
  81.     NIL);
  82.  
  83. VAR
  84.   hotkeys0List*: e.MinList;
  85. TYPE
  86.   AngieMArray = ARRAY     8 OF gt.NewMenu;
  87. CONST
  88.   AngieNewMenu = AngieMArray (
  89.     gt.title, y.ADR ("Project"), NIL, {}, y.VAL (LONGSET, 0), -1,
  90.     gt.item, y.ADR ("Save Settings"), y.ADR ("S"), {}, y.VAL (LONGSET, 0), MNsave,
  91.     gt.item, gt.barLabel, NIL, {}, LONGSET {}, -1,
  92.     gt.item, y.ADR ("About..."), y.ADR ("?"), {}, y.VAL (LONGSET, 0), MNabout,
  93.     gt.item, gt.barLabel, NIL, {}, LONGSET {}, -1,
  94.     gt.item, y.ADR ("Hide"), y.ADR ("H"), {}, y.VAL (LONGSET, 0), MNhide,
  95.     gt.item, y.ADR ("Quit"), y.ADR ("Q"), {}, y.VAL (LONGSET, 0), MNquit,
  96.     gt.end, NIL, NIL, {}, LONGSET {}, -1);
  97.  
  98. TYPE
  99.   AngieGTypesArray = ARRAY AngieCNT OF INTEGER;
  100. CONST
  101.   AngieGTypes = AngieGTypesArray (
  102.     gt.stringKind,
  103.     gt.listViewKind,
  104.     gt.sliderKind,
  105.     gt.sliderKind,
  106.     gt.sliderKind,
  107.     gt.checkBoxKind,
  108.     gt.checkBoxKind,
  109.     gt.checkBoxKind,
  110.     gt.checkBoxKind,
  111.     gt.checkBoxKind,
  112.     gt.stringKind,
  113.     gt.checkBoxKind,
  114.     gt.sliderKind,
  115.     gt.sliderKind,
  116.     gt.checkBoxKind,
  117.     gt.buttonKind,
  118.     gt.buttonKind,
  119.     gt.buttonKind,
  120.     gt.buttonKind,
  121.     gt.stringKind,
  122.     gt.cycleKind
  123.   );
  124.  
  125.  
  126. CONST
  127.   rawCrsrUp   * = 04CH;
  128.   rawCrsrDown * = 04DH;  
  129.  
  130. VAR
  131.   hotnames *: UNTRACED POINTER TO ARRAY MAX (INTEGER)-1 OF b.LStrPtr;
  132.  
  133. PROCEDURE EdHookProc (hook: u.HookPtr; sgworkobj: e.APTR; msg: e.APTR): LONGINT;
  134. VAR
  135.   sgwork: I.SGWorkPtr;
  136.   cmd   : UNTRACED POINTER TO LONGINT;
  137.   i,l   : INTEGER;
  138.   wstr  : b.LStrPtr;
  139. (* $StackChk-  !!executed in Intuition context!! *)
  140. BEGIN
  141.   sgwork := sgworkobj; cmd := msg;
  142.   wstr := sgwork.workBuffer;
  143.   IF cmd^ # I.sghKey THEN RETURN e.false; END;
  144.   IF sgwork.iEvent.class # ie.rawkey THEN RETURN e.false; END;
  145.   CASE sgwork.iEvent.code OF
  146.   rawCrsrUp, rawCrsrDown:
  147.     IF sgwork.gadget = AngieGadgets[GDtype] THEN
  148.       IF hotnames # NIL THEN
  149.         l := 0;
  150.         WHILE (hotnames[l] # NIL) DO INC (l); END;
  151.         IF l > 0 THEN      
  152.           i := 0;
  153.           WHILE (hotnames[i] # NIL) & (u.Stricmp (wstr^, hotnames[i]^) # 0) DO
  154.             INC (i);
  155.           END;
  156.           IF hotnames [i] = NIL THEN DEC (i); END;
  157.           CASE sgwork.iEvent.code OF
  158.           rawCrsrDown:
  159.             INC (i, 1); IF i >= l THEN i := 0; END; |
  160.           rawCrsrUp:    
  161.             DEC (i, 1); IF i < 0 THEN i := l-1; END;
  162.           ELSE END;
  163.           IF i = l-1 THEN
  164.             COPY ("", wstr^);
  165.           ELSE  
  166.             COPY (hotnames[i]^, wstr^);
  167.           END;  
  168.           sgwork.numChars := SHORT (st.Length (wstr^));
  169.           IF sgwork.bufferPos > sgwork.numChars THEN 
  170.             sgwork.bufferPos := sgwork.numChars; 
  171.           END;
  172.           sgwork.actions := LONGSET {I.sgaUse, I.sgaRedisplay};
  173.           sgwork.code := sgwork.iEvent.code;
  174.           RETURN e.true;
  175.         END;  
  176.       END;
  177.     ELSIF sgwork.gadget = AngieGadgets[GDdefinition] THEN  
  178.       sgwork.actions := LONGSET{I.sgaEnd};    
  179.       sgwork.code := sgwork.iEvent.code;
  180.       RETURN e.true;
  181.     END;  
  182.   ELSE END;
  183.   IF sgwork.code = 27 (* ESC *) THEN
  184.     sgwork.actions := LONGSET{I.sgaEnd};
  185.     RETURN e.true;
  186.   END;  
  187.   RETURN e.false;
  188. END EdHookProc;  
  189. (* $StackChk= *)
  190.  
  191. TYPE
  192.   AngieNGadArray = ARRAY AngieCNT OF gt.NewGadget;
  193. CONST
  194.   AngieNGad = AngieNGadArray (
  195.     8, 92, 314, 14, NIL, NIL, GDdefinition, LONGSET {} ,NIL, NIL,
  196.     8, 15, 314, 80, y.ADR ("_Edit hotkeys"), NIL, GDhotkeys, LONGSET {gt.placeTextAbove} ,NIL, NIL,
  197.     441, 160, 137, 11, y.ADR ("C_X priority"), NIL, GDpri, LONGSET {gt.placeTextLeft} ,NIL, NIL,
  198.     441, 118, 137, 11, y.ADR ("Snoop dela_y"), NIL, GDdelay, LONGSET {gt.placeTextLeft} ,NIL, NIL,
  199.     441, 104, 137, 11, y.ADR ("Sta_ble time"), NIL, GDstable, LONGSET {gt.placeTextLeft} ,NIL, NIL,
  200.     337, 90, 26, 11, y.ADR ("_Pop GUI on startup"), NIL, GDpop, LONGSET {gt.placeTextRight} ,NIL, NIL,
  201.     337, 48, 26, 11, y.ADR ("_Key screen activation"), NIL, GDkeyact, LONGSET {gt.placeTextRight} ,NIL, NIL,
  202.     337, 62, 26, 11, y.ADR ("Rai_se Active WinTask's Pri"), NIL, GDincwintaskpri, LONGSET {gt.placeTextRight} ,NIL, NIL,
  203.     337, 6, 26, 11, y.ADR ("_Hunt always"), NIL, GDhuntalways, LONGSET {gt.placeTextRight} ,NIL, NIL,
  204.     337, 20, 26, 11, y.ADR ("Hu_nt on wintofront hotkeys"), NIL, GDhuntwintofront, LONGSET {gt.placeTextRight} ,NIL, NIL,
  205.     64, 97, 258, 14, y.ADR ("_Action"), NIL, GDtype, LONGSET {gt.placeTextLeft} ,NIL, NIL,
  206.     337, 76, 26, 11, y.ADR ("Shuff_le backdrop windows"), NIL, GDshufflebdrop, LONGSET {gt.placeTextRight} ,NIL, NIL,
  207.     441, 132, 137, 11, y.ADR ("S_creen steps"), NIL, GDscrsteps, LONGSET {gt.placeTextLeft} ,NIL, NIL,
  208.     441, 146, 137, 11, y.ADR ("W_indow steps"), NIL, GDwinsteps, LONGSET {gt.placeTextLeft} ,NIL, NIL,
  209.     337, 34, 26, 11, y.ADR ("Hun_t: set default public screen"), NIL, GDhuntdefpub, LONGSET {gt.placeTextRight} ,NIL, NIL,
  210.     8, 127, 77, 13, y.ADR ("A_DD"), NIL, GDadd, LONGSET {gt.placeTextIn} ,NIL, NIL,
  211.     87, 127, 77, 13, y.ADR ("(DEL)"), NIL, GDdel, LONGSET {gt.placeTextIn} ,NIL, NIL,
  212.     166, 127, 77, 13, y.ADR ("_UP"), NIL, GDup, LONGSET {gt.placeTextIn} ,NIL, NIL,
  213.     245, 127, 77, 13, y.ADR ("D_OWN"), NIL, GDdown, LONGSET {gt.placeTextIn} ,NIL, NIL,
  214.     8, 157, 314, 14, y.ADR ("_Window shuffle pattern"), NIL, GDshufflepat, LONGSET {gt.placeTextAbove} ,NIL, NIL,
  215.     56, 112, 266, 13, y.ADR ("Att_rs"), NIL, GDattrs, LONGSET {gt.placeTextLeft} ,NIL, NIL
  216.   );
  217.  
  218. TYPE
  219.   AngieGTagsArray = ARRAY   175 OF u.Tag;
  220. CONST
  221.   AngieGTags = AngieGTagsArray (
  222.     gt.stMaxChars, 255, gt.stEditHook, NIL, u.done,
  223.     gt.lvShowSelected, 1, gt.underscore, 95, u.done,
  224.     gt.slMin, -128, gt.slMax, 127, gt.slLevel, 127, gt.slMaxLevelLen, 20, gt.slLevelFormat, y.ADR ("%ld"), gt.slLevelPlace, LONGSET {gt.placeTextRight}, I.pgaFreedom, I.lorientHoriz, I.gaRelVerify, I.LTRUE, gt.underscore, 95, u.done,
  225.     gt.slMin, 10, gt.slMax, 1000, gt.slLevel, 1000, gt.slMaxLevelLen, 20, gt.slLevelFormat, y.ADR ("%ld"), gt.slLevelPlace, LONGSET {gt.placeTextRight}, I.pgaFreedom, I.lorientHoriz, I.gaRelVerify, I.LTRUE, gt.underscore, 95, u.done,
  226.     gt.slMin, -1, gt.slMax, 1000, gt.slLevel, 1000, gt.slMaxLevelLen, 20, gt.slLevelFormat, y.ADR ("%ld"), gt.slLevelPlace, LONGSET {gt.placeTextRight}, I.pgaFreedom, I.lorientHoriz, I.gaRelVerify, I.LTRUE, gt.underscore, 95, u.done,
  227.     gt.cbScaled, I.LTRUE, gt.underscore, 95, u.done,
  228.     gt.cbScaled, I.LTRUE, gt.underscore, 95, u.done,
  229.     gt.cbScaled, I.LTRUE, gt.underscore, 95, u.done,
  230.     gt.cbScaled, I.LTRUE, gt.underscore, 95, u.done,
  231.     gt.cbScaled, I.LTRUE, gt.underscore, 95, u.done,
  232.     gt.underscore, 95, gt.stMaxChars, 255, gt.stEditHook, NIL, I.stringaJustification, LONGSET{I.stringCenter}, u.done,
  233.     gt.cbScaled, I.LTRUE, gt.underscore, 95, u.done,
  234.     gt.slMin, 1, gt.slMax, 50, gt.slLevel, 50, gt.slMaxLevelLen, 20, gt.slLevelFormat, y.ADR ("%ld"), gt.slLevelPlace, LONGSET {gt.placeTextRight}, I.pgaFreedom, I.lorientHoriz, I.gaRelVerify, I.LTRUE, gt.underscore, 95, u.done,
  235.     gt.slMin, 1, gt.slMax, 50, gt.slLevel, 50, gt.slMaxLevelLen, 20, gt.slLevelFormat, y.ADR ("%ld"), gt.slLevelPlace, LONGSET {gt.placeTextRight}, I.pgaFreedom, I.lorientHoriz, I.gaRelVerify, I.LTRUE, gt.underscore, 95, u.done,
  236.     gt.cbScaled, I.LTRUE, gt.underscore, 95, u.done,
  237.     gt.underscore, 95, u.done,
  238.     gt.underscore, 95, u.done,
  239.     gt.underscore, 95, u.done,
  240.     gt.underscore, 95, u.done,
  241.     gt.underscore, 95, gt.stMaxChars, 255, gt.stEditHook, NIL, I.stringaJustification, LONGSET{I.stringCenter}, u.done,
  242.     gt.cyLabels, y.ADR (attrs0Labels[0]), gt.underscore, 95, u.done
  243.   );
  244.  
  245. PROCEDURE ComputeX (value: INTEGER): INTEGER;
  246. BEGIN
  247.   RETURN ((FontX * value) + 4 ) DIV 8;
  248. END ComputeX;
  249.  
  250. PROCEDURE ComputeY (value: INTEGER): INTEGER;
  251. BEGIN
  252.   RETURN ((FontY * value)  + 4 ) DIV 8;
  253. END ComputeY;
  254.  
  255. PROCEDURE ComputeFont (width, height: INTEGER);
  256. BEGIN
  257.   Font := y. ADR (Attr);
  258.   Font^.name := Scr^.rastPort.font^.message.node.name;
  259.   FontY := Scr^.rastPort.font^.ySize;
  260.   Font^.ySize := FontY;
  261.   FontX := Scr^.rastPort.font^.xSize;
  262.  
  263.   OffX := Scr^.wBorLeft;
  264.   OffY := Scr^.rastPort.txHeight + Scr^.wBorTop + 1;
  265.  
  266.   IF (width # 0) AND (height # 0) AND
  267.      (ComputeX (width) + OffX + Scr^.wBorRight > Scr^.width) OR
  268.      (ComputeY (height) + OffY + Scr^.wBorBottom > Scr^.height) THEN
  269.     Font^.name := y.ADR ("topaz.font");
  270.     Font^.ySize := 8;
  271.     FontY := Font^.ySize;
  272.     FontX := Font^.ySize;
  273.   END;
  274. END ComputeFont;
  275.  
  276. PROCEDURE SetupScreen* (pub: ARRAY OF CHAR): INTEGER; (* $CopyArrays- *)
  277. BEGIN
  278. IF pub#"" THEN Scr:=I.LockPubScreen(pub) ELSE Scr:=I.LockPubScreen(NIL) END;
  279.   IF Scr = NIL THEN RETURN 1 END;
  280.  
  281.   ComputeFont (0, 0);
  282.  
  283.   VisualInfo := gt.GetVisualInfo (Scr, u.done);
  284.   IF VisualInfo = NIL THEN RETURN 2 END;
  285.  
  286.   RETURN 0;
  287. END SetupScreen;
  288.  
  289. PROCEDURE CloseDownScreen*;
  290. BEGIN
  291.   IF VisualInfo # NIL THEN
  292.     gt.FreeVisualInfo (VisualInfo);
  293.     VisualInfo := NIL;
  294.   END;
  295.   IF Scr # NIL THEN
  296.     I.UnlockPubScreen (NIL, Scr);
  297.     Scr := NIL;
  298.   END;
  299. END CloseDownScreen;
  300.  
  301. VAR
  302.   EdHook: u.Hook;
  303.  
  304. PROCEDURE CreateAngieGadgets* (): INTEGER;
  305. TYPE
  306.   TagArrayPtr = u.TagListPtr;
  307. VAR
  308.   ng: gt.NewGadget;
  309.   gad: I.GadgetPtr;
  310.   tmp: u.TagItemPtr;
  311.   help: TagArrayPtr;
  312.   ret, lc, tc, lvc, offx, offy: INTEGER;
  313. BEGIN
  314.   offx := Scr^.wBorLeft; offy := Scr^.wBorTop + Scr^.rastPort.txHeight + 1;
  315.  
  316.   ComputeFont (AngieWidth, AngieHeight);
  317.  
  318.   gad := gt.CreateContext (AngieGList);
  319.   IF gad = NIL THEN RETURN 1 END;
  320.  
  321.   lc := 0; tc := 0; lvc := 0;
  322.   WHILE lc < AngieCNT DO
  323.     ng := AngieNGad[lc];
  324.     ng.visualInfo := VisualInfo;
  325.     ng.textAttr   := Font;
  326.     ng.leftEdge   := OffX + ComputeX (ng.leftEdge);
  327.     ng.topEdge    := OffY + ComputeY (ng.topEdge);
  328.     ng.width      := ComputeX (ng.width);
  329.     ng.height     := ComputeY (ng.height);
  330.  
  331.   hotkeys0List.head     := y.ADR (hotkeys0List.tail);
  332.   hotkeys0List.tail     := NIL;
  333.   hotkeys0List.tailPred := y.ADR (hotkeys0List.head);
  334.  
  335.     help := u.CloneTagItems (y.VAL (TagArrayPtr, y.ADR (AngieGTags[tc]))^);
  336.     IF help = NIL THEN RETURN 8 END;
  337.     IF AngieGTypes[lc] = gt.listViewKind THEN
  338.       tmp := u.FindTagItem (gt.lvShowSelected, help);
  339.       IF tmp # NIL THEN
  340.          IF tmp^.data # NIL THEN tmp^.data := gad END;
  341.       END;
  342.     END; (* IF *)
  343.     CASE lc OF 
  344.     GDdefinition, GDshufflepat, GDtype:
  345.       tmp := u.FindTagItem (gt.stEditHook, help);
  346.       IF tmp # NIL THEN
  347.         u.InitHook (y.ADR (EdHook), EdHookProc);
  348.         tmp^.data := y.ADR (EdHook);
  349.       END;
  350.     ELSE END;  
  351.     gad := gt.CreateGadgetA (AngieGTypes[lc], gad, ng, help^);
  352.     u.FreeTagItems (help);
  353.     IF gad = NIL THEN RETURN 2 END;
  354.     AngieGadgets[lc] := gad;
  355.  
  356.     WHILE AngieGTags[tc] # u.done DO INC (tc, 2) END;
  357.     INC (tc);
  358.  
  359.     INC (lc);
  360.   END; (* WHILE *)
  361.  
  362.   RETURN 0;
  363. END CreateAngieGadgets;
  364.  
  365. PROCEDURE OpenAngieWindow* (createGads: BOOLEAN): INTEGER;
  366. VAR
  367.   offx, offy, ret: INTEGER;
  368.   wleft, wtop, ww, wh: INTEGER;
  369.   rect: g.Rectangle;
  370. BEGIN
  371.   IF ~b.VisibleOfScreen (Scr, rect) THEN END;
  372.   wleft := rect.minX+AngieLeft; wtop := rect.minY+AngieTop;
  373.   ComputeFont (AngieWidth, AngieHeight);
  374.  
  375.   ww := ComputeX (AngieWidth);
  376.   wh := ComputeY (AngieHeight);
  377.  
  378.   IF wleft + ww + OffX + Scr^.wBorRight > Scr^.width THEN
  379.     wleft := Scr^.width - ww;
  380.   END;
  381.   IF wtop + wh + OffY + Scr^.wBorBottom > Scr^.height THEN
  382.     wtop := Scr^.height - wh;
  383.   END;
  384.  
  385.   IF createGads THEN
  386.      ret := CreateAngieGadgets(); IF ret # 0 THEN RETURN ret END;
  387.   END;
  388.  
  389.   AngieMenus := gt.CreateMenus (AngieNewMenu, gt.mnFrontPen, 0, u.done);
  390.   IF AngieMenus = NIL THEN RETURN 3 END;
  391.  
  392.   IF NOT gt.LayoutMenus (AngieMenus, VisualInfo, gt.mnNewLookMenus, I.LTRUE, u.done) THEN RETURN 4 END;
  393.  
  394.   AngieZoom[0] := rect.minX;
  395.   AngieZoom[1] := rect.minY+1;
  396.   AngieZoom[2] := g.TextLength (y.ADR (Scr^.rastPort), "Angie 1.0 ", 10) + 80;
  397.   AngieZoom[3] := Scr^.wBorTop + Scr^.rastPort.txHeight + 1;
  398.  
  399.   AngieWnd := I.OpenWindowTagsA ( NIL,
  400.                     I.waLeft,          wleft,
  401.                     I.waTop,           wtop,
  402.                     I.waWidth,         ww + OffX + Scr^.wBorRight,
  403.                     I.waHeight,        wh + OffY + Scr^.wBorBottom,
  404.                     I.waIDCMP,         gt.stringIDCMP+gt.listViewIDCMP+gt.sliderIDCMP+gt.checkBoxIDCMP+gt.buttonIDCMP+gt.cycleIDCMP+LONGSET {I.menuPick,I.closeWindow,I.changeWindow,I.refreshWindow, I.vanillaKey, I.rawKey},
  405.                     I.waFlags,         LONGSET {I.newLookMenus,I.windowDrag,I.windowDepth,I.windowClose,I.activate},
  406.                     I.waTitle,         y.ADR ("Angie 1.0 "),
  407.                     I.waPubScreen,     Scr,
  408.                     I.waZoom,          y.ADR (AngieZoom),
  409.                     I.waGadgets,       AngieGList,
  410.                     I.waAutoAdjust,    I.LTRUE,
  411.                     I.waPubScreenFallBack, I.LTRUE,
  412.                     u.done);
  413.   IF AngieWnd = NIL THEN RETURN 20 END;
  414.  
  415.   IF NOT I.SetMenuStrip (AngieWnd, AngieMenus^) THEN RETURN 5 END;
  416.   gt.RefreshWindow (AngieWnd, NIL);
  417.  
  418.   RETURN 0;
  419. END OpenAngieWindow;
  420.  
  421. PROCEDURE CloseAngieWindow*;
  422. BEGIN
  423.   IF AngieMenus # NIL THEN
  424.     IF AngieWnd # NIL THEN
  425.       I.ClearMenuStrip (AngieWnd);
  426.     END;
  427.     gt.FreeMenus (AngieMenus);
  428.     AngieMenus := NIL;
  429.   END;
  430.   IF AngieWnd # NIL THEN
  431.     I.CloseWindow (AngieWnd);
  432.     AngieWnd := NIL;
  433.   END;
  434.   IF AngieGList # NIL THEN
  435.     gt.FreeGadgets (AngieGList);
  436.     AngieGList := NIL;
  437.   END;
  438. END CloseAngieWindow;
  439.  
  440.  
  441. END AngieGUI.
  442.