home *** CD-ROM | disk | FTP | other *** search
Text File | 1992-08-18 | 2.8 KB | 167 lines | [TEXT/MPS ] |
- // reformat.c
- //
- // formatting functions for CIncludesCode MPW tool
-
- #include <Memory.h>
- #include <OSUtils.h>
- #include <StdIO.h>
- #include <StdLib.h>
- #include <String.h>
- #include <ToolUtils.h>
- #include "CIncludesCode.h"
-
- extern Handle database;
- extern dataHeaderType dataHeader;
-
- Handle textHdl;
- Handle arrayHdl;
- long includeOffset;
-
- short findNameIndex(char *s)
- {
- short i;
- strArray *sp = (strArray*) (*database + dataHeader.nameArrayOffset);
-
- for (i = 0; i < dataHeader.numFiles; ++i)
- {
- if (equalStringsUncased(s,(*sp)[i]))
- {
- return i;
- } // if equalStringsUncased()
- } // for i
- return -1;
- } // findNameIndex()
-
-
- long removeLine(long pos)
- {
- long p;
- char *dp = StripAddress(*textHdl);
-
- while ((pos > 0) && (*(dp + pos - 1) != '\n'))
- {
- --pos;
- } // while pos
-
- p = pos;
- while (*(dp + p) != '\n')
- {
- ++p;
- } // while *dp
-
- return Munger(textHdl,pos,0,(p - pos + 1),dp,0);
- } // removeLine()
-
- void extract(void)
- {
- short fileIndex;
- long pos = 0;
- long limit = GetHandleSize(textHdl);
- char s[256];
-
- includeOffset = -1;
-
- while ((pos = nextInclude(textHdl,pos,limit)) < limit)
- {
- extractFileName(s,*textHdl + pos);
- if ((fileIndex = findNameIndex(s)) != -1)
- {
- *(*arrayHdl + fileIndex) = 1;
- pos = removeLine(pos);
- if (includeOffset == -1)
- {
- includeOffset = pos;
- } // if includeOffset
- limit = GetHandleSize(textHdl);
- } // if fileIndex
- } // while pos
- } // extract()
-
- void prune(void)
- {
- short i,j;
- char *p = StripAddress(*arrayHdl); // dereference
-
- for (i = 0; i < dataHeader.numFiles; ++i)
- {
- if (*(p + i))
- {
- for (j = 0; j < dataHeader.numFiles; ++j)
- {
- if (*(p + j) && (i != j) && isDependent(*database + dataHeader.dependencyArrayOffset,j,i))
- {
- *(p + i) = 0;
- break;
- } // if *p
- } // for j
- } // if *p
- } // for i
- } // prune()
-
- void reinsert(void)
- {
- short i;
- char s[256];
-
- for (i = 0; i < dataHeader.numFiles; ++i)
- {
- if (*(*arrayHdl + i))
- {
- sprintf(s,"#include <%s>\n",getNamePtr(i));
- includeOffset = Munger(textHdl,includeOffset,0,0,s,strlen(s));
- } // if **arrayHdl
- } // for i
- } // reinsert()
-
- int reformat(char *src)
- {
- FILE *f = fopen(src,"r");
- long len;
-
- if (!f)
- {
- errorExit("Could not open selection");
- } // if !f
-
- (void) fseek(f,0,SEEK_END);
- if (!(len = ftell(f)))
- {
- SysBeep(1);
- return 0;
- } // if !len
-
- textHdl = NewHandle(len);
- checkMemory();
- arrayHdl = NewHandleClear(dataHeader.numFiles);
- checkMemory();
-
- (void) fseek(f,0,SEEK_SET);
-
- HLock(textHdl);
- if (fread(*textHdl,1,len,f) != len)
- {
- errorExit("Read selection failed");
- } // if fread()
- HUnlock(textHdl);
-
- if (*(*textHdl + len - 1) != '\n')
- {
- (void) Munger(textHdl,len,0,0,"\n",1);
- checkMemory();
- } // if **textHdl
-
- extract();
- prune();
- reinsert();
-
- f = freopen(src,"w",f);
- HLock(textHdl);
- (void) fwrite(*textHdl,1,GetHandleSize(textHdl),f);
-
- DisposHandle(textHdl);
- DisposHandle(arrayHdl);
-
- return 0;
- } // reinsert()
-
- // end of reformat.c