home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 287.lha / TY_v1.3 / src / gadg.c < prev    next >
Encoding:
C/C++ Source or Header  |  1989-09-07  |  8.3 KB  |  201 lines

  1. /*************************************************************************
  2.  ***                        gadg.c                       (JJB TEMPLAR) ***
  3.  *** Date begun: 9/8/89.                                               ***
  4.  *** Last modified: 16/8/89.                                           ***
  5.  *************************************************************************/
  6. /*** Gadget data for ty.                                               ***
  7.  *************************************************************************/
  8.  
  9. #include <exec/types.h>
  10. #include <intuition/intuition.h>
  11. #include <proto/intuition.h>
  12.  
  13. #include "image.h"
  14. #include "gadg.h"
  15.  
  16. #include "position.h"
  17.  
  18. static struct Image    g_img[22] = {
  19.     {0,0,14,8,2,image1,3,0,NULL},
  20.     {0,0,14,8,2,image2,3,0,NULL},
  21.     {0,0,14,8,2,image3,3,0,NULL},
  22.     {0,0,14,8,2,image4,3,0,NULL},
  23.     {0,0,14,8,2,image5,3,0,NULL},
  24.     {0,0,14,8,2,image6,3,0,NULL},
  25.     {0,0,14,8,2,image7,3,0,NULL},
  26.     {0,0,14,8,2,image8,3,0,NULL},
  27.     {0,0,14,8,2,image9,3,0,NULL},
  28.     {NULL},             /* AutoKnob. Don't need to initialize */
  29.     {0,0,16,8,2,image11,3,0,NULL},
  30.     {0,0,16,8,2,image12,3,0,NULL},
  31.     {0,0,16,8,2,image13,3,0,NULL},
  32.     {0,0,16,8,2,image14,3,0,NULL},
  33.     {0,0,16,8,2,image15,3,0,NULL},
  34.     {0,0,16,8,2,image16,3,0,NULL},
  35.     {0,0,16,8,2,image17,3,0,NULL},
  36.     {0,0,16,8,2,image18,3,0,NULL},
  37.     {0,0,16,8,2,image19,3,0,NULL},
  38.     {0,0,16,8,2,image20,3,0,NULL},
  39.     {0,0,16,8,2,image21,3,0,NULL},
  40.     {NULL}};            /* AutoKnob. Don't need to initialize */
  41. static struct PropInfo barspec = {
  42.     AUTOKNOB|FREEVERT,0,0,0,0x5555,};
  43. static struct PropInfo hbrspec = {
  44.     AUTOKNOB|FREEHORIZ,0,0,0xffff/6,0,};    /* Basically 6 positions,
  45.                                              * independent of sc_width */
  46.  
  47. static struct Gadget   gads[22] = {
  48.     {NULL,-15,11,14,8,GADGHCOMP|GADGIMAGE|GRELRIGHT,
  49.      RELVERIFY,BOOLGADGET,(APTR)&g_img[0],NULL,NULL,NULL,NULL,G_UP,NULL},
  50.     {&gads[0],-15,-80,14,8,GADGHCOMP|GADGIMAGE|GRELRIGHT|GRELBOTTOM,
  51.      RELVERIFY,BOOLGADGET,(APTR)&g_img[1],NULL,NULL,NULL,NULL,G_DOWN,NULL},
  52.     {&gads[1],-15,-71,14,8,GADGHCOMP|GADGIMAGE|GRELRIGHT|GRELBOTTOM,
  53.      RELVERIFY,BOOLGADGET,(APTR)&g_img[2],NULL,NULL,NULL,NULL,G_LEFT,NULL},
  54.     {&gads[2],-15,-62,14,8,GADGHCOMP|GADGIMAGE|GRELRIGHT|GRELBOTTOM,
  55.      RELVERIFY,BOOLGADGET,(APTR)&g_img[3],NULL,NULL,NULL,NULL,G_RIGHT,NULL},
  56.     {&gads[3],-15,-53,14,8,GADGHCOMP|GADGIMAGE|GRELRIGHT|GRELBOTTOM,
  57.      RELVERIFY,BOOLGADGET,(APTR)&g_img[4],NULL,NULL,NULL,NULL,G_HELP,NULL},
  58.     {&gads[4],-15,-44,14,8,GADGHCOMP|GADGIMAGE|GRELRIGHT|GRELBOTTOM,
  59.      RELVERIFY,BOOLGADGET,(APTR)&g_img[5],NULL,NULL,NULL,NULL,G_SEARCH,NULL},
  60.     {&gads[5],-15,-35,14,8,GADGHCOMP|GADGIMAGE|GRELRIGHT|GRELBOTTOM,
  61.      RELVERIFY,BOOLGADGET,(APTR)&g_img[6],NULL,NULL,NULL,NULL,G_MARK,NULL},
  62.     {&gads[6],-15,-26,14,8,GADGHCOMP|GADGIMAGE|GRELRIGHT|GRELBOTTOM,
  63.      RELVERIFY,BOOLGADGET,(APTR)&g_img[7],NULL,NULL,NULL,NULL,G_MODE,NULL},
  64.     {&gads[7],-15,-17,14,8,GADGHCOMP|GADGIMAGE|GRELRIGHT|GRELBOTTOM,
  65.      RELVERIFY,BOOLGADGET,(APTR)&g_img[8],NULL,NULL,NULL,NULL,G_BOOM,NULL},
  66.     {&gads[8],-15,20,16,-102,GADGHCOMP|GADGIMAGE|GRELRIGHT|GRELHEIGHT,
  67.      RELVERIFY,PROPGADGET,(APTR)&g_img[9],NULL,NULL,NULL,(APTR)&barspec,G_SCROLL,NULL},
  68.  
  69.     {&gads[9],    4,-8,16,8,GADGHCOMP|GADGIMAGE|GRELBOTTOM,
  70.      RELVERIFY|BOTTOMBORDER,BOOLGADGET,(APTR)&g_img[10],NULL,NULL,NULL,NULL,G_LEFT,NULL},
  71.     {&gads[10],-195,-8,16,8,GADGHCOMP|GADGIMAGE|GRELRIGHT|GRELBOTTOM,
  72.      RELVERIFY,BOOLGADGET,(APTR)&g_img[11],NULL,NULL,NULL,NULL,G_RIGHT,NULL},
  73.     {&gads[11],-177,-8,16,8,GADGHCOMP|GADGIMAGE|GRELRIGHT|GRELBOTTOM,
  74.      RELVERIFY,BOOLGADGET,(APTR)&g_img[12],NULL,NULL,NULL,NULL,G_PERCENT,NULL},
  75.     {&gads[12],-159,-8,16,8,GADGHCOMP|GADGIMAGE|GRELRIGHT|GRELBOTTOM,
  76.      RELVERIFY,BOOLGADGET,(APTR)&g_img[13],NULL,NULL,NULL,NULL,G_VERSION,NULL},
  77.     {&gads[13],-141,-8,16,8,GADGHCOMP|GADGIMAGE|GRELRIGHT|GRELBOTTOM,
  78.      RELVERIFY,BOOLGADGET,(APTR)&g_img[14],NULL,NULL,NULL,NULL,G_REPAINT,NULL},
  79.     {&gads[14],-123,-8,16,8,GADGHCOMP|GADGIMAGE|GRELRIGHT|GRELBOTTOM,
  80.      RELVERIFY,BOOLGADGET,(APTR)&g_img[15],NULL,NULL,NULL,NULL,G_PRINT,NULL},
  81.     {&gads[15],-105,-8,16,8,GADGHCOMP|GADGIMAGE|GRELRIGHT|GRELBOTTOM,
  82.      RELVERIFY,BOOLGADGET,(APTR)&g_img[16],NULL,NULL,NULL,NULL,G_TOP,NULL},
  83.     {&gads[16], -87,-8,16,8,GADGHCOMP|GADGIMAGE|GRELRIGHT|GRELBOTTOM,
  84.      RELVERIFY,BOOLGADGET,(APTR)&g_img[17],NULL,NULL,NULL,NULL,G_BOTTOM,NULL},
  85.     {&gads[17], -69,-8,16,8,GADGHCOMP|GADGIMAGE|GRELRIGHT|GRELBOTTOM,
  86.      RELVERIFY,BOOLGADGET,(APTR)&g_img[18],NULL,NULL,NULL,NULL,G_PREV,NULL},
  87.     {&gads[18], -51,-8,16,8,GADGHCOMP|GADGIMAGE|GRELRIGHT|GRELBOTTOM,
  88.      RELVERIFY,BOOLGADGET,(APTR)&g_img[19],NULL,NULL,NULL,NULL,G_FILE,NULL},
  89.     {&gads[19], -33,-8,16,8,GADGHCOMP|GADGIMAGE|GRELRIGHT|GRELBOTTOM,
  90.      RELVERIFY,BOOLGADGET,(APTR)&g_img[20],NULL,NULL,NULL,NULL,G_NEXT,NULL},
  91.     {&gads[20],  22,-8,-220,9,GADGHCOMP|GADGIMAGE|GRELWIDTH|GRELBOTTOM,
  92.      RELVERIFY,PROPGADGET,(APTR)&g_img[21],NULL,NULL,NULL,(APTR)&hbrspec,G_HSCROLL,NULL}};
  93.  
  94. struct Gadget *fgadg = &(gads[21]);
  95.  
  96. extern struct Window    *Window;
  97. extern int              sc_height,sc_width;
  98. extern int              scroll_bar;
  99. extern int              l_start;
  100.  
  101. extern LONG position(int);  /* Access to position table */
  102. extern void printf(char *);
  103. extern char *strint(int);
  104. extern void jump_back(int);
  105. extern int  linecount();
  106.  
  107. static LONG size,scr;
  108.  
  109. void    mModifyProp(g,s,hp,vp,hb,vb) /*==================================*/
  110. struct Gadget   *g;     /* Do this because Intuition fn doesn't have a   */
  111. struct PropInfo *s;     /* prototype, and I don't want refs to amiga.lib */
  112. UWORD   hp,vp,hb,vb;    /* since I'm trying to use cres.o                */
  113. {
  114.     s->HorizPot = hp;       s->VertPot = vp;
  115.     s->HorizBody = hb;      s->VertBody = vb;
  116.     OnGadget(g,Window,NULL);    /* Should do redraw. Will it do recalc? */
  117. }
  118.  
  119. void    setbar(f) /*=====================================================*/
  120. int     f;        /* If f is true, then re-calc proportions.             */
  121. {                 /* 2 means reset both sizes, 1 means reset screen size */
  122. register LONG   pos;
  123. register LONG   temp;
  124. register UWORD  vp,vb;
  125.  
  126.     if (!scroll_bar && (f < 2)) return;
  127.     if (!scroll_bar) {
  128.         mModifyProp(&gads[9],&barspec,0,0,0,0xffff);
  129.         OffGadget(&gads[9],Window,NULL);
  130.         return;     /* If f == 2, and no bar, then make knob full size */
  131.     }
  132.     pos = position(TOP)/60;     /* Assume about 60chars/line, for now. */
  133.     if (f == 2) size = linecount();     /* Reset file size */
  134.  
  135.     if ((pos <= 0) || (pos > size)) vp = 0x0000;  /* Ensure size >= pos */
  136.     else {
  137.         temp = size/pos;    /* Can't be div by zero because just checked */
  138.         vp = 0xffff/temp;   /* Can't be div by zero because size >= pos */
  139.     }
  140.     if (f >= 1) {
  141.         scr = sc_height;
  142.         if ((scr <= 0) || (scr > size)) vb = 0xffff;
  143.         else {
  144.             temp = size/scr;
  145.             vb = 0xffff/temp;
  146.         }
  147.     }
  148.     else vb = barspec.VertBody;
  149.  
  150.     mModifyProp(&gads[9],&barspec,0,vp,0,vb);
  151. }
  152.  
  153. void    usebar() /*======================================================*/
  154. {
  155. register ULONG  vp,pos;
  156.  
  157.     if (!scroll_bar) return; /* Shouldn't happen, because bar should be off */
  158.  
  159.     vp = barspec.VertPot;
  160.     pos = (vp * size) >> 16;
  161.     pos -= scr;
  162.     if (pos < 1) pos = 1;
  163.     jump_back(pos);     /* Line oriented */
  164. }
  165.  
  166. int     rbut(msg) /*=====================================================*/
  167. struct IntuiMessage *msg; /* Go through gadget list, and return GadgetID */
  168. {
  169. register int    x,y,my;
  170. register struct Gadget *gp;
  171.  
  172.     x = msg->MouseX;    y = msg->MouseY;    my = (y - Window->Height) + 1;
  173.     gp = &gads[8];      /* Skip scroll bar */
  174.  
  175.   /* Out of bounds? */
  176.     if ((x < Window->Width-16) || (x > Window->Width-3) ||
  177.         (y < 11) || (y > Window->Height - 11)) return(G_NULL);
  178.  
  179.     while (gp) {
  180.         if (gp->Flags & GRELBOTTOM) {
  181.             if ((my >= gp->TopEdge) && (my < gp->TopEdge + 8)) return(gp->GadgetID);
  182.         }
  183.         else {
  184.             if ((y >= gp->TopEdge) && (y < gp->TopEdge + 8)) return(gp->GadgetID);
  185.         }
  186.         gp = gp->NextGadget;
  187.     }
  188.     return(G_NULL);
  189. }
  190.  
  191. void    sethbar() /*=====================================================*/
  192. {
  193.     hbrspec.HorizPot = (0xffff / 60) * l_start;
  194.     OnGadget(&gads[21],Window,NULL);    /* Better than ModifyProp */
  195. }
  196.  
  197. void    usehbar() /*=====================================================*/
  198. {
  199.     l_start = (hbrspec.HorizPot * 60) / 0xffff;
  200. }
  201.