Subversion Repositories QNX 8.QNX8 IFS tool

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
26 pmbaty 1
/* ACC -- Automatic Compiler Configuration
2
 
3
   Copyright (C) 1996-2004 Markus Franz Xaver Johannes Oberhumer
4
   All Rights Reserved.
5
 
6
   This software is a copyrighted work licensed under the terms of
7
   the GNU General Public License. Please consult the file "ACC_LICENSE"
8
   for details.
9
 
10
   Markus F.X.J. Oberhumer
11
   <markus@oberhumer.com>
12
   http://www.oberhumer.com/
13
 */
14
 
15
 
16
#ifndef __ACC_LIB_H_INCLUDED
17
#define __ACC_LIB_H_INCLUDED 1
18
 
19
 
20
#if !defined(__ACCLIB_FUNCNAME)
21
#  define __ACCLIB_FUNCNAME(f)  f
22
#endif
23
#if !defined(ACCLIB_EXTERN)
24
#  define ACCLIB_EXTERN(r,f)    extern r __ACCLIB_FUNCNAME(f)
25
#endif
26
 
27
 
28
#if !defined(__ACCLIB_CONST_CAST_RETURN)
29
#if (ACC_CC_GNUC)
30
#  define __ACCLIB_CONST_CAST_RETURN(type,var) \
31
        { union { type a; const type b; } u; u.b = (var); return u.a; }
32
#else
33
#  define __ACCLIB_CONST_CAST_RETURN(type,var) return (type) (var);
34
#endif
35
#endif
36
 
37
 
38
#if (ACC_OS_WIN64)
39
#  define acclib_handle_t       acc_int64l_t
40
#  define acclib_uhandle_t      acc_uint64l_t
41
#elif (ACC_ARCH_IA32 && ACC_CC_MSC && (_MSC_VER >= 1300))
42
   typedef __w64 long           acclib_handle_t;
43
   typedef __w64 unsigned long  acclib_uhandle_t;
44
#  define acclib_handle_t       acclib_handle_t
45
#  define acclib_uhandle_t      acclib_uhandle_t
46
#else
47
#  define acclib_handle_t       long
48
#  define acclib_uhandle_t      unsigned long
49
#endif
50
 
51
 
52
/*************************************************************************
53
// wrap <ctype.h>
54
**************************************************************************/
55
 
56
#if 0
57
ACCLIB_EXTERN(int, acc_ascii_digit)   (int);
58
ACCLIB_EXTERN(int, acc_ascii_islower) (int);
59
ACCLIB_EXTERN(int, acc_ascii_isupper) (int);
60
ACCLIB_EXTERN(int, acc_ascii_tolower) (int);
61
ACCLIB_EXTERN(int, acc_ascii_toupper) (int);
62
ACCLIB_EXTERN(int, acc_ascii_utolower) (int);
63
ACCLIB_EXTERN(int, acc_ascii_utoupper) (int);
64
#endif
65
 
66
#define acc_ascii_isdigit(c)    (((unsigned)(c) - 48) < 10)
67
#define acc_ascii_islower(c)    (((unsigned)(c) - 97) < 26)
68
#define acc_ascii_isupper(c)    (((unsigned)(c) - 65) < 26)
69
#define acc_ascii_tolower(c)    ((int)(c) + (acc_ascii_isupper(c) << 5))
70
#define acc_ascii_toupper(c)    ((int)(c) - (acc_ascii_islower(c) << 5))
71
 
72
#define acc_ascii_utolower(c)   acc_ascii_tolower((unsigned char)(c))
73
#define acc_ascii_utoupper(c)   acc_ascii_toupper((unsigned char)(c))
74
 
75
 
76
/*************************************************************************
77
// huge pointer layer
78
**************************************************************************/
79
 
80
#ifndef acc_hsize_t
81
#if (ACC_HAVE_MM_HUGE_PTR)
82
#  define acc_hsize_t  unsigned long
83
#  define acc_hvoid_p  void __huge *
84
#  define acc_hchar_p  char __huge *
85
#  define acc_hchar_pp char __huge * __huge *
86
#  define acc_hbyte_p  unsigned char __huge *
87
#else
88
#  define acc_hsize_t  size_t
89
#  define acc_hvoid_p  void *
90
#  define acc_hchar_p  char *
91
#  define acc_hchar_pp char **
92
#  define acc_hbyte_p  unsigned char *
93
#endif
94
#endif
95
#ifndef ACC_FILE_P
96
#define ACC_FILE_P FILE *
97
#endif
98
 
99
/* halloc */
100
ACCLIB_EXTERN(acc_hvoid_p, acc_halloc) (acc_hsize_t);
101
ACCLIB_EXTERN(void, acc_hfree) (acc_hvoid_p);
102
 
103
/* dos_alloc */
104
#if (ACC_OS_DOS16 || ACC_OS_OS216)
105
ACCLIB_EXTERN(void __far*, acc_dos_alloc) (unsigned long);
106
ACCLIB_EXTERN(int, acc_dos_free) (void __far*);
107
#endif
108
 
109
/* string */
110
ACCLIB_EXTERN(int, acc_hmemcmp) (const acc_hvoid_p, const acc_hvoid_p, acc_hsize_t);
111
ACCLIB_EXTERN(acc_hvoid_p, acc_hmemcpy) (acc_hvoid_p, const acc_hvoid_p, acc_hsize_t);
112
ACCLIB_EXTERN(acc_hvoid_p, acc_hmemmove) (acc_hvoid_p, const acc_hvoid_p, acc_hsize_t);
113
ACCLIB_EXTERN(acc_hvoid_p, acc_hmemset) (acc_hvoid_p, int, acc_hsize_t);
114
 
115
/* string */
116
ACCLIB_EXTERN(acc_hsize_t, acc_hstrlen) (const acc_hchar_p);
117
ACCLIB_EXTERN(int, acc_hstrcmp) (const acc_hchar_p, const acc_hchar_p);
118
ACCLIB_EXTERN(int, acc_hstrncmp)(const acc_hchar_p, const acc_hchar_p, acc_hsize_t);
119
ACCLIB_EXTERN(int, acc_ascii_hstricmp) (const acc_hchar_p, const acc_hchar_p);
120
ACCLIB_EXTERN(int, acc_ascii_hstrnicmp)(const acc_hchar_p, const acc_hchar_p, acc_hsize_t);
121
ACCLIB_EXTERN(int, acc_ascii_hmemicmp) (const acc_hvoid_p, const acc_hvoid_p, acc_hsize_t);
122
ACCLIB_EXTERN(acc_hchar_p, acc_hstrstr) (const acc_hchar_p, const acc_hchar_p);
123
ACCLIB_EXTERN(acc_hchar_p, acc_ascii_hstristr) (const acc_hchar_p, const acc_hchar_p);
124
ACCLIB_EXTERN(acc_hvoid_p, acc_hmemmem) (const acc_hvoid_p, acc_hsize_t, const acc_hvoid_p, acc_hsize_t);
125
ACCLIB_EXTERN(acc_hvoid_p, acc_ascii_hmemimem) (const acc_hvoid_p, acc_hsize_t, const acc_hvoid_p, acc_hsize_t);
126
ACCLIB_EXTERN(acc_hchar_p, acc_hstrcpy) (acc_hchar_p, const acc_hchar_p);
127
ACCLIB_EXTERN(acc_hchar_p, acc_hstrcat) (acc_hchar_p, const acc_hchar_p);
128
ACCLIB_EXTERN(acc_hsize_t, acc_hstrlcpy) (acc_hchar_p, const acc_hchar_p, acc_hsize_t);
129
ACCLIB_EXTERN(acc_hsize_t, acc_hstrlcat) (acc_hchar_p, const acc_hchar_p, acc_hsize_t);
130
ACCLIB_EXTERN(int, acc_hstrscpy) (acc_hchar_p, const acc_hchar_p, acc_hsize_t);
131
ACCLIB_EXTERN(int, acc_hstrscat) (acc_hchar_p, const acc_hchar_p, acc_hsize_t);
132
ACCLIB_EXTERN(acc_hchar_p, acc_hstrccpy) (acc_hchar_p, const acc_hchar_p, int);
133
ACCLIB_EXTERN(acc_hvoid_p, acc_hmemccpy) (acc_hvoid_p, const acc_hvoid_p, int, acc_hsize_t);
134
ACCLIB_EXTERN(acc_hchar_p, acc_hstrchr)  (const acc_hchar_p, int);
135
ACCLIB_EXTERN(acc_hchar_p, acc_hstrrchr) (const acc_hchar_p, int);
136
ACCLIB_EXTERN(acc_hchar_p, acc_ascii_hstrichr) (const acc_hchar_p, int);
137
ACCLIB_EXTERN(acc_hchar_p, acc_ascii_hstrrichr) (const acc_hchar_p, int);
138
ACCLIB_EXTERN(acc_hvoid_p, acc_hmemchr)  (const acc_hvoid_p, int, acc_hsize_t);
139
ACCLIB_EXTERN(acc_hvoid_p, acc_hmemrchr) (const acc_hvoid_p, int, acc_hsize_t);
140
ACCLIB_EXTERN(acc_hvoid_p, acc_ascii_hmemichr) (const acc_hvoid_p, int, acc_hsize_t);
141
ACCLIB_EXTERN(acc_hvoid_p, acc_ascii_hmemrichr) (const acc_hvoid_p, int, acc_hsize_t);
142
ACCLIB_EXTERN(acc_hsize_t, acc_hstrspn)  (const acc_hchar_p, const acc_hchar_p);
143
ACCLIB_EXTERN(acc_hsize_t, acc_hstrrspn) (const acc_hchar_p, const acc_hchar_p);
144
ACCLIB_EXTERN(acc_hsize_t, acc_hstrcspn)  (const acc_hchar_p, const acc_hchar_p);
145
ACCLIB_EXTERN(acc_hsize_t, acc_hstrrcspn) (const acc_hchar_p, const acc_hchar_p);
146
ACCLIB_EXTERN(acc_hchar_p, acc_hstrpbrk)  (const acc_hchar_p, const acc_hchar_p);
147
ACCLIB_EXTERN(acc_hchar_p, acc_hstrrpbrk) (const acc_hchar_p, const acc_hchar_p);
148
ACCLIB_EXTERN(acc_hchar_p, acc_hstrsep)  (acc_hchar_pp, const acc_hchar_p);
149
ACCLIB_EXTERN(acc_hchar_p, acc_hstrrsep) (acc_hchar_pp, const acc_hchar_p);
150
ACCLIB_EXTERN(acc_hchar_p, acc_ascii_hstrlwr) (acc_hchar_p);
151
ACCLIB_EXTERN(acc_hchar_p, acc_ascii_hstrupr) (acc_hchar_p);
152
ACCLIB_EXTERN(acc_hvoid_p, acc_ascii_hmemlwr) (acc_hvoid_p, acc_hsize_t);
153
ACCLIB_EXTERN(acc_hvoid_p, acc_ascii_hmemupr) (acc_hvoid_p, acc_hsize_t);
154
 
155
/* stdio */
156
ACCLIB_EXTERN(acc_hsize_t, acc_hfread) (ACC_FILE_P, acc_hvoid_p, acc_hsize_t);
157
ACCLIB_EXTERN(acc_hsize_t, acc_hfwrite) (ACC_FILE_P, const acc_hvoid_p, acc_hsize_t);
158
 
159
/* io */
160
#if (ACC_HAVE_MM_HUGE_PTR)
161
ACCLIB_EXTERN(long, acc_hread) (int, acc_hvoid_p, long);
162
ACCLIB_EXTERN(long, acc_hwrite) (int, const acc_hvoid_p, long);
163
#endif
164
ACCLIB_EXTERN(long, acc_safe_hread) (int, acc_hvoid_p, long);
165
ACCLIB_EXTERN(long, acc_safe_hwrite) (int, const acc_hvoid_p, long);
166
 
167
 
168
/*************************************************************************
169
// wrap filename limits
170
**************************************************************************/
171
 
172
/* maximum length of full pathname (excl. '\0') */
173
#if !defined(ACC_FN_PATH_MAX)
174
#if (ACC_OS_DOS16 || ACC_OS_WIN16)
175
#  define ACC_FN_PATH_MAX   143
176
#elif (ACC_OS_DOS32 || ACC_OS_OS2 || ACC_OS_OS216 || ACC_OS_WIN32 || ACC_OS_WIN64)
177
#  define ACC_FN_PATH_MAX   259
178
#elif (ACC_OS_TOS)
179
#  define ACC_FN_PATH_MAX   259
180
#endif
181
#endif
182
#if !defined(ACC_FN_PATH_MAX)
183
   /* arbitrary limit for acclib implementation */
184
#  define ACC_FN_PATH_MAX   1024
185
#endif
186
 
187
/* maximum length of a filename (a single path component) (excl. '\0') */
188
#if !defined(ACC_FN_NAME_MAX)
189
#if (ACC_OS_DOS16 || ACC_OS_WIN16)
190
#  define ACC_FN_NAME_MAX   12
191
#elif (ACC_OS_TOS && (ACC_CC_PUREC || ACC_CC_TURBOC))
192
#  define ACC_FN_NAME_MAX   12
193
#elif (ACC_OS_DOS32 && ACC_CC_GNUC) && defined(__DJGPP__)
194
#elif (ACC_OS_DOS32)
195
#  define ACC_FN_NAME_MAX   12
196
#endif
197
#endif
198
#if !defined(ACC_FN_NAME_MAX)
199
#  define ACC_FN_NAME_MAX   ACC_FN_PATH_MAX
200
#endif
201
 
202
 
203
#define ACC_FNMATCH_NOESCAPE        1
204
#define ACC_FNMATCH_PATHNAME        2
205
#define ACC_FNMATCH_PATHSTAR        4
206
#define ACC_FNMATCH_PERIOD          8
207
#define ACC_FNMATCH_ASCII_CASEFOLD  16
208
ACCLIB_EXTERN(int, acc_fnmatch) (const acc_hchar_p, const acc_hchar_p, int);
209
 
210
 
211
/*************************************************************************
212
// wrap <dirent.h>
213
**************************************************************************/
214
 
215
#undef __ACCLIB_USE_OPENDIR
216
#if (HAVE_DIRENT_H || ACC_CC_WATCOMC)
217
#  define __ACCLIB_USE_OPENDIR 1
218
#  if (ACC_OS_DOS32 && defined(__BORLANDC__))
219
#  elif (ACC_OS_DOS32 && ACC_CC_GNUC) && defined(__DJGPP__)
220
#  elif (ACC_OS_OS2 || ACC_OS_OS216)
221
#  elif (ACC_OS_TOS && ACC_CC_GNUC)
222
#  elif (ACC_OS_WIN32 && !defined(ACC_HAVE_WINDOWS_H))
223
#  elif (ACC_OS_DOS16 || ACC_OS_DOS32 || ACC_OS_OS2 || ACC_OS_OS216 || ACC_OS_TOS || ACC_OS_WIN16 || ACC_OS_WIN32 || ACC_OS_WIN64)
224
#    undef __ACCLIB_USE_OPENDIR
225
#  endif
226
#endif
227
 
228
 
229
typedef struct
230
{
231
#if defined(__ACCLIB_USE_OPENDIR)
232
    void *u_dirp; /* private */
233
# if (ACC_CC_WATCOMC)
234
    unsigned short f_time;
235
    unsigned short f_date;
236
    unsigned long f_size;
237
# endif
238
    char f_name[ACC_FN_NAME_MAX+1];
239
#elif (ACC_OS_WIN32 || ACC_OS_WIN64)
240
    acclib_handle_t u_handle; /* private */
241
    unsigned f_attr;
242
    unsigned f_size_low;
243
    unsigned f_size_high;
244
    char f_name[ACC_FN_NAME_MAX+1];
245
#elif (ACC_OS_DOS16 || ACC_OS_DOS32 || ACC_OS_TOS || ACC_OS_WIN16)
246
    char u_dta[21]; /* private */
247
    unsigned char f_attr;
248
    unsigned short f_time;
249
    unsigned short f_date;
250
    unsigned short f_size_low;
251
    unsigned short f_size_high;
252
    char f_name[ACC_FN_NAME_MAX+1];
253
    char u_dirp; /* private */
254
#else
255
    void *u_dirp; /* private */
256
    char f_name[ACC_FN_NAME_MAX+1];
257
#endif
258
} acc_dir_t;
259
 
260
#ifndef acc_dir_p
261
#define acc_dir_p acc_dir_t *
262
#endif
263
 
264
ACCLIB_EXTERN(int, acc_opendir)  (acc_dir_p, const char*);
265
ACCLIB_EXTERN(int, acc_readdir)  (acc_dir_p);
266
ACCLIB_EXTERN(int, acc_closedir) (acc_dir_p);
267
 
268
 
269
/*************************************************************************
270
// wrap misc
271
**************************************************************************/
272
 
273
#if (ACC_CC_GNUC) && (defined(__CYGWIN__) || defined(__MINGW32__))
274
#  define acc_alloca(x)     __builtin_alloca((x))
275
#elif (ACC_CC_BORLANDC) && defined(__linux__)
276
  /* FIXME: alloca does not work */
277
#elif (HAVE_ALLOCA)
278
#  define acc_alloca(x)     alloca((x))
279
#endif
280
 
281
#if (ACC_OS_DOS32 && ACC_CC_GNUC) && defined(__DJGPP__)
282
#  define acc_stackavail()  stackavail()
283
#elif (ACC_ARCH_IA16 && ACC_CC_BORLANDC && (__BORLANDC__ >= 0x0410))
284
#  define acc_stackavail()  stackavail()
285
#elif (ACC_ARCH_IA16 && ACC_CC_BORLANDC && (__BORLANDC__ >= 0x0400))
286
#  if (ACC_OS_WIN16) && (ACC_MM_TINY || ACC_MM_SMALL || ACC_MM_MEDIUM)
287
#  else
288
#    define acc_stackavail()  stackavail()
289
#  endif
290
#elif ((ACC_ARCH_IA16 || ACC_ARCH_IA32) && (ACC_CC_DMC || ACC_CC_SYMANTECC))
291
#  define acc_stackavail()  stackavail()
292
#elif ((ACC_ARCH_IA16) && ACC_CC_MSC && (_MSC_VER >= 700))
293
#  define acc_stackavail()  _stackavail()
294
#elif ((ACC_ARCH_IA16) && ACC_CC_MSC)
295
#  define acc_stackavail()  stackavail()
296
#elif ((ACC_ARCH_IA16 || ACC_ARCH_IA32) && ACC_CC_TURBOC && (__TURBOC__ >= 0x0450))
297
#  define acc_stackavail()  stackavail()
298
#elif (ACC_ARCH_IA16 && ACC_CC_TURBOC && (__TURBOC__ >= 0x0400))
299
   ACC_EXTERN_C size_t __cdecl stackavail(void);
300
#  define acc_stackavail()  stackavail()
301
#elif ((ACC_ARCH_IA16 || ACC_ARCH_IA32) && (ACC_CC_WATCOMC))
302
#  define acc_stackavail()  stackavail()
303
#elif (ACC_ARCH_IA16 && ACC_CC_ZORTECHC)
304
#  define acc_stackavail()  _chkstack()
305
#endif
306
 
307
ACCLIB_EXTERN(acclib_handle_t, acc_get_osfhandle) (int);
308
ACCLIB_EXTERN(int, acc_isatty) (int);
309
ACCLIB_EXTERN(int, acc_mkdir) (const char*, unsigned);
310
ACCLIB_EXTERN(int, acc_response) (int*, char***);
311
ACCLIB_EXTERN(int, acc_set_binmode) (int, int);
312
 
313
ACCLIB_EXTERN(acc_int32l_t, acc_muldiv32) (acc_int32l_t, acc_int32l_t, acc_int32l_t);
314
ACCLIB_EXTERN(acc_uint32l_t, acc_umuldiv32) (acc_uint32l_t, acc_uint32l_t, acc_uint32l_t);
315
 
316
ACCLIB_EXTERN(void, acc_wildargv) (int*, char***);
317
 
318
 
319
/*************************************************************************
320
// uclock (real, i.e. "wall" clock)
321
**************************************************************************/
322
 
323
#if defined(acc_int32e_t)
324
ACCLIB_EXTERN(int, acc_tsc_read) (acc_uint32e_t*);
325
ACCLIB_EXTERN(int, acc_tsc_read_add) (acc_uint32e_t*);
326
#endif
327
 
328
 
329
typedef struct { /* all private */
330
    acclib_handle_t h;
331
    int mode;
332
#if (ACC_HAVE_WINDOWS_H) && defined(acc_int64l_t)
333
    double qpf;
334
#endif
335
} acc_uclock_handle_t;
336
 
337
typedef struct { /* all private */
338
    union {
339
        acc_uint32l_t t32;
340
#if !(ACC_OS_DOS16 || ACC_OS_WIN16)
341
        double td;
342
#  if defined(acc_int64l_t)
343
        acc_int64l_t t64;
344
#  endif
345
#endif
346
    } ticks;
347
#if (ACC_HAVE_WINDOWS_H) && defined(acc_int64l_t)
348
    acc_int64l_t qpc;
349
#endif
350
} acc_uclock_t;
351
 
352
#ifndef acc_uclock_handle_p
353
#define acc_uclock_handle_p acc_uclock_handle_t *
354
#endif
355
#ifndef acc_uclock_p
356
#define acc_uclock_p acc_uclock_t *
357
#endif
358
 
359
ACCLIB_EXTERN(int, acc_uclock_open)  (acc_uclock_handle_p);
360
ACCLIB_EXTERN(int, acc_uclock_close) (acc_uclock_handle_p);
361
ACCLIB_EXTERN(void, acc_uclock_read) (acc_uclock_handle_p, acc_uclock_p);
362
ACCLIB_EXTERN(double, acc_uclock_get_elapsed) (acc_uclock_handle_p, const acc_uclock_p, const acc_uclock_p);
363
 
364
 
365
/*************************************************************************
366
// performance counters (virtual clock)
367
**************************************************************************/
368
 
369
#if defined(acc_int64l_t)
370
 
371
typedef struct { /* all private */
372
    void* h;
373
    unsigned cpu_type, cpu_features, cpu_khz, cpu_nrctrs;
374
    const char* cpu_name;
375
} acc_perfctr_handle_t;
376
 
377
typedef struct {
378
    acc_uint64l_t tsc;
379
#if (ACC_OS_POSIX_LINUX)
380
    acc_uint64l_t pmc[18];
381
#else
382
    acc_uint64l_t pmc[1];
383
#endif
384
} acc_perfctr_clock_t;
385
 
386
#ifndef acc_perfctr_handle_p
387
#define acc_perfctr_handle_p acc_perfctr_handle_t *
388
#endif
389
#ifndef acc_perfctr_clock_p
390
#define acc_perfctr_clock_p acc_perfctr_clock_t *
391
#endif
392
 
393
ACCLIB_EXTERN(int, acc_perfctr_open)  (acc_perfctr_handle_p);
394
ACCLIB_EXTERN(int, acc_perfctr_close) (acc_perfctr_handle_p);
395
ACCLIB_EXTERN(void, acc_perfctr_read) (acc_perfctr_handle_p, acc_perfctr_clock_p);
396
ACCLIB_EXTERN(double, acc_perfctr_get_elapsed) (acc_perfctr_handle_p, const acc_perfctr_clock_p, const acc_perfctr_clock_p);
397
ACCLIB_EXTERN(double, acc_perfctr_get_elapsed_tsc) (acc_perfctr_handle_p, acc_uint64l_t);
398
 
399
#endif
400
 
401
 
402
/*************************************************************************
403
// Big Endian / Little Endian
404
**************************************************************************/
405
 
406
ACCLIB_EXTERN(unsigned, acc_get_be16) (const acc_hvoid_p);
407
ACCLIB_EXTERN(acc_uint32l_t, acc_get_be24) (const acc_hvoid_p);
408
ACCLIB_EXTERN(acc_uint32l_t, acc_get_be32) (const acc_hvoid_p);
409
ACCLIB_EXTERN(void, acc_set_be16) (acc_hvoid_p, unsigned);
410
ACCLIB_EXTERN(void, acc_set_be24) (acc_hvoid_p, acc_uint32l_t);
411
ACCLIB_EXTERN(void, acc_set_be32) (acc_hvoid_p, acc_uint32l_t);
412
ACCLIB_EXTERN(unsigned, acc_get_le16) (const acc_hvoid_p);
413
ACCLIB_EXTERN(acc_uint32l_t, acc_get_le24) (const acc_hvoid_p);
414
ACCLIB_EXTERN(acc_uint32l_t, acc_get_le32) (const acc_hvoid_p);
415
ACCLIB_EXTERN(void, acc_set_le16) (acc_hvoid_p, unsigned);
416
ACCLIB_EXTERN(void, acc_set_le24) (acc_hvoid_p, acc_uint32l_t);
417
ACCLIB_EXTERN(void, acc_set_le32) (acc_hvoid_p, acc_uint32l_t);
418
#if defined(acc_uint64l_t)
419
ACCLIB_EXTERN(acc_uint64l_t, acc_get_be64) (const acc_hvoid_p);
420
ACCLIB_EXTERN(void, acc_set_be64) (acc_hvoid_p, acc_uint64l_t);
421
ACCLIB_EXTERN(acc_uint64l_t, acc_get_le64) (const acc_hvoid_p);
422
ACCLIB_EXTERN(void, acc_set_le64) (acc_hvoid_p, acc_uint64l_t);
423
#endif
424
 
425
/* inline versions */
426
#if (ACC_ARCH_AMD64 || ACC_ARCH_IA32)
427
#  define ACC_GET_LE16(p)       (* (const unsigned short *) (p))
428
#  define ACC_GET_LE32(p)       (* (const acc_uint32e_t *) (p))
429
#  define ACC_SET_LE16(p,v)     (* (unsigned short *) (p) = (unsigned short) (v))
430
#  define ACC_SET_LE32(p,v)     (* (acc_uint32e_t *) (p) = (acc_uint32e_t) (v))
431
#endif
432
#if (ACC_ARCH_AMD64)
433
#  define ACC_GET_LE64(p)       (* (const acc_uint64l_t *) (p))
434
#  define ACC_SET_LE64(p,v)     (* (acc_uint64l_t *) (p) = (acc_uint64l_t) (v))
435
#endif
436
 
437
 
438
/*************************************************************************
439
// getopt
440
**************************************************************************/
441
 
442
typedef struct {
443
    const char* name;
444
    int has_arg;
445
    int* flag;
446
    int val;
447
} acc_getopt_longopt_t;
448
#ifndef acc_getopt_longopt_p
449
#define acc_getopt_longopt_p acc_getopt_longopt_t *
450
#endif
451
 
452
typedef struct {
453
    int go_argc;
454
    char** go_argv;
455
    const char* go_shortopts;
456
    const acc_getopt_longopt_p longopts;
457
#if (ACC_BROKEN_CDECL_ALT_SYNTAX)
458
    int __acc_cdecl_va (*go_error)(const char *, ...);
459
#else
460
    int (__acc_cdecl_va *go_error)(const char *, ...);
461
#endif
462
} acc_getopt_t;
463
#ifndef acc_getopt_p
464
#define acc_getopt_p acc_getopt_t *
465
#endif
466
 
467
ACCLIB_EXTERN(void, acc_getopt_init) (acc_getopt_p);
468
ACCLIB_EXTERN(int, acc_getopt) (acc_getopt_p);
469
ACCLIB_EXTERN(void, acc_getopt_close)(acc_getopt_p);
470
 
471
 
472
/*************************************************************************
473
// rand
474
**************************************************************************/
475
 
476
typedef struct { /* all private */
477
    acc_uint32l_t seed;
478
} acc_rand31_t;
479
#ifndef acc_rand31_p
480
#define acc_rand31_p acc_rand31_t *
481
#endif
482
ACCLIB_EXTERN(void, acc_srand31) (acc_rand31_p, acc_uint32l_t);
483
ACCLIB_EXTERN(acc_uint32l_t, acc_rand31) (acc_rand31_p);
484
 
485
#if defined(acc_uint64l_t)
486
typedef struct { /* all private */
487
    acc_uint64l_t seed;
488
} acc_rand48_t;
489
#ifndef acc_rand48_p
490
#define acc_rand48_p acc_rand48_t *
491
#endif
492
ACCLIB_EXTERN(void, acc_srand48) (acc_rand48_p, acc_uint32l_t);
493
ACCLIB_EXTERN(acc_uint32l_t, acc_rand48) (acc_rand48_p);
494
ACCLIB_EXTERN(acc_uint32l_t, acc_rand48_r32) (acc_rand48_p);
495
#endif
496
 
497
#if defined(acc_uint64l_t)
498
typedef struct { /* all private */
499
    acc_uint64l_t seed;
500
} acc_rand64_t;
501
#ifndef acc_rand64_p
502
#define acc_rand64_p acc_rand64_t *
503
#endif
504
ACCLIB_EXTERN(void, acc_srand64) (acc_rand64_p, acc_uint64l_t);
505
ACCLIB_EXTERN(acc_uint32l_t, acc_rand64) (acc_rand64_p);
506
ACCLIB_EXTERN(acc_uint32l_t, acc_rand64_r32) (acc_rand64_p);
507
#endif
508
 
509
typedef struct { /* all private */
510
    unsigned n;
511
    acc_uint32l_t s[624];
512
} acc_randmt_t;
513
#ifndef acc_randmt_p
514
#define acc_randmt_p acc_randmt_t *
515
#endif
516
ACCLIB_EXTERN(void, acc_srandmt) (acc_randmt_p, acc_uint32l_t);
517
ACCLIB_EXTERN(acc_uint32l_t, acc_randmt) (acc_randmt_p);
518
ACCLIB_EXTERN(acc_uint32l_t, acc_randmt_r32) (acc_randmt_p);
519
 
520
 
521
#endif /* already included */
522
 
523
 
524
/*
525
vi:ts=4:et
526
*/