home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / alib / d5xx / d583 / tpledit.lha / TplEdit / src.lzh / subs.c < prev    next >
C/C++ Source or Header  |  1991-12-03  |  6KB  |  301 lines

  1.  
  2. /*
  3.  * SUBS.C
  4.  */
  5.  
  6. #include "defs.h"
  7.  
  8. Prototype TplRegion *IdToRegion(long);
  9. Prototype TplRegion *FindRegion(short, short);
  10. Prototype TplRegion *FindRegionByGad(Gadget *);
  11. Prototype void      ClearLinks(TplRegion *);
  12. Prototype void      UnLink(TplRegion *);
  13. Prototype void      *zalloc(long);
  14. Prototype void      DrawBox(Box *);
  15. Prototype void      FixBounds(Box *);
  16. Prototype void      AddNode(List *, char *, short);
  17. Prototype void      SortList(List *);
  18. Prototype void      SortRegions(void);
  19. Prototype int       GetSaveFile(char *);
  20. Prototype char      *itoa(int);
  21.  
  22.  
  23.  
  24. /***********************  itoa(int);  ********************************/
  25. char *
  26. itoa(num)
  27.   int num;
  28. {
  29.   char *str;
  30.   int   tmp;
  31.   int   cnt;
  32.  
  33.   for (cnt = 0, tmp = num; tmp > 10; tmp = tmp/10, ++cnt);
  34.  
  35.   str = (char *)zalloc(cnt + 1);
  36.  
  37.   sprintf(str, "%d", num);
  38.   printf("num: %d\n", num);
  39.  
  40.   return(str);
  41.  
  42. }
  43.  
  44. /***********************  IdToRegion(id)  ****************************/
  45. TplRegion *
  46. IdToRegion(id)
  47.   long   id;
  48. {
  49.   TplRegion *rg;
  50.  
  51.   for (rg = GetHead(&RegList); rg; rg = GetSucc(&rg->rg_Node))
  52.   {
  53.     if (rg->rg_Id == id)
  54.       break;
  55.   }
  56.   return (rg);
  57. }
  58.  
  59. /***********************  FindRegion(x, ******************************/
  60. TplRegion *
  61. FindRegion(x, y)
  62.   short  x;
  63.   short  y;
  64. {
  65.   TplRegion *rg;
  66.  
  67.   for (rg = GetHead(&RegList); rg; rg = GetSucc(&rg->rg_Node))
  68.   {
  69.     if (rg->rg_Box.bo_Xs - 2 <= x && x <= rg->rg_Box.bo_Xe + 2)
  70.     {
  71.       if (rg->rg_Box.bo_Ys - 2 <= y && y <= rg->rg_Box.bo_Ye + 2)
  72.         return (rg);
  73.     }
  74.   }
  75.  
  76.   return (NULL);
  77. }
  78.  
  79. /***********************  FindRegionByGad(gad)  **********************/
  80. TplRegion *
  81. FindRegionByGad(gad)
  82.   Gadget *gad;
  83. {
  84.   TplRegion *rg;
  85.  
  86.   for (rg = GetHead(&RegList); rg; rg = GetSucc(&rg->rg_Node))
  87.   {
  88.     if (rg->rg_Gad == gad)
  89.       return (rg);
  90.   }
  91.   return (NULL);
  92. }
  93.  
  94. /***********************  zalloc(bytes) ******************************/
  95. void  *
  96. zalloc(bytes)
  97.   long   bytes;
  98. {
  99.   void  *ptr;
  100.  
  101.   if (ptr = malloc(bytes))
  102.   {
  103.     clrmem(ptr, bytes);
  104.     return (ptr);
  105.   }
  106.   puts("No Memory!");
  107.   exit(30);
  108. }
  109.  
  110. /***********************  DrawBox(box)  ******************************/
  111. void
  112. DrawBox(box)
  113.   Box   *box;
  114. {
  115.   RastPort *rp = Win->RPort;
  116.  
  117.   SetDrMd(rp, COMPLEMENT);
  118.   Move(rp, box->bo_Xs, box->bo_Ys);
  119.   Draw(rp, box->bo_Xe, box->bo_Ys);
  120.   Draw(rp, box->bo_Xe, box->bo_Ye);
  121.   Draw(rp, box->bo_Xs, box->bo_Ye);
  122.   Draw(rp, box->bo_Xs, box->bo_Ys);
  123. }
  124.  
  125. /***********************  FixBounds(box)  ****************************/
  126. void
  127. FixBounds(box)
  128.   Box   *box;
  129. {
  130.   long   t;
  131.  
  132.   if (box->bo_Xe < box->bo_Xs)
  133.   {
  134.     t = box->bo_Xe;
  135.     box->bo_Xe = box->bo_Xs;
  136.     box->bo_Xs = t;
  137.   }
  138.   if (box->bo_Ye < box->bo_Ys)
  139.   {
  140.     t = box->bo_Ye;
  141.     box->bo_Ye = box->bo_Ys;
  142.     box->bo_Ys = t;
  143.   }
  144. }
  145.  
  146. /***********************  AddNode(list, ******************************/
  147. void
  148. AddNode(list, str, alloc)
  149.   List  *list;
  150.   char  *str;
  151.   short  alloc;
  152. {
  153.   MaxNode *node;
  154.  
  155.   node = zalloc(sizeof(MaxNode));
  156.  
  157.   node->ln_Name = (alloc) ? strdup(str) : str;
  158.  
  159.   AddTail((MaxList *) list, node);
  160. }
  161. /***********************  SortList(list, ******************************/
  162. void
  163. SortList(list)
  164.   List  *list;
  165. {
  166.   MaxNode *mn;
  167.   short pri = 0;
  168.   for (mn = (MaxNode *)GetTail(list); mn; mn = (MaxNode *)GetPred(mn))
  169.     mn->ln_Pri = pri++;
  170.  
  171.   MaxVal = --pri;
  172.   if (DefVal > pri)
  173.     DefVal = pri;
  174.  
  175.   GT_SetGadgetAttrs(Gad_maxval_sl, EWin, NULL,
  176.                     GTSL_Level, pri,
  177.                     TAG_END);
  178.  
  179.  
  180.   GT_SetGadgetAttrs(Gad_defval_sl, EWin, NULL,
  181.                     GTSL_Max,   pri,
  182.                     GTSL_Level, DefVal,
  183.                     TAG_END);
  184.  
  185.   if (CurRegion)
  186.   {
  187.     CurRegion->rg_DefVal = DefVal;
  188.     CurRegion->rg_MaxVal = pri;
  189.   }
  190. }
  191. /***********************  GetSaveFile(buf)  **************************/
  192. int
  193. GetSaveFile(buf)
  194.   char  *buf;
  195. {
  196.   FileRequester *freq;
  197.   int    r = -1;
  198.  
  199.   if (freq = AllocFileRequest())
  200.   {
  201.     if (RequestFile(freq))
  202.     {
  203.       short  i = strlen(freq->rf_Dir) - 1;
  204.  
  205.       strcpy(buf, freq->rf_Dir);
  206.       if (i >= 0 && buf[i] != '/' && buf[i] != ':')
  207.         strcat(buf, "/");
  208.       strcat(buf, freq->rf_File);
  209.       r = 0;
  210.     }
  211.     FreeFileRequest(freq);
  212.   }
  213.   return (r);
  214. }
  215.  
  216. /***********************  ClearLinks(rn)  ****************************/
  217. void
  218. ClearLinks(rn)
  219.   TplRegion *rn;
  220. {
  221.   long  excl   = rn->rg_ExclGroup;
  222.  
  223.   TplRegion *rg;
  224.  
  225.   for (rg = GetHead(&RegList); rg; rg = GetSucc(&rg->rg_Node))
  226.   {
  227.     if (rn == rg->rg_LinkLeft)
  228.       rg->rg_LinkLeft = NULL;
  229.     if (rn == rg->rg_LinkRight)
  230.       rg->rg_LinkRight = NULL;
  231.     if (rn == rg->rg_LinkUp)
  232.       rg->rg_LinkUp = NULL;
  233.     if (rn == rg->rg_LinkDown)
  234.       rg->rg_LinkDown = NULL;
  235.     if (rn == rg->rg_LockedTo)
  236.       rg->rg_LockedTo = NULL;
  237.  
  238.     if (rg->rg_ExclGroup & excl)
  239.       rg->rg_ExclGroup -= excl;
  240.   }
  241. }
  242.  
  243. /***********************  SortRegions(void) **************************/
  244. void
  245. SortRegions(void)
  246. {
  247.   UnResolveIDs();
  248.  
  249.   TplRegion *rg;
  250.  
  251.   for (rg = GetHead(&RegList); rg; rg = GetSucc(&rg->rg_Node))
  252.   {
  253.     if (rg->rg_Type == RGT_BEVELBOX)
  254.       rg->rg_Node.ln_Pri = 0;
  255.     else
  256.       rg->rg_Node.ln_Pri = (RGT_TEXT + 1) - rg->rg_Type;
  257.   }
  258.  
  259.   TplRegion *trg;
  260.  
  261.   for (rg = (TplRegion *)GetTail(&RegList); rg;)
  262.   {
  263.     trg = (TplRegion *)GetPred(&rg->rg_Node);
  264.     Remove(&rg->rg_Node);
  265.     Enqueue(&RegList, &rg->rg_Node);
  266.     rg  = trg;
  267.   }
  268.  
  269.   ResolveIDs();
  270. }
  271.  
  272.  
  273.  
  274.  
  275.  
  276.  
  277.  
  278.  
  279.  
  280.  
  281.  
  282.  
  283.  
  284.  
  285.  
  286. /***********************  UnLink(rn); ********************************/
  287. void
  288. UnLink(rn)
  289.   TplRegion *rn;
  290. {
  291.   TplRegion *rg;
  292.   if (rg = rn->rg_LockedTo)
  293.   {
  294.       rg->rg_LockedTo  = NULL;
  295.       rn->rg_LockedTo  = NULL;
  296.       rn->rg_Box.bo_Ye = rg->rg_Box.bo_Ys - 1;
  297.   }
  298. }
  299.  
  300.  
  301.