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 / autopoint2.c < prev    next >
C/C++ Source or Header  |  1992-08-27  |  2KB  |  129 lines

  1. /* apt2.c -- jude's autopoint, commoditized    */
  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    "cx/cxusr.h"
  14.  
  15. #ifndef LIBNAME
  16. #define LIBNAME "commodities.library"
  17. #endif
  18.  
  19. #define D(x)    ;
  20.  
  21. ULONG    CxBase;
  22.  
  23. struct NewBroker mynb = {
  24.     NB_VERSION,
  25.     "autopoint2",
  26.     "AutoPoint2",
  27.     "SunWindows style window activation",    
  28.                                 /* description                */
  29.     NBU_UNIQUE,
  30.     0,                            /* flags                    */
  31.     0                            /* default priority            */
  32. };
  33.  
  34.  
  35. /* want to be signaled whenever the mouse moves with
  36.  * neither button pressed.
  37.  */
  38. IX        myix = {
  39.     IX_VERSION,                /* required                                    */
  40.     IECLASS_RAWMOUSE,
  41.  
  42.     0,                        /* Code: won't care                */
  43.     0,                        /* CodeMask: 0 means don't care */
  44.  
  45.                             /* want no buttons down            */
  46.     0,
  47.     (IEQUALIFIER_LEFTBUTTON |  IEQUALIFIER_RBUTTON),
  48.     0                        /* synonyms irrelevant            */
  49. };
  50.  
  51. main(argc, argv)
  52. int        argc;
  53. char    **argv;
  54. {
  55.     char            **tt;
  56.     int                exitval = 0;
  57.     long            sig;         /* value as allocated (important to use LONG)*/
  58.     CxObj            *broker = NULL;
  59.     CxObj            *filter;
  60.  
  61.     sig = AllocSignal((LONG) -1);
  62.  
  63.     CxBase = (ULONG) OpenLibrary( LIBNAME, 2L);
  64.     if (!CxBase) exit(1);
  65.  
  66.     tt = ArgArrayInit(argc, argv);
  67.     mynb.nb_Pri = ArgInt(tt, "PRIORITY", 0);
  68.     ArgArrayDone();
  69.  
  70.     if (!apt2_init()) goto ABORT;
  71.  
  72.     broker = CxBroker(&mynb, NULL);
  73.  
  74.     if (!broker)
  75.     {
  76.         exitval = 1;
  77.         goto ABORT;
  78.     }
  79.  
  80.     filter = CxFilter(NULL);
  81.     if (!filter)
  82.     {
  83.         exitval = 1;
  84.         goto ABORT;
  85.     }
  86.  
  87.     SetFilterIX(filter, &myix);
  88.  
  89.     /** DEBUG **/
  90.     D( AttachCxObj(filter, CxDebug( 0xDEADFACE)) );
  91.  
  92.     AttachCxObj(filter, CxSignal( FindTask(0L), sig));
  93.  
  94.     if (CxObjError(filter))
  95.     {
  96.         D( printf("nocapslock: filter error %lx\n", CxObjError(filter) ) );
  97.         DeleteCxObjAll(filter);
  98.         exitval = 2;
  99.         goto ABORT;
  100.     }
  101.  
  102.     AttachCxObj(broker, filter);
  103.  
  104.     /* all set, activate broker    */
  105.     ActivateCxObj(broker, 1L);
  106.  
  107.     /* responds to signals; there are no messages    */
  108.     while (1)
  109.     {
  110.         if( Wait((LONG) SIGBREAKF_CTRL_E | (1L << sig) ) & SIGBREAKF_CTRL_E )
  111.         {
  112.             D( printf("got break\n") );
  113.             exitval = 1;
  114.             goto GOT_BREAK;
  115.         }
  116.         autopoint2();
  117.     }
  118.  
  119. GOT_BREAK:
  120. ABORT:
  121.     if (broker) DeleteCxObjAll(broker);
  122.     CloseLibrary(CxBase);
  123.  
  124.     apt2_shutdown();
  125.     FreeSignal(sig);
  126.  
  127.     exit (exitval);
  128. }
  129.