home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 580a.lha / HDFView_v3.01 / source.LZH / source / src / IDCMP.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-12-03  |  20.9 KB  |  519 lines

  1. #include <stdio.h>
  2. #include <exec/types.h>
  3. #include <intuition/intuition.h>
  4. #include <proto/exec.h>
  5. #include <proto/dos.h>
  6. #include <proto/intuition.h>
  7. #include <proto/graphics.h>
  8. #include <libraries/dos.h>
  9. #include <string.h>
  10.  
  11. #include "viewprotos.h"
  12. #include "view_define.h"
  13.  
  14. #include "hame.h"
  15.  
  16. #include "externals.h"
  17. extern struct Library *HameBase;
  18. extern struct HamePort *hamePort;
  19. /* This routine is largely based on code from the RKMs.
  20.    It handles the message passing. */
  21.  
  22. extern int r_32[32], g_32[32], b_32[32];
  23. extern int r_16[16], g_16[16], b_16[16];
  24. extern int HAME_r[256], HAME_g[256], HAME_b[256];
  25.  
  26. extern struct Gadget rpropGadget, gpropGadget, bpropGadget;
  27. extern struct PropInfo rpi, gpi, bpi;
  28. extern char redbuf[4], greenbuf[4], bluebuf[4];
  29. extern struct TextAttr textAttr;
  30.  
  31. UBYTE regbuf[40];
  32. struct IntuiText regText = {
  33.    3,0,
  34.    JAM2,
  35.    0,0,
  36.    &textAttr,
  37.    regbuf,
  38.    NULL
  39. };
  40.    
  41. UBYTE handleIDCMP(VOID)
  42. {
  43.    UBYTE flag=0;
  44.    struct IntuiMessage *message = NULL;
  45.    ULONG class;
  46.    USHORT code;
  47.    BOOL reply = 1;
  48.    int ret;
  49.    struct Gadget *g;
  50.    USHORT id;
  51.    int dx, dy;
  52.    static int reg;
  53.    int value;
  54.    struct Window *mw;
  55.    int knob;
  56.    int red, green, blue;
  57.    char *retfile;
  58.    
  59.    
  60.       while( message = (struct IntuiMessage *)GetMsg(messagePort) )
  61.    {
  62.       class = message->Class;
  63.       code = message->Code;
  64.       mw = message->IDCMPWindow;
  65.       
  66.       switch ( class )
  67.       {
  68.             case MOUSEBUTTONS:
  69.             if (code==SELECTDOWN)
  70.             {
  71.                if(mw==gWindow) break;
  72.                if(rpropGadget.UserData==NULL) break;
  73.                reg=0;
  74.                if( (mode==COLORS_32) || (mode==COLORS_LACE_32) )
  75.                {
  76.                   reg = ReadPixel(message->IDCMPWindow->RPort,
  77.                         message->MouseX, message->MouseY);
  78.                   knob=0x000F;
  79.                   red = r_32[reg];
  80.                   green = g_32[reg];
  81.                   blue = b_32[reg];
  82.                }
  83.                if( (mode==COLORS_16) || (mode==COLORS_LACE_16) )
  84.                {
  85.                   reg = ReadPixel(message->IDCMPWindow->RPort,
  86.                         message->MouseX, message->MouseY);
  87.                   knob = 0x000F;
  88.                   red = r_16[reg];
  89.                   green = g_16[reg];
  90.                   blue = b_16[reg];
  91.                }
  92.                if( (mode==HAME) || (mode==HAME_LACE) )
  93.                {
  94.                   reg = HAME_ReadWPixel(hamePort, message->IDCMPWindow,
  95.                         message->MouseX/2, message->MouseY);
  96.                   if( (reg<0) || (reg>255) ) break;      
  97.                   knob = 0x00FF;
  98.                   red = HAME_r[reg];
  99.                   green = HAME_g[reg];
  100.                   blue = HAME_b[reg];
  101.                }
  102.                sprintf(redbuf,"%3d",red);
  103.                sprintf(greenbuf,"%3d",green);
  104.                sprintf(bluebuf,"%3d",blue); 
  105.                sprintf(regbuf,"Color level %3d",reg); 
  106.                PrintIText(gWindow->RPort,®Text,292,3);    
  107.                NewModifyProp(&rpropGadget, gWindow, NULL, AUTOKNOB|FREEHORIZ,
  108.                         red*0xFFFF/knob, 0x0000,
  109.                         0xFFFF/(knob+0x0001), 0x0000, 1);  
  110.                NewModifyProp(&gpropGadget, gWindow, NULL, AUTOKNOB|FREEHORIZ,
  111.                         green*0xFFFF/knob, 0x0000,
  112.                         0xFFFF/(knob+0x0001), 0x0000, 1);                      
  113.                NewModifyProp(&bpropGadget, gWindow, NULL, AUTOKNOB|FREEHORIZ,
  114.                         blue*0xFFFF/knob, 0x0000,
  115.                         0xFFFF/(knob+0x0001), 0x0000, 1);
  116.                RefreshGList(&rpropGadget,gWindow,NULL,3);
  117.                                                              
  118.             } 
  119.             if( code==MENUDOWN )
  120.             {
  121.                if( (mw==imageWindow) && (gScreen!=NULL) ) 
  122.                   ScreenToFront(gScreen);
  123.                if( (mw==gWindow) && (gScreen!=NULL) )
  124.                   ScreenToBack(gScreen);
  125.             }
  126.             break;  
  127.          case INACTIVEWINDOW:
  128.             if( (mode==HAME) || (mode==HAME_LACE) )
  129.             {
  130.                dx = 0; dy=0;
  131.                if( (sw->LeftEdge % 2) == 1) dx=-1;
  132.                if( sw->TopEdge < 10 ) dy=10;
  133.                if(sw->LeftEdge == imageScreen->LeftEdge) dx=2;
  134.                MoveWindow(sw,dx,dy);
  135.             }
  136.             break;
  137.          case GADGETDOWN:
  138.             g = (struct Gadget *)message->IAddress;
  139.             id = g->GadgetID;
  140.             while(g->Flags&SELECTED)
  141.             {
  142.                switch (id)
  143.                {
  144.                   case 90:
  145.                      value = rpi.HorizPot * 16 / (0xFFFF+0x0001);
  146.                      if( (mode==COLORS_32) || (mode==COLORS_LACE_32) )
  147.                         r_32[reg] = value;
  148.                      if( (mode==COLORS_16) || (mode==COLORS_LACE_16) )
  149.                         r_16[reg] = value;  
  150.                      if( (mode==HAME) || (mode==HAME_LACE) )
  151.                      {
  152.                         value = rpi.HorizPot * 256 / (0xFFFF+0x0001);
  153.                         HAME_r[reg] = value;    
  154.                      }
  155.                      setColors(mode);
  156.                      break;
  157.                   case 91:
  158.                      value = gpi.HorizPot * 16 / (0xFFFF+0x0001);
  159.                      if( (mode==COLORS_32) || (mode==COLORS_LACE_32) )
  160.                         g_32[reg] = value;
  161.                      if( (mode==COLORS_16) || (mode==COLORS_LACE_16) )
  162.                         g_16[reg] = value;
  163.                      if( (mode==HAME) || (mode==HAME_LACE) )
  164.                      {
  165.                         value = gpi.HorizPot * 256 / (0xFFFF+0x0001);
  166.                         HAME_g[reg] = value;
  167.                      }   
  168.                      setColors(mode);
  169.                      break;
  170.                   case 92:
  171.                      value = bpi.HorizPot * 16 / (0xFFFF+0x0001);
  172.                      if( (mode==COLORS_32) || (mode==COLORS_LACE_32) )
  173.                         b_32[reg] = value;
  174.                      if( (mode==COLORS_16) || (mode==COLORS_LACE_16) )
  175.                         b_16[reg] = value;
  176.                      if( (mode==HAME) || (mode==HAME_LACE) )
  177.                      {
  178.                         value = bpi.HorizPot * 256 / (0xFFFF+0x0001);
  179.                         HAME_b[reg] = value;      
  180.                      }  
  181.                      setColors(mode);
  182.                      break;
  183.                   default:
  184.                      break;
  185.                }
  186.             }
  187.             break;   
  188.          case GADGETUP:
  189.             g = (struct Gadget *)message->IAddress;
  190.             id = g->GadgetID;
  191.             switch (id)
  192.             {
  193.                case 10:
  194.                   flag = 1;
  195.                   break;
  196.                case 20: /* show info window if not already showing */
  197.                   OffGadget(&infoGadget,gWindow,NULL);
  198.                   OffGadget(&fileGadget,gWindow,NULL);
  199.                   OffGadget(&paletteGadget,gWindow,NULL);
  200.                   OffGadget(&screenGadget,gWindow,NULL);
  201.                   if(!credwin)  
  202.                    credwin =
  203.                      myCredits(gScreen,messagePort,width,height);
  204.                   scrollUp(gScreen,20);
  205.                   break;
  206.                case 30:
  207.                   fileGadgets();
  208.                   break;
  209.                case 31: /* get a new file */
  210.                   OffGadget(&openGadget,gWindow,NULL);
  211.                   OffGadget(&mainGadget,gWindow,NULL);
  212.                   OffGadget(&nextGadget,gWindow,NULL);
  213.                   OffGadget(&psGadget,gWindow,NULL);
  214.                   OffGadget(&iffGadget,gWindow,NULL);
  215.                   scrollUp(gScreen,10);
  216.                   reply = 1;     
  217.                   retfile = getFilename(
  218.                      hdffilename,hdfdirname,"Choose an HDF file...","#?.hdf");
  219.                      
  220.                   if(!retfile)  
  221.                   {
  222.                      scrollDown(gScreen,180);
  223.                      OnGadget(&openGadget,gWindow,NULL);
  224.                      OnGadget(&mainGadget,gWindow,NULL);
  225.                      if(nextGadget.UserData) OnGadget(&nextGadget,gWindow,NULL);
  226.                      if(psGadget.UserData) OnGadget(&psGadget,gWindow,NULL);
  227.                      if(iffGadget.UserData) OnGadget(&iffGadget,gWindow,NULL);
  228.                      break;   
  229.                   }
  230.                   strcpy(hdffile,retfile);
  231.                   ret = getHDF();
  232.                   if(ret==-1) request("Can't get data (Not an HDF image file?",NULL);
  233.                   if(ret==-2) request("Not enough memory to load image",NULL);
  234.                   if(ret==-3) request("Can't read data from file",NULL);
  235.                   scrollDown(gScreen,180);
  236.                   OnGadget(&openGadget,gWindow,NULL);
  237.                   OnGadget(&mainGadget,gWindow,NULL);
  238.                   if(image) turnOnGadgets();
  239.                   if(ret==-1) break;
  240.                               
  241.                   /* close down all graphics and start them
  242.                        up again with new data. */
  243.                   if(height>imageScreen->Height)
  244.                       newscreen.Height=height + 4-(height%4);
  245.                   if(width>imageScreen->Width)
  246.                       newscreen.Width=width + 8-(width%8);         
  247.                   closeDown();
  248.                   openGraphics();
  249.                   drawImage(imageWindow,image,width,
  250.                                              height,mode);
  251.                   /* If the palette window was open before,
  252.                      open it again */
  253.                   if(isscale) sw=showScale(imageScreen,mode);
  254.                   break;
  255.                case 32:    /* Get next image in file */
  256.                    ret = getHDF();
  257.                    if(ret<0) 
  258.                    {
  259.                      scrollUp(gScreen,100);
  260.                      if(ret==-1) 
  261.                         request("No more images in file",NULL);
  262.                      if(ret==-2) 
  263.                         request("Out of memory",NULL);
  264.                      if(ret==-3) 
  265.                         request("No more images in file",NULL);
  266.                      OffGadget(&nextGadget,gWindow,NULL);
  267.                      nextGadget.UserData = NULL;
  268.                      scrollDown(gScreen,180);
  269.                      break;
  270.                    }
  271.                    else
  272.                    {
  273.                      closeDown();
  274.                      openGraphics();
  275.                      drawImage(imageWindow,image,width,
  276.                                              height,mode);
  277.                    }
  278.                    if(isscale) sw=showScale(imageScreen,mode);
  279.                    break;
  280.                case 33: /* dump to iff file */
  281.                   OffGadget(&openGadget,gWindow,NULL);
  282.                   OffGadget(&nextGadget,gWindow,NULL);
  283.                   OffGadget(&psGadget,gWindow,NULL);
  284.                   OffGadget(&iffGadget,gWindow,NULL);
  285.                   OffGadget(&mainGadget,gWindow,NULL);
  286.                   dumpIff(width,height,hdffile);
  287.                   OnGadget(&mainGadget,gWindow,NULL);
  288.                   OnGadget(&psGadget,gWindow,NULL);
  289.                   OnGadget(&iffGadget,gWindow,NULL);
  290.                   OnGadget(&openGadget,gWindow,NULL);
  291.                   if(nextGadget.UserData) OnGadget(&nextGadget,gWindow,NULL);
  292.                   break;    
  293.                case 34:  /* dump to PS file */
  294.                   OffGadget(&openGadget,gWindow,NULL);
  295.                   OffGadget(&nextGadget,gWindow,NULL);
  296.                   OffGadget(&psGadget,gWindow,NULL);
  297.                   OffGadget(&iffGadget,gWindow,NULL);
  298.                   OffGadget(&mainGadget,gWindow,NULL);
  299.                   DumpPS(image,width,height,hdffile);
  300.                   OnGadget(&mainGadget,gWindow,NULL);
  301.                   OnGadget(&psGadget,gWindow,NULL);
  302.                   OnGadget(&iffGadget,gWindow,NULL);
  303.                   OnGadget(&openGadget,gWindow,NULL);
  304.                   if(nextGadget.UserData) OnGadget(&nextGadget,gWindow,NULL);
  305.                   break;    
  306.                case 35: /* back to main gadgets */
  307.                   removeFileGadgets();
  308.                   mainGadgets();
  309.                   break;
  310.                case 40:
  311.                   paletteGadgets();
  312.                   scrollUp(gScreen,164);
  313.                   rpropGadget.UserData = (APTR)1;
  314.                   break;
  315.                case 41:
  316.                   if(!sw) sw=showScale(imageScreen,mode);
  317.                   else
  318.                   {
  319.                      closeWind(sw);
  320.                      sw=NULL;
  321.                      isscale=0;
  322.                   }
  323.                   break;
  324.                case 42:
  325.                   scrollUp(gScreen,10);
  326.                   if(retfile=getFilename("default.pal",palettedirname,
  327.                         "Choose an palette...","#?.pal"))
  328.                   {
  329.                      getDefPal(retfile);
  330.                      setColors(mode);
  331.                   }
  332.                   scrollDown(gScreen,164);
  333.                   break; 
  334.                case 43:
  335.                   scrollUp(gScreen, 100);
  336.                   request("Not implemented yet :-(",NULL);
  337.                   scrollDown(gScreen, 164);
  338.                   break;   
  339.                case 44:
  340.                   removePaletteGadgets();
  341.                   rpropGadget.UserData = NULL;
  342.                   mainGadgets();
  343.                   scrollDown(gScreen,180);
  344.                   break;
  345.                case 50:
  346.                   screenGadgets();
  347.                   break;
  348.                case 51:
  349.                   closeDown();                  
  350.                   mode = COLORS_32;     
  351.                   newscreen.Depth = 5;
  352.                   newscreen.TopEdge = S_TOPEDGE;
  353.                   newscreen.LeftEdge = S_LEFTEDGE;
  354.                   if(height<HEIGHT) newscreen.Height = HEIGHT;
  355.                   else newscreen.Height = height + 4-(height%4);
  356.                   if(width<WIDTH) newscreen.Width = WIDTH;
  357.                   else newscreen.Width = + 8-(width%8);
  358.                   newscreen.ViewModes = NULL;
  359.                   openGraphics();
  360.                   drawImage(imageWindow,image,width,
  361.                                              height,mode);
  362.                   if(isscale) sw=showScale(imageScreen,mode);            
  363.                   break;
  364.                case 52:
  365.                   closeDown();                  
  366.                   mode = COLORS_LACE_32;
  367.                   newscreen.Depth = 5;
  368.                   if(height<LACE_HEIGHT) newscreen.Height = LACE_HEIGHT;
  369.                   else newscreen.Height = height + 4-(height%4);
  370.                   if(width<WIDTH) newscreen.Width = WIDTH;
  371.                   else newscreen.Width = width + 8-(width%8);
  372.                   newscreen.ViewModes = LACE;
  373.                   openGraphics();
  374.                   drawImage(imageWindow,image,width,
  375.                                              height,mode);
  376.                   if(isscale) sw=showScale(imageScreen,mode);            
  377.                   break;
  378.                case 53:
  379.                   closeDown();
  380.                   mode = COLORS_16;
  381.                   newscreen.Depth = 4;
  382.                   newscreen.TopEdge = S_TOPEDGE;
  383.                   newscreen.LeftEdge = S_LEFTEDGE;
  384.                   if(height<HEIGHT) newscreen.Height = HEIGHT;
  385.                   else newscreen.Height = height + 4-(height%4);
  386.                   if(width<HIRES_WIDTH) newscreen.Width = HIRES_WIDTH;
  387.                   else newscreen.Width = width + 8-(width%8);
  388.                   newscreen.ViewModes = HIRES;
  389.                   openGraphics();
  390.                   drawImage(imageWindow,image,width,
  391.                                              height,mode);
  392.                   if(isscale) sw=showScale(imageScreen,mode);
  393.                   break;
  394.                case 54:
  395.                   closeDown();                  
  396.                   mode = COLORS_LACE_16;
  397.                   newscreen.Depth = 4;
  398.                   newscreen.TopEdge = S_TOPEDGE;
  399.                   newscreen.LeftEdge = S_LEFTEDGE;
  400.                   if(height<LACE_HEIGHT) newscreen.Height = LACE_HEIGHT;
  401.                   else newscreen.Height = height + 4-(height%4);
  402.                   if(width<HIRES_WIDTH) newscreen.Width = HIRES_WIDTH;
  403.                   else newscreen.Width = width + 8-(width%8);
  404.                   newscreen.ViewModes = LACE|HIRES;
  405.                   openGraphics();
  406.                   drawImage(imageWindow,image,width,
  407.                                        height,mode);
  408.                   if(isscale) sw=showScale(imageScreen,mode);
  409.                   break;
  410.                case 55:       
  411.                   closeDown();                          
  412.                   mode = HAME;
  413.                   newscreen.Depth = 4;
  414.                   newscreen.TopEdge = S_TOPEDGE;
  415.                   newscreen.LeftEdge = S_LEFTEDGE;
  416.                   if(height<HEIGHT) newscreen.Height = HEIGHT;
  417.                   else newscreen.Height = height;
  418.                   if(width<WIDTH) newscreen.Width = HIRES_WIDTH;
  419.                   else newscreen.Width = width*2 + 8-(width%8);
  420.                   newscreen.ViewModes = HIRES;
  421.                   openGraphics();
  422.                   drawImage(imageWindow,image,width,
  423.                                              height,mode);
  424.                   if(isscale) sw=showScale(imageScreen,mode);
  425.                   break;  
  426.                case 56:       
  427.                   closeDown();           
  428.                   mode = HAME_LACE;
  429.                   newscreen.Depth = 4;
  430.                   newscreen.TopEdge = S_TOPEDGE;
  431.                   newscreen.LeftEdge = S_LEFTEDGE;
  432.                   if(height<LACE_HEIGHT) newscreen.Height = LACE_HEIGHT;
  433.                   else newscreen.Height = height;
  434.                   if(width<WIDTH) newscreen.Width = HIRES_WIDTH;
  435.                   else newscreen.Width = width*2 + 8-(width%8);
  436.                   newscreen.ViewModes = HIRES|LACE;
  437.                   openGraphics();
  438.                   drawImage(imageWindow, image, width,
  439.                                              height, mode);
  440.                   if(isscale) sw=showScale(imageScreen,mode);
  441.                   break;                                     
  442.                case 57:
  443.                   removeScreenGadgets();
  444.                   mainGadgets();
  445.                   break;            
  446.                case 90:
  447.                   value = rpi.HorizPot * 16 / (0xFFFF+0x0001);
  448.                   if( (mode==COLORS_32) || (mode==COLORS_LACE_32) )
  449.                         r_32[reg] = value;
  450.                   if( (mode==COLORS_16) || (mode==COLORS_LACE_16) )
  451.                         r_16[reg] = value; 
  452.                   if( (mode==HAME) || (mode==HAME_LACE) )
  453.                   {
  454.                      value = rpi.HorizPot * 256 / (0xFFFF+0x0001);
  455.                      HAME_r[reg] = value;
  456.                   }           
  457.                   setColors(mode);
  458.                   sprintf(redbuf,"%3d",value);
  459.                   RefreshGList(&rpropGadget,gWindow,NULL,1);
  460.                   break;
  461.                case 91:
  462.                   value = gpi.HorizPot * 16 / (0xFFFF+0x0001);
  463.                   if( (mode==COLORS_32) || (mode==COLORS_LACE_32) )
  464.                         g_32[reg] = value;
  465.                   if( (mode==COLORS_16) || (mode==COLORS_LACE_16) )
  466.                         g_16[reg] = value; 
  467.                   if( (mode==HAME) || (mode==HAME_LACE) )
  468.                   {
  469.                      value = gpi.HorizPot * 256 / (0xFFFF+0x0001);
  470.                      HAME_g[reg] = value;
  471.                   }           
  472.                   setColors(mode);
  473.                   sprintf(greenbuf,"%3d",value);
  474.                   RefreshGList(&gpropGadget,gWindow,NULL,1);
  475.                   break;
  476.                case 92:
  477.                   value = bpi.HorizPot * 16 / (0xFFFF+0x0001);
  478.                   if( (mode==COLORS_32) || (mode==COLORS_LACE_32) )
  479.                         b_32[reg] = value;
  480.                   if( (mode==COLORS_16) || (mode==COLORS_LACE_16) )
  481.                         b_16[reg] = value;      
  482.                   if( (mode==HAME) || (mode==HAME_LACE) )
  483.                   {
  484.                      value = bpi.HorizPot * 256 / (0xFFFF+0x0001);
  485.                      HAME_b[reg] = value;
  486.                   }
  487.                   setColors(mode);
  488.                   sprintf(bluebuf,"%3d",value);
  489.                   RefreshGList(&bpropGadget,gWindow,NULL,1);
  490.                   break;                                    
  491.                default:
  492.                   break;
  493.             }   
  494.             break;
  495.          case CLOSEWINDOW:
  496.             if(message->IDCMPWindow == credwin)   /* info window closed */
  497.             {
  498.                reply = 0;
  499.                scrollDown(gScreen,180);
  500.                closeWind(credwin);
  501.                credwin=NULL;
  502.                OnGadget(&infoGadget,gWindow,NULL);
  503.                OnGadget(&fileGadget,gWindow,NULL);
  504.                if(screenGadget.UserData) OnGadget(&screenGadget,gWindow,NULL);
  505.                if(paletteGadget.UserData) OnGadget(&paletteGadget,gWindow,NULL);   
  506.                
  507.             }
  508.             else                                /* image window closed */
  509.                flag = 1;                        /* shut down program */
  510.             break;
  511.          default:
  512.             break;
  513.       }  /* end switch class */
  514.       if(reply) ReplyMsg( (struct Message *)message);
  515.       reply=1;
  516.    }  /* end while */
  517.    return(flag);
  518. }
  519.