home *** CD-ROM | disk | FTP | other *** search
/ Amiga Developer CD 2.1 / Amiga Developer CD v2.1.iso / CD32 / CD32_Support / examples / SA_Examples / lowlevel / KBInt / gui.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-08-31  |  12.2 KB  |  520 lines

  1. /*
  2.  * System includes
  3.  */
  4.  
  5. #include <exec/types.h>
  6. #include <exec/memory.h>
  7.  
  8. #include <dos/dos.h>
  9.  
  10. #include <intuition/intuition.h>
  11. #include <intuition/gadgetclass.h>
  12.  
  13. #include <libraries/gadtools.h>
  14.  
  15. #include <devices/inputevent.h>
  16.  
  17. #include <libraries/lowlevel.h>
  18.  
  19. #include <clib/exec_protos.h>
  20. #include <clib/dos_protos.h>
  21. #include <clib/intuition_protos.h>
  22. #include <clib/gadtools_protos.h>
  23. #include <clib/keymap_protos.h>
  24. #include <clib/lowlevel_protos.h>
  25.  
  26. #include <pragmas/lowlevel_pragmas.h>
  27.  
  28. /*
  29.  * ANSI includes
  30.  */
  31.  
  32. #include <stdio.h>
  33. #include <stdlib.h>
  34. #include <string.h>
  35.  
  36. /*
  37.  * Local includes
  38.  */
  39.  
  40. #include "kbint.h"
  41.  
  42. /****** KBInt/guiOpen ******************************************
  43. *
  44. *   NAME
  45. *       guiOpen -- open graphical user interface
  46. *
  47. *   SYNOPSIS
  48. *       success=guiOpen();
  49. *
  50. *       BOOL guiOpen(void);
  51. *
  52. *   FUNCTION
  53. *       Open graphical user interface.
  54. *
  55. *   INPUTS
  56. *       None
  57. *
  58. *   RESULT
  59. *       success -- TRUE if success; FALSE if failure
  60. *
  61. *   EXAMPLE
  62. *
  63. *   NOTES
  64. *
  65. *   BUGS
  66. *
  67. *   SEE ALSO
  68. *       guiClose()
  69. *
  70. ******************************************************************************
  71. *
  72. */
  73. BOOL guiOpen(void)
  74. {
  75.  
  76.     struct NewGadget newGadget;
  77.     struct Gadget *previousGadget;
  78.  
  79.     static struct TextAttr textAttr ={
  80.         GUI_TYPEFACE, /* ta_Name */
  81.         GUI_TYPESIZE, /* ta_YSize */
  82.         NULL, /* ta_Style */
  83.         NULL  /* ta_Flags */
  84.     };
  85.  
  86.     /*
  87.      * Open window
  88.      */
  89.  
  90.     /* Open window */
  91.     window=OpenWindowTags(NULL,
  92.         WA_Title, PROGRAM_NAME,
  93.         WA_InnerWidth, 340,
  94.         WA_InnerHeight, 116,
  95.         WA_DragBar, TRUE,
  96.         WA_CloseGadget, TRUE,
  97.         WA_DepthGadget, TRUE,
  98.         WA_Activate, TRUE,
  99.         WA_SimpleRefresh, TRUE,
  100.         WA_IDCMP, IDCMP_CLOSEWINDOW|IDCMP_REFRESHWINDOW|
  101.             NUMBERIDCMP|TEXTIDCMP|CHECKBOXIDCMP,
  102.         TAG_DONE);
  103.     if (!window) {
  104.         return(FALSE);
  105.     }
  106.  
  107.     /* Fetch visual info */
  108.     visualInfo=GetVisualInfo(window->WScreen,TAG_DONE);
  109.     if (!visualInfo) {
  110.         return(FALSE);
  111.     }
  112.  
  113.     /* Create gadtools.library context */
  114.     previousGadget=gadgetList=CreateContext(&gadgetList);
  115.     if (!gadgetList) {
  116.         return(FALSE);
  117.     }
  118.  
  119.     /*
  120.      * Create gadgetry
  121.      */
  122.  
  123.     /* Key gadget */
  124.     newGadget.ng_LeftEdge=window->BorderLeft+40;
  125.     newGadget.ng_TopEdge=window->BorderTop+12;
  126.     newGadget.ng_Width=24;
  127.     newGadget.ng_Height=16;
  128.     newGadget.ng_GadgetText="Key";
  129.     newGadget.ng_TextAttr=&textAttr;
  130.     newGadget.ng_GadgetID=GUI_KEY_ID;
  131.     newGadget.ng_Flags=PLACETEXT_LEFT;
  132.     newGadget.ng_VisualInfo=visualInfo;
  133.     newGadget.ng_UserData=NULL;
  134.     previousGadget=keyGadget=CreateGadget(TEXT_KIND,
  135.         previousGadget,&newGadget,
  136.         GTTX_Border, TRUE,
  137.         TAG_DONE);
  138.     if (!previousGadget) {
  139.         return(FALSE);
  140.     }
  141.  
  142.     /* Code gadget */
  143.     newGadget.ng_LeftEdge=window->BorderLeft+128;
  144.     newGadget.ng_TopEdge=window->BorderTop+12;
  145.     newGadget.ng_Width=32;
  146.     newGadget.ng_Height=16;
  147.     newGadget.ng_GadgetText="Code";
  148.     newGadget.ng_TextAttr=&textAttr;
  149.     newGadget.ng_GadgetID=GUI_CODE_ID;
  150.     newGadget.ng_Flags=PLACETEXT_LEFT;
  151.     newGadget.ng_VisualInfo=visualInfo;
  152.     newGadget.ng_UserData=NULL;
  153.     previousGadget=codeGadget=CreateGadget(NUMBER_KIND,
  154.         previousGadget,&newGadget,
  155.         GTNM_Border, TRUE,
  156.         TAG_DONE);
  157.     if (!previousGadget) {
  158.         return(FALSE);
  159.     }
  160.  
  161.     /* Transition gadget */
  162.     newGadget.ng_LeftEdge=window->BorderLeft+264;
  163.     newGadget.ng_TopEdge=window->BorderTop+12;
  164.     newGadget.ng_Width=64;
  165.     newGadget.ng_Height=16;
  166.     newGadget.ng_GadgetText="Transition";
  167.     newGadget.ng_TextAttr=&textAttr;
  168.     newGadget.ng_GadgetID=GUI_KEY_ID;
  169.     newGadget.ng_Flags=PLACETEXT_LEFT;
  170.     newGadget.ng_VisualInfo=visualInfo;
  171.     newGadget.ng_UserData=NULL;
  172.     previousGadget=transitionGadget=CreateGadget(TEXT_KIND,
  173.         previousGadget,&newGadget,
  174.         GTTX_Border, TRUE,
  175.         TAG_DONE);
  176.     if (!previousGadget) {
  177.         return(FALSE);
  178.     }
  179.  
  180.     /* LShift gadget */
  181.     newGadget.ng_LeftEdge=window->BorderLeft+8;
  182.     newGadget.ng_TopEdge=window->BorderTop+36;
  183.     newGadget.ng_Width=26;
  184.     newGadget.ng_Height=11;
  185.     newGadget.ng_GadgetText="LShift";
  186.     newGadget.ng_TextAttr=&textAttr;
  187.     newGadget.ng_GadgetID=GUI_LSHIFT_ID;
  188.     newGadget.ng_Flags=PLACETEXT_RIGHT;
  189.     newGadget.ng_VisualInfo=visualInfo;
  190.     newGadget.ng_UserData=NULL;
  191.     previousGadget=lShiftGadget=CreateGadget(CHECKBOX_KIND,
  192.         previousGadget,&newGadget,
  193.         GA_Disabled, TRUE,
  194.         TAG_DONE);
  195.     if (!previousGadget) {
  196.         return(FALSE);
  197.     }
  198.  
  199.     /* RShift gadget */
  200.     newGadget.ng_LeftEdge=window->BorderLeft+248;
  201.     newGadget.ng_TopEdge=window->BorderTop+36;
  202.     newGadget.ng_Width=26;
  203.     newGadget.ng_Height=11;
  204.     newGadget.ng_GadgetText="RShift";
  205.     newGadget.ng_TextAttr=&textAttr;
  206.     newGadget.ng_GadgetID=GUI_RSHIFT_ID;
  207.     newGadget.ng_Flags=PLACETEXT_RIGHT;
  208.     newGadget.ng_VisualInfo=visualInfo;
  209.     newGadget.ng_UserData=NULL;
  210.     previousGadget=rShiftGadget=CreateGadget(CHECKBOX_KIND,
  211.         previousGadget,&newGadget,
  212.         GA_Disabled, TRUE,
  213.         TAG_DONE);
  214.     if (!previousGadget) {
  215.         return(FALSE);
  216.     }
  217.  
  218.     /* Caps Lock gadget */
  219.     newGadget.ng_LeftEdge=window->BorderLeft+8;
  220.     newGadget.ng_TopEdge=window->BorderTop+52;
  221.     newGadget.ng_Width=26;
  222.     newGadget.ng_Height=11;
  223.     newGadget.ng_GadgetText="Caps Lock";
  224.     newGadget.ng_TextAttr=&textAttr;
  225.     newGadget.ng_GadgetID=GUI_CAPSLOCK_ID;
  226.     newGadget.ng_Flags=PLACETEXT_RIGHT;
  227.     newGadget.ng_VisualInfo=visualInfo;
  228.     newGadget.ng_UserData=NULL;
  229.     previousGadget=capsLockGadget=CreateGadget(CHECKBOX_KIND,
  230.         previousGadget,&newGadget,
  231.         GA_Disabled, TRUE,
  232.         TAG_DONE);
  233.     if (!previousGadget) {
  234.         return(FALSE);
  235.     }
  236.  
  237.     /* Control gadget */
  238.     newGadget.ng_LeftEdge=window->BorderLeft+8;
  239.     newGadget.ng_TopEdge=window->BorderTop+68;
  240.     newGadget.ng_Width=26;
  241.     newGadget.ng_Height=11;
  242.     newGadget.ng_GadgetText="Control";
  243.     newGadget.ng_TextAttr=&textAttr;
  244.     newGadget.ng_GadgetID=GUI_CONTROL_ID;
  245.     newGadget.ng_Flags=PLACETEXT_RIGHT;
  246.     newGadget.ng_VisualInfo=visualInfo;
  247.     newGadget.ng_UserData=NULL;
  248.     previousGadget=controlGadget=CreateGadget(CHECKBOX_KIND,
  249.         previousGadget,&newGadget,
  250.         GA_Disabled, TRUE,
  251.         TAG_DONE);
  252.     if (!previousGadget) {
  253.         return(FALSE);
  254.     }
  255.  
  256.     /* LAlt gadget */
  257.     newGadget.ng_LeftEdge=window->BorderLeft+8;
  258.     newGadget.ng_TopEdge=window->BorderTop+84;
  259.     newGadget.ng_Width=26;
  260.     newGadget.ng_Height=11;
  261.     newGadget.ng_GadgetText="LAlt";
  262.     newGadget.ng_TextAttr=&textAttr;
  263.     newGadget.ng_GadgetID=GUI_LALT_ID;
  264.     newGadget.ng_Flags=PLACETEXT_RIGHT;
  265.     newGadget.ng_VisualInfo=visualInfo;
  266.     newGadget.ng_UserData=NULL;
  267.     previousGadget=lAltGadget=CreateGadget(CHECKBOX_KIND,
  268.         previousGadget,&newGadget,
  269.         GA_Disabled, TRUE,
  270.         TAG_DONE);
  271.     if (!previousGadget) {
  272.         return(FALSE);
  273.     }
  274.  
  275.     /* RAlt gadget */
  276.     newGadget.ng_LeftEdge=window->BorderLeft+248;
  277.     newGadget.ng_TopEdge=window->BorderTop+84;
  278.     newGadget.ng_Width=26;
  279.     newGadget.ng_Height=11;
  280.     newGadget.ng_GadgetText="RAlt";
  281.     newGadget.ng_TextAttr=&textAttr;
  282.     newGadget.ng_GadgetID=GUI_RALT_ID;
  283.     newGadget.ng_Flags=PLACETEXT_RIGHT;
  284.     newGadget.ng_VisualInfo=visualInfo;
  285.     newGadget.ng_UserData=NULL;
  286.     previousGadget=rAltGadget=CreateGadget(CHECKBOX_KIND,
  287.         previousGadget,&newGadget,
  288.         GA_Disabled, TRUE,
  289.         TAG_DONE);
  290.     if (!previousGadget) {
  291.         return(FALSE);
  292.     }
  293.  
  294.     /* LAmiga gadget */
  295.     newGadget.ng_LeftEdge=window->BorderLeft+8;
  296.     newGadget.ng_TopEdge=window->BorderTop+100;
  297.     newGadget.ng_Width=26;
  298.     newGadget.ng_Height=11;
  299.     newGadget.ng_GadgetText="LAmiga";
  300.     newGadget.ng_TextAttr=&textAttr;
  301.     newGadget.ng_GadgetID=GUI_LAMIGA_ID;
  302.     newGadget.ng_Flags=PLACETEXT_RIGHT;
  303.     newGadget.ng_VisualInfo=visualInfo;
  304.     newGadget.ng_UserData=NULL;
  305.     previousGadget=lAmigaGadget=CreateGadget(CHECKBOX_KIND,
  306.         previousGadget,&newGadget,
  307.         GA_Disabled, TRUE,
  308.         TAG_DONE);
  309.     if (!previousGadget) {
  310.         return(FALSE);
  311.     }
  312.  
  313.     /* RAmiga gadget */
  314.     newGadget.ng_LeftEdge=window->BorderLeft+248;
  315.     newGadget.ng_TopEdge=window->BorderTop+100;
  316.     newGadget.ng_Width=26;
  317.     newGadget.ng_Height=11;
  318.     newGadget.ng_GadgetText="RAmiga";
  319.     newGadget.ng_TextAttr=&textAttr;
  320.     newGadget.ng_GadgetID=GUI_RAMIGA_ID;
  321.     newGadget.ng_Flags=PLACETEXT_RIGHT;
  322.     newGadget.ng_VisualInfo=visualInfo;
  323.     newGadget.ng_UserData=NULL;
  324.     previousGadget=rAmigaGadget=CreateGadget(CHECKBOX_KIND,
  325.         previousGadget,&newGadget,
  326.         GA_Disabled, TRUE,
  327.         TAG_DONE);
  328.     if (!previousGadget) {
  329.         return(FALSE);
  330.     }
  331.  
  332.     /*
  333.      * Attach gadgetry
  334.      */
  335.  
  336.     /* Add gadget list to window */
  337.     AddGList(window,gadgetList,-1,-1,NULL);
  338.  
  339.     /* Refresh gadgetry */
  340.     RefreshGList(gadgetList,window,NULL,-1);
  341.     GT_RefreshWindow(window,NULL);
  342.  
  343.     /*
  344.      * Success
  345.      */
  346.  
  347.     /* Success */
  348.     return(TRUE);
  349.  
  350. }
  351.  
  352. /****** KBInt/guiClose **************************************************
  353. *
  354. *   NAME
  355. *       guiClose -- close graphical user interface
  356. *
  357. *   SYNOPSIS
  358. *       guiClose();
  359. *
  360. *       void guiClose(void);
  361. *
  362. *   FUNCTION
  363. *       Close graphical user interface.
  364. *
  365. *   INPUTS
  366. *       None
  367. *
  368. *   RESULT
  369. *       None
  370. *
  371. *   EXAMPLE
  372. *
  373. *   NOTES
  374. *
  375. *   BUGS
  376. *
  377. *   SEE ALSO
  378. *       guiOpen()
  379. *
  380. ******************************************************************************
  381. *
  382. */
  383. void guiClose(void)
  384. {
  385.  
  386.     /* If intuition.library and gadtools.library open ... */
  387.     if (IntuitionBase && GadtoolsBase) {
  388.  
  389.         /* If window open ... */
  390.         if (window) {
  391.  
  392.             /* If visual info ... */
  393.             if (visualInfo) {
  394.  
  395.                 /* If gadgets created ... */
  396.                 if (gadgetList) {
  397.  
  398.                     /* Remove gadgetry from window */
  399.                     RemoveGList(window,gadgetList,-1);
  400.  
  401.                     /* Free gadgetry */
  402.                     FreeGadgets(gadgetList);
  403.  
  404.                 }
  405.  
  406.                 /* Free visual info */
  407.                 FreeVisualInfo(visualInfo);
  408.  
  409.             }
  410.  
  411.             /* Close window */
  412.             CloseWindow(window);
  413.  
  414.         }
  415.  
  416.     }
  417.  
  418. }
  419.  
  420. /****** KBInt/guiLoop ***************************************************
  421. *
  422. *   NAME
  423. *       guiLoop -- event loop for graphical user interface
  424. *
  425. *   SYNOPSIS
  426. *       guiLoop();
  427. *
  428. *       void guiLoop(void);
  429. *
  430. *   FUNCTION
  431. *       Event loop for graphical user interface.
  432. *
  433. *   INPUTS
  434. *       None
  435. *
  436. *   RESULT
  437. *       None
  438. *
  439. *   EXAMPLE
  440. *
  441. *   NOTES
  442. *
  443. *   BUGS
  444. *
  445. *   SEE ALSO
  446. *
  447. ******************************************************************************
  448. *
  449. */
  450. void guiLoop(void)
  451. {
  452.  
  453.     ULONG signalFlags;
  454.  
  455.     struct IntuiMessage *imsg;
  456.     ULONG class;
  457.     USHORT code;
  458.     APTR iaddress;
  459.  
  460.     /* Endless loop */
  461.     FOREVER {
  462.  
  463.         /* Wait for ... */
  464.         signalFlags=
  465.             Wait((1<<window->UserPort->mp_SigBit) /* window message ... */
  466.                  | (1<<kbSignal)                  /* or keyboard signal */
  467.             );
  468.  
  469.         /* If window message ... */
  470.         if (signalFlags&(1<<window->UserPort->mp_SigBit)) {
  471.  
  472.             /* Process window message queue */
  473.             while (imsg=GT_GetIMsg(window->UserPort)) {
  474.  
  475.                 /* Fetch fields from message */
  476.                 class=imsg->Class;
  477.                 code=imsg->Code;
  478.                 iaddress=imsg->IAddress;
  479.  
  480.                 /* Reply to message */
  481.                 GT_ReplyIMsg(imsg);
  482.  
  483.                 /* Switch on class */
  484.                 switch (class) {
  485.  
  486.                     /* Window close event */
  487.                     case IDCMP_CLOSEWINDOW:
  488.                         /* Exit event loop */
  489.                         return;
  490.  
  491.                     /* Window refresh event */
  492.                     case IDCMP_REFRESHWINDOW:
  493.                         /* Refresh window */
  494.                         GT_BeginRefresh(window);
  495.                         GT_EndRefresh(window,TRUE);
  496.                         break;
  497.  
  498.                     /* Default */
  499.                     default:
  500.                         /* No action */
  501.                         break;
  502.  
  503.                 }
  504.  
  505.             }
  506.  
  507.         }
  508.  
  509.         /* If keyboard signal ... */
  510.         if (signalFlags&(1<<kbSignal)) {
  511.  
  512.             /* Update keyboard display */
  513.             kbUpdate();
  514.  
  515.         }
  516.  
  517.     }
  518.  
  519. }
  520.