2 ** Copyright (C) University of Virginia, Massachusetts Institue of Technology 1994-2001.
3 ** See ../LICENSE for license information.
13 /*@constant int FTBASESIZE; @*/
14 # define FTBASESIZE 64
17 ** typedef int fileId;
20 typedef enum { FILE_NORMAL, FILE_LSLTEMP, FILE_NODELETE,
21 FILE_HEADER, FILE_XH, FILE_MACROS, FILE_METASTATE } fileType;
23 /*@private@*/ typedef struct
26 bool fsystem BOOLBITS;
27 bool fspecial BOOLBITS;
34 typedef /*@only@*/ ftentry o_ftentry;
36 typedef /*@only@*/ struct {
37 /*@null@*/ /*@dependent@*/ /*@exposed@*/ FILE *f;
38 /*@only@*/ cstring fname;
41 abst_typedef /*@null@*/ struct
46 /*@reldef@*/ /*@only@*/ o_ftentry *elements;
49 ** Keep track of all the open files, so we can close them on error exits.
54 /*@reldef@*/ /*@only@*/ foentry *openelements;
57 /*@constant null fileTable fileTable_undefined; @*/
58 # define fileTable_undefined ((fileTable) NULL)
60 extern /*@unused@*/ /*@nullwhentrue@*/ bool
61 fileTable_isUndefined (/*@null@*/ fileTable p_f) /*@*/ ;
62 extern /*@unused@*/ /*@falsewhennull@*/ bool
63 fileTable_isDefined (/*@null@*/ fileTable p_f) /*@*/ ;
65 # define fileTable_isUndefined(ft) ((ft) == fileTable_undefined)
66 # define fileTable_isDefined(ft) ((ft) != fileTable_undefined)
67 extern /*@observer@*/ cstring fileTable_getName (fileTable p_ft, fileId p_fid) /*@*/ ;
68 extern /*@observer@*/ cstring fileTable_getNameBase (fileTable p_ft, fileId p_fid) ;
69 extern fileId fileTable_addFile (fileTable p_ft, cstring p_name)
72 extern void fileTable_addStreamFile (fileTable p_ft, /*@dependent@*/ FILE *p_fstream,
76 extern fileId fileTable_addHeaderFile (fileTable p_ft, cstring p_name)
78 extern fileId fileTable_addXHFile (fileTable p_ft, cstring p_name)
80 extern fileId fileTable_addLibraryFile (fileTable p_ft, cstring p_name)
84 extern fileId fileTable_addLCLFile (fileTable p_ft, cstring p_name)
87 extern fileId fileTable_addltemp (fileTable p_ft);
91 extern /*@notnull@*/ /*@only@*/ fileTable fileTable_create (void) /*@*/ ;
92 extern fileId fileTable_lookup (fileTable p_ft, cstring p_s) /*@*/ ;
93 extern fileId fileTable_addCTempFile (fileTable p_ft, fileId p_fid)
95 extern fileId fileTable_addFileOnly (fileTable p_ft, /*@only@*/ cstring p_name)
99 extern fileId fileTable_addImportFile (fileTable p_ft, cstring p_name)
100 /*@modifies p_ft@*/ ;
103 extern fileId fileTable_addMacrosFile (fileTable p_ft)
104 /*@modifies p_ft@*/ ;
106 extern fileId fileTable_addMetastateFile (fileTable p_ft, cstring p_name)
107 /*@modifies p_ft@*/ ;
109 extern void fileTable_setFilePath (fileTable p_ft, fileId p_fid, cstring p_path)
110 /*@modifies p_ft@*/ ;
112 extern /*@observer@*/ cstring fileTable_getRootName (fileTable p_ft, fileId p_fid) /*@*/ ;
113 extern bool fileTable_isHeader (fileTable p_ft, fileId p_fid) /*@*/ ;
114 extern bool fileId_isHeader (fileId p_f) /*@*/ ;
115 # define fileId_isHeader(f) (fileTable_isHeader (context_fileTable(), f))
117 extern bool fileTable_sameBase (fileTable p_ft, fileId p_f1, fileId p_f2);
118 extern void fileTable_cleanup (fileTable p_ft) /*@modifies fileSystem@*/;
119 extern fileId fileTable_lookupBase (fileTable p_ft, cstring p_base) /*@modifies p_ft@*/ ;
120 extern void fileTable_printTemps (fileTable p_ft) /*@modifies g_warningstream@*/ ;
121 extern /*@unused@*/ /*@only@*/ cstring fileTable_unparse (fileTable p_ft) /*@*/ ;
122 extern bool fileTable_exists (fileTable p_ft, cstring p_s) /*@*/ ;
123 extern void fileTable_free (/*@only@*/ fileTable p_f);
124 extern bool fileTable_isSpecialFile (fileTable p_ft, fileId p_fid) /*@*/ ;
125 extern bool fileTable_isSystemFile (fileTable p_ft, fileId p_fid) /*@*/ ;
126 extern bool fileTable_isXHFile (fileTable p_ft, fileId p_fid) /*@*/ ;
128 extern /*@observer@*/ cstring fileTable_fileName (fileId p_fid) /*@*/ ;
129 extern /*@observer@*/ cstring fileTable_fileNameBase (fileId p_fid) /*@*/ ;
130 extern /*@observer@*/ cstring fileTable_rootFileName (fileId p_fid) /*@*/ ;
132 # define fileTable_fileName(fid) (fileTable_getName(context_fileTable(), fid))
133 # define fileTable_fileNameBase(fid) (fileTable_getNameBase(context_fileTable(), fid))
134 # define fileTable_rootFileName(fid) (fileTable_getRootName(context_fileTable(), fid))
136 extern void fileTable_noDelete (fileTable, cstring);
137 extern bool fileId_baseEqual (/*@sef@*/ fileId p_t1, /*@sef@*/ fileId p_t2) /*@*/ ;
138 # define fileId_baseEqual(t1,t2) \
139 (fileId_equal (t1, t2) || fileTable_sameBase (context_fileTable (), t1, t2))
142 extern /*@null@*/ /*@open@*/ /*@dependent@*/ FILE *
143 fileTable_openFile (fileTable p_ft, cstring p_fname, /*@observer@*/ char *p_mode)
144 /*@modifies p_ft@*/ ;
146 extern bool fileTable_closeFile (fileTable p_ft, FILE *p_f)
147 /*@ensures closed p_f@*/
148 /*@modifies p_ft, p_f@*/ ;
150 extern void fileTable_closeAll (fileTable p_ft)
151 /*@modifies p_ft@*/ ;
154 # error "Multiple include"