home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / zincdemo.zip / ZINCDEMO / ZINCDEMO.CPP < prev    next >
C/C++ Source or Header  |  1993-03-26  |  40KB  |  998 lines

  1. //    Zinc Application Framework 3.5 Demonstration - ZINCDEMO.CPP
  2. //    COPYRIGHT (C) 1990-1993.  All Rights Reserved.
  3. //    Zinc Software Incorporated.  Pleasant Grove, Utah  USA
  4.  
  5. #if defined(_MSC_VER)
  6. #    include <new.h>
  7. #endif
  8. #include <stdlib.h>
  9. #include <string.h>
  10. #include <ui_win.hpp>
  11. #if defined(ZIL_PENDOS)
  12. #    include <ui_pen.hpp>
  13. #endif
  14. #define USE_HELP_CONTEXTS
  15. #include "zincpost.hpp"
  16.  
  17. UIW_WINDOW *_sampleWindow = NULL;
  18. UIW_WINDOW *demoWindow = NULL;
  19. UIW_TEXT *_information = NULL;
  20. UI_STORAGE *_storage = NULL;
  21. char *message = "Zinc 3.5 Demonstration.";
  22.  
  23. void HelpInformation(const char *helpName)
  24. {
  25.     if (!_storage)
  26.         return;
  27.  
  28.     _storage->ChDir("~UI_HELP");
  29.     UI_STORAGE_OBJECT hFile(*_storage, helpName, ID_HELP_CONTEXT, UIS_READ);
  30.     if (!hFile.objectError)
  31.     {
  32.         char *message;                    // Read the help context title.
  33.         hFile.Load(&message);
  34.         delete message;
  35.         hFile.Load(&message);            // Read the help context.
  36.          _information->DataSet(message);
  37.         delete message;
  38.     }
  39. }
  40.  
  41. EVENT_TYPE About(UI_WINDOW_OBJECT *object, UI_EVENT &, EVENT_TYPE ccode)
  42. {
  43.     if (ccode != L_SELECT)
  44.         return (ccode);
  45.  
  46.     // Compute the window region.
  47.     UI_DISPLAY *display = object->display;
  48.     int width = 42;
  49.     int height = display->isText ? 7 : 6;
  50.     int left = (display->columns / display->cellWidth - width) / 2;
  51.     int top = (display->lines / display->cellHeight - height) / 2;
  52.  
  53.     UIW_WINDOW *window = new UIW_WINDOW(left, top, width, height, WOF_NO_FLAGS, WOAF_MODAL | WOAF_NO_SIZE);
  54.     *window
  55.         + new UIW_BORDER
  56.         + &(*new UIW_SYSTEM_BUTTON
  57.             + new UIW_POP_UP_ITEM("&Move", MNIF_MOVE)
  58.             + new UIW_POP_UP_ITEM("&Close\tAlt+F4", MNIF_CLOSE))
  59.         + new UIW_TITLE("About...");
  60.     if (display->isText)
  61.         *window
  62.             + new UIW_STRING(2, 1, 32, message, 100, STF_NO_FLAGS, WOF_NON_SELECTABLE | WOF_JUSTIFY_CENTER);
  63.     else
  64.         *window
  65.             + new UIW_ICON(3, 1, "minIcon")
  66.             + new UIW_STRING(8, 1, 32, message, 100, STF_NO_FLAGS, WOF_NON_SELECTABLE | WOF_JUSTIFY_CENTER);
  67.     *window
  68.         + new UIW_BUTTON(15, height - 3, 10, "~OK",
  69.             BTF_NO_TOGGLE | BTF_AUTO_SIZE | BTF_SEND_MESSAGE,
  70.             WOF_JUSTIFY_CENTER, NULL, S_CLOSE);
  71.     object->windowManager->Add(window);
  72.     return (ccode);
  73. }
  74.  
  75. EVENT_TYPE Exit(UI_DISPLAY *display, UI_EVENT_MANAGER *, UI_WINDOW_MANAGER *windowManager)
  76. {
  77.     // Compute the window region.
  78.     int width = 44;
  79.     int height = display->isText ? 7 : 6;
  80.     int left = (display->columns / display->cellWidth - width) / 2;
  81.     int top = (display->lines / display->cellHeight - height) / 2;
  82.  
  83.     // Create the exit window.
  84.     char *message = "This will close the demonstration.";
  85.     UIW_WINDOW *window = new UIW_WINDOW(left, top, width, height,
  86.         WOF_NO_FLAGS, WOAF_MODAL | WOAF_NO_SIZE);
  87.     *window
  88.         + new UIW_BORDER
  89.         + &(*new UIW_SYSTEM_BUTTON
  90.             + new UIW_POP_UP_ITEM("&Move", MNIF_MOVE)
  91.             + new UIW_POP_UP_ITEM("&Close\tAlt+F4", MNIF_CLOSE))
  92.         + new UIW_TITLE(message);
  93.     if (display->isText)
  94.         *window
  95.             + new UIW_STRING(4, 1, 36, message, 100, STF_NO_FLAGS, WOF_NON_SELECTABLE | WOF_JUSTIFY_CENTER);
  96.     else
  97.         *window
  98.             + new UIW_ICON(2, 1, "ASTERISK")
  99.             + new UIW_STRING(8, 1, 32, message, 100, STF_NO_FLAGS, WOF_NON_SELECTABLE | WOF_JUSTIFY_CENTER);
  100.     *window
  101.         + new UIW_BUTTON(10, height - 3, 10, "~OK",
  102.             BTF_NO_TOGGLE | BTF_AUTO_SIZE | BTF_SEND_MESSAGE,
  103.             WOF_JUSTIFY_CENTER, NULL, L_EXIT)
  104.         + new UIW_BUTTON(22, height - 3, 10, "~Cancel",
  105.             BTF_NO_TOGGLE | BTF_AUTO_SIZE | BTF_SEND_MESSAGE,
  106.             WOF_JUSTIFY_CENTER, NULL, S_CLOSE);
  107.     *windowManager + window;
  108.     return (S_CONTINUE);
  109. }
  110.  
  111. EVENT_TYPE Error(UI_WINDOW_OBJECT *object, UI_EVENT &, EVENT_TYPE ccode)
  112. {
  113.     if (ccode == L_SELECT)
  114.     {
  115.         demoWindow->helpContext = HELP_ERROR_SYSTEM;
  116.         object->errorSystem->ReportError(object->windowManager, WOS_UNANSWERED,
  117.             "This window is used to present error information.");
  118.     }
  119.     return (ccode);
  120. }
  121.  
  122. EVENT_TYPE Help(UI_WINDOW_OBJECT *object, UI_EVENT &, EVENT_TYPE ccode)
  123. {
  124.     if (ccode == L_SELECT)
  125.     {
  126.         EVENT_TYPE value;
  127.         object->Information(GET_VALUE, &value);
  128.         object->helpSystem->DisplayHelp(object->windowManager,
  129.             (UI_HELP_CONTEXT)value);
  130.     }
  131.     return (ccode);
  132. }
  133.  
  134. EVENT_TYPE ButtonWindow(UI_WINDOW_OBJECT *, UI_EVENT &, EVENT_TYPE ccode)
  135. {
  136.     if (ccode == L_SELECT)
  137.     {
  138.         _sampleWindow->Destroy();
  139.         if (_sampleWindow->display->isText)
  140.         {
  141.             *_sampleWindow
  142.                    + new UIW_BUTTON(10, 2, 9,  "OK", BTF_NO_TOGGLE | BTF_AUTO_SIZE)
  143.                    + new UIW_BUTTON(10, 4, 9,  "Cancel", BTF_NO_TOGGLE | BTF_AUTO_SIZE)
  144.                    + new UIW_BUTTON(10, 6, 9,  "Help", BTF_NO_TOGGLE | BTF_AUTO_SIZE);
  145.         }
  146.         else
  147.         {
  148.             *_sampleWindow
  149.                 + new UIW_BUTTON(7, 1, 5, NULL, BTF_NO_TOGGLE,
  150.                     WOF_JUSTIFY_CENTER, NULL, 0, "hardDrive")
  151.                 + new UIW_BUTTON(7, 3, 5, NULL, BTF_NO_TOGGLE,
  152.                     WOF_JUSTIFY_CENTER, NULL, 0, "softDrive")
  153.                 + new UIW_BUTTON(7, 5, 5, NULL, BTF_NO_TOGGLE,
  154.                     WOF_JUSTIFY_CENTER, NULL, 0, "networkDrive")
  155.                    + new UIW_BUTTON(20, 1, 8, "OK", BTF_NO_TOGGLE | BTF_AUTO_SIZE)
  156.                    + new UIW_BUTTON(20, 3, 8, "Cancel", BTF_NO_TOGGLE | BTF_AUTO_SIZE)
  157.                 + new UIW_BUTTON(20, 5, 10, "Mixed", BTF_NO_TOGGLE | BTF_AUTO_SIZE,
  158.                     WOF_NO_FLAGS, NULL, 0, "file");
  159.         }
  160.         _sampleWindow->Event(UI_EVENT(S_REDISPLAY, 0));
  161.         HelpInformation("INFO_BUTTON");
  162.     }
  163.     return (ccode);
  164. }
  165.  
  166. EVENT_TYPE CheckWindow(UI_WINDOW_OBJECT *, UI_EVENT &, EVENT_TYPE ccode)
  167. {
  168.     if (ccode == L_SELECT)
  169.     {
  170.         _sampleWindow->Destroy();
  171.         *_sampleWindow
  172.             + &(*new UIW_GROUP(8, 1, 22, 5, "Check Box Group", WNF_SELECT_MULTIPLE)
  173.                  + new UIW_BUTTON(2, 1, 18, "Check Box A", BTF_CHECK_BOX, WOF_NO_FLAGS)
  174.                 + new UIW_BUTTON(2, 2, 18, "Check Box B", BTF_CHECK_BOX, WOF_NO_FLAGS)
  175.                 + new UIW_BUTTON(2, 3, 18, "Check Box C", BTF_CHECK_BOX, WOF_NO_FLAGS)
  176.                    + new UIW_BUTTON(2, 4, 18, "Check Box D", BTF_CHECK_BOX, WOF_NO_FLAGS));
  177.         _sampleWindow->Event(UI_EVENT(S_REDISPLAY, 0));
  178.         HelpInformation("INFO_CHECK_BOX");
  179.     }
  180.     return (ccode);
  181. }
  182.  
  183. EVENT_TYPE ComboWindow(UI_WINDOW_OBJECT *, UI_EVENT &, EVENT_TYPE ccode)
  184. {
  185.     if (ccode == L_SELECT)
  186.     {
  187.         _sampleWindow->Destroy();
  188.         *_sampleWindow
  189.             + &(* new UIW_COMBO_BOX(1, 1, 17, 6)
  190.                 + new UIW_SCROLL_BAR(0, 0, 0, 0, SBF_VERTICAL)
  191.                 + new UIW_STRING(0, 0, 15, "Combo 1")
  192.                 + new UIW_STRING(0, 0, 15, "Combo 2")
  193.                 + new UIW_STRING(0, 0, 15, "Combo 3")
  194.                 + new UIW_STRING(0, 0, 15, "Combo 4")
  195.                 + new UIW_STRING(0, 0, 15, "Combo 5")   
  196.                 + new UIW_STRING(0, 0, 15, "Combo 6")   
  197.                 + new UIW_STRING(0, 0, 15, "Combo 7")   
  198.                 + new UIW_STRING(0, 0, 15, "Combo 8")   
  199.                 + new UIW_STRING(0, 0, 15, "Combo 9")   
  200.                 + new UIW_STRING(0, 0, 15, "Combo 10"));
  201.         *_sampleWindow
  202.             + &(* new UIW_COMBO_BOX(20, 1, 17, 6, NULL, WNF_NO_WRAP | WNF_BITMAP_CHILDREN)
  203.                 + new UIW_SCROLL_BAR(0, 0, 0, 0, SBF_VERTICAL)
  204.                 + new UIW_BUTTON(0, 0, 22, "String",       BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "string")
  205.                 + new UIW_BUTTON(0, 0, 22, "F String",     BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "fmtstr")
  206.                 + new UIW_BUTTON(0, 0, 22, "Text",           BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "text")
  207.                 + new UIW_BUTTON(0, 0, 22, "Date",           BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "date")
  208.                 + new UIW_BUTTON(0, 0, 22, "Time",           BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "time")
  209.                 + new UIW_BUTTON(0, 0, 22, "Number",       BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "number")
  210.                 + new UIW_BUTTON(0, 0, 22, "Button",       BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "button")
  211.                 + new UIW_BUTTON(0, 0, 22, "Radio",        BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "radio")
  212.                 + new UIW_BUTTON(0, 0, 22, "Chk Box",      BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "check")
  213.                 + new UIW_BUTTON(0, 0, 22, "Hz List",      BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "hlist")
  214.                 + new UIW_BUTTON(0, 0, 22, "Vt List",      BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "vlist")
  215.                 + new UIW_BUTTON(0, 0, 22, "Combo",        BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "combo")
  216.                 + new UIW_BUTTON(0, 0, 22, "Hz Scroll",    BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "hscroll")
  217.                 + new UIW_BUTTON(0, 0, 22, "Vt Scroll",    BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "vscroll")
  218.                 + new UIW_BUTTON(0, 0, 22, "Window",       BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "window")
  219.                 + new UIW_BUTTON(0, 0, 22, "Tool Bar",     BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "toolbar")
  220.                 + new UIW_BUTTON(0, 0, 22, "Prompt",       BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "prompt")
  221.                 + new UIW_BUTTON(0, 0, 22, "Group",      BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "group")
  222.                 + new UIW_BUTTON(0, 0, 22, "Icon",           BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "icon"));
  223.         _sampleWindow->Event(UI_EVENT(S_REDISPLAY, 0));
  224.         HelpInformation("INFO_COMBO_BOX");
  225.     }
  226.     return (ccode);
  227. }
  228.  
  229. EVENT_TYPE DateWindow(UI_WINDOW_OBJECT *, UI_EVENT &, EVENT_TYPE ccode)
  230. {
  231.     if (ccode == L_SELECT)
  232.     {
  233.         _sampleWindow->Destroy();
  234.         UI_DATE date;
  235.         *_sampleWindow
  236.                + new UIW_PROMPT(1, 1, "Default:")
  237.             + new UIW_DATE(12, 1, 25, &date, NULL)
  238.                + new UIW_PROMPT(1, 2, "Month:")
  239.             + new UIW_DATE(12, 2, 25, &date, NULL, DTF_ALPHA_MONTH)
  240.                + new UIW_PROMPT(1, 3, "Weekday:")
  241.             + new UIW_DATE(12, 3, 25, &date, NULL, DTF_SHORT_MONTH | DTF_SHORT_DAY)
  242.                + new UIW_PROMPT(1, 4, "Slash:")
  243.             + new UIW_DATE(12, 4, 25, &date, NULL, DTF_SLASH)
  244.                + new UIW_PROMPT(1, 5, "Military:")
  245.             + new UIW_DATE(12, 5, 25, &date, NULL, DTF_MILITARY_FORMAT);
  246.         _sampleWindow->Event(UI_EVENT(S_REDISPLAY, 0));
  247.         HelpInformation("INFO_DATE");
  248.     }
  249.     return (ccode);
  250. }
  251.  
  252. class EXPORT FONT_STRING : public UIW_STRING
  253. {
  254. public:
  255.     FONT_STRING(int left, int top, int width, char *text, int maxLength,
  256.         LOGICAL_FONT _font, STF_FLAGS stFlags = STF_NO_FLAGS,
  257.         WOF_FLAGS woFlags = WOF_BORDER | WOF_AUTO_CLEAR) :
  258.         UIW_STRING(left, top, width, text, maxLength, stFlags, woFlags) { font = _font; }
  259.     virtual ~FONT_STRING(void) { };
  260. };
  261.  
  262.  
  263. EVENT_TYPE FontSupport(UI_WINDOW_OBJECT *, UI_EVENT &, EVENT_TYPE ccode)
  264. {
  265.     if (ccode == L_SELECT)
  266.     {
  267.         _sampleWindow->Destroy();
  268.         *_sampleWindow
  269.                + new UIW_PROMPT(1, 1, "System:")
  270.                + new FONT_STRING(10, 1, 27, "ABCDEFGHIJKabcdefghijk", -1, FNT_SYSTEM_FONT,
  271.                 STF_NO_FLAGS, WOF_NON_SELECTABLE)
  272.                + new UIW_PROMPT(1, 3, "Dialog:")
  273.                + new FONT_STRING(10, 3, 27, "ABCDEFGHIJKabcdefghijk", -1, FNT_DIALOG_FONT,
  274.                 STF_NO_FLAGS, WOF_NON_SELECTABLE)
  275.                + new UIW_PROMPT(1, 5, "Small:")
  276.                + new FONT_STRING(10, 5, 27, "ABCDEFGHIJKabcdefghijk", -1, FNT_SMALL_FONT,
  277.                 STF_NO_FLAGS, WOF_NON_SELECTABLE);
  278.         _sampleWindow->Event(UI_EVENT(S_REDISPLAY, 0));
  279.  
  280.         HelpInformation("INFO_FONT_SUPPORT");
  281.     }
  282.     return (ccode);
  283. }
  284.  
  285. EVENT_TYPE FStringWindow(UI_WINDOW_OBJECT *object, UI_EVENT &, EVENT_TYPE ccode)
  286. {
  287.     if (ccode == L_SELECT)
  288.     {
  289.         _sampleWindow->Destroy();
  290.         *_sampleWindow
  291.                + new UIW_PROMPT(1, 2, "Phone #:")
  292.                + new UIW_FORMATTED_STRING(10, 2, 27, "8017858900", "LNNNLLNNNLNNNN", "(...) ...-....")
  293.                + new UIW_PROMPT(1, 3, "Part #:")
  294.                + new UIW_FORMATTED_STRING(10, 3, 27, "ABC1234", "LAAALNNNNL", "[...*0000]")
  295.                + new UIW_PROMPT(1, 4, "Serial #:")
  296.                + new UIW_FORMATTED_STRING(10, 4, 27, "634922", "LLLLLNNNNLNN", "#ZNC-....-..");
  297.  
  298.         _sampleWindow->Event(UI_EVENT(S_REDISPLAY, 0));
  299.  
  300.         EVENT_TYPE value;
  301.         object->Information(GET_VALUE, &value);
  302.         if (value == HELP_FORMATTED_STRING)
  303.             HelpInformation("INFO_FORMATTED_STRING");
  304.         else
  305.             HelpInformation("INFO_PROMPT");
  306.     }
  307.     return (ccode);
  308. }
  309.  
  310. EVENT_TYPE HzListWindow(UI_WINDOW_OBJECT *object, UI_EVENT &, EVENT_TYPE ccode)
  311. {
  312.     if (ccode == L_SELECT)
  313.     {
  314.         _sampleWindow->Destroy();
  315.         UIW_HZ_LIST *list = new UIW_HZ_LIST(1, 1, 36, 5, 12, 1, NULL, WNF_NO_WRAP | WNF_BITMAP_CHILDREN);
  316.         *list
  317.                + new UIW_SCROLL_BAR(0, 0, 0, 0, SBF_HORIZONTAL)
  318.                + new UIW_BUTTON(0, 0, 12, "File.1", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "file")
  319.                + new UIW_BUTTON(0, 0, 12, "File.2", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "file")
  320.                + new UIW_BUTTON(0, 0, 12, "File.3", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "file")
  321.                + new UIW_BUTTON(0, 0, 12, "File.4", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "file")
  322.                + new UIW_BUTTON(0, 0, 12, "File.5", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "file")
  323.                + new UIW_BUTTON(0, 0, 12, "File.6", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "file")
  324.                + new UIW_BUTTON(0, 0, 12, "File.7", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "file")
  325.                + new UIW_BUTTON(0, 0, 12, "File.8", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "file")
  326.                + new UIW_BUTTON(0, 0, 12, "File.9", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "file")
  327.                + new UIW_BUTTON(0, 0, 12, "File.10", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "file")
  328.                + new UIW_BUTTON(0, 0, 12, "File.11", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "file")
  329.                + new UIW_BUTTON(0, 0, 12, "File.12", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "file")
  330.                + new UIW_BUTTON(0, 0, 12, "File.13", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "file")
  331.                + new UIW_BUTTON(0, 0, 12, "File.14", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "file")
  332.                + new UIW_BUTTON(0, 0, 12, "File.15", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "file")
  333.                + new UIW_BUTTON(0, 0, 12, "File.16", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "file")
  334.                + new UIW_BUTTON(0, 0, 12, "File.17", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "file")
  335.                + new UIW_BUTTON(0, 0, 12, "File.18", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "file")
  336.                + new UIW_BUTTON(0, 0, 12, "File.19", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "file")
  337.                + new UIW_BUTTON(0, 0, 12, "File.20", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "file");
  338.         *_sampleWindow + list;
  339.         _sampleWindow->Event(UI_EVENT(S_REDISPLAY, 0));
  340.  
  341.         EVENT_TYPE value;
  342.         object->Information(GET_VALUE, &value);
  343.         if (value == HELP_HLIST)
  344.             HelpInformation("INFO_HLIST");
  345.         else
  346.             HelpInformation("INFO_SCROLL_BAR");
  347.     }
  348.     return (ccode);
  349. }
  350.  
  351. EVENT_TYPE IconWindow(UI_WINDOW_OBJECT *, UI_EVENT &, EVENT_TYPE ccode)
  352. {
  353.     if (ccode == L_SELECT)
  354.     {
  355.         _sampleWindow->Destroy();
  356.         *_sampleWindow
  357.             + new UIW_ICON(4, 2, "desk")
  358.             + new UIW_ICON(16, 2, "analog")
  359.             + new UIW_ICON(28, 2, "minIcon");
  360.         _sampleWindow->Event(UI_EVENT(S_REDISPLAY, 0));
  361.  
  362.         HelpInformation("INFO_ICON");
  363.     }
  364.     return (ccode);
  365. }
  366.  
  367. EVENT_TYPE MenuWindow(UI_WINDOW_OBJECT *object, UI_EVENT &, EVENT_TYPE ccode)
  368. {
  369.     if (ccode == L_SELECT)
  370.     {
  371.         _sampleWindow->Destroy();
  372.         UIW_PULL_DOWN_MENU *menu = new UIW_PULL_DOWN_MENU();
  373.         *menu
  374.             + &(*new UIW_PULL_DOWN_ITEM("File")
  375.                 + new UIW_POP_UP_ITEM("Option 1", MNIF_NO_FLAGS, BTF_NO_3D)
  376.                    + new UIW_POP_UP_ITEM("Option 2", MNIF_NO_FLAGS, BTF_NO_3D)
  377.                    + new UIW_POP_UP_ITEM("Option 3", MNIF_NO_FLAGS, BTF_NO_3D))
  378.             + &(*new UIW_PULL_DOWN_ITEM("Cascade")
  379.                    + &(*new UIW_POP_UP_ITEM("Option 1", MNIF_NO_FLAGS, BTF_NO_3D)
  380.                      + new UIW_POP_UP_ITEM("Option 1.1", MNIF_NO_FLAGS, BTF_NO_3D)
  381.                     + &(* new UIW_POP_UP_ITEM("Option 1.2", MNIF_NO_FLAGS, BTF_NO_3D)
  382.                           + new UIW_POP_UP_ITEM("Option 1.2.1", MNIF_NO_FLAGS, BTF_NO_3D)
  383.                          + new UIW_POP_UP_ITEM("Option 1.2.2", MNIF_NO_FLAGS, BTF_NO_3D)
  384.                             + new UIW_POP_UP_ITEM("Option 1.2.3", MNIF_NO_FLAGS, BTF_NO_3D)))
  385.                    + new UIW_POP_UP_ITEM("Option 2", MNIF_NO_FLAGS, BTF_NO_3D)
  386.                    + new UIW_POP_UP_ITEM("Option 3", MNIF_NO_FLAGS, BTF_NO_3D));
  387.         *_sampleWindow
  388.             + &(*new UIW_WINDOW(1, 1, 36, 5, WOF_NO_FLAGS, WOAF_NO_MOVE | WOAF_NO_SIZE)
  389.                 + new UIW_ICON(0, 0, "minIcon", "Menu Window", ICF_MINIMIZE_OBJECT, WOF_NO_FLAGS)
  390.                 + new UIW_BORDER
  391.                 + new UIW_MAXIMIZE_BUTTON
  392.                 + new UIW_MINIMIZE_BUTTON
  393.                 + new UIW_SYSTEM_BUTTON(SYF_GENERIC)
  394.                 + new UIW_TITLE("Menu Window")
  395.                 + menu);
  396.  
  397.         _sampleWindow->Event(UI_EVENT(S_REDISPLAY, 0));
  398.  
  399.         EVENT_TYPE value;
  400.         object->Information(GET_VALUE, &value);
  401.         if (value == HELP_WINDOW)
  402.             HelpInformation("INFO_WINDOW");
  403.         else if (value == HELP_PULL_DOWN_MENU)
  404.             HelpInformation("INFO_PULL_DOWN_MENU");
  405.         else if (value == HELP_PULL_DOWN_ITEM)
  406.             HelpInformation("INFO_PULL_DOWN_ITEM");
  407.         else if (value == HELP_POP_UP_MENU)
  408.             HelpInformation("INFO_POP_UP_MENU");
  409.         else
  410.             HelpInformation("INFO_POP_UP_MENU_ITEM");
  411.     }
  412.     return (ccode);
  413. }
  414.  
  415. EVENT_TYPE NumberWindow(UI_WINDOW_OBJECT *, UI_EVENT &, EVENT_TYPE ccode)
  416. {
  417.     if (ccode == L_SELECT)
  418.     {
  419.         _sampleWindow->Destroy();
  420.         UI_BIGNUM number(1234L);
  421.         UI_BIGNUM negNumber(-1234L);
  422.         *_sampleWindow
  423.                + new UIW_PROMPT(1, 1, "Default:")
  424.             + new UIW_BIGNUM(11, 1, 26, &number, NULL, NMF_NO_FLAGS)
  425.                + new UIW_PROMPT(1, 2, "No decimal:")
  426.             + new UIW_BIGNUM(11, 2, 26, &number, NULL, NMF_DECIMAL(0))
  427.                + new UIW_PROMPT(1, 3, "Currency:")
  428.             + new UIW_BIGNUM(11, 3, 26, &number, NULL, NMF_CURRENCY | NMF_COMMAS)
  429.                + new UIW_PROMPT(1, 4, "Credit:")
  430.             + new UIW_BIGNUM(11, 4, 26, &negNumber, NULL, NMF_CREDIT | NMF_COMMAS | NMF_DECIMAL(0))
  431.                + new UIW_PROMPT(1, 5, "Percent:")
  432.             + new UIW_BIGNUM(11, 5, 26, &number, NULL, NMF_PERCENT | NMF_DECIMAL(0));
  433.         _sampleWindow->Event(UI_EVENT(S_REDISPLAY, 0));
  434.  
  435.         HelpInformation("INFO_BIGNUM");
  436.     }
  437.     return (ccode);
  438. }
  439.  
  440. EVENT_TYPE RadioWindow(UI_WINDOW_OBJECT *object, UI_EVENT &, EVENT_TYPE ccode)
  441. {
  442.     if (ccode == L_SELECT)
  443.     {
  444.         _sampleWindow->Destroy();
  445.         *_sampleWindow
  446.             + &(*new UIW_GROUP(8, 1, 22, 5, "Radio Button Group")
  447.                 + new UIW_BUTTON(2, 1, 18, "Radio Button 1", BTF_RADIO_BUTTON, WOF_NO_FLAGS)
  448.                    + new UIW_BUTTON(2, 2, 18, "Radio Button 2", BTF_RADIO_BUTTON, WOF_NO_FLAGS)
  449.                 + new UIW_BUTTON(2, 3, 18, "Radio Button 3", BTF_RADIO_BUTTON, WOF_NO_FLAGS)
  450.                    + new UIW_BUTTON(2, 4, 18, "Radio Button 4", BTF_RADIO_BUTTON, WOF_NO_FLAGS));
  451.         _sampleWindow->Event(UI_EVENT(S_REDISPLAY, 0));
  452.  
  453.         EVENT_TYPE value;
  454.         object->Information(GET_VALUE, &value);
  455.         if (value == HELP_GROUP)
  456.             HelpInformation("INFO_GROUP");
  457.         else
  458.             HelpInformation("INFO_RADIO_BUTTON");
  459.     }
  460.     return (ccode);
  461. }
  462.  
  463. EVENT_TYPE StringWindow(UI_WINDOW_OBJECT *, UI_EVENT &, EVENT_TYPE ccode)
  464. {
  465.     if (ccode == L_SELECT)
  466.     {
  467.         _sampleWindow->Destroy();
  468.             *_sampleWindow
  469.                + new UIW_PROMPT(1, 2, "Name:")
  470.                + new UIW_STRING(10, 2, 27, "Zinc Software Incorporated", 100)
  471.                + new UIW_PROMPT(1, 3, "Address:")
  472.                + new UIW_STRING(10, 3, 27, "405 South 100 East", 100)
  473.                + new UIW_STRING(10, 4, 27, "Pleasant Grove, UT", 100);
  474.  
  475.         _sampleWindow->Event(UI_EVENT(S_REDISPLAY, 0));
  476.  
  477.         HelpInformation("INFO_STRING");
  478.     }
  479.     return (ccode);
  480. }
  481.  
  482. EVENT_TYPE TextWindow(UI_WINDOW_OBJECT *, UI_EVENT &, EVENT_TYPE ccode)
  483. {
  484.     if (ccode == L_SELECT)
  485.     {
  486.         _sampleWindow->Destroy();
  487.         *_sampleWindow
  488.             + &(*new UIW_TEXT(1, 1, 36, 5, 
  489.                 "This is text to demonstrate a \r\n"
  490.                 "text field with scroll bars. \r\n"
  491.                 "Word wrap can also be used as \r\n"
  492.                 "shown below.", 256, WNF_NO_WRAP, WOF_BORDER | WOF_AUTO_CLEAR)
  493.                 + new UIW_SCROLL_BAR(0, 0, 0, 0, SBF_CORNER)
  494.                 + new UIW_SCROLL_BAR(0, 0, 0, 0, SBF_VERTICAL)
  495.                 + new UIW_SCROLL_BAR(0, 0, 0, 0, SBF_HORIZONTAL));
  496.         _sampleWindow->Event(UI_EVENT(S_REDISPLAY, 0));
  497.  
  498.         HelpInformation("INFO_TEXT");
  499.     }
  500.     return (ccode);
  501. }
  502.  
  503. EVENT_TYPE TimeWindow(UI_WINDOW_OBJECT *, UI_EVENT &, EVENT_TYPE ccode)
  504. {
  505.     if (ccode == L_SELECT)
  506.     {
  507.         _sampleWindow->Destroy();
  508.         UI_TIME time;
  509.         *_sampleWindow
  510.                + new UIW_PROMPT(1, 1, "Default:")
  511.             + new UIW_TIME(12, 1, 25, &time, NULL, TMF_NO_FLAGS)
  512.                + new UIW_PROMPT(1, 2, "Hours only:")
  513.             + new UIW_TIME(12, 2, 25, &time, NULL, TMF_NO_MINUTES)
  514.                + new UIW_PROMPT(1, 3, "Seconds:")
  515.             + new UIW_TIME(12, 3, 25, &time, NULL, TMF_SECONDS)
  516.                + new UIW_PROMPT(1, 4, "Hundredths:")
  517.             + new UIW_TIME(12, 4, 25, &time, NULL, TMF_SECONDS | TMF_HUNDREDTHS)
  518.                + new UIW_PROMPT(1, 5, "24 hour:")
  519.             + new UIW_TIME(12, 5, 25, &time, NULL, TMF_TWENTY_FOUR_HOUR);
  520.         _sampleWindow->Event(UI_EVENT(S_REDISPLAY, 0));
  521.  
  522.         HelpInformation("INFO_TIME");
  523.     }
  524.     return (ccode);
  525. }
  526.  
  527. EVENT_TYPE ToolWindow(UI_WINDOW_OBJECT *, UI_EVENT &, EVENT_TYPE ccode)
  528. {
  529.     if (ccode == L_SELECT)
  530.     {
  531.         _sampleWindow->Destroy();
  532.         *_sampleWindow
  533.             + &(*new UIW_WINDOW(1, 1, 36, 5, WOF_NO_FLAGS, WOAF_NO_MOVE | WOAF_NO_SIZE)
  534.                 + new UIW_ICON(0, 0, "minIcon", "Tool Bar Window", ICF_MINIMIZE_OBJECT, WOF_NO_FLAGS)
  535.                 + new UIW_BORDER
  536.                 + new UIW_MAXIMIZE_BUTTON
  537.                 + new UIW_MINIMIZE_BUTTON
  538.                 + new UIW_SYSTEM_BUTTON(SYF_GENERIC)
  539.                 + new UIW_TITLE("Tool Bar Window")
  540.                 + &(*new UIW_TOOL_BAR(0, 0, 0, 0, WNF_NO_WRAP)
  541.                     + new UIW_STRING(2, 0, 10, "Default", 100)
  542.                     + new UIW_BUTTON(15, 0, 5, NULL, BTF_NO_TOGGLE,
  543.                         WOF_JUSTIFY_CENTER, NULL, 0, "hardDrive")
  544.                     + new UIW_BUTTON(22, 0, 5, NULL, BTF_NO_TOGGLE,
  545.                         WOF_JUSTIFY_CENTER, NULL, 0, "softDrive")
  546.                     + new UIW_BUTTON(29, 0, 5, NULL, BTF_NO_TOGGLE,
  547.                         WOF_JUSTIFY_CENTER, NULL, 0, "networkDrive")));
  548.         _sampleWindow->Event(UI_EVENT(S_REDISPLAY, 0));
  549.  
  550.         HelpInformation("INFO_TOOL_BAR");
  551.     }
  552.     return (ccode);
  553. }
  554.  
  555. EVENT_TYPE VtListWindow(UI_WINDOW_OBJECT *object, UI_EVENT &, EVENT_TYPE ccode)
  556. {
  557.     if (ccode == L_SELECT)
  558.     {
  559.         _sampleWindow->Destroy();
  560.         UIW_VT_LIST *list = new UIW_VT_LIST(1, 1, 17, 5, NULL, WNF_NO_WRAP);
  561.         *list
  562.                + new UIW_SCROLL_BAR(0, 0, 0, 0, SBF_VERTICAL)
  563.                + new UIW_STRING(0, 0, 17, "Vt-Item 1", 20, STF_NO_FLAGS, WOF_VIEW_ONLY)
  564.                + new UIW_STRING(0, 0, 17, "Vt-Item 2", 20, STF_NO_FLAGS, WOF_VIEW_ONLY)
  565.                + new UIW_STRING(0, 0, 17, "Vt-Item 3", 20, STF_NO_FLAGS, WOF_VIEW_ONLY)
  566.                + new UIW_STRING(0, 0, 17, "Vt-Item 4", 20, STF_NO_FLAGS, WOF_VIEW_ONLY)
  567.                + new UIW_STRING(0, 0, 17, "Vt-Item 5", 20, STF_NO_FLAGS, WOF_VIEW_ONLY)
  568.                + new UIW_STRING(0, 0, 17, "Vt-Item 6", 20, STF_NO_FLAGS, WOF_VIEW_ONLY)
  569.                + new UIW_STRING(0, 0, 17, "Vt-Item 7", 20, STF_NO_FLAGS, WOF_VIEW_ONLY)
  570.                + new UIW_STRING(0, 0, 17, "Vt-Item 8", 20, STF_NO_FLAGS, WOF_VIEW_ONLY)
  571.                + new UIW_STRING(0, 0, 17, "Vt-Item 9", 20, STF_NO_FLAGS, WOF_VIEW_ONLY)
  572.                + new UIW_STRING(0, 0, 17, "Vt-Item 10", 20, STF_NO_FLAGS, WOF_VIEW_ONLY)
  573.                + new UIW_STRING(0, 0, 17, "Vt-Item 11", 20, STF_NO_FLAGS, WOF_VIEW_ONLY)
  574.                + new UIW_STRING(0, 0, 17, "Vt-Item 12", 20, STF_NO_FLAGS, WOF_VIEW_ONLY)
  575.                + new UIW_STRING(0, 0, 17, "Vt-Item 13", 20, STF_NO_FLAGS, WOF_VIEW_ONLY)
  576.                + new UIW_STRING(0, 0, 17, "Vt-Item 14", 20, STF_NO_FLAGS, WOF_VIEW_ONLY)
  577.                + new UIW_STRING(0, 0, 17, "Vt-Item 15", 20, STF_NO_FLAGS, WOF_VIEW_ONLY)
  578.                + new UIW_STRING(0, 0, 17, "Vt-Item 16", 20, STF_NO_FLAGS, WOF_VIEW_ONLY)
  579.                + new UIW_STRING(0, 0, 17, "Vt-Item 17", 20, STF_NO_FLAGS, WOF_VIEW_ONLY)
  580.                + new UIW_STRING(0, 0, 17, "Vt-Item 18", 20, STF_NO_FLAGS, WOF_VIEW_ONLY)
  581.                + new UIW_STRING(0, 0, 17, "Vt-Item 19", 20, STF_NO_FLAGS, WOF_VIEW_ONLY)
  582.                + new UIW_STRING(0, 0, 17, "Vt-Item 20", 20, STF_NO_FLAGS, WOF_VIEW_ONLY);
  583.         *_sampleWindow + list;
  584.         list = new UIW_VT_LIST(20, 1, 17, 5, NULL, WNF_NO_WRAP | WNF_BITMAP_CHILDREN);
  585.         *list
  586.                + new UIW_SCROLL_BAR(0, 0, 0, 0, SBF_VERTICAL)
  587.             + new UIW_BUTTON(0, 0, 17, "c:\\", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "parentDirectory")
  588.             + new UIW_BUTTON(1, 0, 16, "work", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "parentDirectory")
  589.             + new UIW_BUTTON(1, 0, 16, "docs", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "parentDirectory")
  590.             + new UIW_BUTTON(1, 0, 15, "compiler", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "parentDirectory")
  591.             + new UIW_BUTTON(2, 0, 15, "bin", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "childDirectory")
  592.             + new UIW_BUTTON(2, 0, 15, "lib", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "childDirectory")
  593.             + new UIW_BUTTON(2, 0, 15, "include", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "childDirectory")
  594.             + new UIW_BUTTON(2, 0, 15, "util", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "childDirectory")
  595.             + new UIW_BUTTON(2, 0, 15, "examples", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "childDirectory")
  596.             + new UIW_BUTTON(2, 0, 15, "tutor", BTF_NO_3D, WOF_NO_FLAGS, NULL, 0, "childDirectory");
  597.         *_sampleWindow + list;
  598.         _sampleWindow->Event(UI_EVENT(S_REDISPLAY, 0));
  599.  
  600.         EVENT_TYPE value;
  601.         object->Information(GET_VALUE, &value);
  602.         if (value == HELP_VLIST)
  603.             HelpInformation("INFO_VLIST");
  604.         else
  605.             HelpInformation("INFO_SCROLL_BAR");
  606.     }
  607.     return (ccode);
  608. }
  609.  
  610. static UI_ITEM toolBarItems[] =
  611. {
  612.     { HELP_STRING,                VOIDF(StringWindow),    "string",        0 },
  613.     { HELP_FORMATTED_STRING,    VOIDF(FStringWindow),    "fmtstr",        0 },
  614.     { HELP_TEXT,                VOIDF(TextWindow),        "text",            0 },
  615.     { HELP_DATE,                VOIDF(DateWindow),        "date",            0 },
  616.     { HELP_TIME,                VOIDF(TimeWindow),        "time",            0 },
  617.     { HELP_BIGNUM,                VOIDF(NumberWindow),    "number",        0 },
  618.     { HELP_BUTTON,                VOIDF(ButtonWindow),    "button",        0 },
  619.     { HELP_RADIO_BUTTON,        VOIDF(RadioWindow),        "radio",        0 },
  620.     { HELP_CHECK_BOX,            VOIDF(CheckWindow),        "check",        0 },
  621.     { HELP_HLIST,                VOIDF(HzListWindow),    "hlist",        0 },
  622.     { HELP_VLIST,                VOIDF(VtListWindow),    "vlist",        0 },
  623.     { HELP_COMBO_BOX,            VOIDF(ComboWindow),        "combo",        0 },
  624.     { HELP_SCROLL_BAR,            VOIDF(HzListWindow),    "hscroll",        0 },
  625.     { HELP_SCROLL_BAR,            VOIDF(VtListWindow),    "vscroll",        0 },
  626.     { HELP_WINDOW,                VOIDF(MenuWindow),        "window",        0 },
  627.     { HELP_PULL_DOWN_MENU,        VOIDF(MenuWindow),        "pllmenu",        0 },
  628.     { HELP_POP_UP_MENU,            VOIDF(MenuWindow),        "popmenu",        0 },
  629.     { HELP_TOOL_BAR,            VOIDF(ToolWindow),        "toolbar",        0 },
  630.     { HELP_PROMPT,                VOIDF(FStringWindow),    "prompt",        0 },
  631.     { HELP_GROUP,                VOIDF(RadioWindow),        "group",        0 },
  632.     { HELP_ICON,                VOIDF(IconWindow),        "icon",            0 },
  633.     { HELP_FONT_SUPPORT,        VOIDF(FontSupport),        "font",            0 },
  634.     { 0,                        NULL,                    NULL,            0 }
  635. };
  636.  
  637. static UI_ITEM listItems[] =
  638. {
  639.     { 0,                        NULL,                    "- INPUT OBJECTS -",            0 },
  640.     { HELP_STRING,                VOIDF(StringWindow),    "  String",                        0 },
  641.     { HELP_FORMATTED_STRING,    VOIDF(FStringWindow),    "  Formatted String",            0 },
  642.     { HELP_TEXT,                VOIDF(TextWindow),        "  Text",                        0 },
  643.     { HELP_DATE,                VOIDF(DateWindow),        "  Date",                        0 },
  644.     { HELP_TIME,                VOIDF(TimeWindow),        "  Time",                        0 },
  645.     { HELP_BIGNUM,                VOIDF(NumberWindow),    "  Number",                        0 },
  646.     { 0,                        NULL,                    "- CONTROL OBJECTS -",            0 },
  647.     { HELP_BUTTON,                VOIDF(ButtonWindow),    "  Button",                        0 },
  648.     { HELP_RADIO_BUTTON,        VOIDF(RadioWindow),        "  Radio-Button",                0 },
  649.     { HELP_CHECK_BOX,            VOIDF(CheckWindow),        "  Check Box",                    0 },
  650.     { HELP_HLIST,                VOIDF(HzListWindow),    "  Hz List",                    0 },
  651.     { HELP_VLIST,                VOIDF(VtListWindow),    "  Vt List",                    0 },
  652.     { HELP_COMBO_BOX,            VOIDF(ComboWindow),        "  Combo-Box",                    0 },
  653.     { HELP_SCROLL_BAR,            VOIDF(HzListWindow),    "  Hz Scroll",                    0 },
  654.     { HELP_SCROLL_BAR,            VOIDF(VtListWindow),    "  Vt Scroll",                    0 },
  655.     { HELP_WINDOW,                VOIDF(MenuWindow),        "  Window",                        0 },
  656.     { 0,                        NULL,                    "- MENU OBJECTS -",                 0 },
  657.     { HELP_PULL_DOWN_MENU,        VOIDF(MenuWindow),        "  Pull-Down Menu",                0 },
  658.     { HELP_POP_UP_MENU,            VOIDF(MenuWindow),        "  Pop-Up Menu",                0 },
  659.     { HELP_TOOL_BAR,            VOIDF(ToolWindow),        "  Tool Bar",                    0 },
  660.     { 0,                        NULL,                    "- STATIC OBJECTS -",             0 },
  661.     { HELP_PROMPT,                VOIDF(FStringWindow),    "  Prompt",                        0 },
  662.     { HELP_GROUP,                VOIDF(RadioWindow),        "  Group",                        0 },
  663.     { HELP_ICON,                VOIDF(IconWindow),        "  Icon",                        0 },
  664.     { 0,                        NULL,                    "- OTHER OBJECTS -",             0 },
  665.     { HELP_KEYBOARD,            VOIDF(Help),            "  Keyboard",                    0 },
  666.     { HELP_MOUSE,                VOIDF(Help),            "  Mouse",                        0 },
  667.     { HELP_PEN,                    VOIDF(Help),            "  Pen",                        0 },
  668.     { HELP_HELP_SYSTEM,            VOIDF(Help),            "  Help System",                0 },
  669.     { HELP_ERROR_SYSTEM,        VOIDF(Error),            "  Error System",                0 },
  670.     { HELP_FONT_SUPPORT,        VOIDF(FontSupport),        "  Font Support",                0 },
  671.     { 0,                        NULL,                    NULL,                            0 }
  672. };
  673.  
  674. #if defined(ZIL_MSDOS)
  675.  
  676. // Free-store exception handler.
  677. char *_errorMemory = NULL;
  678.  
  679. #    if defined(_MSC_VER)
  680. int NewHandler(size_t size);
  681.  
  682. extern "C" int __cdecl xNewHandler(size_t size)
  683. {
  684.     return NewHandler(size);
  685. }
  686.  
  687. int NewHandler(size_t size)
  688. #    else
  689. void NewHandler(void)
  690. #    endif
  691. {
  692.     // Free enouph memory for reporting error.
  693.     if (_errorMemory)
  694.     {
  695.         delete _errorMemory;
  696.         _errorMemory = NULL;
  697.  
  698.         // Report out of memory error.
  699.         UI_WINDOW_OBJECT::errorSystem->Beep();
  700.         UI_WINDOW_OBJECT::errorSystem->ReportError(UI_WINDOW_OBJECT::windowManager,
  701.             WOS_NO_STATUS, "     Not enough memory!\r\n"
  702.             "       Exitng to DOS.");
  703.     }
  704.  
  705.     // Emergency clean up and exit.
  706.     UI_EVENT_MANAGER *eventManager = UI_WINDOW_OBJECT::eventManager;
  707.     UI_DISPLAY *display = UI_WINDOW_OBJECT::display;
  708.     delete UI_WINDOW_OBJECT::windowManager;
  709.     delete eventManager;
  710.     delete display;
  711.     exit(1);
  712.  
  713. #    if defined(_MSC_VER)
  714.     return (0);
  715. #    endif
  716. }
  717.  
  718. main(int argc, char *argv[])
  719. {
  720.     // Set up a free-store exception handler.
  721.     _errorMemory = new char[0x2000];
  722. #    if defined(__BCPLUSPLUS__) | defined(__TCPLUSPLUS__)
  723.     extern void (*_new_handler)(void);
  724.     _new_handler = NewHandler;
  725. #    elif defined(__ZTC__)
  726.     extern void (*_new_handler)(void);
  727.     _new_handler = NewHandler;
  728. #    elif defined(_MSC_VER)
  729.     _set_new_handler(xNewHandler);
  730. #    endif
  731.  
  732.     // Set up the storage and display search path.
  733.     UI_PATH searchPath(argv[0], TRUE);
  734.  
  735.     UI_DISPLAY *display = NULL;
  736.     if (argc <= 1 || (argv[1][1] != 't' && argv[1][1] != 'T'))
  737.     {
  738.         display = new UI_GRAPHICS_DISPLAY;
  739. //        display = new UI_BGI_DISPLAY;
  740. //        display = new UI_FG_DISPLAY;
  741. //        display = new UI_MSC_DISPLAY;
  742.  
  743.     }
  744.     if (!display || !display->installed)
  745.     {
  746.         if (display)
  747.             delete display;
  748.         display = new UI_TEXT_DISPLAY;
  749.     }    
  750. #elif defined(ZIL_MSWINDOWS)
  751. int PASCAL WinMain(HANDLE hInstance, HANDLE hPrevInstance, LPSTR, int nCmdShow)
  752. {
  753.     // Set up the storage and display search path.
  754.     UI_PATH searchPath;
  755.  
  756.     // Create the display.
  757.     UI_DISPLAY *display = new UI_MSWINDOWS_DISPLAY(hInstance, hPrevInstance, nCmdShow);
  758. #elif defined(ZIL_OS2)
  759. main(int argc, char *argv[])
  760. {
  761.     // Set up the storage and display search path.
  762.     UI_PATH searchPath(argv[0], TRUE);
  763.  
  764.     // Create the display.
  765.     UI_DISPLAY *display = new UI_OS2_DISPLAY;
  766. #elif defined(ZIL_MOTIF)
  767. main(int argc, char *argv[])
  768. {
  769.     // Set up the storage and display search path.
  770.     UI_PATH searchPath;
  771.  
  772.     UI_DISPLAY *display = new UI_MOTIF_DISPLAY(&argc, argv);
  773. #endif
  774.  
  775.     UI_EVENT_MANAGER *eventManager = new UI_EVENT_MANAGER(display);
  776.     *eventManager
  777.         + new UID_KEYBOARD
  778. #if defined(ZIL_PENDOS)
  779.         + new UID_PENDOS
  780. #else
  781.         + new UID_MOUSE
  782. #endif
  783.         + new UID_CURSOR;
  784.  
  785.     UI_WINDOW_MANAGER *windowManager = new UI_WINDOW_MANAGER(display,
  786.         eventManager, Exit);
  787.  
  788.     UID_KEYBOARD::breakHandlerSet = L_EXIT_FUNCTION;
  789.  
  790.     // Initialize the default storage.
  791.     UI_STORAGE::searchPath = &searchPath;
  792.     _storage = new UI_STORAGE("zincpost.dat", UIS_READ);
  793.     UI_WINDOW_OBJECT::defaultStorage = _storage;
  794.  
  795.     // Attach the error and help systems.
  796.     UI_WINDOW_OBJECT::errorSystem = new UI_ERROR_SYSTEM;
  797.     UI_WINDOW_OBJECT::helpSystem = new UI_HELP_SYSTEM("zincpost.dat",
  798.         windowManager, HELP_GENERAL);
  799.  
  800.     // Check for data file errors.
  801.     if (UI_WINDOW_OBJECT::defaultStorage->storageError)
  802.     {
  803.         UI_WINDOW_OBJECT::errorSystem->ReportError(windowManager,
  804.             WOS_NO_STATUS, "Error opening the data file <ZINCPOST.DAT>.\n");
  805.  
  806.          delete UI_WINDOW_OBJECT::helpSystem;
  807.          delete UI_WINDOW_OBJECT::errorSystem;
  808.         delete _storage;
  809.         delete windowManager;
  810.         delete eventManager;
  811.         delete display;
  812.  
  813.         return (1);
  814.     }
  815.  
  816.     // Create the main menu and items to add to it.
  817.     UIW_PULL_DOWN_MENU *mainMenu = new UIW_PULL_DOWN_MENU;
  818.     UIW_PULL_DOWN_ITEM *fileMenu = new UIW_PULL_DOWN_ITEM("~File");
  819.     UIW_PULL_DOWN_ITEM *objectMenu = new UIW_PULL_DOWN_ITEM("~Object");
  820.     UIW_PULL_DOWN_ITEM *helpMenu = new UIW_PULL_DOWN_ITEM("~Help");
  821.  
  822.     // Add items to the File drop down menu.
  823.     *fileMenu
  824.         + new UIW_POP_UP_ITEM("E~xit", MNIF_NO_FLAGS, BTF_SEND_MESSAGE, WOF_NO_FLAGS, NULL, L_EXIT_FUNCTION)
  825.         + new UIW_POP_UP_ITEM
  826.         + new UIW_POP_UP_ITEM("~About...", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, About);
  827.  
  828.     // Create the cascaded menu for Input window objects.
  829.     UIW_POP_UP_ITEM *inputItem = new UIW_POP_UP_ITEM("~Input");
  830.     *inputItem
  831.         + new UIW_POP_UP_ITEM("~String", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, StringWindow, HELP_STRING)
  832.         + new UIW_POP_UP_ITEM("~Formatted String", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, FStringWindow, HELP_FORMATTED_STRING)
  833.         + new UIW_POP_UP_ITEM("Te~xt", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, TextWindow, HELP_TEXT)
  834.         + new UIW_POP_UP_ITEM
  835.         + new UIW_POP_UP_ITEM("~Date", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, DateWindow, HELP_DATE)
  836.         + new UIW_POP_UP_ITEM("~Time", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, TimeWindow, HELP_TIME)
  837.         + new UIW_POP_UP_ITEM(NULL)
  838.         + new UIW_POP_UP_ITEM("~Number", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, NumberWindow, HELP_BIGNUM);
  839.  
  840.     // Create the cascaded menu for Control window objects.
  841.     UIW_POP_UP_ITEM *controlItem = new UIW_POP_UP_ITEM("~Control");
  842.     *controlItem
  843.         + new UIW_POP_UP_ITEM("~Button", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, ButtonWindow, HELP_BUTTON)
  844.         + new UIW_POP_UP_ITEM("~Radio Button", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, RadioWindow, HELP_RADIO_BUTTON)
  845.         + new UIW_POP_UP_ITEM("~Check Box", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, CheckWindow, HELP_CHECK_BOX)
  846.         + new UIW_POP_UP_ITEM
  847.         + new UIW_POP_UP_ITEM("~Hz-List", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, HzListWindow, HELP_HLIST)
  848.         + new UIW_POP_UP_ITEM("~Vt-List", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, VtListWindow, HELP_VLIST)
  849.         + new UIW_POP_UP_ITEM("C~ombo Box", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, ComboWindow, HELP_COMBO_BOX)
  850.         + new UIW_POP_UP_ITEM
  851.         + new UIW_POP_UP_ITEM("H~z-Scroll Bar", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, HzListWindow, HELP_SCROLL_BAR)
  852.         + new UIW_POP_UP_ITEM("V~t-Scroll Bar", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, VtListWindow, HELP_SCROLL_BAR)
  853.         + new UIW_POP_UP_ITEM
  854.         + new UIW_POP_UP_ITEM("Child ~Window", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, MenuWindow, HELP_WINDOW);
  855.  
  856.     // Create the cascaded menu for Menu window objects.
  857.     UIW_POP_UP_ITEM *menuItem = new UIW_POP_UP_ITEM("~Menu");
  858.     *menuItem
  859.         + new UIW_POP_UP_ITEM("~Pull-Down Menu", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, MenuWindow, HELP_PULL_DOWN_MENU)
  860.         + new UIW_POP_UP_ITEM("Pop-Up ~Menu", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, MenuWindow, HELP_POP_UP_MENU)
  861.         + new UIW_POP_UP_ITEM("Tool ~Bar", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, ToolWindow, HELP_TOOL_BAR);
  862.  
  863.     // Create the cascaded menu for Static window objects.
  864.     UIW_POP_UP_ITEM *staticItem = new UIW_POP_UP_ITEM("~Static");
  865.     *staticItem
  866.         + new UIW_POP_UP_ITEM("~Prompt", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, FStringWindow, HELP_PROMPT)
  867.         + new UIW_POP_UP_ITEM("~Group", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, RadioWindow, HELP_GROUP)
  868.         + new UIW_POP_UP_ITEM
  869.         + new UIW_POP_UP_ITEM("~Icon", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, IconWindow, HELP_ICON);
  870.  
  871.     // Add the cascaded menu items to the Object drop down menu.
  872.     *objectMenu
  873.         + inputItem
  874.         + controlItem
  875.         + menuItem
  876.         + staticItem;
  877.  
  878.     // Add items to the Help drop down menu.
  879.     *helpMenu
  880.         + new UIW_POP_UP_ITEM("~General", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, Help, HELP_GENERAL)
  881.         + new UIW_POP_UP_ITEM("~Order info", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, Help, HELP_ORDER_INFORMATION)
  882.         + new UIW_POP_UP_ITEM
  883.         + new UIW_POP_UP_ITEM("~Screen display", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, Help, HELP_SCREEN_DISPLAY)
  884.         + new UIW_POP_UP_ITEM("~Event manager", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, Help, HELP_EVENT_MANAGER)
  885.         + new UIW_POP_UP_ITEM("~Window manager", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, Help, HELP_WINDOW_MANAGER)
  886.         + new UIW_POP_UP_ITEM("~Application class", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, Help, HELP_APPLICATION)
  887.         + new UIW_POP_UP_ITEM
  888.         + new UIW_POP_UP_ITEM("~Zinc Designer", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, Help, HELP_ZINC_DESIGNER)
  889.         + new UIW_POP_UP_ITEM("~Persistent objects", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, Help, HELP_PERSISTENT_OBJECTS)
  890.         + new UIW_POP_UP_ITEM("~Class hierarchy", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, Help, HELP_CLASS_HIERARCHY)
  891.         + new UIW_POP_UP_ITEM
  892.         + new UIW_POP_UP_ITEM("~Video training", MNIF_NO_FLAGS, BTF_NO_FLAGS, WOF_NO_FLAGS, Help, HELP_VIDEO);
  893.  
  894.     // Add the pull-down items (with their menus) to the main menu.
  895.     *mainMenu
  896.         + fileMenu
  897.         + objectMenu
  898.         + helpMenu;
  899.  
  900.     // Create main window and add objects (border, menu, minimize icon, etc.) to it.
  901.     int width = 74;
  902.     int height = display->isText ? 16 : 18;
  903.     int left = (display->columns / display->cellWidth - width) / 2;
  904.     int top = (display->lines / display->cellHeight - height) / 2;
  905.     if (top < 0)
  906.         top = 0;
  907.     demoWindow = new UIW_WINDOW(left, top, width, height, WOF_NO_FLAGS, WOAF_NO_SIZE);
  908.     *demoWindow
  909.         + new UIW_ICON(0, 0, "minIcon", "Zinc Demo", ICF_MINIMIZE_OBJECT, WOF_NO_FLAGS)
  910.         + new UIW_BORDER
  911.         + new UIW_MAXIMIZE_BUTTON
  912.         + new UIW_MINIMIZE_BUTTON
  913.         + new UIW_SYSTEM_BUTTON(SYF_GENERIC)
  914.         + new UIW_TITLE(message)
  915.         + mainMenu;
  916.  
  917.     // Create the tool bar and add it to the window.
  918.     if (!display->isText && top > 0)
  919.     {
  920.         UIW_TOOL_BAR *toolBar = new UIW_TOOL_BAR(0, 0, 0, 0, WNF_NO_FLAGS,
  921.             WOF_BORDER | WOF_NON_FIELD_REGION, WOAF_NO_FLAGS);
  922.         for (int i = 0; toolBarItems[i].text; i++)
  923.         {
  924.             UIW_BUTTON *button = new UIW_BUTTON(0, 0, 6, NULL,
  925.                 BTF_NO_TOGGLE | BTF_AUTO_SIZE | BTF_SEND_MESSAGE,
  926.                 WOF_JUSTIFY_CENTER, (USER_FUNCTION)toolBarItems[i].data,
  927.                 toolBarItems[i].value, toolBarItems[i].text);
  928.             button->helpContext = (UI_HELP_CONTEXT)toolBarItems[i].value;
  929.             *toolBar + button;
  930.         }
  931.         *demoWindow + toolBar;
  932.     }
  933.  
  934.     // Create the object list and add it to the window.
  935.     UIW_VT_LIST *sampleList = new UIW_VT_LIST(2, 1, 30, 11, NULL, WNF_NO_WRAP | WNF_BITMAP_CHILDREN);
  936.     *sampleList + new UIW_SCROLL_BAR(0, 0, 0, 0, SBF_VERTICAL);
  937.     for (int i = 0; listItems[i].text; i++)
  938.     {
  939.         if (listItems[i].value)
  940.         {
  941.             UIW_BUTTON *button = new UIW_BUTTON(0, 0, 28, listItems[i].text,
  942.                 BTF_RADIO_BUTTON, WOF_NO_FLAGS,
  943.                 (USER_FUNCTION)listItems[i].data, listItems[i].value);
  944.             button->helpContext = (UI_HELP_CONTEXT)listItems[i].value;
  945.             *sampleList + button;
  946.         }
  947.         else
  948.             *sampleList + new UIW_STRING(0, 0, 29, listItems[i].text,
  949.                 -1, STF_NO_FLAGS, WOF_NON_SELECTABLE);
  950.     }
  951.     *demoWindow + sampleList;
  952.  
  953.     // Create the sample window area and add it to the window.
  954.     _sampleWindow = new UIW_WINDOW(34, 0, 38, 7, WOF_NO_FLAGS, WOAF_NO_MOVE | WOAF_NO_SIZE);
  955.     _sampleWindow->wnFlags |= WNF_NO_WRAP;
  956.     *demoWindow + _sampleWindow;
  957.  
  958.     // Create the information text field and add it to the window.
  959.     _information = new UIW_TEXT(35, 7, 36, 5, NULL, 2048, WNF_NO_FLAGS, WOF_BORDER | WOF_VIEW_ONLY);
  960.     *_information + new UIW_SCROLL_BAR(0, 0, 0, 0, SBF_VERTICAL);
  961.     *demoWindow + _information;
  962.  
  963.     // Add the demonstration window to the window manager (to be displayed).
  964.     *windowManager + demoWindow;
  965.  
  966.     // This line assigns the exit function to be called before the demo
  967.     // window is closed.  It MUST be after the window is added to windowManager.
  968.     windowManager->screenID = demoWindow->screenID;
  969.  
  970.     // Initialize the information text field.
  971.     HelpInformation("INFO_GENERAL");
  972.  
  973.     // Process user events.
  974.     EVENT_TYPE ccode;
  975.     do
  976.     {
  977.         UI_EVENT event;
  978.         eventManager->Get(event);
  979.         ccode = windowManager->Event(event);
  980.     } while (ccode != L_EXIT && ccode != S_NO_OBJECT);
  981.  
  982.     // Clean up.
  983.      delete UI_WINDOW_OBJECT::helpSystem;
  984.      delete UI_WINDOW_OBJECT::errorSystem;
  985.     delete _storage;
  986.     delete windowManager;
  987.     delete eventManager;
  988.     delete display;
  989. #if defined(ZIL_MSDOS)
  990.     if (_errorMemory)
  991.         delete _errorMemory;
  992. #endif
  993.  
  994.     return (0);
  995. }
  996.  
  997.  
  998.