Wno-implicit-function-declaration no longer needed
[AROS-Contrib.git] / regina / strings.h
blobdf53fcf923e975bacaf9164fc2ee332a90e2903c
1 /*
2 * The Regina Rexx Interpreter
3 * Copyright (C) 1992-1994 Anders Christensen <anders@pvv.unit.no>
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 #ifndef _STRINGS_ALREADY_DEFINED_
20 #define _STRINGS_ALREADY_DEFINED_
22 typedef struct strengtype {
23 int len, max ;
24 #ifdef CHECK_MEMORY /* FGC: Test */
25 char *value;
26 #else
27 char value[4] ;
28 #endif
29 } streng ;
32 * Some strange define's to allow constant strengs to be defined. They will
33 * be accessible as pointers.
35 #ifdef CHECK_MEMORY
36 # define conststreng(name,value) const streng __regina__##name = { sizeof( value ) - 1, \
37 sizeof( value ) - 1, \
38 value }; \
39 const streng *name = (const streng *) &__regina__##name
40 # define staticstreng(name,value) static streng x_##name = { sizeof( value ) - 1, \
41 sizeof( value ) - 1, \
42 value }; \
43 const static streng *name = (const streng *) &x_##name
44 #else
45 # define conststreng(name,value) const struct { \
46 int len, max; \
47 char content[sizeof( value )]; \
48 } x__regina__##name = { sizeof( value ) - 1, \
49 sizeof( value ) - 1, \
50 value }; \
51 const streng *name = (streng *) &x__regina__##name
52 # define staticstreng(name,value) static struct { \
53 int len, max; \
54 char content[sizeof( value )]; \
55 } x_##name = { sizeof( value ) - 1, \
56 sizeof( value ) - 1, \
57 value }; \
58 static const streng *name = (const streng *) &x_##name
59 #endif
60 #define STRENG_TYPEDEFED 1
62 #define Str_len(a) ((a)->len)
63 #define Str_max(a) ((a)->max)
64 #define Str_val(a) ((a)->value)
65 #define Str_in(a,b) (Str_len(a)>(b))
66 #define Str_end(a) ((a)->value+Str_len(a))
67 #define Str_zero(a) ((Str_len(a)<Str_max(a)) && ((a)->value[(a)->len]==0x00))
70 #define STRHEAD (1+(sizeof(int)<<1))
73 typedef struct num_descr_type
75 char *num ; /* pointer to matissa of precision + 1 */
76 int negative ; /* boolean, true if negative number */
77 int exp ; /* value of exponent */
78 int size ; /* how much of num is actually used */
79 int max ; /* how much can num actually take */
82 * The number has an absolute value of
83 * *********************
84 * * "0."<num>"E"<exp> *
85 * *********************
86 * Only size byte of num are used.
88 * The number of used digits depends on its usage. In general, it's a good
89 * idea to use the standard value. used_digits shall be reset after each
90 * computation and may or may not be respected. It shall be respected, and
91 * this is the intention, by str_norm and all other function which make
92 * a string from the number accidently. Functions like string_add may
93 * or may not use this value.
94 * fixes bug 675395
96 int used_digits;
97 } num_descr ;
100 #endif /* _STRINGS_ALREADY_INCLUDED_ */