summaryrefslogtreecommitdiff
path: root/Build/source/utils/m-tx/mtx-src/multfile.c
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/utils/m-tx/mtx-src/multfile.c')
-rw-r--r--Build/source/utils/m-tx/mtx-src/multfile.c235
1 files changed, 235 insertions, 0 deletions
diff --git a/Build/source/utils/m-tx/mtx-src/multfile.c b/Build/source/utils/m-tx/mtx-src/multfile.c
new file mode 100644
index 00000000000..31b9c204f8a
--- /dev/null
+++ b/Build/source/utils/m-tx/mtx-src/multfile.c
@@ -0,0 +1,235 @@
+/* Output from p2c 1.21alpha-07.Dec.93, the Pascal-to-C translator */
+/* From input file "multfile.pas" */
+
+
+#include "p2c.h"
+
+
+#define MULTFILE_G
+#include "multfile.h"
+
+
+Char nextData[256] = "";
+
+
+typedef struct filenode {
+ Char name[256];
+ FILE *actualfile;
+ struct filenode *prev;
+ short lineno;
+ Char actualfile_NAME[_FNSIZE];
+} filenode;
+
+
+Static filenode *current = NULL;
+Static short last_valid_line_no = 0;
+Static boolean inputerror = false;
+Static short reportitem = reportnewfile + reportoldfile + reporterror +
+ reportrecursive;
+
+
+void report(short items)
+{
+ reportitem = items;
+}
+
+
+Static boolean recursive(Char *filename)
+{
+ boolean Result;
+ filenode *previous;
+
+ if (current == NULL)
+ return false;
+ previous = current;
+/* p2c: multfile.pas: Note: Eliminated unused assignment statement [338] */
+ while (previous != NULL) {
+ if (!strcmp(filename, previous->name))
+ return true;
+ previous = previous->prev;
+ }
+ return false;
+}
+
+
+void pushFile(Char *filename)
+{
+ filenode *newnode;
+ Char STR3[256];
+
+ if (recursive(filename)) {
+ printf("===! Ignoring recursive include of file %s\n", filename);
+ return;
+ }
+ newnode = Malloc(sizeof(filenode));
+ newnode->actualfile = NULL;
+ strcpy(newnode->name, filename);
+ newnode->prev = current;
+ newnode->lineno = 0;
+ strcpy(newnode->actualfile_NAME, filename);
+ if (newnode->actualfile != NULL)
+ newnode->actualfile = freopen(newnode->actualfile_NAME, "r",
+ newnode->actualfile);
+ else
+ newnode->actualfile = fopen(newnode->actualfile_NAME, "r");
+ _SETIO(newnode->actualfile != NULL, FileNotFound);
+ inputerror = (P_ioresult != 0);
+ if (inputerror)
+ Free(newnode);
+ else
+ current = newnode;
+ if (!inputerror && (reportitem & reportnewfile) > 0)
+ printf("==>> Input from file %s\n", currentFilename(STR3));
+ if (inputerror && (reportitem & reporterror) > 0)
+ printf("==!! Could not open file %s\n", filename);
+}
+
+
+void popFile(void)
+{
+ filenode *previous;
+ Char STR2[256];
+ Char STR3[256];
+
+ if (current == NULL)
+ return;
+ if ((reportitem & reportclose) > 0)
+ printf("==>> Closing file %s at line number %d\n",
+ currentFilename(STR2), currentLineNo());
+ if (current->actualfile != NULL)
+ fclose(current->actualfile);
+ current->actualfile = NULL;
+ previous = current->prev;
+ Free(current);
+ current = previous;
+ if (current != NULL && (reportitem & reportoldfile) > 0)
+ printf("==>> Resuming input from file %s at line number %d\n",
+ currentFilename(STR3), currentLineNo());
+}
+
+
+void closeAll(void)
+{
+ do {
+ popFile();
+ } while (current != NULL);
+}
+
+
+boolean eofCurrent(void)
+{
+ return P_eof(current->actualfile);
+}
+
+
+Char *readLine(Char *Result)
+{
+ Char s[256];
+ Char *TEMP;
+ Char STR2[256];
+
+ if (*nextData != '\0') {
+ strcpy(Result, nextData);
+ *nextData = '\0';
+ return Result;
+ }
+ if (eofAll())
+ return strcpy(Result, "");
+ _SETIO(fgets(s, 256, current->actualfile) != NULL, EndOfFile);
+ TEMP = strchr(s, '\n');
+ if (TEMP != NULL)
+ *TEMP = 0;
+ strcpy(Result, s);
+ inputerror = (P_ioresult != 0);
+ if (!inputerror) {
+ current->lineno++;
+ last_valid_line_no = current->lineno;
+ }
+ if (inputerror && (reportitem & reporterror) > 0)
+ printf("==!! Could not read from file %s\n", currentFilename(STR2));
+ return Result;
+}
+
+
+boolean isEmpty(Char *s)
+{
+ short i, FORLIM;
+
+ if (*s == '\0')
+ return true;
+ FORLIM = strlen(s);
+ for (i = 0; i <= FORLIM - 1; i++) {
+ if (s[i] != ' ')
+ return false;
+ }
+ return true;
+}
+
+
+Char *readData(Char *Result)
+{
+ Char s[256];
+
+ if (!isEmpty(nextData)) {
+ strcpy(Result, nextData);
+ *nextData = '\0';
+ return Result;
+ }
+ while (!eofAll()) {
+ readLine(s);
+ if (!isEmpty(s))
+ return strcpy(Result, s);
+ }
+ return strcpy(Result, "");
+}
+
+
+void skipBlanks(void)
+{
+ while (*nextData == '\0') {
+ readData(nextData);
+ if (eofAll())
+ return;
+ }
+}
+
+
+boolean eofAll(void)
+{
+ boolean Result;
+
+/* p2c: multfile.pas: Note: Eliminated unused assignment statement [338] */
+ if (current == NULL)
+ return true;
+ if (eofCurrent()) {
+ popFile();
+ return (eofAll());
+ }
+ return false;
+}
+
+
+short currentLineNo(void)
+{
+ return last_valid_line_no;
+}
+
+
+Char *currentFilename(Char *Result)
+{
+ if (current == NULL)
+ return strcpy(Result, "No file open yet");
+ else
+ return strcpy(Result, current->name);
+}
+
+
+boolean fileError(void)
+{
+ return inputerror;
+}
+
+
+
+
+/* End. */