| /* do not edit automatically generated by mc from varargs. */ |
| /* varargs.def provides a basic vararg facility for GNU Modula-2. |
| |
| Copyright (C) 2015-2023 Free Software Foundation, Inc. |
| Contributed by Gaius Mulley <gaius@glam.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. |
| |
| You should have received a copy of the GNU General Public License |
| along with GNU Modula-2; see the file COPYING3. If not see |
| <http://www.gnu.org/licenses/>. */ |
| |
| |
| #if !defined (_varargs_H) |
| # define _varargs_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 (_varargs_C) |
| # define EXTERN |
| # else |
| # define EXTERN extern |
| # endif |
| |
| #if !defined (varargs_vararg_D) |
| # define varargs_vararg_D |
| typedef void *varargs_vararg; |
| #endif |
| |
| |
| /* |
| nargs - returns the number of arguments wrapped in, v. |
| */ |
| |
| EXTERN unsigned int varargs_nargs (varargs_vararg v); |
| |
| /* |
| arg - fills in, a, with the next argument. The size of, a, must |
| be an exact match with the original vararg parameter. |
| */ |
| |
| EXTERN void varargs_arg (varargs_vararg v, unsigned char *a, unsigned int _a_high); |
| |
| /* |
| next - assigns the next arg to be collected as, i. |
| */ |
| |
| EXTERN void varargs_next (varargs_vararg v, unsigned int i); |
| |
| /* |
| copy - returns a copy of, v. |
| */ |
| |
| EXTERN varargs_vararg varargs_copy (varargs_vararg v); |
| |
| /* |
| replace - fills the next argument with, a. The size of, a, |
| must be an exact match with the original vararg |
| parameter. |
| */ |
| |
| EXTERN void varargs_replace (varargs_vararg v, unsigned char *a, unsigned int _a_high); |
| |
| /* |
| end - destructor for vararg, v. |
| */ |
| |
| EXTERN void varargs_end (varargs_vararg *v); |
| |
| /* |
| start1 - wraps up argument, a, into a vararg. |
| */ |
| |
| EXTERN varargs_vararg varargs_start1 (const unsigned char *a_, unsigned int _a_high); |
| |
| /* |
| start2 - wraps up arguments, a, b, into a vararg. |
| */ |
| |
| EXTERN varargs_vararg varargs_start2 (const unsigned char *a_, unsigned int _a_high, const unsigned char *b_, unsigned int _b_high); |
| |
| /* |
| start3 - wraps up arguments, a, b, c, into a vararg. |
| */ |
| |
| EXTERN varargs_vararg varargs_start3 (const unsigned char *a_, unsigned int _a_high, const unsigned char *b_, unsigned int _b_high, const unsigned char *c_, unsigned int _c_high); |
| |
| /* |
| start4 - wraps up arguments, a, b, c, d, into a vararg. |
| */ |
| |
| EXTERN varargs_vararg varargs_start4 (const unsigned char *a_, unsigned int _a_high, const unsigned char *b_, unsigned int _b_high, const unsigned char *c_, unsigned int _c_high, const unsigned char *d_, unsigned int _d_high); |
| # ifdef __cplusplus |
| } |
| # endif |
| |
| # undef EXTERN |
| #endif |