home *** CD-ROM | disk | FTP | other *** search
- /*************************************************************************
- *** gadg.c (JJB TEMPLAR) ***
- *** Date begun: 9/8/89. ***
- *** Last modified: 16/8/89. ***
- *************************************************************************/
- /*** Gadget data for ty. ***
- *************************************************************************/
-
- #include <exec/types.h>
- #include <intuition/intuition.h>
- #include <proto/intuition.h>
-
- #include "image.h"
- #include "gadg.h"
-
- #include "position.h"
-
- static struct Image g_img[22] = {
- {0,0,14,8,2,image1,3,0,NULL},
- {0,0,14,8,2,image2,3,0,NULL},
- {0,0,14,8,2,image3,3,0,NULL},
- {0,0,14,8,2,image4,3,0,NULL},
- {0,0,14,8,2,image5,3,0,NULL},
- {0,0,14,8,2,image6,3,0,NULL},
- {0,0,14,8,2,image7,3,0,NULL},
- {0,0,14,8,2,image8,3,0,NULL},
- {0,0,14,8,2,image9,3,0,NULL},
- {NULL}, /* AutoKnob. Don't need to initialize */
- {0,0,16,8,2,image11,3,0,NULL},
- {0,0,16,8,2,image12,3,0,NULL},
- {0,0,16,8,2,image13,3,0,NULL},
- {0,0,16,8,2,image14,3,0,NULL},
- {0,0,16,8,2,image15,3,0,NULL},
- {0,0,16,8,2,image16,3,0,NULL},
- {0,0,16,8,2,image17,3,0,NULL},
- {0,0,16,8,2,image18,3,0,NULL},
- {0,0,16,8,2,image19,3,0,NULL},
- {0,0,16,8,2,image20,3,0,NULL},
- {0,0,16,8,2,image21,3,0,NULL},
- {NULL}}; /* AutoKnob. Don't need to initialize */
- static struct PropInfo barspec = {
- AUTOKNOB|FREEVERT,0,0,0,0x5555,};
- static struct PropInfo hbrspec = {
- AUTOKNOB|FREEHORIZ,0,0,0xffff/6,0,}; /* Basically 6 positions,
- * independent of sc_width */
-
- static struct Gadget gads[22] = {
- {NULL,-15,11,14,8,GADGHCOMP|GADGIMAGE|GRELRIGHT,
- RELVERIFY,BOOLGADGET,(APTR)&g_img[0],NULL,NULL,NULL,NULL,G_UP,NULL},
- {&gads[0],-15,-80,14,8,GADGHCOMP|GADGIMAGE|GRELRIGHT|GRELBOTTOM,
- RELVERIFY,BOOLGADGET,(APTR)&g_img[1],NULL,NULL,NULL,NULL,G_DOWN,NULL},
- {&gads[1],-15,-71,14,8,GADGHCOMP|GADGIMAGE|GRELRIGHT|GRELBOTTOM,
- RELVERIFY,BOOLGADGET,(APTR)&g_img[2],NULL,NULL,NULL,NULL,G_LEFT,NULL},
- {&gads[2],-15,-62,14,8,GADGHCOMP|GADGIMAGE|GRELRIGHT|GRELBOTTOM,
- RELVERIFY,BOOLGADGET,(APTR)&g_img[3],NULL,NULL,NULL,NULL,G_RIGHT,NULL},
- {&gads[3],-15,-53,14,8,GADGHCOMP|GADGIMAGE|GRELRIGHT|GRELBOTTOM,
- RELVERIFY,BOOLGADGET,(APTR)&g_img[4],NULL,NULL,NULL,NULL,G_HELP,NULL},
- {&gads[4],-15,-44,14,8,GADGHCOMP|GADGIMAGE|GRELRIGHT|GRELBOTTOM,
- RELVERIFY,BOOLGADGET,(APTR)&g_img[5],NULL,NULL,NULL,NULL,G_SEARCH,NULL},
- {&gads[5],-15,-35,14,8,GADGHCOMP|GADGIMAGE|GRELRIGHT|GRELBOTTOM,
- RELVERIFY,BOOLGADGET,(APTR)&g_img[6],NULL,NULL,NULL,NULL,G_MARK,NULL},
- {&gads[6],-15,-26,14,8,GADGHCOMP|GADGIMAGE|GRELRIGHT|GRELBOTTOM,
- RELVERIFY,BOOLGADGET,(APTR)&g_img[7],NULL,NULL,NULL,NULL,G_MODE,NULL},
- {&gads[7],-15,-17,14,8,GADGHCOMP|GADGIMAGE|GRELRIGHT|GRELBOTTOM,
- RELVERIFY,BOOLGADGET,(APTR)&g_img[8],NULL,NULL,NULL,NULL,G_BOOM,NULL},
- {&gads[8],-15,20,16,-102,GADGHCOMP|GADGIMAGE|GRELRIGHT|GRELHEIGHT,
- RELVERIFY,PROPGADGET,(APTR)&g_img[9],NULL,NULL,NULL,(APTR)&barspec,G_SCROLL,NULL},
-
- {&gads[9], 4,-8,16,8,GADGHCOMP|GADGIMAGE|GRELBOTTOM,
- RELVERIFY|BOTTOMBORDER,BOOLGADGET,(APTR)&g_img[10],NULL,NULL,NULL,NULL,G_LEFT,NULL},
- {&gads[10],-195,-8,16,8,GADGHCOMP|GADGIMAGE|GRELRIGHT|GRELBOTTOM,
- RELVERIFY,BOOLGADGET,(APTR)&g_img[11],NULL,NULL,NULL,NULL,G_RIGHT,NULL},
- {&gads[11],-177,-8,16,8,GADGHCOMP|GADGIMAGE|GRELRIGHT|GRELBOTTOM,
- RELVERIFY,BOOLGADGET,(APTR)&g_img[12],NULL,NULL,NULL,NULL,G_PERCENT,NULL},
- {&gads[12],-159,-8,16,8,GADGHCOMP|GADGIMAGE|GRELRIGHT|GRELBOTTOM,
- RELVERIFY,BOOLGADGET,(APTR)&g_img[13],NULL,NULL,NULL,NULL,G_VERSION,NULL},
- {&gads[13],-141,-8,16,8,GADGHCOMP|GADGIMAGE|GRELRIGHT|GRELBOTTOM,
- RELVERIFY,BOOLGADGET,(APTR)&g_img[14],NULL,NULL,NULL,NULL,G_REPAINT,NULL},
- {&gads[14],-123,-8,16,8,GADGHCOMP|GADGIMAGE|GRELRIGHT|GRELBOTTOM,
- RELVERIFY,BOOLGADGET,(APTR)&g_img[15],NULL,NULL,NULL,NULL,G_PRINT,NULL},
- {&gads[15],-105,-8,16,8,GADGHCOMP|GADGIMAGE|GRELRIGHT|GRELBOTTOM,
- RELVERIFY,BOOLGADGET,(APTR)&g_img[16],NULL,NULL,NULL,NULL,G_TOP,NULL},
- {&gads[16], -87,-8,16,8,GADGHCOMP|GADGIMAGE|GRELRIGHT|GRELBOTTOM,
- RELVERIFY,BOOLGADGET,(APTR)&g_img[17],NULL,NULL,NULL,NULL,G_BOTTOM,NULL},
- {&gads[17], -69,-8,16,8,GADGHCOMP|GADGIMAGE|GRELRIGHT|GRELBOTTOM,
- RELVERIFY,BOOLGADGET,(APTR)&g_img[18],NULL,NULL,NULL,NULL,G_PREV,NULL},
- {&gads[18], -51,-8,16,8,GADGHCOMP|GADGIMAGE|GRELRIGHT|GRELBOTTOM,
- RELVERIFY,BOOLGADGET,(APTR)&g_img[19],NULL,NULL,NULL,NULL,G_FILE,NULL},
- {&gads[19], -33,-8,16,8,GADGHCOMP|GADGIMAGE|GRELRIGHT|GRELBOTTOM,
- RELVERIFY,BOOLGADGET,(APTR)&g_img[20],NULL,NULL,NULL,NULL,G_NEXT,NULL},
- {&gads[20], 22,-8,-220,9,GADGHCOMP|GADGIMAGE|GRELWIDTH|GRELBOTTOM,
- RELVERIFY,PROPGADGET,(APTR)&g_img[21],NULL,NULL,NULL,(APTR)&hbrspec,G_HSCROLL,NULL}};
-
- struct Gadget *fgadg = &(gads[21]);
-
- extern struct Window *Window;
- extern int sc_height,sc_width;
- extern int scroll_bar;
- extern int l_start;
-
- extern LONG position(int); /* Access to position table */
- extern void printf(char *);
- extern char *strint(int);
- extern void jump_back(int);
- extern int linecount();
-
- static LONG size,scr;
-
- void mModifyProp(g,s,hp,vp,hb,vb) /*==================================*/
- struct Gadget *g; /* Do this because Intuition fn doesn't have a */
- struct PropInfo *s; /* prototype, and I don't want refs to amiga.lib */
- UWORD hp,vp,hb,vb; /* since I'm trying to use cres.o */
- {
- s->HorizPot = hp; s->VertPot = vp;
- s->HorizBody = hb; s->VertBody = vb;
- OnGadget(g,Window,NULL); /* Should do redraw. Will it do recalc? */
- }
-
- void setbar(f) /*=====================================================*/
- int f; /* If f is true, then re-calc proportions. */
- { /* 2 means reset both sizes, 1 means reset screen size */
- register LONG pos;
- register LONG temp;
- register UWORD vp,vb;
-
- if (!scroll_bar && (f < 2)) return;
- if (!scroll_bar) {
- mModifyProp(&gads[9],&barspec,0,0,0,0xffff);
- OffGadget(&gads[9],Window,NULL);
- return; /* If f == 2, and no bar, then make knob full size */
- }
- pos = position(TOP)/60; /* Assume about 60chars/line, for now. */
- if (f == 2) size = linecount(); /* Reset file size */
-
- if ((pos <= 0) || (pos > size)) vp = 0x0000; /* Ensure size >= pos */
- else {
- temp = size/pos; /* Can't be div by zero because just checked */
- vp = 0xffff/temp; /* Can't be div by zero because size >= pos */
- }
- if (f >= 1) {
- scr = sc_height;
- if ((scr <= 0) || (scr > size)) vb = 0xffff;
- else {
- temp = size/scr;
- vb = 0xffff/temp;
- }
- }
- else vb = barspec.VertBody;
-
- mModifyProp(&gads[9],&barspec,0,vp,0,vb);
- }
-
- void usebar() /*======================================================*/
- {
- register ULONG vp,pos;
-
- if (!scroll_bar) return; /* Shouldn't happen, because bar should be off */
-
- vp = barspec.VertPot;
- pos = (vp * size) >> 16;
- pos -= scr;
- if (pos < 1) pos = 1;
- jump_back(pos); /* Line oriented */
- }
-
- int rbut(msg) /*=====================================================*/
- struct IntuiMessage *msg; /* Go through gadget list, and return GadgetID */
- {
- register int x,y,my;
- register struct Gadget *gp;
-
- x = msg->MouseX; y = msg->MouseY; my = (y - Window->Height) + 1;
- gp = &gads[8]; /* Skip scroll bar */
-
- /* Out of bounds? */
- if ((x < Window->Width-16) || (x > Window->Width-3) ||
- (y < 11) || (y > Window->Height - 11)) return(G_NULL);
-
- while (gp) {
- if (gp->Flags & GRELBOTTOM) {
- if ((my >= gp->TopEdge) && (my < gp->TopEdge + 8)) return(gp->GadgetID);
- }
- else {
- if ((y >= gp->TopEdge) && (y < gp->TopEdge + 8)) return(gp->GadgetID);
- }
- gp = gp->NextGadget;
- }
- return(G_NULL);
- }
-
- void sethbar() /*=====================================================*/
- {
- hbrspec.HorizPot = (0xffff / 60) * l_start;
- OnGadget(&gads[21],Window,NULL); /* Better than ModifyProp */
- }
-
- void usehbar() /*=====================================================*/
- {
- l_start = (hbrspec.HorizPot * 60) / 0xffff;
- }
-