home *** CD-ROM | disk | FTP | other *** search
/ Mac Mania 2 / MacMania 2.toast / Demo's / Tools&Utilities / Programming / CIncludesTool / modified version / source files / reformat.c < prev    next >
Encoding:
Text File  |  1992-08-18  |  2.8 KB  |  167 lines  |  [TEXT/MPS ]

  1. // reformat.c
  2. //
  3. // formatting functions for CIncludesCode MPW tool
  4.  
  5. #include <Memory.h>
  6. #include <OSUtils.h>
  7. #include <StdIO.h>
  8. #include <StdLib.h>
  9. #include <String.h>
  10. #include <ToolUtils.h>
  11. #include "CIncludesCode.h"
  12.  
  13. extern Handle database;
  14. extern dataHeaderType dataHeader;
  15.  
  16. Handle textHdl;
  17. Handle arrayHdl;
  18. long includeOffset;
  19.  
  20. short findNameIndex(char *s)
  21. {
  22. short i;
  23. strArray *sp = (strArray*) (*database + dataHeader.nameArrayOffset);
  24.     
  25. for (i = 0; i < dataHeader.numFiles; ++i)
  26.     {
  27.     if (equalStringsUncased(s,(*sp)[i]))
  28.         {
  29.         return i;
  30.         }  // if equalStringsUncased()
  31.     }  // for i
  32. return -1;
  33. }  // findNameIndex()
  34.  
  35.  
  36. long removeLine(long pos)
  37. {
  38. long p;
  39. char *dp = StripAddress(*textHdl);
  40.     
  41. while ((pos > 0) && (*(dp + pos - 1) != '\n'))
  42.     {
  43.     --pos;
  44.     }  // while pos
  45.     
  46. p = pos;
  47. while (*(dp + p) != '\n')
  48.     {
  49.     ++p;
  50.     }  // while *dp
  51.     
  52. return Munger(textHdl,pos,0,(p - pos + 1),dp,0);
  53. }  // removeLine()
  54.  
  55. void extract(void)
  56. {
  57. short fileIndex;
  58. long pos = 0;
  59. long limit = GetHandleSize(textHdl);
  60. char s[256];
  61.     
  62. includeOffset = -1;
  63.     
  64. while ((pos = nextInclude(textHdl,pos,limit)) < limit)
  65.     {
  66.     extractFileName(s,*textHdl + pos);
  67.     if ((fileIndex = findNameIndex(s)) != -1)
  68.         {
  69.         *(*arrayHdl + fileIndex) = 1;
  70.         pos = removeLine(pos);
  71.         if (includeOffset == -1)
  72.             {
  73.             includeOffset = pos;
  74.             }  // if includeOffset
  75.         limit = GetHandleSize(textHdl);
  76.         }  // if fileIndex
  77.     }  // while pos
  78. }  // extract()
  79.  
  80. void prune(void)
  81. {
  82. short i,j;
  83. char *p = StripAddress(*arrayHdl);        // dereference
  84.     
  85. for (i = 0; i < dataHeader.numFiles; ++i)
  86.     {
  87.     if (*(p + i))
  88.         {
  89.         for (j = 0; j < dataHeader.numFiles; ++j)
  90.             {
  91.             if (*(p + j) && (i != j) && isDependent(*database + dataHeader.dependencyArrayOffset,j,i))
  92.                 {
  93.                 *(p + i) = 0;
  94.                 break;
  95.                 }  // if *p
  96.             }  // for j
  97.         }  // if *p
  98.     }  // for i
  99. }  // prune()
  100.  
  101. void reinsert(void)
  102. {
  103. short i;
  104. char s[256];
  105.     
  106. for (i = 0; i < dataHeader.numFiles; ++i)
  107.     {
  108.     if (*(*arrayHdl + i))
  109.         {
  110.         sprintf(s,"#include <%s>\n",getNamePtr(i));
  111.         includeOffset = Munger(textHdl,includeOffset,0,0,s,strlen(s));
  112.         }  // if **arrayHdl
  113.     }  // for i
  114. }  // reinsert()
  115.  
  116. int    reformat(char *src)
  117. {        
  118. FILE *f = fopen(src,"r");
  119. long len;
  120.  
  121. if (!f)
  122.     {
  123.     errorExit("Could not open selection");
  124.     }  // if !f
  125.  
  126. (void) fseek(f,0,SEEK_END);
  127. if (!(len = ftell(f)))
  128.     {
  129.     SysBeep(1);
  130.     return 0;
  131.     }  // if !len
  132.  
  133. textHdl    = NewHandle(len);
  134. checkMemory();
  135. arrayHdl = NewHandleClear(dataHeader.numFiles);
  136. checkMemory();
  137.     
  138. (void) fseek(f,0,SEEK_SET);
  139.     
  140. HLock(textHdl);
  141. if (fread(*textHdl,1,len,f) != len)
  142.     {
  143.     errorExit("Read selection failed");
  144.     }  // if fread()
  145. HUnlock(textHdl);
  146.     
  147. if (*(*textHdl + len - 1) != '\n')
  148.     {
  149.     (void) Munger(textHdl,len,0,0,"\n",1);
  150.     checkMemory();
  151.     }  // if **textHdl
  152.  
  153. extract();
  154. prune();
  155. reinsert();
  156.     
  157. f = freopen(src,"w",f);
  158. HLock(textHdl);
  159. (void) fwrite(*textHdl,1,GetHandleSize(textHdl),f);
  160.  
  161. DisposHandle(textHdl);
  162. DisposHandle(arrayHdl);
  163.     
  164. return 0;
  165. }  // reinsert()
  166.  
  167. // end of reformat.c