home *** CD-ROM | disk | FTP | other *** search
/ Amiga Developer CD v1.2 / amidev_cd_12.iso / devcon / sanfrancisco_1989 / sf-devcon89.1 / commodities / aztec / examples / ihelp.c < prev    next >
C/C++ Source or Header  |  1992-08-27  |  3KB  |  149 lines

  1. /* ihelp.c -- cycles/activates windows and stuff like that    */
  2.  
  3. /*
  4. Copyright (c) 1987, 1988, 1989 Jim Mackraz and I&I Computing.
  5.  
  6. Executables based on this information may be used in software
  7. for Commodore Amiga computers.  All other rights reserved.
  8. This information is provided "as is"; no warranties are made.
  9. All use is at your own risk, and no liability or responsibility
  10. is assumed.
  11. */
  12.  
  13. #include    "sysall.h"
  14. #include    "cx/cxusr.h"
  15.  
  16. #define D(x)    ;
  17.  
  18. #ifndef LIBNAME
  19. #define LIBNAME "commodities.library"
  20. #endif
  21.  
  22. #define        CYCLE                1L
  23. #define        CYCLEBACK            2L
  24. #define        MAKEBIG                3L
  25. #define        MAKESMALL            4L
  26.  
  27. ULONG    CxBase;
  28. struct MsgPort    *port;
  29.  
  30. struct NewBroker mynb = {
  31.     NB_VERSION,
  32.     "ihelper",                    /* broker internal name    */
  33.     "IHelper",                    /* commodity title        */
  34.     "Intuition keyboard stuff",    /* description            */
  35.     NBU_UNIQUE,                    /* co-existence is low    */
  36.     0,                            /* flags                */
  37.     0                            /* default priority        */
  38. };
  39.  
  40. main(argc, argv)
  41. int        argc;
  42. char    **argv;
  43. {
  44.     char            **tt;        /* arg list    */
  45.     struct Message    *msg;
  46.     int                exitval = 0;
  47.     LONG            hotkeyid;
  48.     LONG            sigmask;
  49.     LONG            error;
  50.     CxObj            *broker = NULL;
  51.  
  52.     CxBase = (ULONG) OpenLibrary( LIBNAME, 2L);
  53.     if (!CxBase) exit (3);
  54.  
  55.     /* get argument list    */
  56.     tt = ArgArrayInit(argc, argv);
  57.  
  58.     port = CreatePort(mynb.nb_Name, 0L);
  59.  
  60.     if (!ihelp_init()) goto ABORT;
  61.  
  62.     mynb.nb_Pri = ArgInt(tt, "PRIORITY", 0);
  63.  
  64.     broker = CxBroker(&mynb, NULL);
  65.     if (!broker)
  66.     {
  67.         exitval = 2;
  68.         goto ABORT;
  69.     }
  70.     D( printf("broker ok at %lx\n", broker) );
  71.  
  72.     AttachCxObj(broker,
  73.         HotKey( ArgString(tt, "CYCLE", "f1"), port, CYCLE) );
  74.     AttachCxObj(broker,
  75.         HotKey( ArgString(tt, "MAKEBIG", "f2"),  port, MAKEBIG) );
  76.     AttachCxObj(broker,
  77.         HotKey( ArgString(tt, "MAKESMALL", "f3"), port, MAKESMALL) );
  78. #if 0
  79.     AttachCxObj(broker,
  80.         HotKey( ArgString(tt, "CYCLEBACK", "shift f1"), port, CYCLEBACK) );
  81. #endif
  82.  
  83.     if (error = CxObjError(broker))
  84.     {
  85.         D( printf("accumulated broker error %ld\n", error) );
  86.         exitval = 4;
  87.         goto ABORT;
  88.     }
  89.     ActivateCxObj(broker, 1L);
  90.  
  91.     D( printf("ihelp all ready to go\n") );
  92.  
  93.     sigmask = SIGBREAKF_CTRL_E | (1L << port->mp_SigBit);
  94.     while (1)
  95.     {
  96.         msg = GetMsg( port );
  97.         if( ! msg )
  98.         {
  99.             if( (Wait( sigmask ) & SIGBREAKF_CTRL_E) == SIGBREAKF_CTRL_E )
  100.             {
  101.                 D( printf("got break\n") );
  102.                 exitval = 1;
  103.                 goto GOT_BREAK;
  104.             }
  105.             continue;
  106.         }
  107.         hotkeyid = CxMsgID(msg);
  108.         D( printf("got msg, hotkeyid = %lx\n", hotkeyid) );
  109.  
  110.         ReplyMsg( msg );
  111.  
  112.         switch ( hotkeyid )
  113.         {
  114.         case    CYCLE:
  115.             D( printf("cycleforward\n") );
  116.             cycleforward();
  117.             break;
  118.         case    CYCLEBACK:
  119.             D( printf("cycleback\n") );
  120.             cyclebackward();
  121.             break;
  122.         case    MAKEBIG:
  123.             D( printf("makebig\n") );
  124.             makesize((int) MAKEBIG);
  125.             break;
  126.         case    MAKESMALL:
  127.             D( printf("makesmall\n") );
  128.             makesize((int) MAKESMALL);
  129.             break;
  130.         }
  131.     }
  132.  
  133. GOT_BREAK:
  134. ABORT:
  135.     if (broker)
  136.     {
  137.         DeleteCxObjAll(broker);
  138.         while (msg = GetMsg(port)) ReplyMsg(msg);
  139.     }
  140.     CloseLibrary(CxBase);
  141.  
  142.     ihelp_shutdown();
  143.     DeletePort(port);
  144.  
  145.     ArgArrayDone();
  146.  
  147.     exit (exitval);
  148. }
  149.