1 /* 2 * $Id: read.h 659 2008-04-20 23:27:48Z elliotth $ 3 * 4 * Copyright (c) 1998-2002, Darren Hiebert 5 * 6 * This source code is released for free distribution under the terms of the 7 * GNU General Public License. 8 * 9 * External interface to read.c 10 */ 11 #ifndef _READ_H 12 #define _READ_H 13 14 #if defined(FILE_WRITE) || defined(VAXC) 15 # define CONST_FILE 16 #else 17 # define CONST_FILE const 18 #endif 19 20 /* 21 * INCLUDE FILES 22 */ 23 #include "general.h" /* must always come first */ 24 25 #include <stdio.h> 26 #include <ctype.h> 27 28 #include "parse.h" 29 #include "vstring.h" 30 31 /* 32 * MACROS 33 */ 34 #define getInputLineNumber() File.lineNumber 35 #define getInputFileName() vStringValue (File.source.name) 36 #define getInputFilePosition() File.filePosition 37 #define getSourceFileName() vStringValue (File.source.name) 38 #define getSourceFileTagPath() File.source.tagPath 39 #define getSourceLanguage() File.source.language 40 #define getSourceLanguageName() getLanguageName (File.source.language) 41 #define getSourceLineNumber() File.source.lineNumber 42 #define isLanguage(lang) (boolean)((lang) == File.source.language) 43 #define isHeaderFile() File.source.isHeader 44 45 /* 46 * DATA DECLARATIONS 47 */ 48 49 enum eCharacters { 50 /* white space characters */ 51 SPACE = ' ', 52 NEWLINE = '\n', 53 CRETURN = '\r', 54 FORMFEED = '\f', 55 TAB = '\t', 56 VTAB = '\v', 57 58 /* some hard to read characters */ 59 DOUBLE_QUOTE = '"', 60 SINGLE_QUOTE = '\'', 61 BACKSLASH = '\\', 62 63 STRING_SYMBOL = ('S' + 0x80), 64 CHAR_SYMBOL = ('C' + 0x80) 65 }; 66 67 /* Maintains the state of the current source file. 68 */ 69 typedef struct sInputFile { 70 vString *name; /* name of input file */ 71 vString *path; /* path of input file (if any) */ 72 vString *line; /* last line read from file */ 73 const unsigned char* currentLine; /* current line being worked on */ 74 FILE *fp; /* stream used for reading the file */ 75 unsigned long lineNumber; /* line number in the input file */ 76 fpos_t filePosition; /* file position of current line */ 77 int ungetch; /* a single character that was ungotten */ 78 boolean eof; /* have we reached the end of file? */ 79 boolean newLine; /* will the next character begin a new line? */ 80 langType language; /* language of input file */ 81 82 /* Contains data pertaining to the original source file in which the tag 83 * was defined. This may be different from the input file when #line 84 * directives are processed (i.e. the input file is preprocessor output). 85 */ 86 struct sSource { 87 vString *name; /* name to report for source file */ 88 char *tagPath; /* path of source file relative to tag file */ 89 unsigned long lineNumber;/* line number in the source file */ 90 boolean isHeader; /* is source file a header file? */ 91 langType language; /* language of source file */ 92 } source; 93 } inputFile; 94 95 /* 96 * GLOBAL VARIABLES 97 */ 98 extern CONST_FILE inputFile File; 99 100 /* 101 * FUNCTION PROTOTYPES 102 */ 103 extern void freeSourceFileResources (void); 104 extern boolean fileOpen (const char *const fileName, const langType language); 105 extern boolean fileEOF (void); 106 extern void fileClose (void); 107 extern int fileGetc (void); 108 extern int fileSkipToCharacter (int c); 109 extern void fileUngetc (int c); 110 extern const unsigned char *fileReadLine (void); 111 extern char *readLine (vString *const vLine, FILE *const fp); 112 extern char *readSourceLine (vString *const vLine, fpos_t location, long *const pSeekValue); 113 114 #endif /* _READ_H */ 115 116 /* vi:set tabstop=4 shiftwidth=4: */ 117