eck 35 éve
szülő
commit
3e89ee1969
39 módosított fájl, 1780 hozzáadás és 0 törlés
  1. 23 0
      lang/cem/libcc.ansi/headers/assert.h
  2. 30 0
      lang/cem/libcc.ansi/headers/ctype.h
  3. 135 0
      lang/cem/libcc.ansi/headers/errno.h
  4. 118 0
      lang/cem/libcc.ansi/headers/float.h
  5. 51 0
      lang/cem/libcc.ansi/headers/limits.h
  6. 44 0
      lang/cem/libcc.ansi/headers/locale.h
  7. 41 0
      lang/cem/libcc.ansi/headers/math.h
  8. 29 0
      lang/cem/libcc.ansi/headers/mathconst.h
  9. 17 0
      lang/cem/libcc.ansi/headers/setjmp.h
  10. 116 0
      lang/cem/libcc.ansi/headers/signal.h
  11. 18 0
      lang/cem/libcc.ansi/headers/stdarg.h
  12. 35 0
      lang/cem/libcc.ansi/headers/stddef.h
  13. 125 0
      lang/cem/libcc.ansi/headers/stdio.h
  14. 68 0
      lang/cem/libcc.ansi/headers/stdlib.h
  15. 46 0
      lang/cem/libcc.ansi/headers/string.h
  16. 51 0
      lang/cem/libcc.ansi/headers/time.h
  17. 15 0
      lang/cem/libcc.ansi/stdlib/abort.c
  18. 13 0
      lang/cem/libcc.ansi/stdlib/abs.c
  19. 15 0
      lang/cem/libcc.ansi/stdlib/atof.c
  20. 13 0
      lang/cem/libcc.ansi/stdlib/atoi.c
  21. 13 0
      lang/cem/libcc.ansi/stdlib/atol.c
  22. 28 0
      lang/cem/libcc.ansi/stdlib/bsearch.c
  23. 24 0
      lang/cem/libcc.ansi/stdlib/calloc.c
  24. 17 0
      lang/cem/libcc.ansi/stdlib/div.c
  25. 42 0
      lang/cem/libcc.ansi/stdlib/exit.c
  26. 28 0
      lang/cem/libcc.ansi/stdlib/getenv.c
  27. 13 0
      lang/cem/libcc.ansi/stdlib/labs.c
  28. 17 0
      lang/cem/libcc.ansi/stdlib/ldiv.c
  29. 127 0
      lang/cem/libcc.ansi/stdlib/malloc.c
  30. 20 0
      lang/cem/libcc.ansi/stdlib/mblen.c
  31. 24 0
      lang/cem/libcc.ansi/stdlib/mbstowcs.c
  32. 22 0
      lang/cem/libcc.ansi/stdlib/mbtowc.c
  33. 137 0
      lang/cem/libcc.ansi/stdlib/qsort.c
  34. 20 0
      lang/cem/libcc.ansi/stdlib/rand.c
  35. 103 0
      lang/cem/libcc.ansi/stdlib/strtod.c
  36. 53 0
      lang/cem/libcc.ansi/stdlib/strtol.c
  37. 47 0
      lang/cem/libcc.ansi/stdlib/system.c
  38. 23 0
      lang/cem/libcc.ansi/stdlib/wcstombs.c
  39. 19 0
      lang/cem/libcc.ansi/stdlib/wctomb.c

+ 23 - 0
lang/cem/libcc.ansi/headers/assert.h

@@ -0,0 +1,23 @@
+/*
+ * assert.h - diagnostics
+ *
+ * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
+ * See the copyright notice in the ACK home directory, in the file "Copyright".
+ */
+/* $Header$ */
+
+void _bad_assertion(const char *expr, const char *file, int line);
+
+#undef	assert
+
+#ifdef	NDEBUG
+#define	assert(ignore)	((void)0)
+#else
+#define assert(expr)							\
+	{								\
+		if (!(expr)) {						\
+			_bad_assertion( #expr, __FILE__, __LINE);	\
+			abort();					\
+		}							\
+	}
+#endif	/* NDEBUG */

+ 30 - 0
lang/cem/libcc.ansi/headers/ctype.h

@@ -0,0 +1,30 @@
+/*
+ * ctype.h - character handling
+ */
+/* $Header$ */
+
+#ifndef	_CTYPE_HEADER_
+#define	_CTYPE_HEADER_
+
+int	isalnum(int c);		/* alpha numeric character */
+int	isalpha(int c);		/* alpha character */
+int 	iscntrl(int c);		/* control character */
+int	isdigit(int c);		/* digit character */
+int 	isgraph(int c);		/* graphical character */
+int	islower(int c);		/* lower case character */
+int	isprint(int c);		/* printable character */
+int	ispunct(int c);		/* punctuaction character */
+int	isspace(int c);		/* space character */
+int	isupper(int c);		/* upper case character */
+int	isxdigit(int c);	/* hexdecimal digit character */
+
+int	tolower(int c);		/* convert to lower case character */
+int	toupper(int c);		/* convert to upper case character */
+
+#define	isdigit(c)	((unsigned)((c)-'0') < 10)
+#define	islower(c)	((unsigned)((c)-'a') < 26)
+#define	isupper(c)	((unsigned)((c)-'A') < 26)
+#define	isprint(c)	((unsigned)((c)-' ') < 95)
+#define	isascii(c)	((unsigned)(c) < 128)
+
+#endif	/* _CTYPE_HEADER_ */

+ 135 - 0
lang/cem/libcc.ansi/headers/errno.h

@@ -0,0 +1,135 @@
+/*
+ * errno.h - errors
+ */
+/* $Header$ */
+
+#ifndef	_ERRNO_HEADER_
+#define	_ERRNO_HEADER_
+
+#define	EPERM		1	/* Not owner */
+#define	ENOENT		2	/* No such file or directory */
+#define	ESRCH		3	/* No such process */
+#define	EINTR		4	/* Interrupted system call */
+#define	EIO		5	/* I/O error */
+#define	ENXIO		6	/* No such device or address */
+#define	E2BIG		7	/* Arg list too long */
+#define	ENOEXEC		8	/* Exec format error */
+#define	EBADF		9	/* Bad file number */
+#define	ECHILD		10	/* No children */
+#define	EAGAIN		11	/* No more processes */
+#define	ENOMEM		12	/* Not enough core */
+#define	EACCES		13	/* Permission denied */
+#define	EFAULT		14	/* Bad address */
+#define	ENOTBLK		15	/* Block device required */
+#define	EBUSY		16	/* Mount device busy */
+#define	EEXIST		17	/* File exists */
+#define	EXDEV		18	/* Cross-device link */
+#define	ENODEV		19	/* No such device */
+#define	ENOTDIR		20	/* Not a directory*/
+#define	EISDIR		21	/* Is a directory */
+#define	EINVAL		22	/* Invalid argument */
+#define	ENFILE		23	/* File table overflow */
+#define	EMFILE		24	/* Too many open files */
+#define	ENOTTY		25	/* Not a typewriter */
+#define	ETXTBSY		26	/* Text file busy */
+#define	EFBIG		27	/* File too large */
+#define	ENOSPC		28	/* No space left on device */
+#define	ESPIPE		29	/* Illegal seek */
+#define	EROFS		30	/* Read-only file system */
+#define	EMLINK		31	/* Too many links */
+#define	EPIPE		32	/* Broken pipe */
+
+/* The standard requires the next two definitions */
+#define	EDOM		33	/* math arg out of domain of func */
+#define	ERANGE		34	/* math result not representable */
+
+#ifdef	__USG
+/* Only ENOMSG, EIDRM and EDEADLK are documented */
+#define	ENOMSG		35	/* No message of desired type */
+#define	EIDRM		36	/* Identifier Removed */
+#define	ECHRNG		37	/* Channel number out of range */
+#define	EL2NSYNC	38	/* Level 2 not synchronized */
+#define	EL3HLT		39	/* Level 3 halted */
+#define	EL3RST		40	/* Level 3 reset */
+#define	ELNRNG		41	/* Link number out of range */
+#define	EUNATCH		42	/* Protocol driver not attached */
+#define	ENOCSI		43	/* No CSI structure available */
+#define	EL2HLT		44	/* Level 2 halted */
+#define	EDEADLK		45	/* DeadLock */
+#endif	/* __USG */
+
+#ifdef	__BDS4_2
+/* non-blocking and interrupt i/o */
+#define	EWOULDBLOCK	35	/* Operation would block */
+#define	EINPROGRESS	36	/* Operation now in progress */
+#define	EALREADY	37	/* Operation already in progress */
+/* ipc/network software */
+
+	/* argument errors */
+#define	ENOTSOCK	38	/* Socket operation on non-socket */
+#define	EDESTADDRREQ	39	/* Destination address required */
+#define	EMSGSIZE	40	/* Message too long */
+#define	EPROTOTYPE	41	/* Protocol wrong type for socket */
+#define	ENOPROTOOPT	42	/* Protocol not available */
+#define	EPROTONOSUPPORT	43	/* Protocol not supported */
+#define	ESOCKTNOSUPPORT	44	/* Socket type not supported */
+#define	EOPNOTSUPP	45	/* Operation not supported on socket */
+#define	EPFNOSUPPORT	46	/* Protocol family not supported */
+#define	EAFNOSUPPORT	47	/* Address family not supported by protocol family */
+#define	EADDRINUSE	48	/* Address already in use */
+#define	EADDRNOTAVAIL	49	/* Can't assign requested address */
+
+	/* operational errors */
+#define	ENETDOWN	50	/* Network is down */
+#define	ENETUNREACH	51	/* Network is unreachable */
+#define	ENETRESET	52	/* Network dropped connection on reset */
+#define	ECONNABORTED	53	/* Software caused connection abort */
+#define	ECONNRESET	54	/* Connection reset by peer */
+#define	ENOBUFS		55	/* No buffer space available */
+#define	EISCONN		56	/* Socket is already connected */
+#define	ENOTCONN	57	/* Socket is not connected */
+#define	ESHUTDOWN	58	/* Can't send after socket shutdown */
+/* ETOOMANYREFS is not documented */
+#define	ETOOMANYREFS	59	/* Too many references: can't splice */
+#define	ETIMEDOUT	60	/* Connection timed out */
+#define	ECONNREFUSED	61	/* Connection refused */
+ 
+	/* */
+#define	ELOOP		62	/* Too many levels of symbolic links */
+#define	ENAMETOOLONG	63	/* File name too long */
+ 
+/* In BSD4.2, ENOTEMPTY is defined as 64. */
+/* Just use BSD4.3 & Sun UNIX 4.2 definitions */
+#define	EHOSTDOWN	64	/* Host is down */
+#define	EHOSTUNREACH	65	/* No route to host */
+#define	ENOTEMPTY	66	/* Directory not empty */
+
+/* quotas & mush */
+/* EPROCLIM and EUSERS are not documented */
+#define	EPROCLIM	67	/* Too many processes */
+#define	EUSERS		68	/* Too many users */
+#define	EDQUOT		69	/* Disc quota exceeded */
+
+/* Network File System */
+#define	ESTALE		70	/* Stale NFS file handle */
+#define	EREMOTE		71	/* Too many levels of remote in path */
+
+/* streams */
+/* only ENOMSG is documented */
+#define	ENOSTR		72	/* Device is not a stream */
+#define	ETIME		73	/* Timer expired */
+#define	ENOSR		74	/* Out of streams resources */
+#define	ENOMSG		75	/* No message of desired type */
+#define	EBADMSG		76	/* Trying to read unreadable message */
+
+#define	EIDRM		77	/* Identifier removed */
+
+/* SystemV Record Locking */
+#define	EDEADLK		78	/* Deadlock condition. */
+#define	ENOLCK		79	/* No record locks available. */
+
+#endif	/* __BSD4_2 */
+
+extern int errno;	/* error number */
+
+#endif	/* _ERRNO_HEADER_ */

+ 118 - 0
lang/cem/libcc.ansi/headers/float.h

@@ -0,0 +1,118 @@
+/*
+ * float.h - implementation limits
+ */
+/* $Header$ */
+
+#ifndef	_FLOAT_HEADER_
+#define	_FLOAT_HEADER_
+
+#ifdef	vax
+#define	FLT_DIG			6
+#define	FLT_EPSILON		5.96046448e-08
+#define	FLT_MANT_DIG		8
+#define	FLT_MAX			1.70141173e+38
+#define	FLT_MAX_10_EXP		38
+#define	FLT_MAX_EXP		127
+#define	FLT_MIN			2.93873588e-39
+#define	FLT_MIN_10_EXP		-39
+#define	FLT_MIN_EXP		-127
+
+#define	DBL_DIG			16
+#define	DBL_EPSILON		1.38777878078144568e-17
+#define	DBL_MANT_DIG		8
+#define	DBL_MAX			1.70141183460469229e+38
+#define	DBL_MAX_10_EXP		38
+#define	DBL_MAX_EXP		127
+#define	DBL_MIN			2.93873587705571877e-39
+#define	DBL_MIN_10_EXP		39
+#define	DBL_MIN_EXP		-127
+
+#define	LDBL_DIG		16
+#define	LDBL_EPSILON		1.38777878078144568e-17
+#define	LDBL_MANT_DIG		8
+#define	LDBL_MAX		1.70141183460469229e+38
+#define	LDBL_MAX_10_EXP		38
+#define	LDBL_MAX_EXP		127
+#define	LDBL_MIN		2.93873587705571877e-39
+#define	LDBL_MIN_10_EXP		39
+#define	LDBL_MIN_EXP		-127
+
+#define	FLT_ROUNDS		1
+#define	FLT_RADIX		2
+
+#else
+#ifdef	pdp
+/* The values are not certain, because there are no pdp's here anymore. The
+ * values given here are the same as for the vax. 
+ */
+#define	FLT_DIG			6
+#define	FLT_EPSILON		5.96046448e-08
+#define	FLT_MANT_DIG		8
+#define	FLT_MAX			1.70141173e+38
+#define	FLT_MAX_10_EXP		38
+#define	FLT_MAX_EXP		127
+#define	FLT_MIN			2.93873588e-39
+#define	FLT_MIN_10_EXP		-39
+#define	FLT_MIN_EXP		-127
+
+#define	DBL_DIG			16
+#define	DBL_EPSILON		1.38777878078144568e-17
+#define	DBL_MANT_DIG		8
+#define	DBL_MAX			1.70141183460469229e+38
+#define	DBL_MAX_10_EXP		38
+#define	DBL_MAX_EXP		127
+#define	DBL_MIN			2.93873587705571877e-39
+#define	DBL_MIN_10_EXP		39
+#define	DBL_MIN_EXP		-127
+
+#define	LDBL_DIG		16
+#define	LDBL_EPSILON		1.38777878078144568e-17
+#define	LDBL_MANT_DIG		8
+#define	LDBL_MAX		1.70141183460469229e+38
+#define	LDBL_MAX_10_EXP		38
+#define	LDBL_MAX_EXP		127
+#define	LDBL_MIN		2.93873587705571877e-39
+#define	LDBL_MIN_10_EXP		39
+#define	LDBL_MIN_EXP		-127
+
+#define	FLT_ROUNDS		1
+#define	FLT_RADIX		2
+
+#else		/* floating point emulation */
+#define	FLT_DIG			6
+#define	FLT_EPSILON		5.96046448e-08
+#define	FLT_MANT_DIG		8
+#define	FLT_MAX			1.70141173e+38
+#define	FLT_MAX_10_EXP		38
+#define	FLT_MAX_EXP		127
+#define	FLT_MIN			2.93873588e-39
+#define	FLT_MIN_10_EXP		-39
+#define	FLT_MIN_EXP		-127
+
+#define	DBL_DIG			15
+#define	DBL_EPSILON		1.1102230246251565e-16
+#define	DBL_MANT_DIG		11
+#define	DBL_MAX			8.9884656743115823e+307
+#define	DBL_MAX_10_EXP		307
+#define	DBL_MAX_EXP		1023
+#define	DBL_MIN			5.5626846462680062e-309
+#define	DBL_MIN_10_EXP		-309
+#define	DBL_MIN_EXP		-1023
+
+#define	LDBL_DIG		15
+#define	LDBL_EPSILON		1.1102230246251565e-16
+#define	LDBL_MANT_DIG		11
+#define	LDBL_MAX		8.9884656743115823e+307
+#define	LDBL_MAX_10_EXP		307
+#define	LDBL_MAX_EXP		1023
+#define	LDBL_MIN		5.5626846462680062e-309
+#define	LDBL_MIN_10_EXP		-309
+#define	LDBL_MIN_EXP		-1023
+
+#define	FLT_ROUNDS		1
+#define	FLT_RADIX		2
+
+#endif	/* pdp */
+#endif	/* vax */
+
+#endif	/* _FLOAT_HEADER_ */

+ 51 - 0
lang/cem/libcc.ansi/headers/limits.h

@@ -0,0 +1,51 @@
+/*
+ * limits.h - implementation limits
+ */
+/* $Header$ */
+
+#ifndef	_LIMITS_HEADER_
+#define	_LIMITS_HEADER_
+
+/*
+** Define _SIGNED_CHARS_ for machines with signed characters.
+** Define _WORD_32_ for machines with 32 bits integers.
+**
+** These defines should probably be set by the compiler when the
+** -vi option is used.
+*/
+#define	_SIGNED_CHARS_
+#define	_WORD_32_
+
+#define	CHAR_BIT		8
+#define	SCHAR_MIN		(-127)
+#define	SCHAR_MAX		(+127)
+#define	UCHAR_MAX		255
+#define	MB_LEN_MAX		1
+
+#define	SHRT_MIN		(-32767)
+#define	SHRT_MAX		(+32767)
+#define	USHRT_MAX		65535
+
+#define	LONG_MIN		(-2147483647L)
+#define	LONG_MAX		(+2147483647L)
+#define	ULONG_MAX		4294967295L
+
+#ifdef	_SIGNED_CHARS_
+#define	CHAR_MAX		SCHAR_MAX
+#define	CHAR_MIN		SCHAR_MIN
+#else	/* defined(_UNSIGNED_CHARS_) */
+#define	CHAR_MAX		UCHAR_MAX
+#define	CHAR_MIN		0
+#endif	/* _SIGNED_CHARS */
+
+#ifdef	_WORD_32_
+#define	INT_MIN			LONG_MIN
+#define	INT_MAX			LONG_MAX
+#define	UINT_MAX		ULONG_MAX
+#else	/*defined(_WORD_16_)*/
+#define	INT_MIN			SHRT_MIN
+#define	INT_MAX			SHRT_MAX
+#define	UINT_MAX		USHRT_MAX
+#endif	/* WORD_32_ */
+
+#endif	/* _LIMITS_HEADER_ */

+ 44 - 0
lang/cem/libcc.ansi/headers/locale.h

@@ -0,0 +1,44 @@
+/*
+ * locale.h - localization
+ */
+/* $Header$ */
+
+#ifndef	_LOCALE_HEADER_
+#define	_LOCALE_HEADER_
+
+struct lconv {
+	char	*decimal_point;		/* "." */
+	char	*thousands_sep;		/* "" */
+	char	*grouping;		/* "" */
+	char	*int_curr_symbol;	/* "" */
+	char	*currency_symbol;	/* "" */
+	char	*mon_decimal_point;	/* "" */
+	char	*mon_thousands_sep;	/* "" */
+	char	*mon_grouping;		/* "" */
+	char	*positive_sign;		/* "" */
+	char	*negative_sign;		/* "" */
+	char	frac_digits;		/* CHAR_MAX */
+	char	p_cs_precedes;		/* CHAR_MAX */
+	char	p_sep_by_space;		/* CHAR_MAX */
+	char	n_cs_precedes;		/* CHAR_MAX */
+	char	n_sep_by_space;		/* CHAR_MAX */
+	char	p_sign_posn;		/* CHAR_MAX */
+	char	n_sign_posn;		/* CHAR_MAX */
+};
+
+#ifndef	NULL
+#define	NULL		0
+#endif	/* NULL */
+
+#define	LC_ALL		1
+#define	LC_COLLATE	2
+#define	LC_CTYPE	3
+#define	LC_MONETARY	4
+#define	LC_NUMERIC	5
+#define	LC_TIME		6
+
+
+char		*setlocale(int category, const char *locale);
+struct	lconv	*localeconv(void);
+
+#endif	/* _LOCALE_HEADER_ */

+ 41 - 0
lang/cem/libcc.ansi/headers/math.h

@@ -0,0 +1,41 @@
+/*
+ * math.h - mathematics
+ */
+/* $Header$ */
+
+#ifndef	_MATH_HEADER_
+#define	_MATH_HEADER_
+
+#include	<float.h>
+#define	HUGE_VAL	DBL_MAX
+
+double	acos(double x);
+double	asin(double x);
+double	atan(double x);
+double	atan2(double y, double x);
+
+double	cos(double x);
+double	sin(double x);
+double	tan(double x);
+
+double	cosh(double x);
+double	sinh(double x);
+double	tanh(double x);
+
+double	exp(double x);
+double	log(double x);
+double	log10(double x);
+
+double	sqrt(double x);
+double	ceil(double x);
+double	fabs(double x);
+double	floor(double x);
+
+double	pow(double x, double y);
+
+double	frexp(double x, int *exp);
+double	ldexp(double x, int exp);
+double	modf(double x, double *iptr);
+double	fmod(double x, double y);
+
+#endif	/* _MATH_HEADER_ */

+ 29 - 0
lang/cem/libcc.ansi/headers/mathconst.h

@@ -0,0 +1,29 @@
+/*
+ * mathconst.h - mathematic constants
+ */
+/* $Header$ */
+
+#ifndef	_MATHCONST_HEADER_
+#define	_MATHCONST_HEADER_
+
+/* some constants (Hart & Cheney) */
+#define	M_PI		3.14159265358979323846264338327950288
+#define	M_2PI		6.28318530717958647692528676655900576
+#define	M_3PI_4		2.35619449019234492884698253745962716
+#define	M_PI_2		1.57079632679489661923132169163975144
+#define	M_3PI_8		1.17809724509617246442349126872981358
+#define	M_PI_4		0.78539816339744830961566084581987572
+#define	M_PI_8		0.39269908169872415480783042290993786
+#define	M_1_PI		0.31830988618379067153776752674502872
+#define	M_2_PI		0.63661977236758134307553505349005744
+#define	M_4_PI		1.27323954473516268615107010698011488
+#define	M_E		2.71828182845904523536028747135266250
+#define	M_LOG2E		1.44269504088896340735992468100189213
+#define	M_LOG10E	0.43429448190325182765112891891660508
+#define	M_LN2		0.69314718055994530941723212145817657
+#define	M_LN10		2.30258509299404568401799145468436421
+#define	M_SQRT2		1.41421356237309504880168872420969808
+#define	M_1_SQRT2	0.70710678118654752440084436210484904
+#define	M_EULER		0.57721566490153286060651209008240243
+
+#endif	/* _MATHCONST_HEADER_ */

+ 17 - 0
lang/cem/libcc.ansi/headers/setjmp.h

@@ -0,0 +1,17 @@
+/*
+ * setjmp.h - restore calling environment
+ *
+ * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
+ * See the copyright notice in the ACK home directory, in the file "Copyright".
+ */
+/* $Header$ */
+
+#ifndef	_SETJMP_HEADER_
+#define	_SETJMP_HEADER_
+
+typedef char jmp_buf[256];
+
+int	setjmp(jmp_buf env);
+void	longjmp(jmp_buf env, int val);
+
+#endif	/* _SETJMP_HEADER_ */

+ 116 - 0
lang/cem/libcc.ansi/headers/signal.h

@@ -0,0 +1,116 @@
+/*
+ * signal.h - signal handling
+ *
+ * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
+ * See the copyright notice in the ACK home directory, in the file "Copyright".
+ */
+/* $Header$ */
+#ifndef	_SIGNAL_HEADER_
+#define	_SIGNAL_HEADER_
+
+typedef	int		sig_atomic_t;
+
+#define	SIG_ERR		(void (*)())-1
+#if	defined(em22) || defined(em24) || defined(em44)
+#define	SIG_DFL		((void (*)())-2)
+#define	SIG_IGN		((void (*)())-3)
+#else
+#define	SIG_DFL		((void (*)())0)
+#define	SIG_IGN		((void (*)())1)
+#endif	/* SIG_ERR */
+
+#define	SIGHUP	1	/* hangup */
+#define	SIGINT	2	/* interrupt */
+#define	SIGQUIT	3	/* quit */
+#define	SIGILL	4	/* illegal instruction (not reset when caught) */
+#define	SIGTRAP	5	/* trace trap (not reset when caught) */
+#define	SIGIOT	6	/* IOT instruction */
+#define	SIGABRT	6	/* ANSI abort trap */
+#define	SIGEMT	7	/* EMT instruction */
+#define	SIGFPE	8	/* floating point exception */
+#define	SIGKILL	9	/* kill (cannot be caught or ignored) */
+#define	SIGBUS	10	/* bus error */
+#define	SIGSEGV	11	/* segmentation violation */
+#define	SIGSYS	12	/* bad argument to system call */
+#define	SIGPIPE	13	/* write on a pipe with no one to read it */
+#define	SIGALRM	14	/* alarm clock */
+#define	SIGTERM	15	/* software termination signal from kill */
+#ifdef	__USG
+#define	SIGUSR1	16	/* user defined signal 1 */
+#define	SIGUSR2	17	/* user defined signal 2 */
+#define	SIGCLD	18	/* death of a child */
+#define	SIGPWR	19	/* power-fail signal */
+#define	_NSIG	20
+#elif	defined(__BSD4_2)
+#define	SIGURG	16	/* urgent condition */
+#define	SIGSTOP	17	/* stop signal not from tty */
+#define	SIGTSTP	18	/* stop signal from tty */
+#define	SIGCONT	19	/* continue a stopped process */
+#define	SIGCHLD	20	/* death of a child */
+#define	SIGCLD	20	/* System V compat. */
+#define	SIGTTIN	21	/* background tty read */
+#define	SIGTTOU	22	/* background tty write */
+#define	SIGIO	23	/* I/O possible signal */
+#define	SIGPOLL	SIGIO	/* System V compat. */
+#define	SIGXCPU	24	/* exceeded CPU time limit */
+#define	SIGXFSZ	25	/* exceeded file size limit */
+#define	SIGVTALRM 26	/* virtual time alarm */
+#define	SIGPROF	27	/* profiling time alarm */
+#define	SIGWINCH 28	/* window has changed */
+#define	SIGLOST 29	/* resource lost */
+#define SIGUSR1 30	/* user defined signal 1 */
+#define SIGUSR2 31	/* user defined signal 2 */
+#define	_NSIG	32
+#else
+#define	_NSIG	16
+#endif	/* __USG or __BSD4_2 */
+
+#ifdef	__BSD4_2
+struct	sigvec {
+	int	(*sv_handler)();	/* handler */
+	int	sv_mask;		/* mask to apply */
+	int	sv_flags;
+};
+#define	SV_ONSTACK	0x0001		/* take signal on signal stack */
+#define	SV_INTERRUPT	0x0002		/* do not restart system on signal return */
+#define	SV_RESETHAND	0x0004		/* reset signal handler to SIG_DFL when signal taken */
+#define	sv_onstack	sv_flags	/* compat. */
+
+struct	sigstack {
+	char	*ss_sp;			/* signal stack pointer */
+	int	ss_onstack;		/* current status */
+};
+
+struct	sigcontext {
+	int	sc_onstack;		/* sigstack state to restore */
+	int	sc_mask;		/* signal mask to restore */
+	int	sc_sp;			/* sp to restore */
+#ifdef	vax
+	int	sc_fp;			/* fp to restore */
+	int	sc_ap;			/* ap to restore */
+#endif	/* vax */
+	int	sc_pc;			/* pc to retore */
+	int	sc_ps;			/* psl to restore */
+};
+
+#define	BADSIG	SIG_ERR			/* compat. */
+#define	sigmask(m)	(1 << ((m)-1))
+
+/*
+ * These are only defined for shutting up the compiler.
+ */
+#ifdef	__STDC__
+int	sigvec(int sig, struct sigvec *vec, struct sigvec *ovec);
+int	sigstack(struct sigstack *ss, struct sigstack *oss);
+int	sigblock(int mask);
+int	sigsetmask(int mask);
+int	sigpause(int sigmask);
+#endif	/* __STDC__ */
+#endif	/* __BSD4_2 */
+
+#ifdef	__STDC__
+void	(*signal(int sig, void (*func)(int)))(int);
+int	raise(int sig);
+#endif	/* __STDC__ */
+
+#endif	/* _SIGNAL_HEADER_ */

+ 18 - 0
lang/cem/libcc.ansi/headers/stdarg.h

@@ -0,0 +1,18 @@
+/*
+ * stdarg.h - variable arguments
+ *
+ * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
+ * See the copyright notice in the ACK home directory, in the file "Copyright".
+ */
+/* $Header$ */
+
+#ifndef	_STDARG_HEADER_
+#define	_STDARG_HEADER_
+
+typedef	char	*va_list;
+
+#define	va_start(ap, parmN)	(ap = (char *)&parmN)
+#define	va_arg(ap, type)	((type *)(ap += sizeof(type)))[0]
+#define	va_end(ap)
+
+#endif	/* _STDARG_HEADER_ */

+ 35 - 0
lang/cem/libcc.ansi/headers/stddef.h

@@ -0,0 +1,35 @@
+/*
+ * stddef.h - common definitions
+ *
+ * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
+ * See the copyright notice in the ACK home directory, in the file "Copyright".
+ */
+/* $Header$ */
+
+#ifndef	_STDDEF_HEADER_
+#define	_STDDEF_HEADER_
+
+#ifndef	NULL
+#define	NULL		0
+#endif	/* NULL */
+
+/* ??? cast to char pointer necessary? */
+#define	offsetof(type, ident) \
+	(size_t) &(((type *)0)->ident)
+
+#ifndef	_TYPE_PTRDIFF_
+#define	_TYPE_PTRDIFF_
+typedef int	ptrdiff_t;	/* result of substracting two pointers */
+#endif	/* _TYPE_PTRDIFF_ */
+
+#ifndef	_TYPE_SIZE_
+#define	_TYPE_SIZE_
+typedef unsigned int	size_t;		/* type returned by sizeof */
+#endif	/* _TYPE_SIZE_ */
+
+#ifndef	_TYPE_WCHAR_
+#define	_TYPE_WCHAR_
+typedef char	wchar_t;		/* type expanded character set */
+#endif	/* _TYPE_WCHAR_ */
+
+#endif	/* _STDEF_HEADER_ */

+ 125 - 0
lang/cem/libcc.ansi/headers/stdio.h

@@ -0,0 +1,125 @@
+/*
+ * stdio.h - input/output definitions
+ *
+ * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
+ * See the copyright notice in the ACK home directory, in the file "Copyright".
+ */
+/* $Header$ */
+
+#ifndef	_STDIO_HEADER_
+#define	_STDIO_HEADER_
+
+#include	<stdarg.h>
+
+#define	_NFILES		20
+
+/*
+ * Focus point of all stdio activity.
+ */
+typedef struct _iobuf {
+	int		_fd;
+	int		_count;
+	int		_flags;
+	char		*_tname;
+	unsigned char	*_buf;
+	unsigned char	*_ptr;
+} FILE;
+
+#define	_IOFBF		0000
+#define	_IOREAD		0001
+#define	_IOWRITE	0002
+#define	_IONBF		0004
+#define	_IOMYBUF	0010
+#define	_IOEOF		0020
+#define	_IOERR		0040
+#define	_IOLBF		0100
+
+#define	SEEK_SET	0
+#define	SEEK_CUR	1
+#define	SEEK_END	2
+
+#define	stdin		(&_stdin)
+#define	stdout		(&_stdout)
+#define	stderr		(&_stderr)
+
+#define	BUFSIZ		1024
+#ifndef	NULL
+#define	NULL		0
+#endif	/* NULL */
+#ifndef	EOF
+#define	EOF		(-1)
+#endif	/* EOF */
+
+#define	FOPEN_MAX	(_NFILES - 3)
+#ifdef	__BSD4_2
+#define	FILENAME_MAX	255
+#else
+#define	FILENAME_MAX	14
+#endif	/* __BSD4_2 */
+#define	TMP_MAX		1000
+#define	L_tmpnam	(sizeof("/usr/tmp/") + 15)
+
+#ifndef	_TYPE_FPOS_
+#define	_TYPE_FPOS_
+typedef long int	fpos_t;
+#endif	/* _TYPE_FPOS */
+
+#ifndef	_TYPE_SIZE_
+#define	_TYPE_SIZE_
+typedef unsigned int	size_t;
+#endif	/* _TYPE_SIZE_ */
+
+#define	getchar()	getc(stdin)
+#define	putchar(c)	putc(c,stdout)
+#define	getc(p)		(--(p)->_count >= 0 ? (int) (*(p)->_ptr++) : \
+				_fillbuf(p))
+#define	putc(c, p)	(--(p)->_count >= 0 ? \
+			 (int) (*(p)->_ptr++ = (c)) : \
+			 _flushbuf((c),(p)))
+
+#define	feof(p)		(((p)->_flags & _IOEOF) != 0)
+#define	ferror(p)	(((p)->_flags & _IOERR) != 0)
+#define	fileno(p)	((p)->_fd)
+
+
+FILE	*_iotable[_NFILES];
+FILE	_stdin, _stdout, _stderr;
+
+#ifdef	__STDC__
+int	remove(const char *filename);
+int	rename(const char *old, const char *new);
+FILE	*tmpfile(void);
+char	*tmpnam(char *s);
+int	fclose(FILE *stream);
+int	fflush(FILE *stream);
+FILE	*fopen(const char *filename, const char *mode);
+FILE	*freopen(const char *filename, const char *mode, FILE *stream);
+void	setbuf(FILE *stream, char *buf);
+int	setvbuf(FILE *stream, char *buf, int mode, size_t size);
+int	fprintf(FILE *stream, const char *format, ...);
+int	fscanf(FILE *stream, const char *format, ...);
+int	printf(const char *format, ...);
+int	scanf(const char *format, ...);
+int	sprintf(char *s, const char *format, ...);
+int	sscanf(char *s, const char *format, ...);
+int	vfprintf(FILE *stream, const char *format, va_list arg);
+int	vprintf(const char *format, va_list arg);
+int	vsprintf(char *s, const char *format, va_list arg);
+int	fgetc(FILE *stream);
+char	*fgets(char *s, int n, FILE *stream);
+int	fputc(int c, FILE *stream);
+int	fputs(const char *s, FILE *stream);
+char	*gets(char *s);
+int	ungetc(int c, FILE *stream);
+size_t	fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
+size_t	fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
+int	fgetpos(FILE *stream, fpos_t *pos);
+int	fseek(FILE *stream, long offset, int whence);
+int	fsetpos(FILE *stream, const fpos_t *pos);
+long	ftell(FILE *stream);
+void	rewind(FILE *stream);
+void	clearerr(FILE *stream);
+int	perror(const char *s);
+#endif	/* __STDC__ */
+
+#endif	/* _STDIO_HEADER_ */

+ 68 - 0
lang/cem/libcc.ansi/headers/stdlib.h

@@ -0,0 +1,68 @@
+/*
+ * stdlib.h - standard library
+ *
+ * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
+ * See the copyright notice in the ACK home directory, in the file "Copyright".
+ */
+/* $Header$ */
+
+#ifndef	_STDLIB_HEADER_
+#define	_STDLIB_HEADER_
+
+#ifndef	NULL
+#define	NULL		0
+#endif	/* NULL */
+
+#define	EXIT_FAILURE	1
+#define	EXIT_SUCCESS	0
+#define	RAND_MAX	32767
+#define	MB_CUR_MAX	1
+
+typedef struct { int quot, rem; } div_t;
+typedef struct { long quot, rem; } ldiv_t;
+
+#ifndef	_TYPE_SIZE_
+#define	_TYPE_SIZE_
+typedef unsigned int	size_t;
+#endif	/* _TYPE_SIZE_ */
+
+#ifndef	_TYPE_WCHAR_
+#define	_TYPE_WCHAR_
+typedef int	wchar_t;
+#endif	/* _TYPE_WCHAR_ */
+
+#ifdef	__STDC__
+double		atof(const char *nptr);
+int		atoi(const char *nptr);
+long		atol(const char *nptr);
+double		strtod(const char *nptr, char **endptr);
+long		strtol(const char *nptr, char **endptr, int base);
+unsigned long int	strtoul(const char *nptr, char **endptr, int base);
+int		rand(void);
+void		srand(unsigned int seed);
+void		*calloc(size_t nmemb, size_t size);
+void		free(void *ptr);
+void		*malloc(size_t size);
+void		*realloc(void *ptr, size_t size);
+void		abort(void);
+int		atexit(void (*func)(void));
+void		exit(int status);
+char		*getenv(const char *name);
+int		system(const char *string);
+void		*bsearch(const void *key, const void *base,
+			size_t nmemb, size_t size,
+			int (*compar)(const void *, const void *));
+void		qsort(void *base, size_t nmemb, size_t size,
+			int (*compar)(const void *, const void *));
+int		abs(int j);
+div_t		div(int numer, int denom);
+long		labs(long j);
+ldiv_t		ldiv(long numer, long denom);
+int		mblen(const char *s, size_t n);
+int		mbtowc(wchar_t *pwc, const char *s, size_t n);
+int		wctomb(const char *s, wchar_t wchar);
+size_t		mbstowcs(wchar_t *pwcs, const char *s, size_t n);
+size_t		wcstombs(char *s, const wchar_t *pwcs, size_t n);
+#endif	/* __STDC__ */
+
+#endif	/* _STDLIB_HEADER_ */

+ 46 - 0
lang/cem/libcc.ansi/headers/string.h

@@ -0,0 +1,46 @@
+/*
+ * string.h - string handling
+ *
+ * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
+ * See the copyright notice in the ACK home directory, in the file "Copyright".
+ */
+/* $Header$ */
+
+#ifndef	_STRING_HEADER_
+#define	_STRING_HEADER_
+
+#ifndef	NULL
+#define	NULL		0
+#endif	/* NULL */
+
+#ifndef	_TYPE_SIZE_
+#define	_TYPE_SIZE_
+typedef unsigned int	size_t;		/* type returned by sizeof */
+#endif	/* _TYPE_SIZE_ */
+
+#ifdef	__STDC__
+void	*memcpy(void *s1, const void *s2, size_t n);
+void	*memmove(void *s1, const void *s2, size_t n);
+char	*strcpy(char *s1, const char *s2);
+char	*strncpy(char *s1, const char *s2, size_t n);
+char	*strcat(char *s1, const char *s2);
+char	*strncat(char *s1, const char *s2, size_t n);
+int	memcmp(const void *s1, const void *s2, size_t n);
+int	strcmp(const char *s1, const char *s2);
+int	strcoll(const char *s1, const char *s2);
+int	strncmp(const char *s1, const char *s2, size_t n);
+size_t	strxfrm(char *s1, const char *s2, size_t n);
+void	*memchr(const void *s, int c, size_t n);
+char	*strchr(const char *s, int c);
+size_t	strcspn(const char *s1, const char *s2);
+char	*strpbrk(const char *s1, const char *s2);
+char	*strrchr(const char *s, int c);
+size_t	strspn(const char *s1, const char *s2);
+char	*strstr(const char *s1, const char *s2);
+char	*strtok(char *s1, const char *s2);
+void	*memset(void *s, int c, size_t n);
+char	*strerror(int errnum);
+size_t	strlen(const char *s);
+#endif	/* __STDC__ */
+
+#endif	/* _STRING_HEADER_ */

+ 51 - 0
lang/cem/libcc.ansi/headers/time.h

@@ -0,0 +1,51 @@
+/*
+ * time.h - date and time
+ */
+/* $Header$ */
+
+#ifndef	_TIME_HEADER_
+#define	_TIME_HEADER_
+
+#ifndef	NULL
+#define	NULL		0
+#endif	/* NULL */
+
+#ifdef	__BSD4_2
+#define	CLK_TCK		60		/* ticks per second */
+#else
+#define	CLK_TCK		1
+#endif	/* __BSD4_2 */
+
+#ifndef	_TYPE_SIZE_
+#define	_TYPE_SIZE_
+typedef unsigned int	size_t;		/* type returned by sizeof */
+#endif	/* _TYPE_SIZE_ */
+
+typedef	signed	long	time_t;		/* type returned by TOD clock */
+typedef	signed	long	clock_t;	/* type returned by real time clock */
+
+struct tm {
+	int	tm_sec;			/* seconds after the minute - [0, 59] */
+	int	tm_min;			/* minutes after the hour - [0, 59] */
+	int	tm_hour;		/* hours since midnight - [0, 28] */
+	int	tm_mday;		/* day of the month - [1, 31] */
+	int	tm_mon;			/* months since January - [0, 11] */
+	int	tm_year;		/* years since 1900 */
+	int	tm_wday;		/* days since Sunday - [0, 6] */
+	int	tm_yday;		/* days since January 1 - [0, 365] */
+	int	tm_isdst;		/* Daylight Saving Time flag */
+};
+
+clock_t		clock(void);
+double		difftime(time_t time1, time_t time0);
+time_t		mktime(struct tm *timeptr);
+time_t		time(time_t *timeptr);
+char		*asctime(const struct tm *timeptr);
+char		*ctime(const time_t *timer);
+struct	tm	*gmtime(const time_t *timer);
+struct	tm	*localtime(const time_t *timer);
+size_t		strftime(char *s, size_t maxsize,
+			const char *format,
+			const struct tm *timeptr);
+
+#endif	/* _TIME_HEADER_ */

+ 15 - 0
lang/cem/libcc.ansi/stdlib/abort.c

@@ -0,0 +1,15 @@
+/*
+ * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
+ * See the copyright notice in the ACK home directory, in the file "Copyright".
+ */
+/* $Header$ */
+
+#include	<signal.h>
+#include	<stdlib.h>
+
+void
+abort(void)
+{
+	raise(SIGABRT);
+}
+

+ 13 - 0
lang/cem/libcc.ansi/stdlib/abs.c

@@ -0,0 +1,13 @@
+/*
+ * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
+ * See the copyright notice in the ACK home directory, in the file "Copyright".
+ */
+/* $Header$ */
+
+#include	<stdlib.h>
+
+int
+abs(register int i)
+{
+	return i >= 0 ? i : -i;
+}

+ 15 - 0
lang/cem/libcc.ansi/stdlib/atof.c

@@ -0,0 +1,15 @@
+/*
+ * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
+ * See the copyright notice in the ACK home directory, in the file "Copyright".
+ */
+/* $Header$ */
+
+#ifndef	NOFLOAT
+#include	<stdlib.h>
+
+double
+atof(const char *nptr)
+{
+	return strtod(nptr, (char **) NULL);
+}
+#endif	/* NOFLOAT */

+ 13 - 0
lang/cem/libcc.ansi/stdlib/atoi.c

@@ -0,0 +1,13 @@
+/*
+ * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
+ * See the copyright notice in the ACK home directory, in the file "Copyright".
+ */
+/* $Header$ */
+
+#include	<stdlib.h>
+
+int
+atoi(const char *nptr)
+{
+	return (int)strtol(nptr, (char **)NULL, 10);
+}

+ 13 - 0
lang/cem/libcc.ansi/stdlib/atol.c

@@ -0,0 +1,13 @@
+/*
+ * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
+ * See the copyright notice in the ACK home directory, in the file "Copyright".
+ */
+/* $Header$ */
+
+#include	<stdlib.h>
+
+long
+atol(const char *nptr)
+{
+	return strtol(nptr, (char **)NULL, 10);
+}

+ 28 - 0
lang/cem/libcc.ansi/stdlib/bsearch.c

@@ -0,0 +1,28 @@
+/*
+ * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
+ * See the copyright notice in the ACK home directory, in the file "Copyright".
+ */
+/* $Header$ */
+
+#include	<stdlib.h>
+
+void *
+bsearch(register const void *key, register const void *base,
+	register size_t nmemb, register size_t size,
+	int (*compar)(const void *, const void *))
+{
+	register void *mid_point;
+	register int  cmp;
+
+	while (nmemb > 0) {
+		mid_point = base + size * (nmemb >> 1);
+		if ((cmp = (*compar)(key, mid_point)) == 0)
+			return(mid_point);
+		if (cmp >= 0) {
+			base  = mid_point + size;
+			nmemb = (nmemb - 1) >> 1;
+		} else
+			nmemb >>= 1;
+	}
+	return((void *)NULL);
+}

+ 24 - 0
lang/cem/libcc.ansi/stdlib/calloc.c

@@ -0,0 +1,24 @@
+/*
+ * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
+ * See the copyright notice in the ACK home directory, in the file "Copyright".
+ */
+/* $Header$ */
+
+#include	<stdlib.h>
+
+#define ALIGN(sz)	(((sz)+(sizeof(long)-1)/sizeof(long))*sizeof(long))
+
+void *
+calloc(size_t nelem, size_t elsize)
+{
+	register void *p;
+	register long *q;
+	unsigned int size = ALIGN(nelem * elsize);
+
+	if ((p = malloc(size)) == (void *)NULL)
+		return (void *)NULL;
+	/* "The space is intialized to all bits zero" */
+	q = (long *) (p + size);
+	while ((void *) q > p) *--q = 0;
+	return p;
+}

+ 17 - 0
lang/cem/libcc.ansi/stdlib/div.c

@@ -0,0 +1,17 @@
+/*
+ * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
+ * See the copyright notice in the ACK home directory, in the file "Copyright".
+ */
+/* $Header$ */
+
+#include	<stdlib.h>
+
+div_t
+div(register int numer, register int denom)
+{
+	div_t r;
+
+	r.quot = numer / denom;
+	r.rem = numer % denom;
+	return r;
+}

+ 42 - 0
lang/cem/libcc.ansi/stdlib/exit.c

@@ -0,0 +1,42 @@
+/*
+ * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
+ * See the copyright notice in the ACK home directory, in the file "Copyright".
+ */
+/* $Header$ */
+
+#include	<stdlib.h>
+
+#define	NEXITS	32
+
+static void (*functab[NEXITS])(void);
+static int funccnt = 0;
+
+extern void _cleanup(void);
+extern void _exit(int);
+
+static void
+_calls(void)
+{
+	register int i = funccnt;
+	
+	/* "Called in reversed order of their registration" */
+	while (--i >= 0)
+		(*functab[i])();
+}
+
+void
+exit(int status)
+{
+	_calls();
+	_cleanup() ;
+	_exit(status) ;
+}
+
+int
+atexit(void (*func)(void))
+{
+	if (funccnt >= NEXITS)
+		return 1;
+	functab[funccnt++] = func;
+	return 0;
+}

+ 28 - 0
lang/cem/libcc.ansi/stdlib/getenv.c

@@ -0,0 +1,28 @@
+/*
+ * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
+ * See the copyright notice in the ACK home directory, in the file "Copyright".
+ */
+/* $Header$ */
+
+#include	<stdlib.h>
+
+extern char **environ;
+
+char *
+getenv(const char *name)
+{
+	register char **v = environ;
+	register char *p, *q;
+
+	if (v == (char **)NULL || name == (char *)NULL)
+		return (char *)NULL;
+	while ((p = *v++) != (char *)NULL) {
+		q = name;
+		while (*q && (*q++ == *p++))
+			/* EMPTY */ ;
+		if (*q || (*p != '='))
+			continue;
+		return(p+1);
+	}
+	return((char *)NULL);
+}

+ 13 - 0
lang/cem/libcc.ansi/stdlib/labs.c

@@ -0,0 +1,13 @@
+/*
+ * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
+ * See the copyright notice in the ACK home directory, in the file "Copyright".
+ */
+/* $Header$ */
+
+#include	<stdlib.h>
+
+long
+labs(register long l)
+{
+	return l >= 0 ? l : -l;
+}

+ 17 - 0
lang/cem/libcc.ansi/stdlib/ldiv.c

@@ -0,0 +1,17 @@
+/*
+ * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
+ * See the copyright notice in the ACK home directory, in the file "Copyright".
+ */
+/* $Header$ */
+
+#include	<stdlib.h>
+
+ldiv_t
+ldiv(register long numer, register long denom)
+{
+	ldiv_t r;
+
+	r.quot = numer / denom;
+	r.rem = numer % denom;
+	return r;
+}

+ 127 - 0
lang/cem/libcc.ansi/stdlib/malloc.c

@@ -0,0 +1,127 @@
+/*
+ * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
+ * See the copyright notice in the ACK home directory, in the file "Copyright".
+ */
+/* $Header$ */
+
+#include	<stdlib.h>
+
+#define	CLICK_SIZE	4096
+
+#if	EM_WSIZE == EM_PSIZE
+typedef unsigned int vir_bytes;
+#else
+typedef long vir_bytes;
+#endif
+
+
+#define ALIGN(x, a)	(((x) + (a - 1)) & ~(a - 1))
+#define BUSY		1
+#define NEXT(p)		(* (void **) (p))
+
+#ifdef pdp
+#define BUGFIX	64	/* cannot set break in top 64 bytes */
+#else
+#define BUGFIX	0
+#endif
+
+extern void bcopy(void *, void *, size_t);
+extern void *sbrk(unsigned int);
+extern void *brk(unsigned int);
+static void *bottom, *top;
+
+static int
+grow(size_t len)
+{
+	register void *p;
+	register int click = CLICK_SIZE;
+
+	p = sbrk(0);
+	len += (void *) ALIGN((vir_bytes) p, sizeof(void *)) - p;
+	while (click >= 4) {
+		size_t len1 = ALIGN((vir_bytes)p+len+sizeof(char *),click)-(vir_bytes)p;
+		void *p1 = p;
+
+		if (p + len1 + BUGFIX < p || (p1 = sbrk(len1)) == (void *) -1) {
+			click >>= 1;
+			continue;
+		}
+		p = p1;
+		if (top + sizeof(void *) != p) {
+			/* someone else has done an sbrk */
+			NEXT(top) = (void *) ((vir_bytes) p | BUSY);
+		} else {
+			for (p = bottom; NEXT(p) != NULL; p = (void *) (* (vir_bytes *) p & ~BUSY))
+				;
+		}
+		top = p + len1 - sizeof(void *);
+		NEXT(p) = top;
+		NEXT(top) = NULL;
+		return 1;
+	}
+	return 0;
+}
+
+void *
+malloc(size_t size)
+{
+	register void *p, *next, *new;
+	register size_t len = ALIGN(size, sizeof(void *)) + sizeof(void *);
+
+	if ((p = bottom) == NULL) {
+		p = sbrk(sizeof(void *));
+		sbrk((void *) ALIGN((vir_bytes) p, sizeof(void *)) - p);
+		p = (void *) ALIGN((vir_bytes) p, sizeof(void *));
+		top = bottom = p;
+		NEXT(p) = NULL;
+	}
+	while ((next = NEXT(p)) != NULL)
+		if ((vir_bytes) next & BUSY)		/* already in use */
+			p = (void *) ((vir_bytes) next & ~BUSY);
+		else {
+			while ((new = NEXT(next)) != NULL
+				&& !((vir_bytes) new & BUSY))
+			    next = new;
+			if (next - p >= len) {			/* fits */
+				if ((new = p + len) < next)	/* too big */
+					NEXT(new) = next;
+				NEXT(p) = (void *) ((vir_bytes) new | BUSY);
+				return(p + sizeof(void *));
+			}
+			p = next;
+		}
+	return grow(len) ? malloc(size) : (void *)NULL;
+}
+
+void *
+realloc(void *old, size_t size)
+{
+	register void *p = old - sizeof(void *), *next, *new;
+	register size_t len = ALIGN(size, sizeof(void *)) + sizeof(void *), n;
+
+	next = (void *) (* (vir_bytes *) p & ~BUSY);
+	n = next - old;					/* old size */
+	while ((new = NEXT(next)) != NULL && !((vir_bytes) new & BUSY))
+		next = new;
+	if (next - p >= len) {				/* does it still fit */
+		if ((new = p + len) < next) {		/* even too big */
+			NEXT(new) = next;
+			NEXT(p) = (void *) ((vir_bytes) new | BUSY);
+		}
+		else
+			NEXT(p) = (void *) ((vir_bytes) next | BUSY);
+		return(old);
+	}
+	if ((new = malloc(size)) == NULL)		/* it didn't fit */
+		return((void *)NULL);
+	bcopy(old, new, n);				/* n < size */
+	* (vir_bytes *) p &= ~BUSY;
+	return(new);
+}
+
+void
+free(void *p)
+{
+	if (p != (void *)NULL)
+		*(vir_bytes *) (p - sizeof(void *)) &= ~BUSY;
+}

+ 20 - 0
lang/cem/libcc.ansi/stdlib/mblen.c

@@ -0,0 +1,20 @@
+/*
+ * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
+ * See the copyright notice in the ACK home directory, in the file "Copyright".
+ */
+/* $Header$ */
+
+#include	<stdlib.h>
+#include	<limits.h>
+
+int
+mblen(const char *s, size_t n)
+{
+	if (s == (char *)NULL)
+		return 0;
+	if (*s == '\0')
+		return 0;
+	if (n < 1 || n > MB_CUR_MAX)
+		return -1;
+	return MB_LEN_MAX;
+}

+ 24 - 0
lang/cem/libcc.ansi/stdlib/mbstowcs.c

@@ -0,0 +1,24 @@
+/*
+ * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
+ * See the copyright notice in the ACK home directory, in the file "Copyright".
+ */
+/* $Header$ */
+
+#include	<stdlib.h>
+#include	<locale.h>
+#include	<limits.h>
+
+size_t
+mbstowcs(register wchar_t *pwcs, register const char *s, size_t n)
+{
+	register int i = 0;
+
+	while (i < n) {
+		i++;
+		*pwcs++ = *s++;
+		if (*s == '\0')
+			return i;
+	}
+	return n;
+}
+

+ 22 - 0
lang/cem/libcc.ansi/stdlib/mbtowc.c

@@ -0,0 +1,22 @@
+/*
+ * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
+ * See the copyright notice in the ACK home directory, in the file "Copyright".
+ */
+/* $Header$ */
+
+#include	<stdlib.h>
+#include	<limits.h>
+
+int
+mbtowc(register wchar_t *pwc, register const char *s, size_t n)
+{
+	if (s == (char *)NULL)
+		return 0;
+	if (*s == '\0')
+		return 0;
+	if (n < 1 || n > MB_CUR_MAX)
+		return -1;
+	if (pwc != (wchar_t *)NULL)
+		*pwc = *s;
+	return MB_CUR_MAX;
+}

+ 137 - 0
lang/cem/libcc.ansi/stdlib/qsort.c

@@ -0,0 +1,137 @@
+/*
+ * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
+ * See the copyright notice in the ACK home directory, in the file "Copyright".
+ */
+/* $Header$ */
+
+#include	<stdlib.h>
+
+static	void qsort1(void *, void *, size_t);
+static	int (*qcompar)(const void *, const void *);
+static	void qexchange(void *, void *, size_t);
+static	void q3exchange(void *, void *, void *, size_t);
+
+void
+qsort(void *base, size_t nel, size_t width,
+      int (*compar)(const void *, const void *))
+{
+	qcompar = compar;
+	qsort1(base, base + (nel - 1) * width, width);
+}
+
+static void
+qsort1(void *a1, void *a2, register size_t width)
+{
+	register const void *left, *right;
+	register const void *lefteq, *righteq;
+	int cmp;
+
+	for (;;) {
+		if (a2 <= a1) return;
+		left = a1;
+		right = a2;
+		lefteq = righteq = a1 + width * (((a2-a1)+width)/(2*width));
+		/*
+		   Pick an element in the middle of the array.
+		   We will collect the equals around it.
+		   "lefteq" and "righteq" indicate the left and right
+		   bounds of the equals respectively.
+		   Smaller elements end up left of it, larger elements end
+		   up right of it.
+		*/
+again:
+		while (left < lefteq && (cmp = (*qcompar)(left, lefteq)) <= 0) {
+			if (cmp < 0) {
+				/* leave it where it is */
+				left += width;
+			}
+			else {
+				/* equal, so exchange with the element to
+				   the left of the "equal"-interval.
+				*/
+				lefteq -= width;
+				qexchange(left, lefteq, width);
+			}
+		}
+		while (right > righteq) {
+			if ((cmp = (*qcompar)(right, righteq)) < 0) {
+				/* smaller, should go to left part
+				*/
+				if (left < lefteq) {
+					/* yes, we had a larger one at the
+					   left, so we can just exchange
+					*/
+					qexchange(left, right, width);
+					left += width;
+					right -= width;
+					goto again;
+				}
+				/* no more room at the left part, so we
+				   move the "equal-interval" one place to the
+				   right, and the smaller element to the
+				   left of it.
+				   This is best expressed as a three-way
+				   exchange.
+				*/
+				righteq += width;
+				q3exchange(left, righteq, right, width);
+				lefteq += width;
+				left = lefteq;
+			}
+			else if (cmp == 0) {
+				/* equal, so exchange with the element to
+				   the right of the "equal-interval"
+				*/
+				righteq += width;
+				qexchange(right, righteq, width);
+			}
+			else	/* just leave it */ right -= width;
+		}
+		if (left < lefteq) {
+			/* larger element to the left, but no more room,
+			   so move the "equal-interval" one place to the
+			   left, and the larger element to the right
+			   of it.
+			*/
+			lefteq -= width;
+			q3exchange(right, lefteq, left, width);
+			righteq -= width;
+			right = righteq;
+			goto again;
+		}
+		/* now sort the "smaller" part */
+		qsort1(a1, lefteq - width, width);
+		/* and now the larger, saving a subroutine call
+		   because of the for(;;)
+		*/
+		a1 = righteq + width;
+	}
+	/*NOTREACHED*/
+}
+
+static void
+qexchange(register void *p, register void *q,
+	  register size_t n)
+{
+	register int c;
+
+	while (n-- > 0) {
+		c = *p;
+		*p++ = *q;
+		*q++ = c;
+	}
+}
+
+static void
+q3exchange(register void *p, register void *q, register void *r,
+	   register size_t n)
+{
+	register int c;
+
+	while (n-- > 0) {
+		c = *p;
+		*p++ = *r;
+		*r++ = *q;
+		*q++ = c;
+	}
+}

+ 20 - 0
lang/cem/libcc.ansi/stdlib/rand.c

@@ -0,0 +1,20 @@
+/*
+ * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
+ * See the copyright notice in the ACK home directory, in the file "Copyright".
+ */
+/* $Header$ */
+
+#include	<stdlib.h>
+
+static unsigned long int next = 1;
+
+int rand(void)
+{
+	next = next * 1103515245 + 12345;
+	return((unsigned int)(next/(2 * (RAND_MAX +1)) % (RAND_MAX+1));
+}
+
+void srand(unsigned int seed)
+{
+	next = seed;
+}

+ 103 - 0
lang/cem/libcc.ansi/stdlib/strtod.c

@@ -0,0 +1,103 @@
+/*
+ * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
+ * See the copyright notice in the ACK home directory, in the file "Copyright".
+ */
+/* $Header$ */
+
+#ifndef	NOFLOAT
+#include	<ctype.h>
+#include	<limits.h>
+#include	<math.h>
+#include	<stdlib.h>
+
+#define	MAX	(LONG_MAX/10)
+
+double
+strtod(register const char *p, register char **pp)
+{
+	register int c;
+	int exp = 0, sign = 1, expsign = 0;
+	double fl;
+	long lowl = 0, highl = 0, pos = 1;
+	int dotseen = 0;
+	int digit_seen = 0;
+
+	if (pp) *pp = p;
+	while (isspace(*p)) p++;
+	c = *p;
+
+	switch (c) {
+	case '-':
+		sign = -1;
+		/* fallthrough */
+	case '+': 
+		p++;
+	}
+
+	while (isdigit(c = *p++) || (c == '.' && ! dotseen++)) {
+		if (c == '.') continue;
+		digit_seen = 1;
+		if (highl < MAX) {
+			highl = (highl << 3) + (highl << 1) + (c - '0');
+		}
+		else if (pos < MAX) {
+			pos = (pos << 3) + (pos << 1);
+			lowl = (lowl << 3) + (lowl << 1) + (c - '0');
+		}
+		else exp++;
+		if (dotseen) exp--;
+	}
+	if (! digit_seen) return 0.0;
+	fl = highl;
+	if (pos > 1) {
+		fl = pos * fl + lowl;
+	}
+
+	if (pp) *pp = p-1;
+
+	if (c == 'E' || c == 'e') {
+		int exp1 = 0;
+		int sign = 1;
+
+		switch (*p) {
+		case '-':
+			sign = -1;
+			/* fallthrough */
+		case '+':
+			p++;
+		}
+		if (isdigit(c = *p)) {
+			do {
+				exp1 = 10 * exp1 + c - '0';
+			} while (isdigit(c = *++p));
+			if (pp) *pp = p;
+		}
+		exp += sign * exp1;
+	}
+
+	if (fl == 0.0) return 0.0;
+
+	if (exp < 0) {
+		expsign = 1;
+		exp = -exp;
+	}
+
+	if (exp != 0) {
+                int oldexp = exp;
+                double exp5 = 5.0;
+                double correction = 1.0;
+ 
+                while (exp) {
+                        if (exp % 2) correction *= exp5;
+                        exp /= 2;
+                        if (exp != 0) exp5 *= exp5;
+                }
+                if (expsign) fl = fl / correction;
+                else    fl = fl * correction;
+ 
+                fl = ldexp(fl, expsign ? -oldexp : oldexp);
+	}
+
+	return sign * fl;
+}
+#endif

+ 53 - 0
lang/cem/libcc.ansi/stdlib/strtol.c

@@ -0,0 +1,53 @@
+/*
+ * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
+ * See the copyright notice in the ACK home directory, in the file "Copyright".
+ */
+/* $Header$ */
+
+#include	<stdlib.h>
+#include	<ctype.h>
+
+long int
+strtol(register const char *p, char **pp, int base)
+{
+	register long val, v;
+	register int c;
+	int sign = 1;
+
+	if (pp) *pp = p;
+	while (isspace(*p)) p++;
+	c = *p;
+
+	switch (c) {
+	case '-':
+		sign = -1;
+		/* fallthrough */
+	case '+':
+		p++;
+	}
+
+	/* this is bizare */
+	if (base==16 && *p=='0' && (*(p+1)=='x' || *(p+1)=='X'))
+		p += 2;
+
+	while (isdigit(c = *p++) || isalpha(c)) {
+		if (isalpha(c))
+			v = 10 + (isupper(c) ? c - 'A' : c - 'a');
+		else
+			v = c - '0';
+		if (v >= base) {
+			p--;
+			break;
+		}
+		val = (val * base) + v;
+	}
+	if (pp) *pp = p-1;
+	return sign * val;
+}
+
+
+unsigned long int
+strtoul(register const char *p, char **pp, int base)
+{
+	return (unsigned long)strtol(p, pp, base);
+}

+ 47 - 0
lang/cem/libcc.ansi/stdlib/system.c

@@ -0,0 +1,47 @@
+/*
+ * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
+ * See the copyright notice in the ACK home directory, in the file "Copyright".
+ */
+/* $Header$ */
+
+#include	<stdlib.h>
+#include	<signal.h>
+
+extern int fork(void);
+extern int wait(int *);
+extern void _exit(int);
+extern void execl(char *, ...);
+extern void close(int);
+
+#define	FAIL	127
+
+int
+system(const char *str)
+{
+	int pid, exitstatus, waitval;
+	int i;
+
+	if ((pid = fork()) < 0) return str ? -1 : 0;
+
+	if (pid == 0) {
+		for (i = 3; i <= 20; i++)
+			close(i);
+		if (!str) str = "cd .";		/* just testing for a shell */
+		execl("/bin/sh", "sh", "-c", str, (char *) NULL);
+		/* get here if execl fails ... */
+		_exit(FAIL);	/* see manual page */
+	}
+	while ((waitval = wait(&exitstatus)) != pid) {
+		if (waitval == -1) break;
+	}
+	if (waitval == -1) {
+		/* no child ??? or maybe interrupted ??? */
+		exitstatus = -1;
+	}
+	if (!str) {
+		if (exitstatus == FAIL << 8)		/* execl() failed */
+			exitstatus = 0;
+		else exitstatus = 1;			/* /bin/sh exists */
+	}
+	return exitstatus;
+}

+ 23 - 0
lang/cem/libcc.ansi/stdlib/wcstombs.c

@@ -0,0 +1,23 @@
+/*
+ * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
+ * See the copyright notice in the ACK home directory, in the file "Copyright".
+ */
+/* $Header$ */
+
+#include	<stdlib.h>
+#include	<locale.h>
+#include	<limits.h>
+
+size_t
+wcstombs(register char *s, register const wchar_t *pwcs, size_t n)
+{
+	register int i = 0;
+
+	while (i < n) {
+		i++;
+		*s++ = *pwcs++;
+		if (*s == '\0')
+			return i;
+	}
+	return n;
+}

+ 19 - 0
lang/cem/libcc.ansi/stdlib/wctomb.c

@@ -0,0 +1,19 @@
+/*
+ * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
+ * See the copyright notice in the ACK home directory, in the file "Copyright".
+ */
+/* $Header$ */
+
+#include	<stdlib.h>
+#include	<limits.h>
+
+int
+wctomb(char *s, wchar_t wchar)
+{
+	if (s != (char *)NULL) {
+		*s = wchar;
+		return MB_LEN_MAX;
+	} else
+		return 0;
+}
+