58 {
59 int extension_flag;
61 (void) fprintf(
STDOUT,
"\n\n");
62#if (IS_WIN64 == PLATFORM)
63 if (extension_flag) {
64 (void) fprintf(
STDOUT,
"/* *** EXTENDED I/O RESOURCES MANAGER *** [Case Insensitive OS] %s */\n",
multiple(
'*', 63L));
65 } else {
66 (void) fprintf(
STDOUT,
"/* *** STREAMLINED I/O RESOURCES MANAGER *** [Case Insensitive OS] %s */\n",
multiple(
'*', 60L));
67 }
68#else
69 if (extension_flag) {
70 (void) fprintf(
STDOUT,
"/* *** EXTENDED I/O RESOURCES MANAGER *** [Case Sensitive OS] %s */\n",
multiple(
'*', 65L));
71 } else {
72 (void) fprintf(
STDOUT,
"/* *** STREAMLINED I/O RESOURCES MANAGER *** [Case Sensitive OS] %s */\n",
multiple(
'*', 62L));
73 }
74#endif
75 (void) fprintf(
STDOUT,
"/* *** OPERATIONS: ");
76 if (extension_flag) {
77 (void) fprintf(
STDOUT,
" OPENREAD, REWIND, OPENWRITE, OPENAPPEND, REWRITE,");
78 (void) fprintf(
STDOUT,
" CLOSE, DELETE, QUERY, DEBUG, FREE %*s */\n\n", 20,
" ");
79 } else {
80 (void) fprintf(
STDOUT,
" OPENREAD, OPENWRITE, CLOSE, FREE %*s */\n\n", 71,
" ");
81 }
82 (void) fprintf(
STDOUT,
"IO_COMMAND napa_IO_manager(IO_COMMAND command, FILE **fp, const char *filename, const char *suffix, const char *tag) {\n");
83 (void) fprintf(
STDOUT,
" static long id = 0L;\n" );
84 (void) fprintf(
STDOUT,
" const size_t sz = 255;\n" );
85 (void) fprintf(
STDOUT,
" char user[256] = {'\\0'};\n");
86#if (IS_WIN64 == PLATFORM)
87 (void) fprintf(
STDOUT,
" char nam1[256] = {'\\0'};\n");
88 (void) fprintf(
STDOUT,
" char nam2[256] = {'\\0'};\n");
89 (void) fprintf(
STDOUT,
" char nam3[256] = {'\\0'};\n");
91 (void) fprintf(
STDOUT,
" char str[3] = \" \";\n" );
92 } else {
93 (void) fprintf(
STDOUT,
" char str[2] = \" \";\n" );
94 }
95#else
96 (void) fprintf(
STDOUT,
" char str[2] = \" \";\n" );
97#endif
98 (void) fprintf(
STDOUT,
" int iflag = false;\n" );
99 (void) fprintf(
STDOUT,
" int oflag = false;\n" );
100 (void) fprintf(
STDOUT,
" long index = 0L;\n" );
101 (void) fprintf(
STDOUT,
" long length = 0L;\n" );
102 (void) fprintf(
STDOUT,
" long i, j;\n" );
103 (void) fprintf(
STDOUT,
" if ( EOF == fflush((FILE*) NULL) ) {\n");
104 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Run Time Error: (I/O manager for %%s)\\n\", tag);\n");
105 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" Flushing data from buffers I/O was not successful\\n\" );\n" );
106 (void) fprintf(
STDOUT,
" napa_exit(EXIT_FAILURE);\n");
107 (void) fprintf(
STDOUT,
" }\n");
108
109 (void) fprintf(
STDOUT,
" if ( FREE != command ) {\n");
110 (void) fprintf(
STDOUT,
" length = (long) strlen(filename);\n");
111 (void) fprintf(
STDOUT,
" if ( 0L == length ) {\n");
112 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Run Time Error: (I/O manager for %%s)\\n\", tag);\n");
113 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" The I/O stream name is missing\\n\");\n");
114 (void) fprintf(
STDOUT,
" napa_exit(EXIT_FAILURE);\n");
115 (void) fprintf(
STDOUT,
" }\n");
116 (void) fprintf(
STDOUT,
" length = MIN(1L + length + ((long) strlen(suffix)), (long) sz);\n");
117 (void) fprintf(
STDOUT,
" (void) snprintf(user, (size_t) length, \"%%s\", filename);\n");
118 (void) fprintf(
STDOUT,
" if ( (char*) NULL == strstr(user, \".\") ) {\n");
119 (void) fprintf(
STDOUT,
" if ( (0 != strncmp(\"stdin\", user, sz))");
120 (void) fprintf(
STDOUT,
" && (0 != strncmp(\"stdout\", user, sz))");
121 (void) fprintf(
STDOUT,
" && (0 != strncmp(\"stderr\", user, sz)) ) {\n");
122 (void) fprintf(
STDOUT,
" (void) strcat(user, suffix);\n");
123 (void) fprintf(
STDOUT,
" }\n");
124 (void) fprintf(
STDOUT,
" }\n");
125#if (IS_WIN64 == PLATFORM)
126 (void) fprintf(
STDOUT,
" for (i = 0L; i < ((long) strlen(user)); i++) {\n");
127 (void) fprintf(
STDOUT,
" nam1[i] = (char) tolower((int) user[i]);\n");
128 (void) fprintf(
STDOUT,
" }\n");
129#endif
130 (void) fprintf(
STDOUT,
" index = -1L;\n");
131 (void) fprintf(
STDOUT,
" for (i = 0L; i < napa_IO_count; i++) {\n");
132#if (IS_WIN64 == PLATFORM)
133 (void) fprintf(
STDOUT,
" for (j = 0L; j <= ((long) strlen(napa_IO_record[i].user)); j++) {\n");
134 (void) fprintf(
STDOUT,
" nam2[j] = (char) tolower((int) ((napa_IO_record[i].user)[j]));\n");
135 (void) fprintf(
STDOUT,
" }\n");
136 (void) fprintf(
STDOUT,
" if ( 0 == strncmp(nam1, nam2, sz) ) {\n");
137 (void) fprintf(
STDOUT,
" index = i;\n");
138 (void) fprintf(
STDOUT,
" if ( 0 != strncmp(napa_IO_record[index].user, user, sz) ) {\n");
139 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Run Time Error: (I/O manager for %%s)\\n\\n\", tag);\n");
140 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" Collision between I/O streams in a case-insensitive context:\");\n");
141 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" <%%s> and <%%s>\\n\\n\", user, napa_IO_record[index].user);\n" );
142 (void) fprintf(
STDOUT,
" napa_exit(EXIT_FAILURE);\n");
143 (void) fprintf(
STDOUT,
" }\n");
144 (void) fprintf(
STDOUT,
" break;\n");
145 (void) fprintf(
STDOUT,
" }\n");
146#else
147 (void) fprintf(
STDOUT,
" if ( 0 == strncmp(napa_IO_record[i].user, user, sz) ) {\n");
148 (void) fprintf(
STDOUT,
" index = i;\n");
149 (void) fprintf(
STDOUT,
" break;\n");
150 (void) fprintf(
STDOUT,
" }\n");
151#endif
152 (void) fprintf(
STDOUT,
" }\n");
153 (void) fprintf(
STDOUT,
" }\n");
154 (void) fprintf(
STDOUT,
" (void) snprintf(nam3, sz, \"%%s.out\", ORIGIN);\n");
155#if (IS_WIN64 == PLATFORM)
156 (void) fprintf(
STDOUT,
" for (i = 0L; i < ((long) strlen(nam3)); i++) {\n");
157 (void) fprintf(
STDOUT,
" nam3[i] = (char) tolower((int) nam3[i]);\n");
158 (void) fprintf(
STDOUT,
" }\n");
159#endif
160 (void) fprintf(
STDOUT,
" if ( 0 == strncmp(nam1, nam3, sz) ) {\n");
161 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Run Time Error: (I/O manager for %%s)\\n\", tag);\n");
162 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" <%%s>, the name of an I/O cannot be identical to a name possibly used as 'stdout'\\n\", user);\n");
163 (void) fprintf(
STDOUT,
" napa_exit(EXIT_FAILURE);\n");
164 (void) fprintf(
STDOUT,
" }\n");
165 (void) fprintf(
STDOUT,
" switch (command) {\n");
166
167
168 if (extension_flag) {
169 (void) fprintf(
STDOUT,
" case OPENWRITE_BINARY:\n");
170 (void) fprintf(
STDOUT,
" case OPENAPPEND_BINARY:\n");
171#if (IS_WIN64 == PLATFORM)
172 (void) fprintf(
STDOUT,
" str[1] = 'b';\n");
173#endif
174 }
175 (void) fprintf(
STDOUT,
" case OPENWRITE:\n");
176 if (extension_flag) {
177 (void) fprintf(
STDOUT,
" case OPENAPPEND:\n");
178 (void) fprintf(
STDOUT,
" case REWRITE:\n");
179 }
180 (void) fprintf(
STDOUT,
" if ( 0 == strncmp(\"stdin\", user, sz) ) {\n");
181 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Run Time Error: (I/O manager for %%s)\\n\", tag);\n");
182 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" The standard input stream <%%s> cannot be opened for write\\n\", user);\n" );
183 (void) fprintf(
STDOUT,
" napa_exit(EXIT_FAILURE);\n");
184 (void) fprintf(
STDOUT,
" }\n");
185 if (extension_flag) {
186 (void) fprintf(
STDOUT,
" str[0] = ( (OPENAPPEND == command) || (OPENAPPEND_BINARY == command) ) ? 'a' : 'w';\n");
187 } else {
188 (void) fprintf(
STDOUT,
" str[0] = 'w';\n");
189 }
191 (void) fprintf(
STDOUT,
" napa_output_flag = true;\n");
192 }
193 (void) fprintf(
STDOUT,
" oflag = true;\n");
194 (void) fprintf(
STDOUT,
" break;\n");
195 if (extension_flag) {
196 (void) fprintf(
STDOUT,
" case OPENREAD_BINARY:\n");
197#if (IS_WIN64 == PLATFORM)
198 (void) fprintf(
STDOUT,
" str[1] = 'b';\n");
199#endif
200 }
201 (void) fprintf(
STDOUT,
" case OPENREAD:\n");
202 (void) fprintf(
STDOUT,
" if ( (0 == strncmp(\"stdout\", user, sz)) || (0 == strncmp(\"stderr\", user, sz)) ) {\n");
203 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Run Time Error: (I/O manager for %%s)\\n\", tag);\n" );
204 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" The standard I/O stream <%%s> cannot be opened for read\\n\", user);\n");
205 (void) fprintf(
STDOUT,
" napa_exit(EXIT_FAILURE);\n");
206 (void) fprintf(
STDOUT,
" }\n");
207 (void) fprintf(
STDOUT,
" str[0] = 'r';\n");
208 (void) fprintf(
STDOUT,
" iflag = true;\n");
209 (void) fprintf(
STDOUT,
" break;\n");
210
211
212
213 if (extension_flag) {
214 (void) fprintf(
STDOUT,
" case REWIND:\n");
215 (void) fprintf(
STDOUT,
" if ( (0 == strncmp(\"stdin\", user, sz))");
216 (void) fprintf(
STDOUT,
" || (0 == strncmp(\"stdout\", user, sz))");
217 (void) fprintf(
STDOUT,
" || (0 == strncmp(\"stderr\", user, sz)) ) {\n");
218 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Run Time Error: (I/O manager for %%s)\\n\", tag);\n" );
219 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" Rewind of standard I/O stream <%%s> is not possible\\n\", user);\n");
220 (void) fprintf(
STDOUT,
" napa_exit(EXIT_FAILURE);\n");
221 (void) fprintf(
STDOUT,
" }\n");
222 (void) fprintf(
STDOUT,
" if ( -1L == index ) {\n");
223 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Run Time Error: (I/O manager for %%s)\\n\", tag);\n");
224 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" Rewind of I/O stream <%%s> is not possible");
225 (void) fprintf(
STDOUT,
" as it has not been registered\\n\", user);\n");
226 (void) fprintf(
STDOUT,
" napa_exit(EXIT_FAILURE);\n");
227 (void) fprintf(
STDOUT,
" }\n");
228 (void) fprintf(
STDOUT,
" if ( DELETE == napa_IO_record[index].mode ) {\n");
229 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Run Time Error: (I/O manager for %%s)\\n\", tag);\n");
230 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" Rewind of I/O stream <%%s> is not possible");
231 (void) fprintf(
STDOUT,
" as it has been deleted\\n\", user);\n");
232 (void) fprintf(
STDOUT,
" napa_exit(EXIT_FAILURE);\n");
233 (void) fprintf(
STDOUT,
" }\n");
234 (void) fprintf(
STDOUT,
" if ( ((FILE*) NULL) == napa_IO_record[index].f_ptr ) {\n");
235 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Run Time Error: (I/O manager for %%s)\\n\", tag);\n");
236 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" Rewind of I/O stream <%%s> is not possible");
237 (void) fprintf(
STDOUT,
" as it is not currently open\\n\", user);\n");
238 (void) fprintf(
STDOUT,
" napa_exit(EXIT_FAILURE);\n");
239 (void) fprintf(
STDOUT,
" }\n");
240 (void) fprintf(
STDOUT,
" rewind(napa_IO_record[index].f_ptr);\n");
241 (void) fprintf(
STDOUT,
"#if (defined(DEBUG_MODE_IO) || defined(ALL_DEBUG))\n");
242 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"NAPA Debug Information: (%-18s)\");\n",
"Rewind I/O stream" );
243 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" %%18s for %%-18s <- %% .0Lf\\n\", user, tag, napa_abs_loop);\n");
244 (void) fprintf(
STDOUT,
"#endif\n");
245 (void) fprintf(
STDOUT,
" return napa_IO_record[index].mode;\n");
246 }
247
248
249
250 (void) fprintf(
STDOUT,
" case CLOSE:\n");
251 (void) fprintf(
STDOUT,
" if ( -1L == index ) {\n");
252 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Run Time Error: (I/O manager for %%s)\\n\", tag);\n");
253 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" The I/O stream <%%s> cannot be closed");
254 (void) fprintf(
STDOUT,
" as it has not been registered\\n\", user);\n");
255 (void) fprintf(
STDOUT,
" napa_exit(EXIT_FAILURE);\n");
256 (void) fprintf(
STDOUT,
" }\n");
257 (void) fprintf(
STDOUT,
" if ( ((FILE*) NULL) == napa_IO_record[index].f_ptr ) {\n");
258 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Run Time Error: (I/O manager for %%s)\\n\", tag);\n");
259 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" The I/O stream <%%s> is already closed\\n\", user);\n");
260 (void) fprintf(
STDOUT,
" napa_exit(EXIT_FAILURE);\n");
261 (void) fprintf(
STDOUT,
" }\n");
262 if (extension_flag) {
263 (void) fprintf(
STDOUT,
" if ( DELETE == napa_IO_record[index].mode ) {\n");
264 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Run Time Error: (I/O manager for %%s)\\n\", tag);\n" );
265 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" The I/O stream <%%s> cannot be closed");
266 (void) fprintf(
STDOUT,
" as it has been deleted\\n\", user);\n");
267 (void) fprintf(
STDOUT,
" napa_exit(EXIT_FAILURE);\n");
268 (void) fprintf(
STDOUT,
" }\n");
269 }
270 (void) fprintf(
STDOUT,
" if ( (0 != strncmp(\"stdin\", user, sz))");
271 (void) fprintf(
STDOUT,
" && (0 != strncmp(\"stdout\", user, sz))");
272 (void) fprintf(
STDOUT,
" && (0 != strncmp(\"stderr\", user, sz)) ) {\n");
273 (void) fprintf(
STDOUT,
" if ( EOF == fclose(napa_IO_record[index].f_ptr) ) {\n");
274 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Run Time Error: (I/O manager for %%s)\\n\", tag);\n");
275 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" Unable to close I/O stream <%%s>\\n\", user);\n");
276 (void) fprintf(
STDOUT,
" napa_exit(EXIT_FAILURE);\n");
277 (void) fprintf(
STDOUT,
" }\n");
278 (void) fprintf(
STDOUT,
" }\n");
279 (void) fprintf(
STDOUT,
" napa_IO_record[index].f_ptr = (FILE*) NULL;\n");
280 (void) fprintf(
STDOUT,
" napa_IO_record[index].mode = command;\n");
281 (void) fprintf(
STDOUT,
"#if (defined(DEBUG_MODE_IO) || defined(ALL_DEBUG))\n");
282 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"NAPA Debug Information: (%-18s)\");\n",
"Close I/O stream" );
283 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" %%18s for %%-18s <- %% .0Lf\\n\", user, tag, napa_abs_loop);\n");
284 (void) fprintf(
STDOUT,
"#endif\n");
285 (void) fprintf(
STDOUT,
" *fp = (FILE*) NULL;\n");
286 (void) fprintf(
STDOUT,
" return command;\n");
287
288
289
290 if (extension_flag) {
291 (void) fprintf(
STDOUT,
" case DELETE:\n");
292 (void) fprintf(
STDOUT,
" if ( (0 == strncmp(\"stdin\", user, sz))");
293 (void) fprintf(
STDOUT,
" || (0 == strncmp(\"stdout\", user, sz))");
294 (void) fprintf(
STDOUT,
" || (0 == strncmp(\"stderr\", user, sz)) ) {\n");
295 (void) fprintf(
STDOUT,
" return UNKNOWN;\n");
296 (void) fprintf(
STDOUT,
" }\n");
297 (void) fprintf(
STDOUT,
" if ( -1L == index ) {\n");
298 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Run Time Error: (I/O manager for %%s)\\n\", tag);\n");
299 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" The I/O stream <%%s> cannot be deleted");
300 (void) fprintf(
STDOUT,
" as it has not been registered\\n\", user);\n");
301 (void) fprintf(
STDOUT,
" napa_exit(EXIT_FAILURE);\n");
302 (void) fprintf(
STDOUT,
" }\n");
303 (void) fprintf(
STDOUT,
" if ( !napa_IO_record[index].oflag ) {\n");
304 (void) fprintf(
STDOUT,
"#if (defined(DEBUG_MODE_IO) || defined(ALL_DEBUG))\n");
305 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Debug Information: (%-18s)\");\n",
"I/O stream");
306 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" The I/O stream <%%s> is not deleted, ");
307 (void) fprintf(
STDOUT,
"as it was not produced during the simulation\\n\\n\", user);\n");
308 (void) fprintf(
STDOUT,
"#endif\n");
309 (void) fprintf(
STDOUT,
" return napa_IO_record[index].mode;\n");
310 (void) fprintf(
STDOUT,
" }\n");
311 (void) fprintf(
STDOUT,
" if ( ((FILE*) NULL) != napa_IO_record[index].f_ptr ) {\n");
312 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Run Time Error: (I/O manager for %%s)\\n\", tag);\n");
313 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" The I/O stream <%%s> cannot be deleted");
314 (void) fprintf(
STDOUT,
" as it is not closed\\n\", user);\n");
315 (void) fprintf(
STDOUT,
" napa_exit(EXIT_FAILURE);\n");
316 (void) fprintf(
STDOUT,
" }\n");
317 (void) fprintf(
STDOUT,
" if ( DELETE == napa_IO_record[index].mode ) {\n");
318 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Run Time Error: (I/O manager for %%s)\\n\", tag);\n");
319 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" The I/O stream <%%s> has already been deleted\\n\", user);\n");
320 (void) fprintf(
STDOUT,
" napa_exit(EXIT_FAILURE);\n");
321 (void) fprintf(
STDOUT,
" }\n");
322 (void) fprintf(
STDOUT,
" if ( 0 != remove(napa_IO_record[index].user) ) {\n");
323 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Run Time Error: (I/O manager for %%s)\\n\", tag);\n");
324 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" The deletion of I/O stream <%%s> did not succeed\\n\", user);\n");
325 (void) fprintf(
STDOUT,
" napa_exit(EXIT_FAILURE);\n");
326 (void) fprintf(
STDOUT,
" }\n");
327 (void) fprintf(
STDOUT,
" napa_IO_record[index].iflag = false;\n");
328 (void) fprintf(
STDOUT,
" napa_IO_record[index].oflag = false;\n");
329 (void) fprintf(
STDOUT,
" napa_IO_record[index].mode = command;\n");
330 (void) fprintf(
STDOUT,
"#if (defined(DEBUG_MODE_IO) || defined(ALL_DEBUG))\n");
331 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"NAPA Debug Information: (%-18s)\");\n",
"Delete I/O stream" );
332 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" %%18s for %%-18s <- %% .0Lf\\n\", user, tag, napa_abs_loop);\n");
333 (void) fprintf(
STDOUT,
"#endif\n");
334 (void) fprintf(
STDOUT,
" return command;\n");
335
336
337
338 (void) fprintf(
STDOUT,
" case QUERY:\n");
339 (void) fprintf(
STDOUT,
" return ( -1L == index ) ? UNKNOWN : napa_IO_record[index].mode;\n");
340
341
342
343 (void) fprintf(
STDOUT,
" case DEBUG:\n");
344 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Debug Information: (%-18s)\");\n",
"I/O stream");
345 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" %%18s for %%-18s <- %% .0Lf\\n\", user, tag, napa_abs_loop);\n");
346 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" This I/O stream\");\n");
347 (void) fprintf(
STDOUT,
" if ( -1L < index ) {\n");
348 (void) fprintf(
STDOUT,
" if ( (napa_IO_record[index].iflag) && (napa_IO_record[index].oflag) ) {\n");
349 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \", which was used as input and output,\");\n");
350 (void) fprintf(
STDOUT,
" } else {\n");
351 (void) fprintf(
STDOUT,
" if ( napa_IO_record[index].iflag ) {\n");
352 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \", which was used as input,\" );\n");
353 (void) fprintf(
STDOUT,
" }\n");
354 (void) fprintf(
STDOUT,
" if ( napa_IO_record[index].oflag ) {\n");
355 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \", which was used as output,\");\n");
356 (void) fprintf(
STDOUT,
" }\n");
357 (void) fprintf(
STDOUT,
" }\n");
358 (void) fprintf(
STDOUT,
" if ( DELETE == napa_IO_record[index].mode ) {\n");
359 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" has been deleted\\n\");\n");
360 (void) fprintf(
STDOUT,
" } else {\n");
361 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" is currently in mode <%%d>, \", napa_IO_record[index].mode);\n" );
362 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" i.e. '%%s'\\n\", IO_COMMAND_NAME(napa_IO_record[index].mode));\n");
363 (void) fprintf(
STDOUT,
" }\n");
364 (void) fprintf(
STDOUT,
" } else {\n");
365 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" has not been registered\\n\");\n");
366 (void) fprintf(
STDOUT,
" }\n");
367 (void) fprintf(
STDOUT,
" return command;\n");
368 }
369
370
371
372 (void) fprintf(
STDOUT,
" case FREE:\n");
373 (void) fprintf(
STDOUT,
" if ( 0L >= napa_IO_count ) {\n");
374 (void) fprintf(
STDOUT,
" return command;\n");
375 (void) fprintf(
STDOUT,
" }\n");
376 (void) fprintf(
STDOUT,
" j = 0L;\n");
377 (void) fprintf(
STDOUT,
" for (i = 0L; i < napa_IO_count; i++) {\n");
378 if (extension_flag) {
379 (void) fprintf(
STDOUT,
" if ( (UNKNOWN == napa_IO_record[i].mode) || (DELETE == napa_IO_record[i].mode) ) {\n");
380 (void) fprintf(
STDOUT,
" continue;\n");
381 (void) fprintf(
STDOUT,
" }\n");
382 } else {
383 (void) fprintf(
STDOUT,
" if ( UNKNOWN == napa_IO_record[i].mode ) {\n");
384 (void) fprintf(
STDOUT,
" continue;\n");
385 (void) fprintf(
STDOUT,
" }\n");
386 }
387 (void) fprintf(
STDOUT,
" if ( CLOSE == napa_IO_record[i].mode ) {\n");
388 (void) fprintf(
STDOUT,
"#if ((defined(DEBUG_MODE_IO) || defined(ALL_DEBUG)) && defined(VERBOSE))\n");
389 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"NAPA Debug Information: (%-18s)",
"Purge I/O stream");
390 (void) fprintf(
STDOUT,
" < record[%%ld] >\\n\", napa_IO_record[i].id);\n");
391 (void) fprintf(
STDOUT,
"#endif\n");
392 (void) fprintf(
STDOUT,
" free(napa_IO_record[i].user);\n");
393 (void) fprintf(
STDOUT,
" napa_IO_record[i].user = (char*) NULL;\n");
394 (void) fprintf(
STDOUT,
" } else {\n");
395 (void) fprintf(
STDOUT,
" (void) strcpy(napa_IO_record[j].user, napa_IO_record[i].user);\n");
396 (void) fprintf(
STDOUT,
" napa_IO_record[j].f_ptr = napa_IO_record[i].f_ptr;\n");
397 (void) fprintf(
STDOUT,
" napa_IO_record[j].id = napa_IO_record[i].id;\n");
398 (void) fprintf(
STDOUT,
" napa_IO_record[j].mode = napa_IO_record[i].mode;\n");
399 (void) fprintf(
STDOUT,
" napa_IO_record[j].iflag = napa_IO_record[i].iflag;\n");
400 (void) fprintf(
STDOUT,
" napa_IO_record[j].oflag = napa_IO_record[i].oflag;\n");
401 (void) fprintf(
STDOUT,
" j++;\n");
402 (void) fprintf(
STDOUT,
" }\n");
403 (void) fprintf(
STDOUT,
" }\n");
404 (void) fprintf(
STDOUT,
" napa_IO_count = j;\n");
405 (void) fprintf(
STDOUT,
"#if ((defined(DEBUG_MODE_IO) || defined(ALL_DEBUG)) && defined(VERBOSE))\n");
406 (void) fprintf(
STDOUT,
" if ( 0L < napa_IO_count ) {\n");
407 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"NAPA Debug Information: (%-18s)\");\n",
"Purge I/O stream");
408 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" %%ld I/O records are still allocated\\n\", napa_IO_count);\n" );
409 (void) fprintf(
STDOUT,
" }\n");
410 (void) fprintf(
STDOUT,
"#endif\n");
411 (void) fprintf(
STDOUT,
" return command;\n");
412
413
414
415 if (!extension_flag) {
416#if (IS_WIN64 == PLATFORM)
417 (void) fprintf(
STDOUT,
" case OPENREAD_BINARY:\n");
418#endif
419 (void) fprintf(
STDOUT,
" case REWIND:\n");
420 (void) fprintf(
STDOUT,
" case OPENAPPEND:\n");
421#if (IS_WIN64 == PLATFORM)
422 (void) fprintf(
STDOUT,
" case OPENAPPEND_BINARY:\n");
423 (void) fprintf(
STDOUT,
" case OPENWRITE_BINARY:\n");
424#endif
425 (void) fprintf(
STDOUT,
" case REWRITE:\n");
426 (void) fprintf(
STDOUT,
" case QUERY:\n");
427 (void) fprintf(
STDOUT,
" case DEBUG:\n");
428 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Run Time Error: (I/O manager for %%s)\\n\", tag);\n");
429 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" The I/O stream management command <%%d> is not implemented");
430 (void) fprintf(
STDOUT,
" in this streamlined manager\\n\", command);\n");
431 (void) fprintf(
STDOUT,
" napa_exit(EXIT_FAILURE);\n");
432 }
433 (void) fprintf(
STDOUT,
" default:\n");
434 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Run Time Error: (I/O manager for %%s)\\n\", tag);\n");
435 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" Unknown I/O stream management command <%%d>\\n\", command);\n" );
436 (void) fprintf(
STDOUT,
" napa_exit(EXIT_FAILURE);\n");
437 (void) fprintf(
STDOUT,
" }\n");
438
439
440 (void) fprintf(
STDOUT,
" if ( -1L == index ) {\n");
441 (void) fprintf(
STDOUT,
" napa_IO_record[napa_IO_count].user = (char*) calloc((size_t) (1L+length), sizeof(char));\n");
442 (void) fprintf(
STDOUT,
" if ( (char*) NULL == napa_IO_record[napa_IO_count].user ) {\n");
443 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Run Time Error: (I/O manager for %%s)\\n\", tag);\n");
444 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" A dynamic memory allocation error occurred");
445 (void) fprintf(
STDOUT,
" while recording I/O stream <%%s>\\n\", user);\n");
446 (void) fprintf(
STDOUT,
" napa_exit(EXIT_FAILURE);\n");
447 (void) fprintf(
STDOUT,
" }\n");
448 (void) fprintf(
STDOUT,
" } else {\n");
449 (void) fprintf(
STDOUT,
" if ( ((FILE*) NULL) != napa_IO_record[index].f_ptr ) {\n");
450 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Run Time Error: (I/O manager for %%s)\\n\", tag);\n");
451 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" The I/O stream <%%s> cannot be opened twice\\n\", user);\n");
452 (void) fprintf(
STDOUT,
" napa_exit(EXIT_FAILURE);\n");
453 (void) fprintf(
STDOUT,
" }\n");
454 (void) fprintf(
STDOUT,
" }\n");
455 (void) fprintf(
STDOUT,
" if ( 0 == strncmp(\"stdin\", user, sz) ) {\n");
456 (void) fprintf(
STDOUT,
" *fp = stdin;\n");
457 (void) fprintf(
STDOUT,
" } else if ( 0 == strncmp(\"stdout\", user, sz) ) {\n");
458 (void) fprintf(
STDOUT,
" *fp = stdout;\n");
459 (void) fprintf(
STDOUT,
" } else if ( 0 == strncmp(\"stderr\", user, sz) ) {\n");
460 (void) fprintf(
STDOUT,
" *fp = stderr;\n");
461 (void) fprintf(
STDOUT,
" } else {\n");
462 (void) fprintf(
STDOUT,
" *fp = fopen(user, str);\n");
463 (void) fprintf(
STDOUT,
" if ( (FILE*) NULL == *fp ) {\n");
464 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Run Time Error: (I/O manager for %%s)\\n\", tag);\n");
465 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" Unable to open I/O file <%%s>\\n\", user);\n");
466 (void) fprintf(
STDOUT,
" napa_exit(EXIT_FAILURE);\n");
467 (void) fprintf(
STDOUT,
" }\n");
468 (void) fprintf(
STDOUT,
" }\n");
469 (void) fprintf(
STDOUT,
" if ( -1L == index ) {\n");
470 (void) fprintf(
STDOUT,
" (void) strcpy(napa_IO_record[napa_IO_count].user, user);\n");
471 (void) fprintf(
STDOUT,
" napa_IO_record[napa_IO_count].f_ptr = *fp;\n");
472 (void) fprintf(
STDOUT,
" napa_IO_record[napa_IO_count].id = id;\n");
473 (void) fprintf(
STDOUT,
" napa_IO_record[napa_IO_count].mode = command;\n");
474 (void) fprintf(
STDOUT,
" napa_IO_record[napa_IO_count].iflag = iflag || napa_IO_record[napa_IO_count].iflag;\n");
475 (void) fprintf(
STDOUT,
" napa_IO_record[napa_IO_count].oflag = oflag || napa_IO_record[napa_IO_count].oflag;\n");
476 (void) fprintf(
STDOUT,
"#if ((defined(DEBUG_MODE_IO) || defined(ALL_DEBUG)) && defined(VERBOSE))\n");
477 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"NAPA Debug Information: (%-18s)",
"Create I/O stream");
478 (void) fprintf(
STDOUT,
" < record[%%ld] >\\n\", id);\n");
479 (void) fprintf(
STDOUT,
"#endif\n");
480 (void) fprintf(
STDOUT,
" id++;\n");
481 (void) fprintf(
STDOUT,
" napa_IO_count++;\n");
482 (void) fprintf(
STDOUT,
" if ( %ldL <= napa_IO_count ) {\n",
MAXFILES);
483 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Run Time Error: (I/O manager for %%s)\\n\", tag);\n");
484 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" Internal arrays overflow (max = %ld I/O)",
MAXFILES);
485 (void) fprintf(
STDOUT,
" while registering I/O stream <%%s>\\n\", user);\n");
486 (void) fprintf(
STDOUT,
" napa_exit(EXIT_FAILURE);\n");
487 (void) fprintf(
STDOUT,
" }\n");
488 (void) fprintf(
STDOUT,
" } else {\n");
489 (void) fprintf(
STDOUT,
" napa_IO_record[index].f_ptr = *fp;\n");
490 (void) fprintf(
STDOUT,
" napa_IO_record[index].mode = command;\n");
491 (void) fprintf(
STDOUT,
" napa_IO_record[index].iflag = iflag || napa_IO_record[index].iflag;\n");
492 (void) fprintf(
STDOUT,
" napa_IO_record[index].oflag = oflag || napa_IO_record[index].oflag;\n");
493 (void) fprintf(
STDOUT,
" }\n");
494 (void) fprintf(
STDOUT,
"#if (defined(DEBUG_MODE_IO) || defined(ALL_DEBUG))\n");
495 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"NAPA Debug Information: (%-18s)\");\n",
"Open I/O stream" );
496 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" %%18s for %%-18s <- %% .0Lf\\n\", user, tag, napa_abs_loop);\n");
497 (void) fprintf(
STDOUT,
"#endif\n");
498 if (extension_flag) {
499 (void) fprintf(
STDOUT,
" if ( REWRITE == command ) {\n");
500 (void) fprintf(
STDOUT,
" (void) napa_IO_manager(CLOSE, fp, filename, suffix, tag);\n");
501 (void) fprintf(
STDOUT,
" }\n");
502 }
503 (void) fprintf(
STDOUT,
" return command;\n");
504 (void) fprintf(
STDOUT,
"}\n");
505 return;
506}