home *** CD-ROM | disk | FTP | other *** search
- #include <stdio.h>
- #include <exec/types.h>
- #include <intuition/intuition.h>
- #include <proto/exec.h>
- #include <proto/dos.h>
- #include <proto/intuition.h>
- #include <proto/graphics.h>
- #include <libraries/dos.h>
- #include <string.h>
-
- #include "viewprotos.h"
- #include "view_define.h"
-
- #include "hame.h"
-
- #include "externals.h"
- extern struct Library *HameBase;
- extern struct HamePort *hamePort;
- /* This routine is largely based on code from the RKMs.
- It handles the message passing. */
-
- extern int r_32[32], g_32[32], b_32[32];
- extern int r_16[16], g_16[16], b_16[16];
- extern int HAME_r[256], HAME_g[256], HAME_b[256];
-
- extern struct Gadget rpropGadget, gpropGadget, bpropGadget;
- extern struct PropInfo rpi, gpi, bpi;
- extern char redbuf[4], greenbuf[4], bluebuf[4];
- extern struct TextAttr textAttr;
-
- UBYTE regbuf[40];
- struct IntuiText regText = {
- 3,0,
- JAM2,
- 0,0,
- &textAttr,
- regbuf,
- NULL
- };
-
- UBYTE handleIDCMP(VOID)
- {
- UBYTE flag=0;
- struct IntuiMessage *message = NULL;
- ULONG class;
- USHORT code;
- BOOL reply = 1;
- int ret;
- struct Gadget *g;
- USHORT id;
- int dx, dy;
- static int reg;
- int value;
- struct Window *mw;
- int knob;
- int red, green, blue;
- char *retfile;
-
-
- while( message = (struct IntuiMessage *)GetMsg(messagePort) )
- {
- class = message->Class;
- code = message->Code;
- mw = message->IDCMPWindow;
-
- switch ( class )
- {
- case MOUSEBUTTONS:
- if (code==SELECTDOWN)
- {
- if(mw==gWindow) break;
- if(rpropGadget.UserData==NULL) break;
- reg=0;
- if( (mode==COLORS_32) || (mode==COLORS_LACE_32) )
- {
- reg = ReadPixel(message->IDCMPWindow->RPort,
- message->MouseX, message->MouseY);
- knob=0x000F;
- red = r_32[reg];
- green = g_32[reg];
- blue = b_32[reg];
- }
- if( (mode==COLORS_16) || (mode==COLORS_LACE_16) )
- {
- reg = ReadPixel(message->IDCMPWindow->RPort,
- message->MouseX, message->MouseY);
- knob = 0x000F;
- red = r_16[reg];
- green = g_16[reg];
- blue = b_16[reg];
- }
- if( (mode==HAME) || (mode==HAME_LACE) )
- {
- reg = HAME_ReadWPixel(hamePort, message->IDCMPWindow,
- message->MouseX/2, message->MouseY);
- if( (reg<0) || (reg>255) ) break;
- knob = 0x00FF;
- red = HAME_r[reg];
- green = HAME_g[reg];
- blue = HAME_b[reg];
- }
- sprintf(redbuf,"%3d",red);
- sprintf(greenbuf,"%3d",green);
- sprintf(bluebuf,"%3d",blue);
- sprintf(regbuf,"Color level %3d",reg);
- PrintIText(gWindow->RPort,®Text,292,3);
- NewModifyProp(&rpropGadget, gWindow, NULL, AUTOKNOB|FREEHORIZ,
- red*0xFFFF/knob, 0x0000,
- 0xFFFF/(knob+0x0001), 0x0000, 1);
- NewModifyProp(&gpropGadget, gWindow, NULL, AUTOKNOB|FREEHORIZ,
- green*0xFFFF/knob, 0x0000,
- 0xFFFF/(knob+0x0001), 0x0000, 1);
- NewModifyProp(&bpropGadget, gWindow, NULL, AUTOKNOB|FREEHORIZ,
- blue*0xFFFF/knob, 0x0000,
- 0xFFFF/(knob+0x0001), 0x0000, 1);
- RefreshGList(&rpropGadget,gWindow,NULL,3);
-
- }
- if( code==MENUDOWN )
- {
- if( (mw==imageWindow) && (gScreen!=NULL) )
- ScreenToFront(gScreen);
- if( (mw==gWindow) && (gScreen!=NULL) )
- ScreenToBack(gScreen);
- }
- break;
- case INACTIVEWINDOW:
- if( (mode==HAME) || (mode==HAME_LACE) )
- {
- dx = 0; dy=0;
- if( (sw->LeftEdge % 2) == 1) dx=-1;
- if( sw->TopEdge < 10 ) dy=10;
- if(sw->LeftEdge == imageScreen->LeftEdge) dx=2;
- MoveWindow(sw,dx,dy);
- }
- break;
- case GADGETDOWN:
- g = (struct Gadget *)message->IAddress;
- id = g->GadgetID;
- while(g->Flags&SELECTED)
- {
- switch (id)
- {
- case 90:
- value = rpi.HorizPot * 16 / (0xFFFF+0x0001);
- if( (mode==COLORS_32) || (mode==COLORS_LACE_32) )
- r_32[reg] = value;
- if( (mode==COLORS_16) || (mode==COLORS_LACE_16) )
- r_16[reg] = value;
- if( (mode==HAME) || (mode==HAME_LACE) )
- {
- value = rpi.HorizPot * 256 / (0xFFFF+0x0001);
- HAME_r[reg] = value;
- }
- setColors(mode);
- break;
- case 91:
- value = gpi.HorizPot * 16 / (0xFFFF+0x0001);
- if( (mode==COLORS_32) || (mode==COLORS_LACE_32) )
- g_32[reg] = value;
- if( (mode==COLORS_16) || (mode==COLORS_LACE_16) )
- g_16[reg] = value;
- if( (mode==HAME) || (mode==HAME_LACE) )
- {
- value = gpi.HorizPot * 256 / (0xFFFF+0x0001);
- HAME_g[reg] = value;
- }
- setColors(mode);
- break;
- case 92:
- value = bpi.HorizPot * 16 / (0xFFFF+0x0001);
- if( (mode==COLORS_32) || (mode==COLORS_LACE_32) )
- b_32[reg] = value;
- if( (mode==COLORS_16) || (mode==COLORS_LACE_16) )
- b_16[reg] = value;
- if( (mode==HAME) || (mode==HAME_LACE) )
- {
- value = bpi.HorizPot * 256 / (0xFFFF+0x0001);
- HAME_b[reg] = value;
- }
- setColors(mode);
- break;
- default:
- break;
- }
- }
- break;
- case GADGETUP:
- g = (struct Gadget *)message->IAddress;
- id = g->GadgetID;
- switch (id)
- {
- case 10:
- flag = 1;
- break;
- case 20: /* show info window if not already showing */
- OffGadget(&infoGadget,gWindow,NULL);
- OffGadget(&fileGadget,gWindow,NULL);
- OffGadget(&paletteGadget,gWindow,NULL);
- OffGadget(&screenGadget,gWindow,NULL);
- if(!credwin)
- credwin =
- myCredits(gScreen,messagePort,width,height);
- scrollUp(gScreen,20);
- break;
- case 30:
- fileGadgets();
- break;
- case 31: /* get a new file */
- OffGadget(&openGadget,gWindow,NULL);
- OffGadget(&mainGadget,gWindow,NULL);
- OffGadget(&nextGadget,gWindow,NULL);
- OffGadget(&psGadget,gWindow,NULL);
- OffGadget(&iffGadget,gWindow,NULL);
- scrollUp(gScreen,10);
- reply = 1;
- retfile = getFilename(
- hdffilename,hdfdirname,"Choose an HDF file...","#?.hdf");
-
- if(!retfile)
- {
- scrollDown(gScreen,180);
- OnGadget(&openGadget,gWindow,NULL);
- OnGadget(&mainGadget,gWindow,NULL);
- if(nextGadget.UserData) OnGadget(&nextGadget,gWindow,NULL);
- if(psGadget.UserData) OnGadget(&psGadget,gWindow,NULL);
- if(iffGadget.UserData) OnGadget(&iffGadget,gWindow,NULL);
- break;
- }
- strcpy(hdffile,retfile);
- ret = getHDF();
- if(ret==-1) request("Can't get data (Not an HDF image file?",NULL);
- if(ret==-2) request("Not enough memory to load image",NULL);
- if(ret==-3) request("Can't read data from file",NULL);
- scrollDown(gScreen,180);
- OnGadget(&openGadget,gWindow,NULL);
- OnGadget(&mainGadget,gWindow,NULL);
- if(image) turnOnGadgets();
- if(ret==-1) break;
-
- /* close down all graphics and start them
- up again with new data. */
- if(height>imageScreen->Height)
- newscreen.Height=height + 4-(height%4);
- if(width>imageScreen->Width)
- newscreen.Width=width + 8-(width%8);
- closeDown();
- openGraphics();
- drawImage(imageWindow,image,width,
- height,mode);
- /* If the palette window was open before,
- open it again */
- if(isscale) sw=showScale(imageScreen,mode);
- break;
- case 32: /* Get next image in file */
- ret = getHDF();
- if(ret<0)
- {
- scrollUp(gScreen,100);
- if(ret==-1)
- request("No more images in file",NULL);
- if(ret==-2)
- request("Out of memory",NULL);
- if(ret==-3)
- request("No more images in file",NULL);
- OffGadget(&nextGadget,gWindow,NULL);
- nextGadget.UserData = NULL;
- scrollDown(gScreen,180);
- break;
- }
- else
- {
- closeDown();
- openGraphics();
- drawImage(imageWindow,image,width,
- height,mode);
- }
- if(isscale) sw=showScale(imageScreen,mode);
- break;
- case 33: /* dump to iff file */
- OffGadget(&openGadget,gWindow,NULL);
- OffGadget(&nextGadget,gWindow,NULL);
- OffGadget(&psGadget,gWindow,NULL);
- OffGadget(&iffGadget,gWindow,NULL);
- OffGadget(&mainGadget,gWindow,NULL);
- dumpIff(width,height,hdffile);
- OnGadget(&mainGadget,gWindow,NULL);
- OnGadget(&psGadget,gWindow,NULL);
- OnGadget(&iffGadget,gWindow,NULL);
- OnGadget(&openGadget,gWindow,NULL);
- if(nextGadget.UserData) OnGadget(&nextGadget,gWindow,NULL);
- break;
- case 34: /* dump to PS file */
- OffGadget(&openGadget,gWindow,NULL);
- OffGadget(&nextGadget,gWindow,NULL);
- OffGadget(&psGadget,gWindow,NULL);
- OffGadget(&iffGadget,gWindow,NULL);
- OffGadget(&mainGadget,gWindow,NULL);
- DumpPS(image,width,height,hdffile);
- OnGadget(&mainGadget,gWindow,NULL);
- OnGadget(&psGadget,gWindow,NULL);
- OnGadget(&iffGadget,gWindow,NULL);
- OnGadget(&openGadget,gWindow,NULL);
- if(nextGadget.UserData) OnGadget(&nextGadget,gWindow,NULL);
- break;
- case 35: /* back to main gadgets */
- removeFileGadgets();
- mainGadgets();
- break;
- case 40:
- paletteGadgets();
- scrollUp(gScreen,164);
- rpropGadget.UserData = (APTR)1;
- break;
- case 41:
- if(!sw) sw=showScale(imageScreen,mode);
- else
- {
- closeWind(sw);
- sw=NULL;
- isscale=0;
- }
- break;
- case 42:
- scrollUp(gScreen,10);
- if(retfile=getFilename("default.pal",palettedirname,
- "Choose an palette...","#?.pal"))
- {
- getDefPal(retfile);
- setColors(mode);
- }
- scrollDown(gScreen,164);
- break;
- case 43:
- scrollUp(gScreen, 100);
- request("Not implemented yet :-(",NULL);
- scrollDown(gScreen, 164);
- break;
- case 44:
- removePaletteGadgets();
- rpropGadget.UserData = NULL;
- mainGadgets();
- scrollDown(gScreen,180);
- break;
- case 50:
- screenGadgets();
- break;
- case 51:
- closeDown();
- mode = COLORS_32;
- newscreen.Depth = 5;
- newscreen.TopEdge = S_TOPEDGE;
- newscreen.LeftEdge = S_LEFTEDGE;
- if(height<HEIGHT) newscreen.Height = HEIGHT;
- else newscreen.Height = height + 4-(height%4);
- if(width<WIDTH) newscreen.Width = WIDTH;
- else newscreen.Width = + 8-(width%8);
- newscreen.ViewModes = NULL;
- openGraphics();
- drawImage(imageWindow,image,width,
- height,mode);
- if(isscale) sw=showScale(imageScreen,mode);
- break;
- case 52:
- closeDown();
- mode = COLORS_LACE_32;
- newscreen.Depth = 5;
- if(height<LACE_HEIGHT) newscreen.Height = LACE_HEIGHT;
- else newscreen.Height = height + 4-(height%4);
- if(width<WIDTH) newscreen.Width = WIDTH;
- else newscreen.Width = width + 8-(width%8);
- newscreen.ViewModes = LACE;
- openGraphics();
- drawImage(imageWindow,image,width,
- height,mode);
- if(isscale) sw=showScale(imageScreen,mode);
- break;
- case 53:
- closeDown();
- mode = COLORS_16;
- newscreen.Depth = 4;
- newscreen.TopEdge = S_TOPEDGE;
- newscreen.LeftEdge = S_LEFTEDGE;
- if(height<HEIGHT) newscreen.Height = HEIGHT;
- else newscreen.Height = height + 4-(height%4);
- if(width<HIRES_WIDTH) newscreen.Width = HIRES_WIDTH;
- else newscreen.Width = width + 8-(width%8);
- newscreen.ViewModes = HIRES;
- openGraphics();
- drawImage(imageWindow,image,width,
- height,mode);
- if(isscale) sw=showScale(imageScreen,mode);
- break;
- case 54:
- closeDown();
- mode = COLORS_LACE_16;
- newscreen.Depth = 4;
- newscreen.TopEdge = S_TOPEDGE;
- newscreen.LeftEdge = S_LEFTEDGE;
- if(height<LACE_HEIGHT) newscreen.Height = LACE_HEIGHT;
- else newscreen.Height = height + 4-(height%4);
- if(width<HIRES_WIDTH) newscreen.Width = HIRES_WIDTH;
- else newscreen.Width = width + 8-(width%8);
- newscreen.ViewModes = LACE|HIRES;
- openGraphics();
- drawImage(imageWindow,image,width,
- height,mode);
- if(isscale) sw=showScale(imageScreen,mode);
- break;
- case 55:
- closeDown();
- mode = HAME;
- newscreen.Depth = 4;
- newscreen.TopEdge = S_TOPEDGE;
- newscreen.LeftEdge = S_LEFTEDGE;
- if(height<HEIGHT) newscreen.Height = HEIGHT;
- else newscreen.Height = height;
- if(width<WIDTH) newscreen.Width = HIRES_WIDTH;
- else newscreen.Width = width*2 + 8-(width%8);
- newscreen.ViewModes = HIRES;
- openGraphics();
- drawImage(imageWindow,image,width,
- height,mode);
- if(isscale) sw=showScale(imageScreen,mode);
- break;
- case 56:
- closeDown();
- mode = HAME_LACE;
- newscreen.Depth = 4;
- newscreen.TopEdge = S_TOPEDGE;
- newscreen.LeftEdge = S_LEFTEDGE;
- if(height<LACE_HEIGHT) newscreen.Height = LACE_HEIGHT;
- else newscreen.Height = height;
- if(width<WIDTH) newscreen.Width = HIRES_WIDTH;
- else newscreen.Width = width*2 + 8-(width%8);
- newscreen.ViewModes = HIRES|LACE;
- openGraphics();
- drawImage(imageWindow, image, width,
- height, mode);
- if(isscale) sw=showScale(imageScreen,mode);
- break;
- case 57:
- removeScreenGadgets();
- mainGadgets();
- break;
- case 90:
- value = rpi.HorizPot * 16 / (0xFFFF+0x0001);
- if( (mode==COLORS_32) || (mode==COLORS_LACE_32) )
- r_32[reg] = value;
- if( (mode==COLORS_16) || (mode==COLORS_LACE_16) )
- r_16[reg] = value;
- if( (mode==HAME) || (mode==HAME_LACE) )
- {
- value = rpi.HorizPot * 256 / (0xFFFF+0x0001);
- HAME_r[reg] = value;
- }
- setColors(mode);
- sprintf(redbuf,"%3d",value);
- RefreshGList(&rpropGadget,gWindow,NULL,1);
- break;
- case 91:
- value = gpi.HorizPot * 16 / (0xFFFF+0x0001);
- if( (mode==COLORS_32) || (mode==COLORS_LACE_32) )
- g_32[reg] = value;
- if( (mode==COLORS_16) || (mode==COLORS_LACE_16) )
- g_16[reg] = value;
- if( (mode==HAME) || (mode==HAME_LACE) )
- {
- value = gpi.HorizPot * 256 / (0xFFFF+0x0001);
- HAME_g[reg] = value;
- }
- setColors(mode);
- sprintf(greenbuf,"%3d",value);
- RefreshGList(&gpropGadget,gWindow,NULL,1);
- break;
- case 92:
- value = bpi.HorizPot * 16 / (0xFFFF+0x0001);
- if( (mode==COLORS_32) || (mode==COLORS_LACE_32) )
- b_32[reg] = value;
- if( (mode==COLORS_16) || (mode==COLORS_LACE_16) )
- b_16[reg] = value;
- if( (mode==HAME) || (mode==HAME_LACE) )
- {
- value = bpi.HorizPot * 256 / (0xFFFF+0x0001);
- HAME_b[reg] = value;
- }
- setColors(mode);
- sprintf(bluebuf,"%3d",value);
- RefreshGList(&bpropGadget,gWindow,NULL,1);
- break;
- default:
- break;
- }
- break;
- case CLOSEWINDOW:
- if(message->IDCMPWindow == credwin) /* info window closed */
- {
- reply = 0;
- scrollDown(gScreen,180);
- closeWind(credwin);
- credwin=NULL;
- OnGadget(&infoGadget,gWindow,NULL);
- OnGadget(&fileGadget,gWindow,NULL);
- if(screenGadget.UserData) OnGadget(&screenGadget,gWindow,NULL);
- if(paletteGadget.UserData) OnGadget(&paletteGadget,gWindow,NULL);
-
- }
- else /* image window closed */
- flag = 1; /* shut down program */
- break;
- default:
- break;
- } /* end switch class */
- if(reply) ReplyMsg( (struct Message *)message);
- reply=1;
- } /* end while */
- return(flag);
- }
-