177 lines
4.8 KiB
C
177 lines
4.8 KiB
C
|
/*
|
||
|
* EXTRACT.H
|
||
|
*
|
||
|
* Common definitions for the EXTRACT program to process source code
|
||
|
* comment blocks and remove tagged documentation.
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* General type definitions, since I've been programming windows
|
||
|
* too long.
|
||
|
*/
|
||
|
#define NEAR near
|
||
|
#define FAR far
|
||
|
//#define NULL 0
|
||
|
#define True 1
|
||
|
#define TRUE 1
|
||
|
#define False 0
|
||
|
#define FALSE 0
|
||
|
|
||
|
typedef char NEAR *PSTR;
|
||
|
typedef char FAR *LPSTR;
|
||
|
typedef unsigned long DWORD;
|
||
|
typedef long LONG;
|
||
|
typedef unsigned short WORD;
|
||
|
typedef int BOOL;
|
||
|
|
||
|
|
||
|
/*
|
||
|
* Set version of stuff here
|
||
|
*/
|
||
|
#define VERSIONNAME "Source Code Documentation Extraction Tool"
|
||
|
|
||
|
/*
|
||
|
* GENERAL GLOBAL STATUS VARIABLES
|
||
|
*/
|
||
|
extern BOOL fNoOutput;
|
||
|
extern PSTR szOutputFile;
|
||
|
extern FILE *fpOutput;
|
||
|
|
||
|
/*
|
||
|
* Source code type definitions - used by input parser in FileEntry struct.
|
||
|
*/
|
||
|
#define SRC_UNKNOWN 0
|
||
|
#define SRC_C 1
|
||
|
#define SRC_MASM 2
|
||
|
|
||
|
/*
|
||
|
* File name parser stuff
|
||
|
*/
|
||
|
typedef struct _FileEntry {
|
||
|
struct _FileEntry *next;
|
||
|
int type;
|
||
|
char *filename;
|
||
|
} FileEntry;
|
||
|
/* list of files to process, built by parser */
|
||
|
extern FileEntry *FilesToProcess;
|
||
|
/* Command line argument processor */
|
||
|
void ParseArgs(int argc, char **argv);
|
||
|
void Usage(PSTR progName);
|
||
|
|
||
|
|
||
|
/*
|
||
|
* SOURCE FILE STRUCTURE - struct used during parsing of source file
|
||
|
*/
|
||
|
typedef struct _SourceFile {
|
||
|
/* Direct file stuff */
|
||
|
FileEntry *fileEntry; // fileentry struct pointer
|
||
|
FILE *fp; // file pointer
|
||
|
BOOL fExitAfter; // exit after processing file
|
||
|
int wLineNo; // file line number currently at
|
||
|
/* Buffer holders */
|
||
|
PSTR lpbuf; // global copy buffer
|
||
|
PSTR pt; // buffer `point'
|
||
|
PSTR mark; // buffer `mark'
|
||
|
int wLineBuf; // line number start of buffer is
|
||
|
/* Stuff for reading in comment block */
|
||
|
BOOL fTag; // tag on this line, and status
|
||
|
BOOL fHasTags; // tags appear in this buffer.
|
||
|
/* Stuff used while processing block tags */
|
||
|
PSTR pDocLevel; // @doc output for this block
|
||
|
PSTR pXref; // @xref line for this block
|
||
|
WORD wFlags; // flags indicating state?
|
||
|
} SourceFile;
|
||
|
typedef SourceFile NEAR *NPSourceFile;
|
||
|
|
||
|
/* Proc to process a filled buffer to the output file */
|
||
|
void TagProcessBuffer(NPSourceFile sf);
|
||
|
|
||
|
|
||
|
/*
|
||
|
* General Comment buffer parsing routines - bfuncs.c
|
||
|
*/
|
||
|
void OutputTag(NPSourceFile sf, WORD wBlock, WORD wTag);
|
||
|
void OutputTagText(NPSourceFile sf, PSTR szTag);
|
||
|
void OutputRegion(NPSourceFile sf, char chPost);
|
||
|
void OutputText(NPSourceFile sf, PSTR szText);
|
||
|
void OutputFileHeader(FILE *fpOut);
|
||
|
void CopyRegion(NPSourceFile sf, PSTR buf, WORD wLen);
|
||
|
BOOL FindNextTag(NPSourceFile sf);
|
||
|
WORD GetFirstBlock(NPSourceFile sf);
|
||
|
WORD GetNextBlock(NPSourceFile sf);
|
||
|
WORD FixLineCounts(NPSourceFile sf, PSTR pt);
|
||
|
void PrintError(NPSourceFile sf, PSTR szMessage, BOOL fExit);
|
||
|
WORD ProcessWordList(NPSourceFile sf, PSTR *bufPt, BOOL fCap);
|
||
|
|
||
|
/* Flags for return from GetFirstBlock && GetNextBlock */
|
||
|
#define RET_EMPTYBLOCK 1
|
||
|
#define RET_ENDCOMMENT 2
|
||
|
#define RET_ENDBLOCK 3
|
||
|
#define RET_ENDTAG 4
|
||
|
|
||
|
|
||
|
/*
|
||
|
* INNERLEVEL TAG PROCESSING ROUTINES - innertag.c
|
||
|
*/
|
||
|
BOOL DoDocTag(NPSourceFile sf);
|
||
|
BOOL DoFlagTag(NPSourceFile sf, WORD wBlock, WORD wNameFlag, WORD wDescFlag);
|
||
|
BOOL ProcessFlagList(NPSourceFile sf, WORD wBlock,
|
||
|
WORD wNameFlag, WORD wDescFlag);
|
||
|
BOOL DoParameterTag(NPSourceFile sf, WORD wBlock);
|
||
|
BOOL DoParameterizedReturnTag(NPSourceFile sf, WORD wBlock);
|
||
|
BOOL DoRegisterizedReturnTag(NPSourceFile sf, WORD wBlock);
|
||
|
BOOL DoCommentTag(NPSourceFile sf, WORD wBlock);
|
||
|
BOOL DoUsesTag(NPSourceFile sf, WORD wBlock);
|
||
|
BOOL DoPrintedCommentTag(NPSourceFile sf);
|
||
|
void ProcessXrefTag(NPSourceFile sf);
|
||
|
BOOL DoRegisterTag(NPSourceFile sf, WORD wBlock, BOOL fReturn);
|
||
|
BOOL DoRegisterDeclaration(NPSourceFile sf, WORD wBlock);
|
||
|
void DoBlockBegin(NPSourceFile sf);
|
||
|
void DoBlockEnd(NPSourceFile sf, WORD wBlock, BOOL fFlushXref);
|
||
|
BOOL DoFieldTag(NPSourceFile sf, WORD wBlock);
|
||
|
BOOL DoOthertypeTag(NPSourceFile sf, WORD wBlock);
|
||
|
BOOL DoStructTag(NPSourceFile sf, WORD wBlock, BOOL fStructure);
|
||
|
BOOL DoTagnameTag(NPSourceFile sf, WORD wBlock);
|
||
|
|
||
|
|
||
|
/* Flags indicating status of comment block tag parsing */
|
||
|
#define SFLAG_SMASK 0xF800
|
||
|
#define SFLAG_RDESC 0x8000
|
||
|
#define SFLAG_COMM 0x4000
|
||
|
#define SFLAG_PARMS 0x2000
|
||
|
#define SFLAG_REGS 0x1000
|
||
|
#define SFLAG_USES 0x0800
|
||
|
|
||
|
|
||
|
/*
|
||
|
* Memory manager stuff - misc.c
|
||
|
*/
|
||
|
extern WORD wNearMemoryUsed; /* counts of how much memory used */
|
||
|
extern DWORD dwFarMemoryUsed;
|
||
|
|
||
|
PSTR NearMalloc(WORD size, BOOL fZero);
|
||
|
PSTR NearRealloc(PSTR pblock, WORD newsize);
|
||
|
void NearFree(PSTR pblock);
|
||
|
WORD NearSize(PSTR pblock);
|
||
|
PSTR StringAlloc(PSTR string);
|
||
|
void NearHeapCheck();
|
||
|
|
||
|
#if 0
|
||
|
LPSTR FarMalloc(int size, BOOL fZero);
|
||
|
void FarFree(LPSTR lpblock);
|
||
|
extern int far lmemzero(LPSTR lpBase, WORD wLength);
|
||
|
#endif
|
||
|
|
||
|
|
||
|
/*
|
||
|
* Debugging support
|
||
|
*/
|
||
|
#ifdef DEBUG
|
||
|
BOOL fDebug;
|
||
|
void cdecl COMprintf(PSTR format, ...);
|
||
|
#define dprintf if (fDebug) COMprintf
|
||
|
#else
|
||
|
#define dprintf if (0) ((int (*)(char *, ...)) 0)
|
||
|
#endif
|