aboutsummaryrefslogtreecommitdiff
path: root/gcc/m2/mc-boot/GPushBackInput.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/m2/mc-boot/GPushBackInput.c')
-rw-r--r--gcc/m2/mc-boot/GPushBackInput.c488
1 files changed, 488 insertions, 0 deletions
diff --git a/gcc/m2/mc-boot/GPushBackInput.c b/gcc/m2/mc-boot/GPushBackInput.c
new file mode 100644
index 0000000..b0ede08
--- /dev/null
+++ b/gcc/m2/mc-boot/GPushBackInput.c
@@ -0,0 +1,488 @@
+/* do not edit automatically generated by mc from PushBackInput. */
+/* PushBackInput.mod provides a method for pushing back and consuming input.
+
+Copyright (C) 2001-2021 Free Software Foundation, Inc.
+Contributed by Gaius Mulley <gaius.mulley@southwales.ac.uk>.
+
+This file is part of GNU Modula-2.
+
+GNU Modula-2 is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GNU Modula-2 is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include "config.h"
+#include "system.h"
+# if !defined (PROC_D)
+# define PROC_D
+ typedef void (*PROC_t) (void);
+ typedef struct { PROC_t proc; } PROC;
+# endif
+
+# if !defined (FALSE)
+# define FALSE (1==0)
+# endif
+
+#if defined(__cplusplus)
+# undef NULL
+# define NULL 0
+#endif
+#define _PushBackInput_H
+#define _PushBackInput_C
+
+# include "GFIO.h"
+# include "GDynamicStrings.h"
+# include "GASCII.h"
+# include "GDebug.h"
+# include "GStrLib.h"
+# include "GNumberIO.h"
+# include "GStrIO.h"
+# include "GStdIO.h"
+# include "Glibc.h"
+
+# define MaxPushBackStack 8192
+# define MaxFileName 4096
+typedef struct PushBackInput__T2_a PushBackInput__T2;
+
+typedef struct PushBackInput__T3_a PushBackInput__T3;
+
+struct PushBackInput__T2_a { char array[MaxFileName+1]; };
+struct PushBackInput__T3_a { char array[MaxPushBackStack+1]; };
+static PushBackInput__T2 FileName;
+static PushBackInput__T3 CharStack;
+static unsigned int ExitStatus;
+static unsigned int Column;
+static unsigned int StackPtr;
+static unsigned int LineNo;
+static unsigned int Debugging;
+
+/*
+ Open - opens a file for reading.
+*/
+
+extern "C" FIO_File PushBackInput_Open (const char *a_, unsigned int _a_high);
+
+/*
+ GetCh - gets a character from either the push back stack or
+ from file, f.
+*/
+
+extern "C" char PushBackInput_GetCh (FIO_File f);
+
+/*
+ PutCh - pushes a character onto the push back stack, it also
+ returns the character which has been pushed.
+*/
+
+extern "C" char PushBackInput_PutCh (char ch);
+
+/*
+ PutString - pushes a string onto the push back stack.
+*/
+
+extern "C" void PushBackInput_PutString (const char *a_, unsigned int _a_high);
+
+/*
+ PutStr - pushes a dynamic string onto the push back stack.
+ The string, s, is not deallocated.
+*/
+
+extern "C" void PushBackInput_PutStr (DynamicStrings_String s);
+
+/*
+ Error - emits an error message with the appropriate file, line combination.
+*/
+
+extern "C" void PushBackInput_Error (const char *a_, unsigned int _a_high);
+
+/*
+ WarnError - emits an error message with the appropriate file, line combination.
+ It does not terminate but when the program finishes an exit status of
+ 1 will be issued.
+*/
+
+extern "C" void PushBackInput_WarnError (const char *a_, unsigned int _a_high);
+
+/*
+ WarnString - emits an error message with the appropriate file, line combination.
+ It does not terminate but when the program finishes an exit status of
+ 1 will be issued.
+*/
+
+extern "C" void PushBackInput_WarnString (DynamicStrings_String s);
+
+/*
+ Close - closes the opened file.
+*/
+
+extern "C" void PushBackInput_Close (FIO_File f);
+
+/*
+ GetExitStatus - returns the exit status which will be 1 if any warnings were issued.
+*/
+
+extern "C" unsigned int PushBackInput_GetExitStatus (void);
+
+/*
+ SetDebug - sets the debug flag on or off.
+*/
+
+extern "C" void PushBackInput_SetDebug (unsigned int d);
+
+/*
+ GetColumnPosition - returns the column position of the current character.
+*/
+
+extern "C" unsigned int PushBackInput_GetColumnPosition (void);
+
+/*
+ GetCurrentLine - returns the current line number.
+*/
+
+extern "C" unsigned int PushBackInput_GetCurrentLine (void);
+
+/*
+ ErrChar - writes a char, ch, to stderr.
+*/
+
+static void ErrChar (char ch);
+
+/*
+ Init - initialize global variables.
+*/
+
+static void Init (void);
+
+
+/*
+ ErrChar - writes a char, ch, to stderr.
+*/
+
+static void ErrChar (char ch)
+{
+ FIO_WriteChar (FIO_StdErr, ch);
+}
+
+
+/*
+ Init - initialize global variables.
+*/
+
+static void Init (void)
+{
+ ExitStatus = 0;
+ StackPtr = 0;
+ LineNo = 1;
+ Column = 0;
+}
+
+
+/*
+ Open - opens a file for reading.
+*/
+
+extern "C" FIO_File PushBackInput_Open (const char *a_, unsigned int _a_high)
+{
+ char a[_a_high+1];
+
+ /* make a local copy of each unbounded array. */
+ memcpy (a, a_, _a_high+1);
+
+ Init ();
+ StrLib_StrCopy ((const char *) a, _a_high, (char *) &FileName.array[0], MaxFileName);
+ return FIO_OpenToRead ((const char *) a, _a_high);
+ /* static analysis guarentees a RETURN statement will be used before here. */
+ __builtin_unreachable ();
+}
+
+
+/*
+ GetCh - gets a character from either the push back stack or
+ from file, f.
+*/
+
+extern "C" char PushBackInput_GetCh (FIO_File f)
+{
+ char ch;
+
+ if (StackPtr > 0)
+ {
+ StackPtr -= 1;
+ if (Debugging)
+ {
+ StdIO_Write (CharStack.array[StackPtr]);
+ }
+ return CharStack.array[StackPtr];
+ }
+ else
+ {
+ if ((FIO_EOF (f)) || (! (FIO_IsNoError (f))))
+ {
+ ch = ASCII_nul;
+ }
+ else
+ {
+ do {
+ ch = FIO_ReadChar (f);
+ } while (! (((ch != ASCII_cr) || (FIO_EOF (f))) || (! (FIO_IsNoError (f)))));
+ if (ch == ASCII_lf)
+ {
+ Column = 0;
+ LineNo += 1;
+ }
+ else
+ {
+ Column += 1;
+ }
+ }
+ if (Debugging)
+ {
+ StdIO_Write (ch);
+ }
+ return ch;
+ }
+ /* static analysis guarentees a RETURN statement will be used before here. */
+ __builtin_unreachable ();
+}
+
+
+/*
+ PutCh - pushes a character onto the push back stack, it also
+ returns the character which has been pushed.
+*/
+
+extern "C" char PushBackInput_PutCh (char ch)
+{
+ if (StackPtr < MaxPushBackStack)
+ {
+ CharStack.array[StackPtr] = ch;
+ StackPtr += 1;
+ }
+ else
+ {
+ Debug_Halt ((const char *) "max push back stack exceeded, increase MaxPushBackStack", 55, 150, (const char *) "../../gcc-git-devel-modula2/gcc/m2/gm2-libs/PushBackInput.mod", 61);
+ }
+ return ch;
+ /* static analysis guarentees a RETURN statement will be used before here. */
+ __builtin_unreachable ();
+}
+
+
+/*
+ PutString - pushes a string onto the push back stack.
+*/
+
+extern "C" void PushBackInput_PutString (const char *a_, unsigned int _a_high)
+{
+ unsigned int l;
+ char a[_a_high+1];
+
+ /* make a local copy of each unbounded array. */
+ memcpy (a, a_, _a_high+1);
+
+ l = StrLib_StrLen ((const char *) a, _a_high);
+ while (l > 0)
+ {
+ l -= 1;
+ if ((PushBackInput_PutCh (a[l])) != a[l])
+ {
+ Debug_Halt ((const char *) "assert failed", 13, 132, (const char *) "../../gcc-git-devel-modula2/gcc/m2/gm2-libs/PushBackInput.mod", 61);
+ }
+ }
+}
+
+
+/*
+ PutStr - pushes a dynamic string onto the push back stack.
+ The string, s, is not deallocated.
+*/
+
+extern "C" void PushBackInput_PutStr (DynamicStrings_String s)
+{
+ unsigned int i;
+
+ i = DynamicStrings_Length (s);
+ while (i > 0)
+ {
+ i -= 1;
+ if ((PushBackInput_PutCh (DynamicStrings_char (s, static_cast<int> (i)))) != (DynamicStrings_char (s, static_cast<int> (i))))
+ {
+ Debug_Halt ((const char *) "assert failed", 13, 113, (const char *) "../../gcc-git-devel-modula2/gcc/m2/gm2-libs/PushBackInput.mod", 61);
+ }
+ }
+}
+
+
+/*
+ Error - emits an error message with the appropriate file, line combination.
+*/
+
+extern "C" void PushBackInput_Error (const char *a_, unsigned int _a_high)
+{
+ char a[_a_high+1];
+
+ /* make a local copy of each unbounded array. */
+ memcpy (a, a_, _a_high+1);
+
+ StdIO_PushOutput ((StdIO_ProcWrite) {(StdIO_ProcWrite_t) ErrChar});
+ StrIO_WriteString ((const char *) &FileName.array[0], MaxFileName);
+ StdIO_Write (':');
+ NumberIO_WriteCard (LineNo, 0);
+ StdIO_Write (':');
+ StrIO_WriteString ((const char *) a, _a_high);
+ StrIO_WriteLn ();
+ StdIO_PopOutput ();
+ FIO_Close (FIO_StdErr);
+ libc_exit (1);
+}
+
+
+/*
+ WarnError - emits an error message with the appropriate file, line combination.
+ It does not terminate but when the program finishes an exit status of
+ 1 will be issued.
+*/
+
+extern "C" void PushBackInput_WarnError (const char *a_, unsigned int _a_high)
+{
+ char a[_a_high+1];
+
+ /* make a local copy of each unbounded array. */
+ memcpy (a, a_, _a_high+1);
+
+ StdIO_PushOutput ((StdIO_ProcWrite) {(StdIO_ProcWrite_t) ErrChar});
+ StrIO_WriteString ((const char *) &FileName.array[0], MaxFileName);
+ StdIO_Write (':');
+ NumberIO_WriteCard (LineNo, 0);
+ StdIO_Write (':');
+ StrIO_WriteString ((const char *) a, _a_high);
+ StrIO_WriteLn ();
+ StdIO_PopOutput ();
+ ExitStatus = 1;
+}
+
+
+/*
+ WarnString - emits an error message with the appropriate file, line combination.
+ It does not terminate but when the program finishes an exit status of
+ 1 will be issued.
+*/
+
+extern "C" void PushBackInput_WarnString (DynamicStrings_String s)
+{
+ typedef char *WarnString__T1;
+
+ WarnString__T1 p;
+
+ p = static_cast<WarnString__T1> (DynamicStrings_string (s));
+ StrIO_WriteString ((const char *) &FileName.array[0], MaxFileName);
+ StdIO_Write (':');
+ NumberIO_WriteCard (LineNo, 0);
+ StdIO_Write (':');
+ do {
+ if (p != NULL)
+ {
+ if ((*p) == ASCII_lf)
+ {
+ StrIO_WriteLn ();
+ StrIO_WriteString ((const char *) &FileName.array[0], MaxFileName);
+ StdIO_Write (':');
+ NumberIO_WriteCard (LineNo, 0);
+ StdIO_Write (':');
+ }
+ else
+ {
+ StdIO_Write ((*p));
+ }
+ p += 1;
+ }
+ } while (! ((p == NULL) || ((*p) == ASCII_nul)));
+ ExitStatus = 1;
+}
+
+
+/*
+ Close - closes the opened file.
+*/
+
+extern "C" void PushBackInput_Close (FIO_File f)
+{
+ FIO_Close (f);
+}
+
+
+/*
+ GetExitStatus - returns the exit status which will be 1 if any warnings were issued.
+*/
+
+extern "C" unsigned int PushBackInput_GetExitStatus (void)
+{
+ return ExitStatus;
+ /* static analysis guarentees a RETURN statement will be used before here. */
+ __builtin_unreachable ();
+}
+
+
+/*
+ SetDebug - sets the debug flag on or off.
+*/
+
+extern "C" void PushBackInput_SetDebug (unsigned int d)
+{
+ Debugging = d;
+}
+
+
+/*
+ GetColumnPosition - returns the column position of the current character.
+*/
+
+extern "C" unsigned int PushBackInput_GetColumnPosition (void)
+{
+ if (StackPtr > Column)
+ {
+ return 0;
+ }
+ else
+ {
+ return Column-StackPtr;
+ }
+ /* static analysis guarentees a RETURN statement will be used before here. */
+ __builtin_unreachable ();
+}
+
+
+/*
+ GetCurrentLine - returns the current line number.
+*/
+
+extern "C" unsigned int PushBackInput_GetCurrentLine (void)
+{
+ return LineNo;
+ /* static analysis guarentees a RETURN statement will be used before here. */
+ __builtin_unreachable ();
+}
+
+extern "C" void _M2_PushBackInput_init (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[])
+{
+ PushBackInput_SetDebug (FALSE);
+ Init ();
+}
+
+extern "C" void _M2_PushBackInput_finish (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[])
+{
+}