home *** CD-ROM | disk | FTP | other *** search
/ Amiga Developer CD v1.2 / amidev_cd_12.iso / devcon / sanfrancisco_1989 / sf-devcon89.1 / graphics / genlock_example.c < prev    next >
C/C++ Source or Header  |  1992-08-27  |  9KB  |  279 lines

  1.  
  2. /******************************************************************************
  3. *                                                                             *
  4. *    genlock_example -- specifying the new V1.4 Genlock Modes to graphics.    *
  5. *                                                                             *
  6. *    Requires V1.4 KickStart and the new ECS chip set to display new modes.   *
  7. *                                                                             *
  8. ******************************************************************************/
  9.  
  10. #include <exec/types.h>
  11. #include <exec/memory.h>
  12. #include <graphics/videocontrol.h>
  13. #include <intuition/intuition.h>
  14.  
  15. #define V1_POINT_4 36
  16.  
  17. struct  GfxBase         *GfxBase = NULL;
  18. struct  IntuitionBase   *IntuitionBase = NULL;
  19.  
  20. struct  Window      *new_window();
  21.  
  22. ULONG flg =  (WINDOWCLOSE|NOCAREREFRESH|WINDOWDRAG|WINDOWDEPTH|SIMPLE_REFRESH);
  23. ULONG iflg = (CLOSEWINDOW) ;
  24.  
  25. error_message( error )
  26. int error;
  27. {
  28.     switch( error )
  29.     {
  30.         case( -4 ): printf("error: can't open workbench window\n"); break;
  31.         case( -3 ): printf("error: can't open workbench screen\n"); break;
  32.         case( -2 ): printf("error: can't open 1.4 intuition.library\n"); break;
  33.         case( -1 ): printf("error: can't open 1.4 graphics.library\n"); break;
  34.     }
  35. }
  36.  
  37. usage(progname)
  38. char *progname;
  39. {
  40.   printf("%s ",progname);
  41.   printf("[c\(\%%1c\)|C\(\%%1c\)] [p\(\%%1c\)|P\(\%%1c\)] [t|T] [b|B]  \n");
  42.   printf("[c\(\%%1c\)|C\(\%%1c\)] ==   chroma key pen   n \(n == 0..9\)\n");
  43.   printf("[p\(\%%1c\)|P\(\%%1c\)] == bitplane key plane n \(n == 0..9\)\n");
  44.   printf("[t|T] == border not transparent\n");
  45.   printf("[b|B] == border blanking\n");
  46. }
  47.  
  48. struct TagItem vidcon[] =
  49. {
  50.     { VTAG_END_CM, NULL },
  51.     { VTAG_END_CM, NULL },
  52.     { VTAG_END_CM, NULL },
  53. };
  54.  
  55. main(argc,argv)
  56. int argc;
  57. char *argv[];
  58. {
  59.     int      exitval = -1;
  60.     struct   Screen *wbscreen = NULL;
  61.     struct   Window *wbwindow = NULL;
  62.     struct   IntuiMessage *msg = NULL;
  63.     ULONG    class;
  64.     ULONG    borderblank = 0;
  65.     ULONG    borderntran = 0;
  66.     ULONG    chromakey = 0;
  67.     ULONG    penkey = 0;
  68.     ULONG    bitplanekey = 0;
  69.     ULONG    planekey = 0;
  70.  
  71.     char *title = " VideoControl Demo ";
  72.  
  73.     if(argc > 1)
  74.     {
  75.         int i;
  76.         for(i=1; i<argc; i++)
  77.         {
  78.             switch((UBYTE)(*(*(argv+i))))
  79.             {
  80.                 case 'b': borderblank = TRUE; break;
  81.                 case 'B': borderblank = TRUE; break;
  82.                 case 't': borderntran = TRUE; break;
  83.                 case 'T': borderntran = TRUE; break;
  84.                 case 'c': chromakey   = TRUE; penkey  =(*(argv[i]+1))-'0';break;
  85.                 case 'C': chromakey   = TRUE; penkey  =(*(argv[i]+1))-'0';break;
  86.                 case 'p': bitplanekey = TRUE; planekey=(*(argv[i]+1))-'0';break;
  87.                 case 'P': bitplanekey = TRUE; planekey=(*(argv[i]+1))-'0';break;
  88.                 case '?': usage(*argv); goto USAGE;
  89.                 default : usage(*argv); goto USAGE;
  90.             }
  91.         }
  92.     }
  93.  
  94.     if (!(GfxBase = (struct GfxBase *)
  95.         OpenLibrary("graphics.library", V1_POINT_4)))
  96.     {
  97.         exitval = ~(-1);
  98.         goto EXITING;
  99.     }
  100.  
  101.     if (!(IntuitionBase = (struct IntuitionBase *)
  102.         OpenLibrary("intuition.library", V1_POINT_4)))
  103.     {
  104.         exitval = ~(-2);
  105.         goto EXITING;
  106.     }
  107.  
  108.     /* ------ Find the Workbench Screen ------------ */
  109.  
  110.     if((wbscreen = (struct Screen *)OpenWorkBench())==NULL)
  111.     {
  112.         exitval = ~(-3);
  113.         goto USAGE;
  114.     }
  115.  
  116.     /* ------ Set up the Genlock State ------------ */
  117.  
  118.     if((bitplanekey) || (chromakey) || (borderblank) || (borderntran))
  119.     {
  120.         if(borderblank) 
  121.         {
  122.             vidcon[0].ti_Tag  = VTAG_BORDERBLANK_SET;
  123.             vidcon[0].ti_Data = NULL;
  124.             vidcon[1].ti_Tag  = VTAG_END_CM;
  125.             vidcon[1].ti_Data = NULL;
  126.             VideoControl( wbscreen->ViewPort.ColorMap, vidcon );
  127.         }
  128.         if(borderntran) 
  129.         {
  130.             vidcon[0].ti_Tag  = VTAG_BORDERNOTRANS_SET;
  131.             vidcon[0].ti_Data = NULL;
  132.             vidcon[1].ti_Tag  = VTAG_END_CM;
  133.             vidcon[1].ti_Data = NULL;
  134.             VideoControl( wbscreen->ViewPort.ColorMap, vidcon );
  135.         }
  136.         if(chromakey) 
  137.         {
  138.             vidcon[0].ti_Tag  = VTAG_CHROMAKEY_SET;
  139.             vidcon[0].ti_Data = NULL;
  140.             vidcon[1].ti_Tag  = VTAG_CHROMA_PEN_SET;
  141.             vidcon[1].ti_Data = penkey;
  142.             vidcon[2].ti_Tag  = VTAG_END_CM;
  143.             vidcon[2].ti_Data = NULL;
  144.             VideoControl( wbscreen->ViewPort.ColorMap, vidcon );
  145.         }
  146.         if(bitplanekey)
  147.         {
  148.             vidcon[0].ti_Tag  = VTAG_BITPLANEKEY_SET;
  149.             vidcon[0].ti_Data = NULL;
  150.             vidcon[1].ti_Tag  = VTAG_CHROMA_PLANE_SET;
  151.             vidcon[1].ti_Data = planekey;
  152.             vidcon[2].ti_Tag  = VTAG_END_CM;
  153.             vidcon[2].ti_Data = NULL;
  154.             VideoControl( wbscreen->ViewPort.ColorMap, vidcon );
  155.         }
  156.     }
  157.  
  158.     /* ------ Display the Genlock State ------------ */
  159.  
  160.     MakeScreen( wbscreen );
  161.     RethinkDisplay( );  /* activate the changes */
  162.  
  163.     wbwindow = new_window(320, 20, 300, 50, flg, iflg, title);
  164.  
  165.     if (wbwindow == NULL)
  166.     {
  167.         exitval = ~(-4);
  168.         goto EXITING;
  169.     }
  170.  
  171.     FOREVER
  172.     {
  173.         if ((msg = (struct IntuiMessage *)GetMsg(wbwindow->UserPort)) == NULL)
  174.         {
  175.             Wait((ULONG) 1<<wbwindow->UserPort->mp_SigBit);
  176.             continue;
  177.         }
  178.  
  179.         class = msg->Class; 
  180.         ReplyMsg( msg );
  181.  
  182.         switch (class)
  183.         {
  184.             case CLOSEWINDOW: 
  185.             {
  186.                 goto EXITING;
  187.             }   
  188.         }
  189.     }
  190.  
  191. EXITING:
  192.  
  193.     /* ------ Cleanup the Genlock State ------------ */
  194.  
  195.     if( ( wbscreen  )
  196.     &&  ((bitplanekey) || (chromakey) || (borderblank) || (borderntran)) )
  197.     {
  198.         if(borderblank) 
  199.         {
  200.             vidcon[0].ti_Tag  = VTAG_BORDERBLANK_CLR;
  201.             vidcon[0].ti_Data = NULL;
  202.             vidcon[1].ti_Tag  = VTAG_END_CM;
  203.             vidcon[1].ti_Data = NULL;
  204.             VideoControl( wbscreen->ViewPort.ColorMap, vidcon );
  205.         }
  206.         if(borderntran) 
  207.         {
  208.             vidcon[0].ti_Tag  = VTAG_BORDERNOTRANS_CLR;
  209.             vidcon[0].ti_Data = NULL;
  210.             vidcon[1].ti_Tag  = VTAG_END_CM;
  211.             vidcon[1].ti_Data = NULL;
  212.             VideoControl( wbscreen->ViewPort.ColorMap, vidcon );
  213.         }
  214.         if(chromakey) 
  215.         {
  216.             vidcon[0].ti_Tag  = VTAG_CHROMAKEY_CLR;
  217.             vidcon[0].ti_Data = NULL;
  218.             vidcon[1].ti_Tag  = VTAG_CHROMA_PEN_CLR;
  219.             vidcon[1].ti_Data = penkey;
  220.             vidcon[2].ti_Tag  = VTAG_END_CM;
  221.             vidcon[2].ti_Data = NULL;
  222.             VideoControl( wbscreen->ViewPort.ColorMap, vidcon );
  223.         }
  224.         if(bitplanekey)
  225.         {
  226.             vidcon[0].ti_Tag  = VTAG_BITPLANEKEY_CLR;
  227.             vidcon[0].ti_Data = NULL;
  228.             vidcon[1].ti_Tag  = VTAG_CHROMA_PLANE_SET;
  229.             vidcon[1].ti_Data = planekey;
  230.             vidcon[2].ti_Tag  = VTAG_END_CM;
  231.             vidcon[2].ti_Data = NULL;
  232.             VideoControl( wbscreen->ViewPort.ColorMap, vidcon );
  233.         }
  234.     }
  235.  
  236.     if (wbwindow)  CloseWindow(wbwindow);
  237.     if (wbscreen)  MakeScreen( wbscreen );
  238.     if (IntuitionBase)  RethinkDisplay( );  /* deactivate the changes */
  239.  
  240. USAGE:
  241.  
  242.     if (GfxBase)       CloseLibrary(GfxBase);
  243.     if (IntuitionBase) CloseLibrary(IntuitionBase);
  244.                        error_message( ~exitval );
  245.     exit (~exitval);
  246. }
  247.  
  248. struct  Window *new_window(left, top, width, height, flg, iflg, title)
  249. WORD            left, top, width, height;
  250. ULONG           flg, iflg;
  251. char           *title;
  252. {
  253.     struct  Window  *OpenWindow();
  254.     struct  NewWindow   nw;
  255.  
  256.     nw.LeftEdge         =   (WORD) left;
  257.     nw.TopEdge          =   (WORD) top;
  258.     nw.Width            =   (WORD) width;
  259.     nw.Height           =   (WORD) height;
  260.     nw.DetailPen        =   (UBYTE) -1;
  261.     nw.BlockPen         =   (UBYTE) -1;
  262.     nw.IDCMPFlags       =   (ULONG) iflg;
  263.     nw.Flags            =   (ULONG) flg;
  264.     nw.FirstGadget      =   (struct Gadget *)   NULL;
  265.     nw.CheckMark        =   (struct Image *)    NULL;
  266.     nw.Title            =   (UBYTE *)  title; 
  267.     nw.Screen           =   (struct Screen *)   NULL;
  268.     nw.BitMap           =   (struct BitMap *)   NULL;
  269.     nw.MinWidth         =   (WORD) 50;
  270.     nw.MinHeight        =   (WORD) 30;
  271.     nw.MaxWidth         =   (WORD) nw.Width;
  272.     nw.MaxHeight        =   (WORD) nw.Height;
  273.     nw.Type             =   (UWORD) WBENCHSCREEN;
  274.  
  275.     return ((struct Window *) OpenWindow(&nw));
  276. }
  277.  
  278.  
  279.