home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Club Amiga de Montreal - CAM
/
CAM_CD_1.iso
/
files
/
262.lha
/
BlitLab_v1.4
/
gadgets.c
< prev
next >
Wrap
C/C++ Source or Header
|
1989-06-29
|
7KB
|
223 lines
/*
* Gadgets for BlitLab. We have something like 40 gadgets here.
*/
#include "structures.h"
/*
* To make things nice, we build the gadgets up, one by one. First,
* the externals we use.
*/
extern struct Window *mywindow ;
extern char *bufarr[] ;
extern char strings[] ;
extern void *allocmem() ;
extern struct Gadget *gadgets[] ;
/*
* This routine allocates a border description.
*/
static struct Border *givebox(xsize, ysize)
int xsize, ysize ;
{
register struct Border *bp ;
register short *r ;
bp = allocmem((long)sizeof(struct Border), MEMF_CLEAR) ;
r = allocmem(20L, MEMF_CLEAR) ;
r[2] = xsize ;
r[4] = xsize ;
r[5] = ysize ;
r[7] = ysize ;
bp->FrontPen = WHITE ;
bp->DrawMode = JAM2 ;
bp->Count = 5 ;
bp->XY = r ;
return(bp) ;
}
/*
* This routine allocates an intuitext structure, with a string
* centered in it.
*/
static struct IntuiText *centertext(size, s)
int size ;
char *s ;
{
register struct IntuiText *itp ;
itp = allocmem((long)sizeof(struct IntuiText), MEMF_CLEAR) ;
itp->FrontPen = WHITE ;
itp->DrawMode = JAM2 ;
itp->TopEdge = 2 ;
itp->LeftEdge = (size - strlen(s) * 8) / 2 ;
itp->IText = (UBYTE *)s ;
return(itp) ;
}
/*
* This routine builds a simple hit gadget, given an id, x and
* y locations, xsize and ysize, and a string label.
*/
static buildhit(id, x, y, xsize, ysize, s)
int id ;
int x, y, xsize, ysize ;
char *s ;
{
register struct Gadget *gp ;
gp = allocmem((long)sizeof(struct Gadget), MEMF_CLEAR) ;
gp->LeftEdge = x ;
gp->TopEdge = y ;
gp->Width = xsize ;
gp->Height = ysize ;
gp->Flags = GADGHCOMP ;
gp->Activation = RELVERIFY ;
gp->GadgetType = BOOLGADGET ;
gp->GadgetRender = (APTR)givebox(xsize, ysize) ;
gp->GadgetText = centertext(xsize, s) ;
gp->GadgetID = id ;
gadgets[id] = gp ;
AddGadget(mywindow, gp, 0) ;
}
/*
* This routine builds a gadget with two possible strings. It is up
* to the user to flip the strings when it is selected; this means
* taking it off the list and putting it back on.
*/
static buildtoggle(id, x, y, xsize, ysize, s1, s2)
int id ;
int x, y, xsize, ysize ;
char *s1, *s2 ;
{
register struct Gadget *gp ;
gp = allocmem((long)sizeof(struct Gadget), MEMF_CLEAR) ;
gp->LeftEdge = x ;
gp->TopEdge = y ;
gp->Width = xsize ;
gp->Height = ysize ;
gp->Flags = GADGHNONE ;
gp->Activation = GADGIMMEDIATE ;
gp->GadgetType = BOOLGADGET ;
gp->GadgetRender = (APTR)givebox(xsize, ysize) ;
gp->GadgetText = centertext(xsize, s1) ;
gp->GadgetID = id ;
gp->UserData = (APTR)centertext(xsize, s2) ;
gadgets[id] = gp ;
AddGadget(mywindow, gp, 0) ;
}
/*
* This routine builds a simple string gadget. We allocate pieces
* of the `strings' array as we do the gadgets. `p' holds a pointer
* to the next available chunk; we have to be careful to initialize.
* We also allow a label parameter which lives to the left of the
* string gadget.
*/
static char undobuf[100] ;
static char *p ;
static buildstring(id, x, y, width, init, rmax, lab)
int id ;
int x, y ;
int width ;
char *init ;
int rmax ;
char *lab ;
{
register struct Gadget *gp ;
register struct StringInfo *sip ;
register struct Border *bp ;
int ysize ;
int xsize ;
int chars ;
if (lab != NULL) {
drawtext(x + 4, y + 2, lab) ;
x += 8 + strlen(lab) * 8 ;
width -= 8 + strlen(lab) * 8 ;
}
chars = ( width - 4 ) / 8 ;
ysize = VSTRSIZE ;
xsize = HSTRSIZE(chars) ;
bufarr[id] = p ;
strcpy(p, init) ;
gp = allocmem((long)sizeof(struct Gadget), MEMF_CLEAR) ;
sip = allocmem((long)sizeof(struct StringInfo), MEMF_CLEAR) ;
sip->Buffer = (UBYTE *)p ;
p += rmax ;
sip->UndoBuffer = (UBYTE *)undobuf ;
sip->MaxChars = rmax ;
gp->LeftEdge = x + 2 ;
gp->TopEdge = y + 2 ;
gp->Width = xsize ;
gp->Height = ysize - 3 ;
gp->Flags = GADGHCOMP ;
gp->Activation = RELVERIFY ;
gp->GadgetType = STRGADGET ;
bp = givebox(xsize - 2, ysize - 2) ;
bp->XY[0] = -2 ;
bp->XY[1] = -2 ;
bp->XY[3] = -2 ;
bp->XY[6] = -2 ;
bp->XY[8] = -2 ;
bp->XY[9] = -2 ;
gp->GadgetRender = (APTR)bp ;
gp->GadgetText = NULL ;
gp->SpecialInfo = (APTR)sip ;
gp->GadgetID = id ;
gadgets[id] = gp ;
AddGadget(mywindow, gp, 0) ;
}
/*
* This routine actually creates all of the gadgets. Wish
* us luck placing all of these correctly!
*/
buildgadgets() {
int i ;
p = strings ;
buildhit(GDGGO, HGOSTART, VGOSTART, HGOSIZE, VGOSIZE, "GO") ;
buildhit(GDGSETUP, HMG3START, VMG2START, HMGSIZE, VMGSIZE, "Setup") ;
buildhit(GDGCALC, HLMGSTART, VLMG5, HLMGSIZE, VLMGSIZE, "Calc") ;
buildhit(GDGUNDO, HLMGSTART, VLMG7, HLMGSIZE, VLMGSIZE, "Undo") ;
buildtoggle(GDGPNTREG, HLMGSTART, VLMG1, HLMGSIZE, VLMGSIZE, "Point",
" Box ") ;
buildtoggle(GDGLINE, HMG3START, VMG1START, HMGSIZE, VMGSIZE, "(line)",
" LINE ") ;
buildtoggle(GDGDESC, HMG6START, VMG1START, HMGSSIZE, VMGSIZE, "(desc)",
" DESC ") ;
buildtoggle(GDGFCI, HMG7START, VMG1START, HMGSSIZE, VMGSIZE, "(fci)",
" FCI ") ;
buildtoggle(GDGIFE, HMG8START, VMG1START, HMGSSIZE, VMGSIZE, "(ife)",
" IFE ") ;
buildtoggle(GDGEFE, HMG9START, VMG1START, HMGSSIZE, VMGSIZE, "(efe)",
" EFE ") ;
buildtoggle(GDGSIGN, HMG10START, VMG1START, HMGSSIZE, VMGSIZE, "(sign)",
" SIGN ") ;
buildtoggle(GDGOVF, HMG11START, VMG1START, HMGSSIZE, VMGSIZE, "(ovf)",
" OVF ") ;
buildtoggle(GDGSIM, HLMGSTART, VLMG8, HLMGSIZE, VLMGSIZE, "Real ",
"Simul") ;
for (i=0; i<4; i++)
buildtoggle(GDGUSEA+i, HRVC8, VRG1 + 11 * i, 24, VSTRSIZE, "N", "Y") ;
buildstring(GDGSX, HMG1START, VMG1START, HMGSIZE, "0", 20, "SX") ;
buildstring(GDGSY, HMG2START, VMG1START, HMGSIZE, "0", 20, "SY") ;
buildstring(GDGEX, HMG1START, VMG2START, HMGSIZE, "0", 20, "EX") ;
buildstring(GDGEY, HMG2START, VMG2START, HMGSIZE, "0", 20, "EY") ;
buildstring(GDGH, HMG4START, VMG1START, HMGSIZE, "0", 20, "W") ;
buildstring(GDGV, HMG5START, VMG1START, HMGSIZE, "0", 20, "H") ;
buildstring(GDGFUNC, HMG4START, VMG2START, FUNCSIZE, "0", 100, "Func") ;
buildstring(GDGLF, HMGFLSTART, VMG2START, FUNCSIZE, "", 100, "Log") ;
for (i=0; i<4; i++)
buildstring(GDGAPT+i, HRVC9, VRG1 + 11 * i, HSTRSIZE(8), "0", 20, NULL) ;
for (i=0; i<4; i++)
buildstring(GDGAMOD+i, HRVC10, VRG1 + 11 * i, HSTRSIZE(6), "0", 20,
NULL) ;
for (i=0; i<3; i++)
buildstring(GDGADAT+i, HRVC11, VRG1 + 11 * i, HSTRSIZE(18), "0", 20,
NULL) ;
for (i=0; i<2; i++)
buildstring(GDGASH+i, HRVC12, VRG1 + 11 * i, HSTRSIZE(4), "0", 20,
NULL) ;
buildstring(GDGAFWM, HRVC11, VRG1 + 33, 180, "%1111111111111111", 20,
"FWM") ;
buildstring(GDGALWM, HRVC11, VRG1 + 44, 180, "%1111111111111111", 20,
"LWM") ;
RefreshGadgets(mywindow->FirstGadget, mywindow, NULL) ;
}