+++ /dev/null
-iff AST_COMMON
-hdr pthread
-hdr stddef
-hdr types
-sys types
-typ size_t,ssize_t
-typ long.double
-
-mac SF_CLOSE sys/socket.h
-mac SF_APPEND sys/stat.h
-
-proto stdc note{ Standard-C prototypes ok }end compile{
- extern int foo(int, int);
- bar()
- { foo(1, 1);
- }
-}end
-
-dll import note{ Microsoft import/export nonsense }end execute{
- __declspec(dllimport) int foo;
- main() { return foo == 5 ? 0 : 1; }
- int bar = 5;
- int* _imp__foo = &bar;
-}end
-
-xopen stdio note{ Stdio fseek/fflush are X/Open-compliant }end execute{
- #include <stdio.h>
- #define Failed(file) (unlink(file),1)
- main(int argc, char** argv)
- { FILE *f1, *f2;
- char file[1024], buf[1024], *f, *t;
- int i, fd;
-
- /* create file */
- for(f = argv[0], t = file; (*t = *f++) != 0; )
- t++;
- *t++ = '.'; *t++ = 'D'; *t++ = 0;
- if((fd = creat(file,0666)) < 0)
- return 1;
-
- for (i = 0; i < sizeof(buf); ++i)
- buf[i] = '0' + (i%10);
- for (i = 0; i < 16; ++i)
- if (write(fd,buf,sizeof(buf)) != sizeof(buf))
- return Failed(file);
- close(fd);
-
- if(!(f1 = fopen(file,"r+")) ||
- (fd = dup(fileno(f1))) < 0 ||
- !(f2 = fdopen(fd,"r+")) )
- return Failed(file);
-
- if(fread(buf, 1, 7, f2) != 7 || ftell(f2) != 7)
- return Failed(file);
-
- if(fseek(f1, 1010, 0) < 0 || ftell(f1) != 1010)
- return Failed(file);
-
- fflush(f2); /* this should set the seek location to 1010 */
- if(ftell(f2) != 1010)
- return Failed(file);
-
- unlink(file);
- return 0;
- }
-}end
-
-cat{
-
- /* __STD_C indicates that the language is ANSI-C or C++ */
- #if !defined(__STD_C) && __STDC__
- #define __STD_C 1
- #endif
- #if !defined(__STD_C) && (__cplusplus || c_plusplus)
- #define __STD_C 1
- #endif
- #if !defined(__STD_C) && _proto_stdc
- #define __STD_C 1
- #endif
- #if !defined(__STD_C)
- #define __STD_C 0
- #endif
-
- /* extern symbols must be protected against C++ name mangling */
- #ifndef _BEGIN_EXTERNS_
- #if __cplusplus || c_plusplus
- #define _BEGIN_EXTERNS_ extern "C" {
- #define _END_EXTERNS_ }
- #else
- #define _BEGIN_EXTERNS_
- #define _END_EXTERNS_
- #endif
- #endif /*_BEGIN_EXTERNS_*/
-
- /* _ARG_ simplifies function prototyping among flavors of C */
- #ifndef _ARG_
- #if __STD_C
- #define _ARG_(x) x
- #else
- #define _ARG_(x) ()
- #endif
- #endif /*_ARG_*/
-
- /* __INLINE__ is the inline keyword */
- #if !defined(__INLINE__) && defined(__cplusplus)
- #define __INLINE__ inline
- #endif
- #if !defined(__INLINE__) && defined(_WIN32) && !defined(__GNUC__)
- #define __INLINE__ __inline
- #endif
-
- /* Void_t is defined so that Void_t* can address any type */
- #ifndef Void_t
- #if __STD_C
- #define Void_t void
- #else
- #define Void_t char
- #endif
- #endif /*Void_t*/
-
- /* dynamic linked library external scope handling */
- #undef extern
- #if _dll_import && !defined(__EXPORT__) && _DLL_BLD
- #define __EXPORT__ __declspec(dllexport)
- #endif
- #if _dll_import && !defined(__IMPORT__)
- #define __IMPORT__ __declspec(dllimport)
- #endif
- #if !defined(_astimport)
- #if defined(__IMPORT__) && _DLL_BLD
- #define _astimport __IMPORT__
- #else
- #define _astimport extern
- #endif
- #endif /*_astimport*/
-}end
-
-cat{
- #if !_DLL_BLD && _dll_import
- #define __EXTERN__(T,obj) extern T obj; T* _imp__ ## obj = &obj
- #define __DEFINE__(T,obj,val) T obj = val; T* _imp__ ## obj = &obj
- #else
- #define __EXTERN__(T,obj) extern T obj
- #define __DEFINE__(T,obj,val) T obj = val
- #endif
-}end
-
-cat{
- #ifndef _AST_STD_H
- # if _hdr_stddef
- # include <stddef.h>
- # endif
- # if _sys_types
- # include <sys/types.h>
- # endif
- #endif
- #if !_typ_size_t
- # define _typ_size_t 1
- typedef int size_t;
- #endif
- #if !_typ_ssize_t
- # define _typ_ssize_t 1
- typedef int ssize_t;
- #endif
-}end
-
-tst - -DN=0 - -DN=1 - -DN=2 - -DN=3 - -DN=4 - -DN=5 - -DN=6 - -DN=7 - -DN=8 output{
- #define _BYTESEX_H
-
- #if _STD_
- #include <stddef.h>
- #else
- #include <sys/types.h>
- #endif
-
- _BEGIN_EXTERNS_
- extern int printf _ARG_((const char*, ...));
- _END_EXTERNS_
-
- #if N == 0
- #define _ast_int8_t long
- #define _ast_int8_str "long"
- #endif
- #if N == 1
- #define _ast_int8_t long long
- #define _ast_int8_str "long long"
- #endif
- #if N == 2
- #define _ast_int8_t __int64_t
- #define _ast_int8_str "__int64_t"
- #endif
- #if N == 3
- #define _ast_int8_t _int64_t
- #define _ast_int8_str "_int64_t"
- #endif
- #if N == 4
- #define _ast_int8_t int64_t
- #define _ast_int8_str "int64_t"
- #endif
- #if N == 5
- #define _ast_int8_t __int64
- #define _ast_int8_str "__int64"
- #endif
- #if N == 6
- #define _ast_int8_t _int64
- #define _ast_int8_str "_int64"
- #endif
- #if N == 7
- #define _ast_int8_t int64
- #define _ast_int8_str "int64"
- #endif
-
- #define elementsof(x) (sizeof(x)/sizeof(x[0]))
-
- static char i_char = 1;
- static short i_short = 1;
- static int i_int = 1;
- static long i_long = 1;
- #ifdef _ast_int8_t
- static _ast_int8_t i_long_long = 1;
- #endif
-
- static struct
- {
- char* name;
- int size;
- char* swap;
- } int_type[] =
- {
- "char", sizeof(char), (char*)&i_char,
- "short", sizeof(short), (char*)&i_short,
- "int", sizeof(int), (char*)&i_int,
- "long", sizeof(long), (char*)&i_long,
- #ifdef _ast_int8_t
- _ast_int8_str, sizeof(_ast_int8_t), (char*)&i_long_long,
- #endif
- };
-
- static struct
- {
- char* name;
- int size;
- } flt_type[] =
- {
- "float", sizeof(float),
- "double", sizeof(double),
- #ifdef _typ_long_double
- "long double", sizeof(long double),
- #endif
- };
-
- static int int_size[] = { 1, 2, 4, 8 };
-
- main()
- {
- register int t;
- register int s;
- register int m = 1;
- register int b = 1;
- register int w = 0;
-
- #ifdef _ast_int8_t
- if (int_type[elementsof(int_type)-1].size <= 4)
- return 1;
- #endif
- for (s = 0; s < elementsof(int_size); s++)
- {
- for (t = 0; t < elementsof(int_type); t++)
- if(int_type[t].size >= int_size[s])
- break;
- if (t < elementsof(int_type))
- {
- m = int_size[s];
- printf("#define _ast_int%d_t\t\t%s\n",
- m, int_type[t].name);
- if (m > 1)
- {
- if (*int_type[t].swap)
- w |= b;
- b <<= 1;
- }
- }
- }
- printf("#define _ast_intmax_t _ast_int%d_t\n", m);
- if (m == sizeof(long))
- printf("#define _ast_intmax_long 1\n");
- printf("#define _ast_intswap %d\n", w);
- printf("\n");
- for (t = 0; t < elementsof(flt_type); t++)
- {
- for(; t < elementsof(flt_type); t++)
- if(flt_type[t].size != flt_type[t + 1].size)
- break;
- m = flt_type[t].size;
- printf("#define _ast_flt%d_t\t\t%s\n",
- flt_type[t].size, flt_type[t].name);
- }
- printf("#define _ast_fltmax_t _ast_flt%d_t\n", m);
- if (m == sizeof(double))
- printf("#define _ast_fltmax_double 1\n");
- return 0;
- }
-}end
-
-tst - -DTRY=1 - -DTRY=1 -Dvoid=char - -DTRY=2 - -DTRY=3 - -DTRY=4 output{
- #define printf ______printf
- #ifdef __STDC__
- #include <stdarg.h>
- #else
- #include <varargs.h>
- #endif
- #undef printf
- _BEGIN_EXTERNS_
- extern int printf _ARG_((const char*, ...));
- _END_EXTERNS_
- static va_list ap;
- main()
- {
- #if TRY == 4
- printf("\n#ifndef va_listref\n");
- printf("#define va_listref(p) (&(p))\t");
- printf("/* pass va_list to varargs function */\n");
- printf("#define va_listval(p) (*(p))\t");
- printf("/* retrieve va_list from va_arg(ap,va_listarg) */\n");
- printf("#define va_listarg va_list*\t");
- printf("/* va_arg() va_list type */\n");
- #else
- #if TRY == 1
- *ap++;
- #endif /*TRY == 1*/
- #if TRY == 2
- *ap;
- #endif /*TRY == 2*/
- #if TRY == 3
- ap++;
- #endif /*TRY == 3*/
-
- printf("\n#ifndef va_listref\n");
- printf("#define va_listref(p) (p)\t");
- printf("/* pass va_list to varargs function */\n");
- printf("#define va_listval(p) (p)\t");
- printf("/* retrieve va_list from va_arg(ap,va_listarg) */\n");
- #if TRY == 2
- printf("#define va_listarg va_list*\t");
- #else
- printf("#define va_listarg va_list\t");
- #endif /*TRY == 2*/
- printf("/* va_arg() va_list type */\n");
- #endif /*TRY == 4*/
-
- #if defined(_WIN32) || !defined(va_copy)
- printf("#ifndef va_copy\n");
- #if TRY == 2
- printf("#define va_copy(to,fr) memcpy(to,fr,sizeof(va_list))\t");
- printf("/* copy va_list fr -> to */\n");
- #else
- printf("#define va_copy(to,fr) ((to)=(fr))\t");
- printf("/* copy va_list fr -> to */\n");
- #endif
- printf("#endif\n");
- #endif
-
- printf("#undef _ast_va_list\n");
- printf("#ifdef va_start\n");
- printf("#define _ast_va_list va_list\n");
- printf("#else\n");
- #if TRY == 1 || TRY == 2
- printf("#define _ast_va_list void*\t");
- #else
- #if TRY == 3
- if (sizeof(va_list) == sizeof(long))
- printf("#define _ast_va_list long\t");
- else if (sizeof(va_list) == sizeof(short))
- printf("#define _ast_va_list short\t");
- else
- printf("#define _ast_va_list int\t");
- #else
- printf("#define _ast_va_list ...\t");
- #endif
- #endif
- printf("/* va_list that avoids #include */\n");
- printf("#endif\n\n");
- printf("#endif\n");
- return 0;
- }
-}end