home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 514a.lha / TplEdit_v1.00_alpha / Src / region.c < prev    next >
C/C++ Source or Header  |  1991-06-08  |  2KB  |  120 lines

  1.  
  2. /*
  3.  *  REGION.C
  4.  */
  5.  
  6. #include "defs.h"
  7.  
  8. Prototype void UpdateTplRegion(TplRegion *);
  9. Prototype TplRegion *AllocTplRegion(void);
  10. Prototype void DeleteTplRegion(TplRegion *);
  11.  
  12.  
  13. TplRegion *
  14. AllocTplRegion()
  15. {
  16.     TplRegion *rg = zalloc(sizeof(TplRegion));
  17.  
  18.     NewList(&rg->rg_ListSet);
  19.     rg->rg_Id = ++IdNo;
  20.     rg->rg_TextAttr = *Scr->Font;
  21.     AddTail(&RegList, &rg->rg_Node);
  22.     return(rg);
  23. }
  24.  
  25. void
  26. UpdateTplRegion(rg)
  27. TplRegion *rg;
  28. {
  29.     if (rg->rg_Gad) {
  30.     GT_SetGadgetAttrs(rg->rg_Gad, Win, NULL,
  31.         GA_Disabled, 1,
  32.         TAG_END
  33.     );
  34.     }
  35.     if (NewType == RGT_ENTRY)
  36.     rg->rg_MaxBufLen = atoi(MaxName);
  37.  
  38.     if (rg->rg_DefText)
  39.     free(rg->rg_DefText);
  40.     rg->rg_DefText = (DefName[0]) ? strdup(DefName) : (char *)NULL;
  41.  
  42.     if (rg->rg_LabText)
  43.     free(rg->rg_LabText);
  44.     rg->rg_LabText = (LabName[0]) ? strdup(LabName) : (char *)NULL;
  45.  
  46.     if (rg->rg_Node.ln_Name)
  47.     free(rg->rg_Node.ln_Name);
  48.     rg->rg_Node.ln_Name = strdup(RegName);
  49.  
  50.     if (rg->rg_Gad && (rg->rg_Type == RGT_CYCLE || rg->rg_Type == RGT_SELLIST)) {
  51.     GT_SetGadgetAttrs(rg->rg_Gad, Win, NULL,
  52.         GTLV_Labels, -1,
  53.         TAG_END
  54.     );
  55.     }
  56.     {
  57.     MaxNode *mn;
  58.     while (mn = RemHead(&rg->rg_ListSet)) {
  59.         free(mn->ln_Name);
  60.         free(mn);
  61.     }
  62.     if (rg->rg_CycleAry) {
  63.         free(rg->rg_CycleAry);
  64.         rg->rg_CycleAry = NULL;
  65.     }
  66.     }
  67.     if (NewType == RGT_CYCLE || NewType == RGT_SELLIST) {
  68.     MaxNode *mn;
  69.     short cnt = 0;
  70.  
  71.     for (mn = GetHead(&EList); mn; mn = GetSucc(mn)) {
  72.         AddNode(&rg->rg_ListSet, mn->ln_Name, 1);
  73.         ++cnt;
  74.     }
  75.     rg->rg_CycleAry = zalloc(sizeof(char *) * (cnt + 1));
  76.     cnt = 0;
  77.     for (mn = GetHead(&rg->rg_ListSet); mn; mn = GetSucc(mn))
  78.         rg->rg_CycleAry[cnt++] = mn->ln_Name;
  79.     }
  80.     rg->rg_Flags = NewFlags;
  81.     rg->rg_Type  = NewType;
  82. }
  83.  
  84. void
  85. DeleteTplRegion(rg)
  86. TplRegion *rg;
  87. {
  88.     Remove(&rg->rg_Node);
  89.     ClearLinks(rg);
  90.  
  91.     if (rg->rg_Node.ln_Name)
  92.     free(rg->rg_Node.ln_Name);
  93.     if (rg->rg_Gad && (rg->rg_Type == RGT_CYCLE || rg->rg_Type == RGT_SELLIST)) {
  94.     GT_SetGadgetAttrs(rg->rg_Gad, Win, NULL,
  95.         GTLV_Labels, -1,
  96.         TAG_END
  97.     );
  98.     }
  99.     if (rg->rg_DataBase)
  100.     free(rg->rg_DataBase);
  101.     if (rg->rg_ListRef)
  102.     free(rg->rg_ListRef);
  103.     if (rg->rg_CycleAry)
  104.     free(rg->rg_CycleAry);
  105.     {
  106.     MaxNode *mn;
  107.     while (mn = RemHead(&rg->rg_ListSet)) {
  108.         free(mn->ln_Name);
  109.         free(mn);
  110.     }
  111.     }
  112.     if (rg->rg_DefText)
  113.     free(rg->rg_DefText);
  114.     if (rg->rg_LabText)
  115.     free(rg->rg_LabText);
  116.     free(rg);
  117.     SetCurRegion(NULL);
  118. }
  119.  
  120.