home *** CD-ROM | disk | FTP | other *** search
/ Amiga Developer CD 2.1 / Amiga Developer CD v2.1.iso / Reference / DevCon / Atlanta_1990 / Atlanta-Devcon.1 / Libraries / Commodities / Blanker / blanker.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-08-26  |  5.1 KB  |  221 lines

  1.  
  2.    /***********************************************************************
  3.    *                                                                      *
  4.    *                            COPYRIGHTS                                *
  5.    *                                                                      *
  6.    *   Copyright (c) 1990  Commodore-Amiga, Inc.  All Rights Reserved.    *
  7.    *                                                                      *
  8.    ***********************************************************************/
  9.  
  10. #include "app.h"
  11. #include <graphics/gfxmacros.h>
  12. #include <hardware/custom.h>
  13. #include <hardware/dmabits.h>
  14. #include <intuition/gadgetclass.h>
  15.  
  16. extern struct Custom custom;
  17.  
  18. ULONG timeout = 0L;
  19. ULONG blanked = 0L;
  20. ULONG seconds = 10L;
  21. struct Gadget *secgad;
  22.  
  23. struct Screen *s = NULL;
  24. struct Window *w = NULL;
  25.  
  26. LONG   BlankerCommand;
  27. #define BLANK   1L
  28. #define UNBLANK 2L
  29.  
  30. USHORT chip SpriteData[] = {
  31.                0,0,
  32.                0,0,
  33.                0,0 };
  34.  
  35. BOOL setupBlanker(void);
  36. VOID BlankerAction(struct CxMsg *cxm,CxObj *co);
  37. VOID Blank(VOID);
  38. VOID UnBlank(VOID);
  39. VOID mysetupCustomGadgets(struct Gadget **gad);
  40. VOID myHandleGadget(ULONG gad,ULONG code);
  41. VOID MyHandleCustomSignal(VOID);
  42.  
  43. BOOL setupBlanker(VOID)
  44. {
  45.    CxObj   *objectlist;
  46.  
  47.    seconds = ArgInt( ttypes, "SECONDS", 60 );
  48.  
  49.    objectlist=CxCustom( BlankerAction, 0L);
  50.  
  51.    if (CxObjError(objectlist))
  52.    {
  53.       D( printf("nocapslock: filter error %lx\n", CxObjError(objectlist) ) );
  54.       DeleteCxObjAll(objectlist);
  55.       return(0);
  56.    }
  57.  
  58.    AttachCxObj(broker, objectlist);
  59.    return(TRUE);
  60. }
  61. VOID BlankerAction(struct CxMsg *cxm,CxObj *co)
  62. {
  63.    register struct InputEvent *ie;
  64.  
  65.    /* D( kprintf("BlankerAction\n") ); */
  66.  
  67.    /* i KNOW that all messages getting this far are CXM_IEVENT   */
  68.    ie = (struct InputEvent *) CxMsgData(cxm);
  69.  
  70.  
  71.    if(ie->ie_Class==IECLASS_TIMER)
  72.    {
  73.       /* D( printf("IECLASS_TIMER\n"); ) */
  74.       if(! blanked)
  75.       {
  76.          /*D( printf("blanked=0x%lx Bump timeout=%ld\n",blanked,timeout);)*/
  77.          if(++timeout >= ((ULONG)(seconds*10L)))
  78.          {
  79.             D( printf("########Blank Screen\n"); )
  80.             /* Blank(); */
  81.             BlankerCommand=BLANK;
  82.             Signal(maintask,csigflag);
  83.             blanked=TRUE;
  84.          }
  85.       }
  86.    } else {
  87.       if(ie->ie_Class!=IECLASS_TIMER)
  88.       {
  89.          D( printf("########UnBlank\n"); )
  90.          /* UnBlank(); */
  91.          BlankerCommand=UNBLANK;
  92.          Signal(maintask,csigflag);
  93.          timeout=0L;
  94.          blanked=FALSE;
  95.       }
  96.    }
  97.  
  98. }
  99. VOID Blank(VOID)
  100. {
  101.    struct NewScreen ns = {
  102.       0,0,
  103.       320,200,
  104.       1,
  105.       0,0,
  106.       0,
  107.       CUSTOMSCREEN,
  108.       0,
  109.       0,
  110.       0,
  111.       0
  112.       };
  113.  
  114.    struct NewWindow nw = {
  115.       0,0,
  116.       320,200,
  117.       1,0,
  118.       0,
  119.       SIMPLE_REFRESH | BACKDROP | BORDERLESS | ACTIVATE,
  120.       0,
  121.       0,
  122.       0,
  123.       0,
  124.       0,
  125.       0,0,0,0,
  126.       CUSTOMSCREEN
  127.       };
  128.  
  129.    if( ! s)
  130.    {
  131.       s=OpenScreen(&ns);
  132.       SetRGB4(&s->ViewPort,0,0,0,0);
  133.       if( ! w)
  134.       {
  135.          nw.Screen=s;
  136.          w = OpenWindow(&nw);
  137.       }
  138.       if(w)
  139.          SetPointer(w,SpriteData,1,1,0,0);
  140.    }
  141. }
  142. VOID UnBlank(VOID)
  143. {
  144.    if(w)
  145.    {
  146.       ClearPointer(w);
  147.       CloseWindow(w);
  148.       w=NULL;
  149.    }
  150.    if(s)
  151.    {
  152.       CloseScreen(s);
  153.       s=NULL;
  154.    }
  155. }
  156. VOID mysetupCustomGadgets(struct Gadget **gad)
  157. {
  158.    struct NewGadget ng;
  159.  
  160.    ng.ng_VisualInfo=vi;
  161.  
  162.    ng.ng_TopEdge    = topborder+25;
  163.    ng.ng_LeftEdge   = 10;
  164.    ng.ng_Width      = 40;
  165.    ng.ng_Height     = 12;
  166.    ng.ng_GadgetText = "Hide";
  167.    ng.ng_TextAttr   = &mydesiredfont;
  168.    ng.ng_GadgetID   = GAD_HIDE;
  169.    ng.ng_Flags      = NULL;
  170.    ng.ng_VisualInfo = vi;
  171.    *gad = CreateGadget(BUTTON_KIND,*gad, &ng,TAG_DONE);
  172.  
  173.    ng.ng_TopEdge    = topborder+25;
  174.    ng.ng_LeftEdge   = 60;
  175.    ng.ng_Width      = 40;
  176.    ng.ng_Height     = 12;
  177.    ng.ng_GadgetText = "Quit";
  178.    ng.ng_TextAttr   = &mydesiredfont;
  179.    ng.ng_GadgetID   = GAD_DIE;
  180.    ng.ng_Flags      = NULL;
  181.    ng.ng_VisualInfo = vi;
  182.    *gad = CreateGadget(BUTTON_KIND,*gad, &ng,TAG_DONE);
  183.  
  184.    ng.ng_TopEdge    = topborder+5;
  185.    ng.ng_LeftEdge   = 100;
  186.    ng.ng_Width      = 60;
  187.    ng.ng_Height     = 14;
  188.    ng.ng_GadgetText = "Seconds";
  189.    ng.ng_TextAttr   = &mydesiredfont;
  190.    ng.ng_GadgetID   = GAD_SECS;
  191.    ng.ng_Flags      = NULL;
  192.    ng.ng_VisualInfo = vi;
  193.    secgad = *gad = CreateGadget(INTEGER_KIND,*gad, &ng,GTIN_Number,seconds,GTIN_MaxChars,4,STRINGA_Justification,STRINGRIGHT,TAG_DONE);
  194. }
  195. VOID myHandleGadget(ULONG gad,ULONG code)
  196. {
  197.    D( kprintf("custom: HandleGadget(%lx)\n",gad); )
  198.    switch(gad)
  199.    {
  200.       case GAD_HIDE:
  201.             D( kprintf("custom: HandleGadget() GAD_HIDE\n"); )
  202.             shutdownWindow();
  203.             break;
  204.       case GAD_DIE:
  205.             D( kprintf("custom: HandleGadget() GAD_DIE\n"); )
  206.             terminate();
  207.       case GAD_SECS:
  208.             D( kprintf("custom: HandleGadget() GAD_SECS\n"); )
  209.             seconds=((struct StringInfo *)secgad->SpecialInfo)->LongInt;
  210.    }
  211. }
  212. VOID MyHandleCustomSignal(VOID)
  213. {
  214.    D( kprintf("custom: MyHandleCustomSignal() enter\n"); )
  215.    if(BlankerCommand==BLANK)
  216.       Blank();
  217.    else
  218.       if(BlankerCommand==UNBLANK)
  219.          UnBlank();
  220. }
  221.