home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Club Amiga de Montreal - CAM
/
CAM_CD_1.iso
/
files
/
310.lha
/
DevKit_v1.2
/
Sources
/
MakeHeaderIndex.c
< prev
next >
Wrap
C/C++ Source or Header
|
1980-12-03
|
6KB
|
177 lines
/**************************************************************
*
* MakeHeaderIndex.c - Makes an index from header (.h) files.
*
* Copyright (c) 1989, Peter Cherna
*
* Created: March 21, 1989
* Modified: August 28, 1989 Release 1.2: August 29, 1989
*
* Auto: cc -q -o RAM:<file>.o <path><file>
* Auto: ln RAM:<file>.o -lc -o <path><file>
*
**************************************************************/
#include <functions.h>
#include <stdio.h>
#include <ctype.h>
#ifndef EXEC_MEMORY_H
#include <exec/memory.h>
#endif
extern char *scdir();
#define DIRCOUNT 8 /* Number of directories that have include files */
char *includedir[] =
{
"ch:devices/*",
"ch:exec/*",
"ch:graphics/*",
"ch:hardware/*",
"ch:intuition/*",
"ch:libraries/*",
"ch:resources/*",
"ch:workbench/*",
};
#define BUFFERSIZE 200
#define FORMFEED 12
struct Library *DosBase;
main(argc,argv)
int argc;
char *argv[];
{
FILE *source, *dest;
char *buffer, *start, *end, *pat, *docfile, *destname;
char subindex, ch;
LONG offset;
int p;
DosBase = OpenLibrary("dos.library",0L);
dest = fopen("ch:TempIndex","w");
buffer = AllocMem((LONG) BUFFERSIZE,MEMF_CLEAR);
destname = AllocMem((LONG) BUFFERSIZE,MEMF_CLEAR);
if (!dest)
{
printf("Could not open ch:TempIndex for writing.\n");
}
else if (!buffer || !destname)
{
printf("Could not allocate buffer.\n");
}
else
{
for (p = 0; p < DIRCOUNT; p++)
{
pat = includedir[p];
while (docfile = scdir(pat))
{
printf("Scanning file %s ...\n",docfile);
source = fopen(docfile,"r");
offset = 0;
while (!feof(source))
{
offset++;
if (!fgets(buffer,BUFFERSIZE,source))
{
if (ferror(source))
printf("Error %d\n",ferror(source));
}
else if (!strncmp(buffer,"#define",7))
{
start = buffer+7;
/* skip any blanks after the '#define': */
while ((*start == ' ') || (*start == '\t'))
start++;
end = start;
/* skip until the first blank after the label: */
while ((*end != ' ') && (*end != '\n') && (*end != '\t'))
end++;
*end = '\0';
fprintf(dest,"%s; %s; %ld\n",start,docfile,offset);
}
else if (!strncmp(buffer,"struct",6))
{
start = buffer+7;
/* skip any blanks after the 'struct ': */
while ((*start == ' ') || (*start == '\t'))
start++;
end = start;
while ((*end != ' ') && (*end != '\n') && (*end != '\t'))
end++;
*end = '\0';
fprintf(dest,"%s; %s; %ld\n",start,docfile,offset);
}
}
if (source)
fclose(source);
}
}
fclose(dest);
subindex = ' ';
dest = NULL;
printf("Sorting index...\n");
if (!Execute("sort >nil: from ch:TempIndex to ch:SortedIndex",
NULL,NULL))
printf("Sort failed. Make sure the 'sort' command is available.\n");
else
{
source = fopen("ch:SortedIndex","r");
if (!source)
printf("Sort failed - could not find resulting file.\n");
else
{
printf("Sorted.\n");
DeleteFile("ch:TempIndex");
/* Make an Index directory. Ignore return code (probably
directory already exists) Error will be caught when
we try to write the first index file. */
Execute("makedir ch:Index", NULL, NULL);
while (!feof(source))
{
if (!fgets(buffer,BUFFERSIZE,source))
{
if (ferror(source))
printf("Error %d\n",ferror(source));
else if (!feof(source))
printf("Unknown problem.\n");
}
else
{
ch = toupper(*buffer);
if (ch != subindex)
{
if (dest)
fclose(dest);
sprintf(destname,"ch:Index/Index%c",ch);
dest = fopen(destname,"w");
subindex = ch;
printf("Building subindex %c ...\n",ch);
}
fprintf(dest,"%s",buffer);
}
}
fclose(dest);
fclose(source);
DeleteFile("ch:SortedIndex");
}
}
}
if (destname)
FreeMem(destname,(LONG) BUFFERSIZE);
if (buffer)
FreeMem(buffer,(LONG) BUFFERSIZE);
printf("Done.\n");
if (DosBase)
CloseLibrary(DosBase);
}