home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 514a.lha / TplEdit_v1.00_alpha / Src / subs.c < prev    next >
C/C++ Source or Header  |  1991-06-08  |  3KB  |  170 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 long RegionToId(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 int GetSaveFile(char *);
  18.  
  19. TplRegion *
  20. IdToRegion(id)
  21. long id;
  22. {
  23.     TplRegion *rg;
  24.  
  25.     for (rg = GetHead(&RegList); rg; rg = GetSucc(&rg->rg_Node)) {
  26.     if (rg->rg_Id == id)
  27.         break;
  28.     }
  29.     return(rg);
  30. }
  31.  
  32. TplRegion *
  33. FindRegion(x, y)
  34. short x;
  35. short y;
  36. {
  37.     TplRegion *rg;
  38.  
  39.     for (rg = GetHead(&RegList); rg; rg = GetSucc(&rg->rg_Node)) {
  40.     if (rg->rg_Box.bo_Xs - 2 <= x && x <= rg->rg_Box.bo_Xe + 2) {
  41.         if (rg->rg_Box.bo_Ys - 2 <= y && y <= rg->rg_Box.bo_Ye + 2)
  42.         return(rg);
  43.     }
  44.     }
  45.     return(NULL);
  46. }
  47.  
  48. TplRegion *
  49. FindRegionByGad(gad)
  50. Gadget *gad;
  51. {
  52.     TplRegion *rg;
  53.  
  54.     for (rg = GetHead(&RegList); rg; rg = GetSucc(&rg->rg_Node)) {
  55.     if (rg->rg_Gad == gad)
  56.         return(rg);
  57.     }
  58.     return(NULL);
  59. }
  60.  
  61.  
  62.  
  63. long
  64. RegionToId(rg)
  65. TplRegion *rg;
  66. {
  67.     if (rg)
  68.     return(rg->rg_Id);
  69.     return(0);
  70. }
  71.  
  72. void *
  73. zalloc(bytes)
  74. long bytes;
  75. {
  76.     void *ptr;
  77.  
  78.     if (ptr = malloc(bytes)) {
  79.     clrmem(ptr, bytes);
  80.     return(ptr);
  81.     }
  82.     puts("No Memory!");
  83.     exit(30);
  84. }
  85.  
  86. void
  87. DrawBox(box)
  88. Box *box;
  89. {
  90.     RastPort *rp = Win->RPort;
  91.  
  92.     SetDrMd(rp, COMPLEMENT);
  93.     Move(rp, box->bo_Xs, box->bo_Ys);
  94.     Draw(rp, box->bo_Xe, box->bo_Ys);
  95.     Draw(rp, box->bo_Xe, box->bo_Ye);
  96.     Draw(rp, box->bo_Xs, box->bo_Ye);
  97.     Draw(rp, box->bo_Xs, box->bo_Ys);
  98. }
  99.  
  100. void
  101. FixBounds(box)
  102. Box *box;
  103. {
  104.     long t;
  105.  
  106.     if (box->bo_Xe < box->bo_Xs) {
  107.     t = box->bo_Xe;
  108.     box->bo_Xe = box->bo_Xs;
  109.     box->bo_Xs = t;
  110.     }
  111.     if (box->bo_Ye < box->bo_Ys) {
  112.     t = box->bo_Ye;
  113.     box->bo_Ye = box->bo_Ys;
  114.     box->bo_Ys = t;
  115.     }
  116. }
  117.  
  118. void
  119. AddNode(list, str, alloc)
  120. List *list;
  121. char *str;
  122. short alloc;
  123. {
  124.     MaxNode *node = zalloc(sizeof(MaxNode));
  125.     node->ln_Name = (alloc) ? strdup(str) : str;
  126.     AddTail((MaxList *)list, node);
  127. }
  128.  
  129. int
  130. GetSaveFile(buf)
  131. char *buf;
  132. {
  133.     FileRequester *freq;
  134.     int r = -1;
  135.  
  136.     if (freq = AllocFileRequest()) {
  137.     if (RequestFile(freq)) {
  138.         short i = strlen(freq->rf_Dir) - 1;
  139.         strcpy(buf, freq->rf_Dir);
  140.         if (i >= 0 && buf[i] != '/' && buf[i] != ':')
  141.         strcat(buf, "/");
  142.         strcat(buf, freq->rf_File);
  143.         r = 0;
  144.     }
  145.     FreeFileRequest(freq);
  146.     }
  147.     return(r);
  148. }
  149.  
  150. void
  151. ClearLinks(rn)
  152. TplRegion *rn;
  153. {
  154.     TplRegion *rg;
  155.  
  156.     for (rg = GetHead(&RegList); rg; rg = GetSucc(&rg->rg_Node)) {
  157.     if (rn == rg->rg_LinkLeft)
  158.         rg->rg_LinkLeft = NULL;
  159.     if (rn == rg->rg_LinkRight)
  160.         rg->rg_LinkRight = NULL;
  161.     if (rn == rg->rg_LinkUp)
  162.         rg->rg_LinkUp = NULL;
  163.     if (rn == rg->rg_LinkDown)
  164.         rg->rg_LinkDown = NULL;
  165.     if (rn == rg->rg_LockedTo)
  166.         rg->rg_LockedTo = NULL;
  167.     }
  168. }
  169.  
  170.