Merge pull request #11 from esorton/bugfix/add-constexpr-keyword-to-arduino-ctags
[arduino-ctags.git] / read.h
blobad49a828f2795c60d68ee2a54aa57b24a1b644cc
1 /*
2 * $Id: read.h 659 2008-04-20 23:27:48Z elliotth $
4 * Copyright (c) 1998-2002, Darren Hiebert
6 * This source code is released for free distribution under the terms of the
7 * GNU General Public License.
9 * External interface to read.c
11 #ifndef _READ_H
12 #define _READ_H
14 #if defined(FILE_WRITE) || defined(VAXC)
15 # define CONST_FILE
16 #else
17 # define CONST_FILE const
18 #endif
21 * INCLUDE FILES
23 #include "general.h" /* must always come first */
25 #include <stdio.h>
26 #include <ctype.h>
28 #include "parse.h"
29 #include "vstring.h"
32 * MACROS
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
46 * DATA DECLARATIONS
49 enum eCharacters {
50 /* white space characters */
51 SPACE = ' ',
52 NEWLINE = '\n',
53 CRETURN = '\r',
54 FORMFEED = '\f',
55 TAB = '\t',
56 VTAB = '\v',
58 /* some hard to read characters */
59 DOUBLE_QUOTE = '"',
60 SINGLE_QUOTE = '\'',
61 BACKSLASH = '\\',
63 STRING_SYMBOL = ('S' + 0x80),
64 CHAR_SYMBOL = ('C' + 0x80)
67 /* Maintains the state of the current source file.
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 */
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).
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;
96 * GLOBAL VARIABLES
98 extern CONST_FILE inputFile File;
101 * FUNCTION PROTOTYPES
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);
114 #endif /* _READ_H */
116 /* vi:set tabstop=4 shiftwidth=4: */