home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Fred Fish Collection 1.5
/
ffcollection-1-5-1992-11.iso
/
ff_disks
/
500-599
/
ff583.lza
/
TplEdit
/
src.lzh
/
subs.c
< prev
next >
Wrap
C/C++ Source or Header
|
1991-12-03
|
6KB
|
301 lines
/*
* SUBS.C
*/
#include "defs.h"
Prototype TplRegion *IdToRegion(long);
Prototype TplRegion *FindRegion(short, short);
Prototype TplRegion *FindRegionByGad(Gadget *);
Prototype void ClearLinks(TplRegion *);
Prototype void UnLink(TplRegion *);
Prototype void *zalloc(long);
Prototype void DrawBox(Box *);
Prototype void FixBounds(Box *);
Prototype void AddNode(List *, char *, short);
Prototype void SortList(List *);
Prototype void SortRegions(void);
Prototype int GetSaveFile(char *);
Prototype char *itoa(int);
/*********************** itoa(int); ********************************/
char *
itoa(num)
int num;
{
char *str;
int tmp;
int cnt;
for (cnt = 0, tmp = num; tmp > 10; tmp = tmp/10, ++cnt);
str = (char *)zalloc(cnt + 1);
sprintf(str, "%d", num);
printf("num: %d\n", num);
return(str);
}
/*********************** IdToRegion(id) ****************************/
TplRegion *
IdToRegion(id)
long id;
{
TplRegion *rg;
for (rg = GetHead(&RegList); rg; rg = GetSucc(&rg->rg_Node))
{
if (rg->rg_Id == id)
break;
}
return (rg);
}
/*********************** FindRegion(x, ******************************/
TplRegion *
FindRegion(x, y)
short x;
short y;
{
TplRegion *rg;
for (rg = GetHead(&RegList); rg; rg = GetSucc(&rg->rg_Node))
{
if (rg->rg_Box.bo_Xs - 2 <= x && x <= rg->rg_Box.bo_Xe + 2)
{
if (rg->rg_Box.bo_Ys - 2 <= y && y <= rg->rg_Box.bo_Ye + 2)
return (rg);
}
}
return (NULL);
}
/*********************** FindRegionByGad(gad) **********************/
TplRegion *
FindRegionByGad(gad)
Gadget *gad;
{
TplRegion *rg;
for (rg = GetHead(&RegList); rg; rg = GetSucc(&rg->rg_Node))
{
if (rg->rg_Gad == gad)
return (rg);
}
return (NULL);
}
/*********************** zalloc(bytes) ******************************/
void *
zalloc(bytes)
long bytes;
{
void *ptr;
if (ptr = malloc(bytes))
{
clrmem(ptr, bytes);
return (ptr);
}
puts("No Memory!");
exit(30);
}
/*********************** DrawBox(box) ******************************/
void
DrawBox(box)
Box *box;
{
RastPort *rp = Win->RPort;
SetDrMd(rp, COMPLEMENT);
Move(rp, box->bo_Xs, box->bo_Ys);
Draw(rp, box->bo_Xe, box->bo_Ys);
Draw(rp, box->bo_Xe, box->bo_Ye);
Draw(rp, box->bo_Xs, box->bo_Ye);
Draw(rp, box->bo_Xs, box->bo_Ys);
}
/*********************** FixBounds(box) ****************************/
void
FixBounds(box)
Box *box;
{
long t;
if (box->bo_Xe < box->bo_Xs)
{
t = box->bo_Xe;
box->bo_Xe = box->bo_Xs;
box->bo_Xs = t;
}
if (box->bo_Ye < box->bo_Ys)
{
t = box->bo_Ye;
box->bo_Ye = box->bo_Ys;
box->bo_Ys = t;
}
}
/*********************** AddNode(list, ******************************/
void
AddNode(list, str, alloc)
List *list;
char *str;
short alloc;
{
MaxNode *node;
node = zalloc(sizeof(MaxNode));
node->ln_Name = (alloc) ? strdup(str) : str;
AddTail((MaxList *) list, node);
}
/*********************** SortList(list, ******************************/
void
SortList(list)
List *list;
{
MaxNode *mn;
short pri = 0;
for (mn = (MaxNode *)GetTail(list); mn; mn = (MaxNode *)GetPred(mn))
mn->ln_Pri = pri++;
MaxVal = --pri;
if (DefVal > pri)
DefVal = pri;
GT_SetGadgetAttrs(Gad_maxval_sl, EWin, NULL,
GTSL_Level, pri,
TAG_END);
GT_SetGadgetAttrs(Gad_defval_sl, EWin, NULL,
GTSL_Max, pri,
GTSL_Level, DefVal,
TAG_END);
if (CurRegion)
{
CurRegion->rg_DefVal = DefVal;
CurRegion->rg_MaxVal = pri;
}
}
/*********************** GetSaveFile(buf) **************************/
int
GetSaveFile(buf)
char *buf;
{
FileRequester *freq;
int r = -1;
if (freq = AllocFileRequest())
{
if (RequestFile(freq))
{
short i = strlen(freq->rf_Dir) - 1;
strcpy(buf, freq->rf_Dir);
if (i >= 0 && buf[i] != '/' && buf[i] != ':')
strcat(buf, "/");
strcat(buf, freq->rf_File);
r = 0;
}
FreeFileRequest(freq);
}
return (r);
}
/*********************** ClearLinks(rn) ****************************/
void
ClearLinks(rn)
TplRegion *rn;
{
long excl = rn->rg_ExclGroup;
TplRegion *rg;
for (rg = GetHead(&RegList); rg; rg = GetSucc(&rg->rg_Node))
{
if (rn == rg->rg_LinkLeft)
rg->rg_LinkLeft = NULL;
if (rn == rg->rg_LinkRight)
rg->rg_LinkRight = NULL;
if (rn == rg->rg_LinkUp)
rg->rg_LinkUp = NULL;
if (rn == rg->rg_LinkDown)
rg->rg_LinkDown = NULL;
if (rn == rg->rg_LockedTo)
rg->rg_LockedTo = NULL;
if (rg->rg_ExclGroup & excl)
rg->rg_ExclGroup -= excl;
}
}
/*********************** SortRegions(void) **************************/
void
SortRegions(void)
{
UnResolveIDs();
TplRegion *rg;
for (rg = GetHead(&RegList); rg; rg = GetSucc(&rg->rg_Node))
{
if (rg->rg_Type == RGT_BEVELBOX)
rg->rg_Node.ln_Pri = 0;
else
rg->rg_Node.ln_Pri = (RGT_TEXT + 1) - rg->rg_Type;
}
TplRegion *trg;
for (rg = (TplRegion *)GetTail(&RegList); rg;)
{
trg = (TplRegion *)GetPred(&rg->rg_Node);
Remove(&rg->rg_Node);
Enqueue(&RegList, &rg->rg_Node);
rg = trg;
}
ResolveIDs();
}
/*********************** UnLink(rn); ********************************/
void
UnLink(rn)
TplRegion *rn;
{
TplRegion *rg;
if (rg = rn->rg_LockedTo)
{
rg->rg_LockedTo = NULL;
rn->rg_LockedTo = NULL;
rn->rg_Box.bo_Ye = rg->rg_Box.bo_Ys - 1;
}
}