| /* do not edit automatically generated by mc from M2RTS. */ |
| /* M2RTS.def Implements the run time system facilities of Modula-2. |
| |
| Copyright (C) 2001-2023 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/>. */ |
| |
| |
| #if !defined (_M2RTS_H) |
| # define _M2RTS_H |
| |
| #include "config.h" |
| #include "system.h" |
| # ifdef __cplusplus |
| extern "C" { |
| # endif |
| #include <stdbool.h> |
| # if !defined (PROC_D) |
| # define PROC_D |
| typedef void (*PROC_t) (void); |
| typedef struct { PROC_t proc; } PROC; |
| # endif |
| |
| # include "GSYSTEM.h" |
| |
| # if defined (_M2RTS_C) |
| # define EXTERN |
| # else |
| # define EXTERN extern |
| # endif |
| |
| typedef struct M2RTS_ArgCVEnvP_p M2RTS_ArgCVEnvP; |
| |
| typedef void (*M2RTS_ArgCVEnvP_t) (int, void *, void *); |
| struct M2RTS_ArgCVEnvP_p { M2RTS_ArgCVEnvP_t proc; }; |
| |
| EXTERN void M2RTS_ConstructModules (void * applicationmodule, void * libname, void * overrideliborder, int argc, void * argv, void * envp); |
| EXTERN void M2RTS_DeconstructModules (void * applicationmodule, void * libname, int argc, void * argv, void * envp); |
| |
| /* |
| RegisterModule - adds module name to the list of outstanding |
| modules which need to have their dependencies |
| explored to determine initialization order. |
| */ |
| |
| EXTERN void M2RTS_RegisterModule (void * name, void * libname, M2RTS_ArgCVEnvP init, M2RTS_ArgCVEnvP fini, PROC dependencies); |
| |
| /* |
| RequestDependant - used to specify that modulename is dependant upon |
| module dependantmodule. |
| */ |
| |
| EXTERN void M2RTS_RequestDependant (void * modulename, void * libname, void * dependantmodule, void * dependantlibname); |
| |
| /* |
| InstallTerminationProcedure - installs a procedure, p, which will |
| be called when the procedure |
| ExecuteTerminationProcedures |
| is invoked. It returns TRUE is the |
| procedure is installed. |
| */ |
| |
| EXTERN bool M2RTS_InstallTerminationProcedure (PROC p); |
| |
| /* |
| ExecuteInitialProcedures - executes the initial procedures installed |
| by InstallInitialProcedure. |
| */ |
| |
| EXTERN void M2RTS_ExecuteInitialProcedures (void); |
| |
| /* |
| InstallInitialProcedure - installs a procedure to be executed just |
| before the BEGIN code section of the main |
| program module. |
| */ |
| |
| EXTERN bool M2RTS_InstallInitialProcedure (PROC p); |
| |
| /* |
| ExecuteTerminationProcedures - calls each installed termination procedure |
| in reverse order. |
| */ |
| |
| EXTERN void M2RTS_ExecuteTerminationProcedures (void); |
| |
| /* |
| Terminate - provides compatibility for pim. It call exit with |
| the exitcode provided in a prior call to ExitOnHalt |
| (or zero if ExitOnHalt was never called). It does |
| not call ExecuteTerminationProcedures. |
| */ |
| |
| EXTERN void M2RTS_Terminate (void) __attribute__ ((noreturn)); |
| |
| /* |
| HALT - terminate the current program. The procedure Terminate |
| is called before the program is stopped. The parameter |
| exitcode is optional. If the parameter is not supplied |
| HALT will call libc 'abort', otherwise it will exit with |
| the code supplied. Supplying a parameter to HALT has the |
| same effect as calling ExitOnHalt with the same code and |
| then calling HALT with no parameter. |
| */ |
| |
| EXTERN void M2RTS_HALT (int exitcode) __attribute__ ((noreturn)); |
| |
| /* |
| Halt - provides a more user friendly version of HALT, which takes |
| four parameters to aid debugging. It writes an error message |
| to stderr and calls exit (1). |
| */ |
| |
| EXTERN void M2RTS_Halt (const char *description_, unsigned int _description_high, const char *filename_, unsigned int _filename_high, const char *function_, unsigned int _function_high, unsigned int line) __attribute__ ((noreturn)); |
| |
| /* |
| HaltC - provides a more user friendly version of HALT, which takes |
| four parameters to aid debugging. It writes an error message |
| to stderr and calls exit (1). |
| */ |
| |
| EXTERN void M2RTS_HaltC (void * description, void * filename, void * function, unsigned int line) __attribute__ ((noreturn)); |
| |
| /* |
| ExitOnHalt - if HALT is executed then call exit with the exit code, e. |
| */ |
| |
| EXTERN void M2RTS_ExitOnHalt (int e); |
| |
| /* |
| ErrorMessage - emits an error message to stderr and then calls exit (1). |
| */ |
| |
| EXTERN void M2RTS_ErrorMessage (const char *message_, unsigned int _message_high, const char *filename_, unsigned int _filename_high, unsigned int line, const char *function_, unsigned int _function_high) __attribute__ ((noreturn)); |
| |
| /* |
| Length - returns the length of a string, a. This is called whenever |
| the user calls LENGTH and the parameter cannot be calculated |
| at compile time. |
| */ |
| |
| EXTERN unsigned int M2RTS_Length (const char *a_, unsigned int _a_high); |
| EXTERN void M2RTS_AssignmentException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn)); |
| EXTERN void M2RTS_ReturnException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn)); |
| EXTERN void M2RTS_IncException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn)); |
| EXTERN void M2RTS_DecException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn)); |
| EXTERN void M2RTS_InclException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn)); |
| EXTERN void M2RTS_ExclException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn)); |
| EXTERN void M2RTS_ShiftException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn)); |
| EXTERN void M2RTS_RotateException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn)); |
| EXTERN void M2RTS_StaticArraySubscriptException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn)); |
| EXTERN void M2RTS_DynamicArraySubscriptException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn)); |
| EXTERN void M2RTS_ForLoopBeginException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn)); |
| EXTERN void M2RTS_ForLoopToException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn)); |
| EXTERN void M2RTS_ForLoopEndException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn)); |
| EXTERN void M2RTS_PointerNilException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn)); |
| EXTERN void M2RTS_NoReturnException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn)); |
| EXTERN void M2RTS_CaseException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn)); |
| EXTERN void M2RTS_WholeNonPosDivException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn)); |
| EXTERN void M2RTS_WholeNonPosModException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn)); |
| EXTERN void M2RTS_WholeZeroDivException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn)); |
| EXTERN void M2RTS_WholeZeroRemException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn)); |
| EXTERN void M2RTS_WholeValueException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn)); |
| EXTERN void M2RTS_RealValueException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn)); |
| EXTERN void M2RTS_ParameterException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn)); |
| EXTERN void M2RTS_NoException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn)); |
| # ifdef __cplusplus |
| } |
| # endif |
| |
| # undef EXTERN |
| #endif |