home *** CD-ROM | disk | FTP | other *** search
/ back2roots/padua / padua.7z / padua / ftp.vapor.com / voyager / voyager-sdk.lzx / zapster_vplug.c < prev    next >
C/C++ Source or Header  |  2014-05-19  |  7KB  |  306 lines

  1. /*
  2. ** Zapster plugin interface
  3. ** ------------------------
  4. **
  5. ** ⌐ 2000 by David Gerber <zapek@vapor.com>
  6. ** All rights reserved
  7. **
  8. ** $Id$
  9. **
  10. */
  11.  
  12. #define BUILDPLUGIN
  13.  
  14. #include "v_plugin.h"
  15.  
  16. #include <exec/memory.h>
  17. #include <dos.h>
  18. #include <dos/dostags.h>
  19. #include <dos/dosextens.h>
  20. #include <libraries/dos.h>
  21.  
  22. /* MUI */
  23. #include <graphics/gfxmacros.h>
  24. #include <libraries/mui.h>
  25. #include <libraries/gadtools.h>
  26. #include <intuition/intuition.h>
  27.  
  28. /* Protos */
  29. #include <proto/dos.h>
  30. #include <proto/exec.h>
  31. #include <proto/graphics.h>
  32. #include <proto/utility.h>
  33. #include <proto/intuition.h>
  34. #include <proto/muimaster.h>
  35.  
  36. #include "zapster_mcc.h"
  37.  
  38.  
  39. /*
  40.  * Some colormaps, bitmaps and bitplanes. We put them to chipram because
  41.  * I'm lazy but we should really use AllocBitMap() + remapping but that's
  42.  * not so trivial
  43.  */
  44.  
  45. static ULONG flash_imageCMap32[]={
  46.    0x95959595,0x95959595,0x95959595,
  47.    0x00000000,0x00000000,0x00000000,
  48.    0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,
  49.    0x3B3B3B3B,0x67676767,0xA2A2A2A2,
  50.    0x7B7B7B7B,0x7B7B7B7B,0x7B7B7B7B,
  51.    0xAFAFAFAF,0xAFAFAFAF,0xAFAFAFAF,
  52.    0xAAAAAAAA,0x90909090,0x7C7C7C7C,
  53.    0xFFFFFFFF,0xA9A9A9A9,0x97979797
  54. };
  55.  
  56. static USHORT __chip flash_imageData[84]={
  57.     /* BitPlane 0 */
  58.     0x0c00,0x3000,0x7f81,0xfe00,0xefff,0xf100,0x53ff,0xca00,
  59.     0x6c7e,0x3200,0x2b81,0xd400,0x34ff,0x2400,0x3524,0xa800,
  60.     0x1b24,0xc800,0x0dff,0x9000,0x0701,0x6000,0x01ff,0x8000,
  61.     0x0000,0x0000,0x0000,0x0000,
  62.     /* BitPlane 1 */
  63.     0x0000,0x0000,0x0c00,0x3000,0x7f81,0xfe00,0x3fff,0xfc00,
  64.     0x33ff,0xdc00,0x1c7e,0x3800,0x1f00,0xf800,0x1edb,0x7000,
  65.     0x0edb,0x7000,0x07ff,0xe000,0x01ff,0x8000,0x0000,0x0000,
  66.     0x0000,0x0000,0x0000,0x0000,
  67.     /* BitPlane 2 */
  68.     0x0000,0x0000,0x8000,0x0100,0x7c00,0x3e00,0xaf81,0xf500,
  69.     0xb3ff,0xcd00,0x507e,0x0b00,0x5881,0x1a00,0x1924,0x9600,
  70.     0x0d24,0xb400,0x0600,0x6c00,0x01ff,0x9800,0x0200,0x7000,
  71.     0x01ff,0xc000,0x0000,0x0000};
  72.  
  73. static struct BitMap flash_imageBitMap={4,14,0,3,0,(PLANEPTR)&flash_imageData[0],(PLANEPTR)&flash_imageData[28],(PLANEPTR)&flash_imageData[56]};
  74.  
  75. struct GfxBase             *GfxBase;
  76. struct Library             *MUIMasterBase;
  77. struct DosLibrary         *DOSBase;
  78. struct Library             *UtilityBase;
  79. struct IntuitionBase    *IntuitionBase;
  80.  
  81. struct MUI_CustomClass    *ZapsterClass;
  82. struct MUI_CustomClass    *PrefsClass;
  83.  
  84. struct vplug_functable     *ft;
  85.  
  86. /*
  87.  * Displays a failure message
  88.  */
  89. void Fail(STRPTR txt)
  90. {
  91.     static struct IntuiText BodyText = { 255, 255, 0, 4, 4, NULL, NULL, NULL };
  92.     static struct IntuiText ContinueText = { 255, 255, 0, 4, 4, NULL, "Ok", NULL };
  93.  
  94.     BodyText.IText = txt;
  95.     AutoRequest(NULL, &BodyText, NULL, &ContinueText, 0, 0, 320, 60);
  96. }
  97.  
  98.  
  99. // Move lib down the liblist (we're nice, aren't we?)
  100. long __asm __saveds __UserLibInit( register __a6 struct Library *libbase )
  101. {
  102.     libbase->lib_Node.ln_Pri = -128;
  103.     return( 0 );
  104. }
  105.  
  106.  
  107. struct TagItem tags[]á= {
  108.     VPLUG_Query_Version, VERSION,
  109.     VPLUG_Query_Revision, REVISION,
  110.     VPLUG_Query_Copyright, (ULONG)"(C) 2000 David Gerber <zapek@vapor.com>, All Rights Reserved",
  111.     VPLUG_Query_Infostring, (ULONG)"Voyager Zapster Demo Plugin",
  112.     VPLUG_Query_APIVersion, 2,
  113.     VPLUG_Query_RegisterMIMEType, (ULONG)"application/zapster",
  114.     VPLUG_Query_PluginID, (ULONG)"Zapster",
  115.     VPLUG_Query_HasPrefs, TRUE,
  116.     TAG_DONE
  117. };
  118.  
  119.  
  120. /*
  121.  * Voyager gets some informations
  122.  * here
  123.  */
  124. struct TagItem * __asm __saveds VPLUG_Query( void )
  125. {
  126.     /*
  127.      * So we specify the tags we need
  128.      */
  129.     return tags;
  130. }
  131.  
  132.  
  133. /*
  134.  * Setup function
  135.  */
  136. BOOL __asm __saveds VPLUG_Setup( register __a0 struct vplug_functable *table )
  137. {
  138.     if (!(IntuitionBase = (struct IntuitionBase *)OpenLibrary("intuition.library", 39)))
  139.     {
  140.         return(FALSE);
  141.     }
  142.  
  143.     if (!(MUIMasterBase = OpenLibrary(MUIMASTER_NAME, 18)))
  144.     {
  145.         Fail("Couldn't open "MUIMASTER_NAME" v18 or higher.");
  146.         return(FALSE);
  147.     }
  148.     
  149.     GfxBase = (APTR)OpenLibrary( "graphics.library", 39 );
  150.  
  151.     /*
  152.      * Setup our main custom classes, subclass of Area class
  153.      */
  154.     if (!(ZapsterClass = MUI_CreateCustomClass(NULL, MUIC_Area, NULL, sizeof(struct Data), dispatch)))
  155.     {
  156.         Fail("Couldn't create custom class.");
  157.         return(FALSE);
  158.     }
  159.     
  160.     DOSBase = (struct DosLibrary *)ZapsterClass->mcc_DOSBase;
  161.     UtilityBase = ZapsterClass->mcc_UtilityBase;
  162.  
  163.     /*
  164.      * Setup our preference custom class, subclass of Group class
  165.      */
  166.     if (!(PrefsClass = MUI_CreateCustomClass(NULL, MUIC_Group, NULL, sizeof(struct PrefsData), prefs_dispatch)))
  167.     {
  168.         Fail("Couldn't create custom class."); 
  169.         return(FALSE);
  170.     }
  171.  
  172.     /*
  173.      * Now we save the A4 register (this is *NEEDED*
  174.      * for a library + dispatchers' hooks)
  175.      */
  176.     ZapsterClass->mcc_Class->cl_UserData  = PrefsClass->mcc_Class->cl_UserData = getreg(REG_A4);
  177.  
  178.     ft = table;
  179.  
  180.     /*
  181.      * This is a good place to setup default prefs
  182.      */
  183.  
  184.     return(TRUE);
  185. }
  186.  
  187. /* Cleanup */
  188. void __asm __saveds VPLUG_Cleanup( void )
  189. {
  190.     if (PrefsClass)
  191.     {
  192.         MUI_DeleteCustomClass(PrefsClass);
  193.     }
  194.  
  195.     if (ZapsterClass)
  196.     {
  197.         MUI_DeleteCustomClass(ZapsterClass);
  198.     }
  199.  
  200.     if (GfxBase)
  201.     {
  202.         CloseLibrary((APTR)GfxBase);
  203.     }
  204.  
  205.     if (MUIMasterBase)
  206.     {
  207.         CloseLibrary(MUIMasterBase);
  208.     }
  209.  
  210.     if (IntuitionBase)
  211.     {
  212.         CloseLibrary((struct Library *)IntuitionBase);
  213.     }
  214. }
  215.  
  216. /*
  217.  * Embedding objects, V will NewObject() it.
  218.  * We just return the class here
  219.  */
  220. APTR __asm __saveds VPLUG_GetClass( register __a0 STRPTR mimetype )
  221. {
  222.     return(ZapsterClass->mcc_Class);
  223. }
  224.  
  225. APTR __asm __saveds VPLUG_ProcessURLMethod( register __a0 STRPTR url )
  226. {
  227.     return(0); // dummy
  228. }
  229.  
  230. APTR __asm __saveds VPLUG_GetURLData( register __a0 APTR handle )
  231. {
  232.     return(0); // dummy
  233. }
  234.  
  235. STRPTR __asm __saveds VPLUG_GetURLMIMEType( register __a0 APTR handle )
  236. {
  237.     return(0); // dummy
  238. }
  239.  
  240. void __asm __saveds VPLUG_FreeURLData( register __a0 APTR handle )
  241. {
  242.     return; // dummy
  243. }
  244.  
  245. void __asm __saveds VPLUG_FinalSetup( void )
  246. {
  247.     return; // dummy
  248. }
  249.  
  250. int    __asm __saveds VPLUG_GetInfo( register __a0 struct PluginInfo *pi, register __a1 APTR nethandle )
  251. {
  252.     return(TRUE); // nothing done
  253. }
  254.  
  255. int __asm __saveds VPLUG_GetURLDataSize( register __a0 APTR handle)
  256. {
  257.     return(0); // dummy
  258. }
  259.  
  260. void __asm __saveds VPLUG_Hook_Prefs( register __d0 ULONG methodid, register __a0 struct vplug_prefs *prefs )
  261. {
  262.     switch(methodid)
  263.     {
  264.         case VPLUGPREFS_Setup:
  265.             /*
  266.              * Optionally give the colormap and bitmap
  267.              * if we want to display a custom image
  268.              * in the preferences.
  269.              */
  270.             prefs->bitmap = &flash_imageBitMap;
  271.             prefs->colormap = flash_imageCMap32;
  272.             break;
  273.  
  274.         case VPLUGPREFS_Create:
  275.             /*
  276.              * We create the MUI prefs object here
  277.              */
  278.             prefs->object = VGroup,
  279.                                 Child, NewObject(PrefsClass->mcc_Class, NULL, TAG_DONE),
  280.                             End;
  281.             break;
  282.  
  283.         case VPLUGPREFS_Dispose:
  284.             MUI_DisposeObject(prefs->object);
  285.             break;
  286.  
  287.         case VPLUGPREFS_Use:
  288.             /*
  289.              * Use whatever you want to make the
  290.              * current prefs active. Sending a method
  291.              * to our prefs object is a good way.
  292.              */
  293.             DoMethod(prefs->object, MM_Prefs_StorePrefs);
  294.             break;
  295.  
  296.         case VPLUGPREFS_Save:
  297.             /*
  298.              * Here we should save the prefs to disk. Suggested
  299.              * path is PROGDIR:Plugins/Data
  300.              */
  301.             break;
  302.     }
  303.     return;
  304. }
  305.  
  306.