home *** CD-ROM | disk | FTP | other *** search
- /* Auto: make
- */
-
- IMPORT struct ArpBase *ArpBase;
-
- struct Window *ControlWindow = NULL;
- IMPORT struct MsgPort *Sharedport;
- IMPORT WORD Sharedrefs;
-
- IMPORT LONG TitleBarHeight;
- IMPORT LONG ContentsFontHeight;
- IMPORT struct RastPort MyRP;
-
- #define IDCMPFLAGS (MOUSEMOVE|NEWSIZE|CLOSEWINDOW|GADGETUP|ACTIVEWINDOW|INACTIVEWINDOW|MOUSEBUTTONS)
-
- UBYTE *WindowTitle = (UBYTE *)"Snap (c) 1989 Mikael Karlsson";
-
- struct Image DiskImage = {
- 0, -1,
- 16, 8, 1,
- NULL,
- 0x01, 0x00,
- NULL
- };
-
- struct Gadget DiskGad = {
- NULL,
- 0, 1,
- 16, 8,
- GADGIMAGE|GADGHCOMP|GRELRIGHT,
- RELVERIFY,
- BOOLGADGET,
- (APTR)&DiskImage,
- NULL,
- NULL,
- 0L,
- NULL,
- DISKGAD,
- NULL,
- };
-
- struct Gadget VProp = {
- NULL,
- -15, 10,
- 16, -10,
- GADGHCOMP|GRELRIGHT|GRELHEIGHT,
- GADGIMMEDIATE|FOLLOWMOUSE|RELVERIFY,
- PROPGADGET,
- NULL,
- NULL,
- NULL,
- 0L,
- NULL,
- VPROP,
- NULL
- };
-
- struct Gadget HProp = {
- NULL,
- 1, -8,
- -15, 9,
- GADGHCOMP|GRELBOTTOM|GRELWIDTH,
- GADGIMMEDIATE|FOLLOWMOUSE|RELVERIFY,
- PROPGADGET,
- NULL,
- NULL,
- NULL,
- 0L,
- NULL,
- HPROP,
- NULL
- };
-
- struct PropInfo VInfo = {
- AUTOKNOB|FREEVERT,
- 0, 0,
- MAXBODY, MAXBODY,
- 0, 0, 0, 0, 0, 0
- };
-
- struct PropInfo HInfo = {
- AUTOKNOB|FREEHORIZ,
- 0, 0,
- MAXBODY, MAXBODY,
- 0, 0, 0, 0, 0, 0
- };
-
- struct Image VImage = {
- 0, 0, 0, 0, 0, NULL, 0, 0, NULL
- };
- struct Image HImage = {
- 0, 0, 0, 0, 0, NULL, 0, 0, NULL
- };
-
- /* Window structure for snapped gfx */
- struct NewWindow Nw = {
- 0, 1, /* LeftEdge, TopEdge */
- 0, 0, /* Width, Height */
- -1, -1, /* DetailPen, BlockPen */
- NULL, /* IDCMPFlags */
- WINDOWDRAG|WINDOWDEPTH|WINDOWCLOSE|WINDOWSIZING|SMART_REFRESH|NOCAREREFRESH|RMBTRAP,
- NULL, NULL, /* FirstGadget, CheckMark */
- NULL,
- NULL, NULL, /* Screen, BitMap */
- 32, 32, /* MinWidth, MinHeight */
- 0, 0, /* MaxWidth, MaxHeight */
- WBENCHSCREEN /* Type */
- };
-
- SHORT Coords3[5][2] = {
- { 0, 0},
- { 74, 0},
- { 74, 10},
- { 0, 10},
- { 0, 0}
- };
-
- SHORT Coords2[5][2] = {
- { 0, 0},
- { 74, 0},
- { 74, 10},
- { 0, 10},
- { 0, 0}
- };
-
- SHORT Coords1[5][2] = {
- { 0, 0},
- { 34, 0},
- { 34, 10},
- { 0, 10},
- { 0, 0}
- };
-
- struct Border Border3 = {
- 42, 0,
- 1, 0,
- JAM1,
- 5,
- (SHORT *)&Coords3,
- NULL
- };
-
- struct Border Border2 = {
- 42, 0,
- 1, 0,
- JAM1,
- 5,
- (SHORT *)&Coords2,
- &Border3
- };
-
- struct Border Border1 = {
- 4, 0,
- 1, 0,
- JAM1,
- 5,
- (SHORT *)&Coords1,
- &Border2
- };
-
- UBYTE TranspBuf[5];
-
- struct StringInfo TranspSI = {
- TranspBuf, /* Buf */
- NULL, /* UndoBuf */
- 0, /* BufferPos */
- 4, /* MaxChars */
- 0, /* DispPos */
- 0, /* UndoPos */
- 0, /* NumChars */
- 0, /* DispCount */
- 0, 0, /* CLeft, CTop */
- NULL, /* Layer */
- 0L, /* LongInt */
- NULL /* AltKeyMap */
- };
-
- struct Gadget TranspGad = {
- NULL,
- 5, 16,
- 32, 8,
- LONGINT,
- RELVERIFY,
- STRGADGET,
- NULL,
- NULL,
- NULL,
- 0L,
- (APTR)&TranspSI,
- 0,
- NULL,
- };
-
- UBYTE SaveName[256] = "";
- UBYTE SaveDirName[256] = "";
-
- struct StringInfo NameSI = {
- SaveName, /* Buf */
- NULL, /* UndoBuf */
- 0, /* BufferPos */
- 255, /* MaxChars */
- 0, /* DispPos */
- 0, /* UndoPos */
- 0, /* NumChars */
- 0, /* DispCount */
- 0, 0, /* CLeft, CTop */
- NULL, /* Layer */
- 0L, /* LongInt */
- NULL /* AltKeyMap */
- };
-
- struct Gadget NameGad = {
- &TranspGad,
- 5, 16,
- 32, 8,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- 0L,
- NULL,
- NAMEGAD,
- NULL,
- };
-
- struct Gadget SaveGad = {
- &NameGad,
- 5, 16,
- 32, 8,
- GADGHCOMP,
- RELVERIFY,
- BOOLGADGET,
- NULL,
- NULL,
- NULL,
- 0L,
- NULL,
- SAVEGAD,
- NULL,
- };
-
- /* Window structure for control window */
- struct NewWindow NewCW = {
- 10, 10, /* LeftEdge, TopEdge */
- 320, 40, /* Width, Height */
- -1, -1, /* DetailPen, BlockPen */
- NULL, /* IDCMPFlags */
- WINDOWDRAG|WINDOWDEPTH|WINDOWCLOSE|SMART_REFRESH|ACTIVATE|NOCAREREFRESH,
- NULL, NULL, /* FirstGadget, CheckMark */
- (UBYTE *)"Snap Control Window",
- NULL, NULL, /* Screen, BitMap */
- 32, 32, /* MinWidth, MinHeight */
- -1, -1, /* MaxWidth, MaxHeight */
- WBENCHSCREEN /* Type */
- };
-
- struct FileRequester NameFR = {
- "Save picture as...",
- (BYTE *)SaveName,
- (BYTE *)SaveDirName,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL
- };
-
- struct Window *opensharedwindow(nw)
- struct NewWindow *nw;
- {
- struct Window *win;
- struct Screen scr;
-
- if (Sharedport) {
- nw->IDCMPFlags = NULL;
- } else {
- nw->IDCMPFlags = IDCMPFLAGS;
- }
- if (!GetScreenData((char *)&scr, (LONG)sizeof(struct Screen),
- WBENCHSCREEN, NULL)) {
- return NULL; /* No WB */
- }
- if (nw->TopEdge+nw->Height > scr.Height) {
- nw->TopEdge = scr.Height-nw->Height;
- }
- if (nw->LeftEdge+nw->Width > scr.Width) {
- nw->LeftEdge = scr.Width-nw->Width;
- }
- if (nw->TopEdge < 0) {
- nw->TopEdge = 0;
- }
- if (nw->LeftEdge < 0) {
- nw->LeftEdge = 0;
- }
- if (nw->TopEdge+nw->Height > scr.Height) {
- nw->Height = scr.Height-nw->TopEdge;
- }
- if (nw->LeftEdge+nw->Width > scr.Width) {
- nw->Width = scr.Width-nw->LeftEdge;
- }
-
- if (win = OpenWindow(nw)) {
- if (Sharedport) {
- win->UserPort = Sharedport;
- ModifyIDCMP(win, IDCMPFLAGS);
- } else {
- Sharedport = win->UserPort;
- }
- ++Sharedrefs;
- }
- return(win);
- }
-
-
- VOID closesharedwindow(win)
- struct Window *win;
- {
- Forbid();
- Sharedrefs--;
- if (Sharedrefs > 0) {
- REGISTER struct IntuiMessage *im, *succ;
- im = (struct IntuiMessage *)win->UserPort->mp_MsgList.lh_Head;
- while (succ = (struct IntuiMessage *)im->ExecMessage.mn_Node.ln_Succ) {
- if (im->IDCMPWindow == win) {
- Remove(im);
- ReplyMsg(im);
- }
- im = succ;
- }
- win->UserPort = NULL;
- ModifyIDCMP(win, MENUVERIFY); /* NEVER occurs */
- } else
- Sharedport = NULL;
- Permit();
- CloseWindow(win);
- }
-
- VOID SetUpBorder(Border, Gad)
- struct Border *Border;
- struct Gadget *Gad;
- {
- Border->LeftEdge = Gad->LeftEdge-1;
- Border->TopEdge = Gad->TopEdge-1;
- Border->XY[2] = Border->XY[4] = Gad->Width+1;
- Border->XY[5] = Border->XY[7] = Gad->Height+1;
- }
-
- VOID AdjustSize(GS)
- struct GfxSnap *GS;
- {
- ULONG w = GS->window->Width - 18;
- ULONG h = GS->window->Height - GS->VProp.TopEdge - 9;
- ULONG vb, hb;
-
- vb = hb = MAXBODY;
-
- if (w < GS->width) {
- hb = w * (ULONG)MAXBODY / GS->width;
- }
- if (h < GS->height) {
- vb = h * (ULONG)MAXBODY / GS->height;
- }
- NewModifyProp(&GS->VProp, GS->window, NULL, (ULONG)AUTOKNOB|FREEVERT,
- 0L, 0L, (ULONG)MAXBODY, vb, 1L);
- NewModifyProp(&GS->HProp, GS->window, NULL, (ULONG)AUTOKNOB|FREEHORIZ,
- 0L, 0L, hb, (ULONG)MAXBODY, 1L);
- InitRastPort(&MyRP);
- MyRP.BitMap = &GS->BM;
- ClipBlit(&MyRP, 0L, 0L, GS->window->RPort,
- 2L, (LONG)GS->VProp.TopEdge, w, h, 0xC0L);
- }
-
- VOID SyncGS(GS)
- struct GfxSnap *GS;
- {
- ULONG w = GS->window->Width - 18;
- ULONG h = GS->window->Height - GS->VProp.TopEdge - 9;
- ULONG vpos, hpos;
- LONG temp;
-
- temp = GS->width - w;
- if (temp <= 0) {
- hpos = 0;
- } else {
- hpos = temp * (LONG)GS->HInfo.HorizPot / MAXBODY;
- if (hpos > temp) {
- hpos = temp;
- }
- }
- temp = GS->height - h;
- if (temp <= 0) {
- vpos = 0;
- } else {
- vpos = temp * (LONG)GS->VInfo.VertPot / MAXBODY;
- if (vpos > temp) {
- vpos = temp;
- }
- }
- InitRastPort(&MyRP);
- MyRP.BitMap = &GS->BM;
- ClipBlit(&MyRP, hpos, vpos, GS->window->RPort,
- 2L, (LONG)GS->VProp.TopEdge, w, h, 0xC0L);
- }
-
- SHORT OpenCW()
- {
- WORD temp;
-
- FixHeights();
-
- NewCW.Height = TitleBarHeight + ContentsFontHeight * 2 + 12;
- ControlWindow = opensharedwindow(&NewCW);
- if (!ControlWindow) {
- return 0;
- }
- SaveGad.TopEdge = NameGad.TopEdge = TitleBarHeight + 2;
- SaveGad.Height = NameGad.Height = TranspGad.Height = ContentsFontHeight+2;
- TranspGad.TopEdge = SaveGad.TopEdge + SaveGad.Height + 3;
-
- SaveGad.LeftEdge = 4L;
- SaveGad.Width = TextLength(ControlWindow->RPort, "Save", 4L) + 1;
- if (Sharedrefs == 1) { /* No snap window, just control window? */
- SaveGad.Flags |= GADGDISABLED;
- } else {
- SaveGad.Flags &= ~GADGDISABLED;
- }
-
- NameGad.LeftEdge = SaveGad.LeftEdge +
- TextLength(ControlWindow->RPort, "Save as ", 8L);
- temp = ControlWindow->Width - 4 - NameGad.LeftEdge;
- NameGad.Width =
- temp - (temp % TextLength(ControlWindow->RPort, " ", 1L)) + 1;
-
- TranspGad.LeftEdge = SaveGad.LeftEdge +
- TextLength(ControlWindow->RPort, "Transparent color ", 18L);
- TranspGad.Width = TextLength(ControlWindow->RPort, "0000", 4L);
-
- SetUpBorder(&Border1, &SaveGad);
- SetUpBorder(&Border2, &NameGad);
- SetUpBorder(&Border3, &TranspGad);
-
- ++TranspGad.LeftEdge;
- ++TranspGad.TopEdge;
-
- if (ArpBase) {
- NameGad.Flags = GADGHCOMP;
- NameGad.Activation = RELVERIFY;
- NameGad.GadgetType = BOOLGADGET;
- NameGad.SpecialInfo = NULL;
- } else {
- NameGad.Flags = SELECTED;
- NameGad.Activation = NULL;
- NameGad.GadgetType = STRGADGET;
- NameGad.SpecialInfo = (APTR)&NameSI;
- ++NameGad.LeftEdge; /* Adjust string gadget position */
- ++NameGad.TopEdge; /* Adjust string gadget position */
- }
-
- strcpy(SaveName, "Snap.pic");
- strcpy(TranspBuf, "0");
- TranspSI.LongInt = 0L;
-
- SetAPen(ControlWindow->RPort, 1L);
- SetBPen(ControlWindow->RPort, 0L);
- SetDrMd(ControlWindow->RPort, JAM2);
- Move(ControlWindow->RPort,
- 5L, (LONG)SaveGad.TopEdge + 1 + ControlWindow->RPort->Font->tf_Baseline);
- Text(ControlWindow->RPort, "Save as", 7L);
- Move(ControlWindow->RPort,
- 5L, (LONG)TranspGad.TopEdge + ControlWindow->RPort->Font->tf_Baseline);
- Text(ControlWindow->RPort, "Transparent color", 17L);
- DrawBorder(ControlWindow->RPort, &Border1, 0L, 0L);
- AddGList(ControlWindow, &SaveGad, -1L, 3L, NULL);
- RefreshGList(&SaveGad, ControlWindow, NULL, 3L);
- if (ArpBase) {
- GadText(&NameGad, SaveName, 8L);
- } else {
- ActivateGadget(&NameGad, ControlWindow, NULL);
- }
- return 1;
- }
-