2 * Generic Call Interface for Rexx
3 * Copyright © 2003-2004, Florian Große-Coosmann
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Library General Public
7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version.
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Library General Public License for more details.
15 * You should have received a copy of the GNU Library General Public
16 * License along with this library; if not, write to the Free
17 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19 * ----------------------------------------------------------------------------
21 * This file configures the number converting system. Have a look at
22 * gci_convert.c for the requirements. This file must include gci.h.
32 #define NEED_STRTOBIGL
33 #define NEED_STRTOBIGUL
35 #define GCI_Ir(s,p,b) strtobigl( hidden, s, p, b )
36 #define GCI_Iw(s,v) sprintf( s, "%Ld", v )
37 #define GCI_I_1 signed char
38 #define GCI_I_1m SCHAR_MIN
39 #define GCI_I_1M SCHAR_MAX
40 #define GCI_I_2 signed short
41 #define GCI_I_2m SHRT_MIN
42 #define GCI_I_2M SHRT_MAX
43 #define GCI_I_4 signed int
44 #define GCI_I_4m INT_MIN
45 #define GCI_I_4M INT_MAX
46 #define GCI_I_8 signed __int64
47 #define GCI_I_8m LONGLONG_MIN
48 #define GCI_I_8M LONGLONG_MAX
50 #define GCI_Ur(s,p,b) strtobigul( hidden, s, p, b )
51 #define GCI_Uw(s,v) sprintf( s, "%Lu", v )
52 #define GCI_U_1 unsigned char
53 #define GCI_U_1M UCHAR_MAX
54 #define GCI_U_2 unsigned short
55 #define GCI_U_2M USHRT_MAX
56 #define GCI_U_4 unsigned
57 #define GCI_U_4M UINT_MAX
58 #define GCI_U_8 unsigned __int64
59 #define GCI_U_8M ULONGLONG_MAX
62 #define GCI_Fw(s,v) sprintf( s, "%.*lE", LDBL_MANT_DIG/3, v )
64 #define GCI_F_4m (-FLT_MAX)
65 #define GCI_F_4M FLT_MAX
66 #define GCI_F_8 double
67 #define GCI_F_8m (-DBL_MAX)
68 #define GCI_F_8M DBL_MAX
71 ******************************************************************************
75 * GCI_STACK_ELEMENT sets integral type of a stack element. This is typically
78 #define GCI_STACK_ELEMENT unsigned
81 * GCI_LITTLE_ENDIAN must be set to 1 or 0 depending on whether little endian
82 * or big endian is the machine's representation.
83 * In doubt, select 1 for Intel compatibles and 0 for others.
85 #define GCI_LITTLE_ENDIAN 1
88 * GCI_ARGS shall be the maximum number of GCI_STACK_ELEMENTs which shall
89 * be passed on the stack. This is usually the base type of maximum width
90 * (e.g. long long or long double) / sizeof(unsigned) * GCI_REXX_ARGS.
91 * But you can't use sizeof(), therefore you have to compute it by hand.
92 * 4 * GCI_REXX_ARGS is an upper maximum for all useful systems I can imagine.
94 #define GCI_ARGS 50 /* 25 full sized arguments */
97 * GCI_PASSARGS is a macro which enumerates GCI_ARGS args of an array which
98 * is passed to the macro. I don't know a good ANSI macro for this purpose.
99 * Feel free to provide it!
101 #define GCI_PASSARGS(a) a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],\
102 a[10],a[11],a[12],a[13],a[14],a[15],a[16],a[17],a[18],\
103 a[19],a[20],a[21],a[22],a[23],a[24],a[25],a[26],a[27],\
104 a[28],a[29],a[30],a[31],a[32],a[33],a[34],a[35],a[36],\
105 a[37],a[38],a[39],a[40],a[41],a[42],a[43],a[44],a[45],\
106 a[46],a[47],a[48],a[49]