diff --git a/lang/cem/libcc.ansi/headers/LIST b/lang/cem/libcc.ansi/headers/LIST
deleted file mode 100644
index 6f74c9a56..000000000
--- a/lang/cem/libcc.ansi/headers/LIST
+++ /dev/null
@@ -1,20 +0,0 @@
-assert.h
-ctype.h
-dirent.h
-errno.h
-float.h
-grp.h
-limits.h
-locale.h
-math.h
-mathconst.h
-setjmp.h
-signal.h
-stdarg.h
-stddef.h
-stdio.h
-stdlib.h
-string.h
-time.h
-sys/dirent.h
-sys/errno.h
diff --git a/lang/cem/libcc.ansi/headers/Makefile b/lang/cem/libcc.ansi/headers/Makefile
deleted file mode 100644
index 3249669aa..000000000
--- a/lang/cem/libcc.ansi/headers/Makefile
+++ /dev/null
@@ -1,2 +0,0 @@
-clean:
-	rm -f OLIST
diff --git a/lang/cem/libcc.ansi/headers/assert.h b/lang/cem/libcc.ansi/headers/assert.h
index 72a68c96b..9618e31f6 100644
--- a/lang/cem/libcc.ansi/headers/assert.h
+++ b/lang/cem/libcc.ansi/headers/assert.h
@@ -6,7 +6,10 @@
  */
 /* $Id$ */
 
-void __bad_assertion(const char *_mess);
+#ifndef _ASSERT_H
+#define _ASSERT_H
+
+extern void __bad_assertion(const char *_mess);
 
 #undef	assert
 
@@ -21,3 +24,5 @@ void __bad_assertion(const char *_mess);
 				    "\" failed, file " __xstr(__FILE__) \
 				    ", line " __xstr(__LINE__) "\n"))
 #endif	/* NDEBUG */
+
+#endif
diff --git a/lang/cem/libcc.ansi/headers/ctype.h b/lang/cem/libcc.ansi/headers/ctype.h
index 49bf93a89..697661bcc 100644
--- a/lang/cem/libcc.ansi/headers/ctype.h
+++ b/lang/cem/libcc.ansi/headers/ctype.h
@@ -3,7 +3,7 @@
  */
 /* $Id$ */
 
-#if	!defined(_CTYPE_H)
+#ifndef _CTYPE_H
 #define	_CTYPE_H
 
 extern char	__ctype[];	/* located in chartab.c */
@@ -16,19 +16,19 @@ extern char	__ctype[];	/* located in chartab.c */
 #define _C		0x20	/* this bit is for control characters */
 #define _X		0x40	/* this bit is for hex digits [a-f] and [A-F]*/
 
-int isalnum(int _c);		/* alphanumeric [a-z], [A-Z], [0-9] */
-int isalpha(int _c);		/* alphabetic */
-int iscntrl(int _c);		/* control characters */
-int isdigit(int _c);		/* digit [0-9] */
-int isgraph(int _c);		/* graphic character */
-int islower(int _c);		/* lower-case letter [a-z] */
-int isprint(int _c);		/* printable character */
-int ispunct(int _c);		/* punctuation mark */
-int isspace(int _c);		/* white space sp, \f, \n, \r, \t, \v */
-int isupper(int _c);		/* upper-case letter [A-Z] */
-int isxdigit(int _c);		/* hex digit [0-9], [a-f], [A-F] */
-int tolower(int _c);		/* convert to lower case character */
-int toupper(int _c);		/* convert to upper case character */
+extern int isalnum(int _c);		/* alphanumeric [a-z], [A-Z], [0-9] */
+extern int isalpha(int _c);		/* alphabetic */
+extern int iscntrl(int _c);		/* control characters */
+extern int isdigit(int _c);		/* digit [0-9] */
+extern int isgraph(int _c);		/* graphic character */
+extern int islower(int _c);		/* lower-case letter [a-z] */
+extern int isprint(int _c);		/* printable character */
+extern int ispunct(int _c);		/* punctuation mark */
+extern int isspace(int _c);		/* white space sp, \f, \n, \r, \t, \v */
+extern int isupper(int _c);		/* upper-case letter [A-Z] */
+extern int isxdigit(int _c);		/* hex digit [0-9], [a-f], [A-F] */
+extern int tolower(int _c);		/* convert to lower case character */
+extern int toupper(int _c);		/* convert to upper case character */
 
 #define isalpha(c)	((__ctype+1)[c]&(_U|_L))
 #define isspace(c)	((__ctype+1)[c]&_S)
diff --git a/lang/cem/libcc.ansi/headers/dirent.h b/lang/cem/libcc.ansi/headers/dirent.h
deleted file mode 100644
index 828a5cfb3..000000000
--- a/lang/cem/libcc.ansi/headers/dirent.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
-	<dirent.h> -- definitions for SVR3 directory access routines
-
-	last edit:	25-Apr-1987	D A Gwyn
-
-	Prerequisite:	<sys/types.h>
-*/
-/* $Id$ */
-
-#if	!defined(_DIRENT_H)
-#define	_DIRENT_H
-#include	<sys/dirent.h>
-
-#define	DIRBUF		8192		/* buffer size for fs-indep. dirs */
-	/* must in general be larger than the filesystem buffer size */
-
-typedef struct
-	{
-	int	dd_fd;			/* file descriptor */
-	int	dd_loc;			/* offset in block */
-	int	dd_size;		/* amount of valid data */
-	char	*dd_buf;		/* -> directory block */
-	}	DIR;			/* stream data from opendir() */
-
-DIR *opendir(const char *_dirname);
-struct dirent *readdir(DIR *_dirp);
-void rewinddir(DIR *_dirp);
-int closedir(DIR *_dirp);
-off_t telldir(DIR *_dirp);
-void seekdir(DIR *_dirp, off_t _loc);
-
-#define	NULL		((void *)0)	/* DAG -- added for convenience */
-
-#endif	/* _DIRENT_H */
diff --git a/lang/cem/libcc.ansi/headers/errno.h b/lang/cem/libcc.ansi/headers/errno.h
index 9e0abbb16..c1976bad6 100644
--- a/lang/cem/libcc.ansi/headers/errno.h
+++ b/lang/cem/libcc.ansi/headers/errno.h
@@ -3,18 +3,51 @@
  */
 /* $Id$ */
 
-#if	!defined(_ERRNO_H)
+#ifndef _ERRNO_H
 #define	_ERRNO_H
 
-#include	<sys/errno.h>
+/* These values are defined by the ANSI standard. */
 
-/* The standard requires the next two definitions. If they are also in
- * <sys/errno.h>, their values should be equal. The <sys/errno.h> supplied
- * with the compiler doesn't contain them.
- */
-#define	EDOM		33	/* math arg out of domain of func */
-#define	ERANGE		34	/* math result not representable */
+#define EDOM    33
+#define ERANGE  34
+#define EILSEQ  88
 
-extern int errno;		/* error number */
+/* These are not, but most platforms standardise on these numbers, so we
+ * define them here. */
+ 
+#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 */
+ 
+extern int errno;
 
-#endif	/* _ERRNO_H */
+#endif
diff --git a/lang/cem/libcc.ansi/headers/fcntl.h b/lang/cem/libcc.ansi/headers/fcntl.h
new file mode 100644
index 000000000..86657fb14
--- /dev/null
+++ b/lang/cem/libcc.ansi/headers/fcntl.h
@@ -0,0 +1,11 @@
+/*
+ * fcntl.h - file I/O primitives
+ */
+/* $Id$ */
+
+#ifndef _FCNTL_H
+#define _FCNTL_H
+
+#include <unistd.h>
+
+#endif
diff --git a/lang/cem/libcc.ansi/headers/float.h b/lang/cem/libcc.ansi/headers/float.h
index 8cdb34c4f..43656651b 100644
--- a/lang/cem/libcc.ansi/headers/float.h
+++ b/lang/cem/libcc.ansi/headers/float.h
@@ -1,79 +1,43 @@
 /*
- * float.h - implementation limits
- */
-/* $Id$ */
+    <float.h> -- simple version used by "gimplify"
 
-#if	!defined(_FLOAT_H)
-#define	_FLOAT_H
+    last edit:  2007-02-12  D A Gwyn
+*/
 
-#if	defined(__vax) || defined(__pdp)
-#define	FLT_DIG			6
-#define	FLT_EPSILON		5.96046448e-08F
-#define	FLT_MANT_DIG		8
-#define	FLT_MAX			1.70141173e+38F
-#define	FLT_MAX_10_EXP		38
-#define	FLT_MAX_EXP		127
-#define	FLT_MIN			2.93873588e-39F
-#define	FLT_MIN_10_EXP		(-38)
-#define	FLT_MIN_EXP		(-127)
+/* Does not exactly fit any model, and is minimal for "universality". */
 
-#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		(-38)
-#define	DBL_MIN_EXP		(-127)
+#define FLT_ROUNDS  (-1)
+#define FLT_EVAL_METHOD (-1)
+#define FLT_RADIX   2
+#define DECIMAL_DIG 10
 
-#define	LDBL_DIG		16
-#define	LDBL_EPSILON		1.38777878078144568e-17L
-#define	LDBL_MANT_DIG		8
-#define	LDBL_MAX		1.70141183460469229e+38L
-#define	LDBL_MAX_10_EXP		38
-#define	LDBL_MAX_EXP		127
-#define	LDBL_MIN		2.93873587705571877e-39L
-#define	LDBL_MIN_10_EXP		(-38)
-#define	LDBL_MIN_EXP		(-127)
+/* assumes that "gimplify" specifies "-Dfloat=double" */
+#define FLT_MANT_DIG    10
+#define FLT_EPSILON (1E-9F)
+#define FLT_DIG     10
+#define FLT_MIN_EXP (-31)
+#define FLT_MIN     (1E-37F)
+#define FLT_MIN_10_EXP  (-37)
+#define FLT_MAX_EXP 37
+#define FLT_MAX     (1E+37F)
+#define FLT_MAX_10_EXP  37
 
-#define	FLT_ROUNDS		1
-#define	FLT_RADIX		2
+#define DBL_MANT_DIG    10
+#define DBL_EPSILON (1E-9)
+#define DBL_DIG     10
+#define DBL_MIN_EXP (-31)
+#define DBL_MIN     (1E-37)
+#define DBL_MIN_10_EXP  (-37)
+#define DBL_MAX_EXP 37
+#define DBL_MAX     (1E+37)
+#define DBL_MAX_10_EXP  37
 
-#else		/* IEEE format */
-#define	FLT_DIG			6
-#define	FLT_EPSILON		1.19209290e-07F
-#define	FLT_MANT_DIG		24
-#define	FLT_MAX			3.40282347e+38F
-#define	FLT_MAX_10_EXP		38
-#define	FLT_MAX_EXP		128
-#define	FLT_MIN			1.17549435e-38F
-#define	FLT_MIN_10_EXP		(-37)
-#define	FLT_MIN_EXP		(-125)
-
-#define	DBL_DIG			15
-#define	DBL_EPSILON		2.2204460492503131e-16
-#define	DBL_MANT_DIG		53
-#define	DBL_MAX			1.7976931348623157e+308
-#define	DBL_MAX_10_EXP		308
-#define	DBL_MAX_EXP		1024
-#define	DBL_MIN			2.2250738585072014e-308
-#define	DBL_MIN_10_EXP		(-307)
-#define	DBL_MIN_EXP		(-1021)
-
-#define	LDBL_DIG		15
-#define	LDBL_EPSILON		2.2204460492503131e-16L
-#define	LDBL_MANT_DIG		53
-#define	LDBL_MAX		1.7976931348623157e+308L
-#define	LDBL_MAX_10_EXP		308
-#define	LDBL_MAX_EXP		1024
-#define	LDBL_MIN		2.2250738585072014e-308L
-#define	LDBL_MIN_10_EXP		(-307)
-#define	LDBL_MIN_EXP		(-1021)
-
-#define	FLT_ROUNDS		1
-#define	FLT_RADIX		2
-
-#endif	/* vax, pdp or ieee */
-
-#endif	/* _FLOAT_H */
+#define LDBL_MANT_DIG   10
+#define LDBL_EPSILON    (1E-9L)
+#define LDBL_DIG    10
+#define LDBL_MIN_EXP    (-31)
+#define LDBL_MIN    (1E-37L)
+#define LDBL_MIN_10_EXP (-37)
+#define LDBL_MAX_EXP    37
+#define LDBL_MAX    (1E+37L)
+#define LDBL_MAX_10_EXP 37
diff --git a/lang/cem/libcc.ansi/headers/grp.h b/lang/cem/libcc.ansi/headers/grp.h
deleted file mode 100644
index d32168f08..000000000
--- a/lang/cem/libcc.ansi/headers/grp.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/* $Id$ */
-
-#if	!defined(_GRP_H)
-#define	_GRP_H
-
-struct	group {				/* see getgrent(3) */
-	char	*gr_name;
-	char	*gr_passwd;
-#if	defined(_POSIX_SOURCE) && defined(_MINIX)
-	char	gr_gid;
-#else
-	int	gr_gid;
-#endif
-	char	**gr_mem;
-};
-
-struct group *getgrent(void);
-struct group *getgrgid(int _gid);
-struct group *getgrnam(const char *_name);
-
-#endif	/* _GRP_H */
diff --git a/lang/cem/libcc.ansi/headers/iso646.h b/lang/cem/libcc.ansi/headers/iso646.h
new file mode 100644
index 000000000..7dfae4814
--- /dev/null
+++ b/lang/cem/libcc.ansi/headers/iso646.h
@@ -0,0 +1,21 @@
+/*
+ * limits.h - implementation limits
+ */
+/* $Id$ */
+
+#ifndef _ISO646_H
+#define _ISO646_H
+
+#define and &&
+#define and_eq  &=
+#define bitand  &
+#define bitor   |
+#define compl   ~
+#define not !
+#define not_eq  !=
+#define or  ||
+#define or_eq   |=
+#define xor ^
+#define xor_eq  ^=
+
+#endif
diff --git a/lang/cem/libcc.ansi/headers/locale.h b/lang/cem/libcc.ansi/headers/locale.h
index 67897daed..23f677fdc 100644
--- a/lang/cem/libcc.ansi/headers/locale.h
+++ b/lang/cem/libcc.ansi/headers/locale.h
@@ -3,41 +3,47 @@
  */
 /* $Id$ */
 
-#if	!defined(_LOCALE_H)
-#define	_LOCALE_H
+#ifndef _LOCALE_H
+#define _LOCALE_H
 
-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	int_frac_digits;	/* CHAR_MAX */
-	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 */
+#include <stddef.h>
+
+struct lconv
+{
+    char *  decimal_point;
+    char *  thousands_sep;
+    char *  grouping;
+    char *  mon_decimal_point;
+    char *  mon_thousands_sep;
+    char *  mon_grouping;
+    char *  positive_sign;
+    char *  negative_sign;
+    char *  currency_symbol;
+    char    frac_digits;
+    char    p_cs_precedes;
+    char    n_cs_precedes;
+    char    p_sep_by_space;
+    char    n_sep_by_space;
+    char    p_sign_posn;
+    char    n_sign_posn;
+    char *  int_curr_symbol;
+    char    int_frac_digits;
+    char    int_p_cs_precedes;
+    char    int_n_cs_precedes;
+    char    int_p_sep_by_space;
+    char    int_n_sep_by_space;
+    char    int_p_sign_posn;
+    char    int_n_sign_posn;
 };
 
-#define	NULL		((void *)0)
+#define LC_ALL      0
+#define LC_COLLATE  2
+#define LC_CTYPE    1
+#define LC_MONETARY 5
+#define LC_NUMERIC  4
+#define LC_TIME     3
 
-#define	LC_ALL		1
-#define	LC_COLLATE	2
-#define	LC_CTYPE	3
-#define	LC_MONETARY	4
-#define	LC_NUMERIC	5
-#define	LC_TIME		6
+extern char* setlocale(int, const char *);
+extern struct lconv* localeconv(void);
 
-
-char *setlocale(int _category, const char *_locale);
-struct lconv *localeconv(void);
-
-#endif	/* _LOCALE_H */
+#endif
diff --git a/lang/cem/libcc.ansi/headers/math.h b/lang/cem/libcc.ansi/headers/math.h
index 506e7483f..3546b042c 100644
--- a/lang/cem/libcc.ansi/headers/math.h
+++ b/lang/cem/libcc.ansi/headers/math.h
@@ -3,41 +3,62 @@
  */
 /* $Id$ */
 
-#if	!defined(_MATH_H)
+#ifndef _MATH_H
 #define	_MATH_H
 
-double __huge_val(void);	/* may be infinity */
-#define	HUGE_VAL	(__huge_val())
+extern double __huge_val;
+#define	HUGE_VAL (__huge_val)
 
-int	__IsNan(double d);	/* test for Not A Number */
+extern int	__IsNan(double d);	/* test for Not A Number */
 
-double	acos(double _x);
-double	asin(double _x);
-double	atan(double _x);
-double	atan2(double _y, double _x);
+extern double acos(double _x);
+extern double asin(double _x);
+extern double atan(double _x);
+extern double atan2(double _y, double _x);
 
-double	cos(double _x);
-double	sin(double _x);
-double	tan(double _x);
+extern double cos(double _x);
+extern double sin(double _x);
+extern double tan(double _x);
 
-double	cosh(double _x);
-double	sinh(double _x);
-double	tanh(double _x);
+extern double cosh(double _x);
+extern double sinh(double _x);
+extern double tanh(double _x);
 
-double	exp(double _x);
-double	log(double _x);
-double	log10(double _x);
+extern double exp(double _x);
+extern double log(double _x);
+extern double log10(double _x);
 
-double	sqrt(double _x);
-double	ceil(double _x);
-double	fabs(double _x);
-double	floor(double _x);
+extern double sqrt(double _x);
+extern double ceil(double _x);
+extern double fabs(double _x);
+extern double floor(double _x);
 
-double	pow(double _x, double _y);
+extern 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);
+extern double frexp(double _x, int *_exp);
+extern double ldexp(double _x, int _exp);
+extern double modf(double _x, double *_iptr);
+extern double fmod(double _x, double _y);
+
+/* 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	/* _MATH_H */
diff --git a/lang/cem/libcc.ansi/headers/mathconst.h b/lang/cem/libcc.ansi/headers/mathconst.h
deleted file mode 100644
index a0d530f5d..000000000
--- a/lang/cem/libcc.ansi/headers/mathconst.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * mathconst.h - mathematic constants
- */
-/* $Id$ */
-
-#if	!defined(_MATHCONST_H)
-#define	_MATHCONST_H
-
-/* 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_H */
diff --git a/lang/cem/libcc.ansi/headers/setjmp.h b/lang/cem/libcc.ansi/headers/setjmp.h
index 8b7f4758d..cbef6176e 100644
--- a/lang/cem/libcc.ansi/headers/setjmp.h
+++ b/lang/cem/libcc.ansi/headers/setjmp.h
@@ -25,15 +25,9 @@ typedef struct {
 	void *__lb;
 } jmp_buf[1];
 
-int	__setjmp(jmp_buf _env, int _savemask);
+extern int __setjmp(jmp_buf _env, int _savemask);
 
 #define	setjmp(env)	__setjmp(env, 0)
-void	longjmp(jmp_buf _env, int _val);
-
-#if defined(_POSIX_SOURCE)
-typedef jmp_buf sigjmp_buf;
-#define	sigsetjmp(env, savemask)	__setjmp(env, savemask)
-int	siglongjmp(sigjmp_buf _env, int _val);
-#endif
+extern void longjmp(jmp_buf _env, int _val);
 
 #endif	/* _SETJMP_H */
diff --git a/lang/cem/libcc.ansi/headers/signal.h b/lang/cem/libcc.ansi/headers/signal.h
index 49ffa9499..152e6c04c 100644
--- a/lang/cem/libcc.ansi/headers/signal.h
+++ b/lang/cem/libcc.ansi/headers/signal.h
@@ -6,92 +6,9 @@
  */
 /* $Id$ */
 
-#if	!defined(_SIGNAL_H)
-#define	_SIGNAL_H
+#ifndef _SIGNAL_H
+#define _SIGNAL_H
 
-typedef	int		sig_atomic_t;
+#include <unistd.h>
 
-#if	defined(_POSIX_SOURCE)
-#if	defined(_MINIX)
-typedef	unsigned short sigset_t;
-
-#define	SIG_BLOCK	0	/* for blocking signals */
-#define	SIG_UNBLOCK	1	/* for unblocking signals */
-#define	SIG_SETMASK	2	/* for setting the signal mask */
-
-struct sigaction {
-	void (*sa_handler)(int);/* SIG_DFL, SIG_IGN or pointer to function */
-	sigset_t sa_mask;	/* signals blocked during handling */
-	int sa_flags;		/* special flags */
-};
 #endif
-#endif
-
-#define	SIG_ERR		((void (*)(int))-1)
-#if	defined(__em22) || defined(__em24) || defined(__em44)
-#define	SIG_DFL		((void (*)(int))-2)
-#define	SIG_IGN		((void (*)(int))-3)
-#else
-#define	SIG_DFL		((void (*)(int))0)
-#define	SIG_IGN		((void (*)(int))1)
-#endif	/* no interpretation */
-
-#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 */
-#if	defined(__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
-#elif	defined(_MINIX)
-/* The following signals are defined but not supported */
-#define SIGCHLD		17	/* child process terminated or stopped */
-#define SIGCONT		18	/* continue if stopped */
-#define SIGSTOP		19	/* stop signal */
-#define SIGTSTP		20	/* interactive stop signal */
-#define SIGTTIN		21	/* background process wants to read */
-#define SIGTTOU		22	/* background process wants to write */
-#define	_NSIG	16
-#else
-#define	_NSIG	16
-#endif	/* __USG or __BSD4_2 */
-
-void	(*signal(int _sig, void (*_func)(int)))(int);
-int	raise(int _sig);
-
-#endif	/* _SIGNAL_H */
diff --git a/lang/cem/libcc.ansi/headers/stdarg.h b/lang/cem/libcc.ansi/headers/stdarg.h
index 0cc37a766..6442b7f90 100644
--- a/lang/cem/libcc.ansi/headers/stdarg.h
+++ b/lang/cem/libcc.ansi/headers/stdarg.h
@@ -6,10 +6,10 @@
  */
 /* $Id$ */
 
-#if	!defined(_STDARG_H)
+#ifndef _STDARG_H
 #define	_STDARG_H
 
-typedef	char	*va_list;
+typedef char* va_list;
 
 #define __vasz(x)		((sizeof(x)+sizeof(int)-1) & ~(sizeof(int) -1))
 
@@ -17,4 +17,4 @@ typedef	char	*va_list;
 #define va_arg(ap, type)	(*((type *)(void *)((ap += __vasz(type)) - __vasz(type))))
 #define va_end(ap)
 
-#endif	/* _STDARG_H */
+#endif
diff --git a/lang/cem/libcc.ansi/headers/stdbool.h b/lang/cem/libcc.ansi/headers/stdbool.h
new file mode 100644
index 000000000..9f3b67506
--- /dev/null
+++ b/lang/cem/libcc.ansi/headers/stdbool.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".
+ */
+/* $Id$ */
+
+#ifndef _STDBOOL_H
+#define _STDBOOL_H
+
+typedef int bool;
+
+#define bool    int
+#define true    1
+#define false   0
+
+#endif
diff --git a/lang/cem/libcc.ansi/headers/stddef.h b/lang/cem/libcc.ansi/headers/stddef.h
index 4b6fd375f..07723fbc5 100644
--- a/lang/cem/libcc.ansi/headers/stddef.h
+++ b/lang/cem/libcc.ansi/headers/stddef.h
@@ -6,29 +6,25 @@
  */
 /* $Id$ */
 
-#if	!defined(_STDDEF_H)
+#ifndef _STDDEF_H
 #define	_STDDEF_H
 
-#define	NULL		((void *)0)
+#define	NULL 0
 
 #define	offsetof(type, ident)	((size_t) (unsigned long) &((type *)0)->ident)
 
 #if	_EM_PSIZE == _EM_WSIZE
 typedef int	ptrdiff_t;	/* result of substracting two pointers */
-#elif	_EM_PSIZE == _EM_LSIZE
-typedef long	ptrdiff_t;	/* result of substracting two pointers */
+typedef int intptr_t; /* an integer big enough to store a pointer */
+#elif _EM_PSIZE == _EM_LSIZE
+typedef long ptrdiff_t;	/* result of substracting two pointers */
+typedef long intptr_t; /* an integer big enough to store a pointer */
 #else
-#error garbage pointer size
+#error unsupported pointer size
 #endif	/* _EM_PSIZE */
 
-#if	!defined(_SIZE_T)
-#define	_SIZE_T
-typedef unsigned int	size_t;		/* type returned by sizeof */
-#endif	/* _SIZE_T */
+typedef unsigned int size_t; /* type returned by sizeof */
+typedef char wchar_t; /* type of a wide character */
+typedef long off_t; /* type of a position offset */
 
-#if	!defined(_WCHAR_T)
-#define	_WCHAR_T
-typedef char	wchar_t;		/* type expanded character set */
-#endif	/* _WCHAR_T */
-
-#endif	/* _STDDEF_H */
+#endif
diff --git a/lang/cem/libcc.ansi/headers/stdint.h b/lang/cem/libcc.ansi/headers/stdint.h
new file mode 100644
index 000000000..d9e135014
--- /dev/null
+++ b/lang/cem/libcc.ansi/headers/stdint.h
@@ -0,0 +1,120 @@
+/*
+    <stdint.h> -- simple version used by "gimplify"
+
+    last edit:  2007-03-02  D A Gwyn
+*/
+
+/* Although we try to unify integer types, some actual machine characteristics
+   are visible, and these definitions need to work within their limits.  We do
+   assume that the GCC target has an "int" at least 32 bits wide, which works
+   for all our development platforms.  We use "long long" for the widest types
+   because presumably the programmer really needed something special there. */
+
+#define int8_t      signed char
+#define uint8_t     unsigned char
+#define int16_t     short
+#define uint16_t    unsigned short
+#define int32_t     int
+#define uint32_t    unsigned
+#define int64_t     long long
+#define uint64_t    unsigned long long
+
+#define int_least8_t    int
+#define uint_least8_t   int
+#define int_least16_t   int
+#define uint_least16_t  unsigned
+#define int_least32_t   int
+#define uint_least32_t  unsigned
+#define int_least64_t   long long
+#define uint_least64_t  unsigned long long
+
+#define intptr_t    int
+#define uintptr_t   unsigned int
+
+#define intmax_t    long long
+#define uintmax_t   unsigned long long
+
+#define int_fast8_t int
+#define uint_fast8_t    unsigned int
+#define int_fast16_t    int
+#define uint_fast16_t   unsigned int
+#define int_fast32_t    int
+#define uint_fast32_t   unsigned int
+#define int_fast64_t    long long int
+#define uint_fast64_t   unsigned long long
+
+#define INT8_MAX        127
+#define INT8_MIN        (-128)
+#define UINT8_MAX       255
+
+#define INT16_MAX       32767
+#define INT16_MIN       (-32768)
+#define UINT16_MAX      65535
+
+#define INT32_MAX       2147483647
+#define INT32_MIN       (-2147483648)
+#define UINT32_MAX      4294967295
+
+#define INT64_MAX       2147483647LL
+#define INT64_MIN       (-2147483648LL)
+#define UINT64_MAX      4294967295ULL
+
+#define INT_LEAST8_MAX      2147483647
+#define INT_LEAST8_MIN      (-2147483647)
+#define UINT_LEAST8_MAX     4294967295
+
+#define INT_LEAST16_MAX     2147483647
+#define INT_LEAST16_MIN     (-2147483647)
+#define UINT_LEAST16_MAX    4294967295
+
+#define INT_LEAST32_MAX     2147483647
+#define INT_LEAST32_MIN     (-2147483647)
+#define UINT_LEAST32_MAX    4294967295
+
+#define INT_LEAST64_MAX     2147483647LL
+#define INT_LEAST64_MIN     (-2147483647LL)
+#define UINT_LEAST64_MAX    4294967295ULL
+
+#define INT_FAST8_MAX       2147483647
+#define INT_FAST8_MIN       (-2147483647)
+#define UINT_FAST8_MAX      4294967295
+
+#define INT_FAST16_MAX      2147483647
+#define INT_FAST16_MIN      (-2147483647)
+#define UINT_FAST16_MAX     4294967295
+
+#define INT_FAST32_MAX      2147483647
+#define INT_FAST32_MIN      (-2147483647)
+#define UINT_FAST32_MAX     4294967295
+
+#define INT_FAST64_MAX      2147483647LL
+#define INT_FAST64_MIN      (-2147483647LL)
+#define UINT_FAST64_MAX     4294967295ULL
+
+#define INTPTR_MAX      2147483647
+#define INTPTR_MIN      (-2147483647)
+#define UINTPTR_MAX     4294967295
+
+#define INTMAX_MAX      2147483647LL
+#define INTMAX_MIN      (-2147483647LL)
+#define UINTMAX_MAX     4294967295ULL
+
+#define PTRDIFF_MAX     2147483647
+#define PTRDIFF_MIN     (-2147483647)
+
+#define SIG_ATOMIC_MAX      4294967295
+#define SIG_ATOMIC_MIN      0
+
+#define SIZE_MAX        4294967295
+
+/* The trick used to get the right type is due to Clive Feather: */
+#define INT8_C(c)   (INT_LEAST8_MAX - INT_LEAST8_MAX + (c))
+#define UINT8_C(c)  (UINT_LEAST8_MAX - UINT_LEAST8_MAX + (c))
+#define INT16_C(c)  (INT_LEAST16_MAX - INT_LEAST16_MAX + (c))
+#define UINT16_C(c) (UINT_LEAST16_MAX - UINT_LEAST16_MAX + (c))
+#define INT32_C(c)  (INT_LEAST32_MAX - INT_LEAST32_MAX + (c))
+#define UINT32_C(c) (UINT_LEAST32_MAX - UINT_LEAST32_MAX + (c))
+#define INT64_C(c)  (INT_LEAST64_MAX - INT_LEAST64_MAX + (c))
+#define UINT64_C(c) (UINT_LEAST64_MAX - UINT_LEAST64_MAX + (c))
+#define INTMAX_C(c) (INTMAX_MAX - INTMAX_MAX + (c))
+#define UINTMAX_C(c)    (UINTMAX_MAX - UINTMAX_MAX + (c))
diff --git a/lang/cem/libcc.ansi/headers/stdio.h b/lang/cem/libcc.ansi/headers/stdio.h
index 662419e6e..4c5a42a08 100644
--- a/lang/cem/libcc.ansi/headers/stdio.h
+++ b/lang/cem/libcc.ansi/headers/stdio.h
@@ -6,9 +6,11 @@
  */
 /* $Id$ */
 
-#if	!defined(_STDIO_H)
+#ifndef _STDIO_H
 #define	_STDIO_H
 
+#include <stddef.h>
+
 /*
  * Focus point of all stdio activity.
  */
@@ -33,86 +35,72 @@ typedef struct __iobuf {
 #define _IOWRITING	0x100
 #define	_IOAPPEND	0x200
 
-/* The following definitions are also in <unistd.h>. They should not
- * conflict.
- */
-#define	SEEK_SET	0
-#define	SEEK_CUR	1
-#define	SEEK_END	2
+#define	SEEK_SET    0
+#define	SEEK_CUR    1
+#define	SEEK_END    2
 
-#define	stdin		(&__stdin)
-#define	stdout		(&__stdout)
-#define	stderr		(&__stderr)
+#define	stdin       (&__stdin)
+#define	stdout      (&__stdout)
+#define	stderr      (&__stderr)
 
-#define	BUFSIZ		1024
-#define	NULL		((void *)0)
-#define	EOF		(-1)
+#define	BUFSIZ      1024
+#define	EOF         (-1)
 
 #define	FOPEN_MAX	20
 
-#if	defined(__BSD4_2)
-#define	FILENAME_MAX	255
-#else
-#define	FILENAME_MAX	14
-#endif	/* __BSD4_2 */
-#define	TMP_MAX		999
-#define	L_tmpnam	(sizeof("/tmp/") + 15)
+#define	FILENAME_MAX 255
+#define	TMP_MAX     999
+#define	L_tmpnam    (sizeof("/tmp/") + 15)
 
-typedef long int	fpos_t;
-
-#if	!defined(_SIZE_T)
-#define	_SIZE_T
-typedef unsigned int	size_t;		/* type returned by sizeof */
-#endif	/* _SIZE_T */
+typedef long int fpos_t;
 
 extern FILE	*__iotab[FOPEN_MAX];
 extern FILE	__stdin, __stdout, __stderr;
 
-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(const char *_s, const char *_format, ...);
-int	vfprintf(FILE *_stream, const char *_format, char *_arg);
-int	vprintf(const char *_format, char *_arg);
-int	vsprintf(char *_s, const char *_format, char *_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);
-int	getc(FILE *_stream);
-int	getchar(void);
-char	*gets(char *_s);
-int	putc(int _c, FILE *_stream);
-int	putchar(int _c);
-int	puts(const 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, fpos_t *_pos);
-long	ftell(FILE *_stream);
-void	rewind(FILE *_stream);
-void	clearerr(FILE *_stream);
-int	feof(FILE *_stream);
-int	ferror(FILE *_stream);
-void	perror(const char *_s);
-
-int __fillbuf(FILE *_stream);
-int __flushbuf(int _c, FILE *_stream);
+extern int	remove(const char *_filename);
+extern int	rename(const char *_old, const char *_new);
+extern FILE	*tmpfile(void);
+extern char	*tmpnam(char *_s);
+extern int	fclose(FILE *_stream);
+extern int	fflush(FILE *_stream);
+extern FILE	*fopen(const char *_filename, const char *_mode);
+extern FILE	*freopen(const char *_filename, const char *_mode, FILE *_stream);
+extern void	setbuf(FILE *_stream, char *_buf);
+extern int	setvbuf(FILE *_stream, char *_buf, int _mode, size_t _size);
+extern int	fprintf(FILE *_stream, const char *_format, ...);
+extern int	fscanf(FILE *_stream, const char *_format, ...);
+extern int	printf(const char *_format, ...);
+extern int	scanf(const char *_format, ...);
+extern int	sprintf(char *_s, const char *_format, ...);
+extern int	sscanf(const char *_s, const char *_format, ...);
+extern int	vfprintf(FILE *_stream, const char *_format, char *_arg);
+extern int	vprintf(const char *_format, char *_arg);
+extern int	vsprintf(char *_s, const char *_format, char *_arg);
+extern int	fgetc(FILE *_stream);
+extern char	*fgets(char *_s, int _n, FILE *_stream);
+extern int	fputc(int _c, FILE *_stream);
+extern int	fputs(const char *_s, FILE *_stream);
+extern int	getc(FILE *_stream);
+extern int	getchar(void);
+extern char	*gets(char *_s);
+extern int	putc(int _c, FILE *_stream);
+extern int	putchar(int _c);
+extern int	puts(const char *_s);
+extern int	ungetc(int _c, FILE *_stream);
+extern size_t	fread(void *_ptr, size_t _size, size_t _nmemb, FILE *_stream);
+extern size_t	fwrite(const void *_ptr, size_t _size, size_t _nmemb, FILE *_stream);
+extern int	fgetpos(FILE *_stream, fpos_t *_pos);
+extern int	fseek(FILE *_stream, long _offset, int _whence);
+extern int	fsetpos(FILE *_stream, fpos_t *_pos);
+extern long	ftell(FILE *_stream);
+extern void	rewind(FILE *_stream);
+extern void	clearerr(FILE *_stream);
+extern int	feof(FILE *_stream);
+extern int	ferror(FILE *_stream);
+extern void	perror(const char *_s);
 
+extern int __fillbuf(FILE *_stream);
+extern int __flushbuf(int _c, FILE *_stream);
 
 #define	getchar()	getc(stdin)
 #define	putchar(c)	putc(c,stdout)
@@ -126,10 +114,10 @@ int __flushbuf(int _c, FILE *_stream);
 #define	ferror(p)	(((p)->_flags & _IOERR) != 0)
 #define clearerr(p)	((p)->_flags &= ~(_IOERR|_IOEOF))
 
-#if	defined(__BSD4_2) || defined(__USG) || defined(_POSIX_SOURCE)
-int fileno(FILE *_stream);
-FILE *fdopen(int fildes, const char *type);
-#define	fileno(stream)		((stream)->_fd)
-#endif	/* __BSD4_2 || __USG || _POSIX_SOURCE */
+/* Non-standard extensions */
+
+extern int fileno(FILE *_stream);
+extern FILE* fdopen(int fildes, const char *type);
+#define	fileno(stream) ((stream)->_fd)
 
 #endif	/* _STDIO_H */
diff --git a/lang/cem/libcc.ansi/headers/stdlib.h b/lang/cem/libcc.ansi/headers/stdlib.h
index 1b8fc7784..c14db91a8 100644
--- a/lang/cem/libcc.ansi/headers/stdlib.h
+++ b/lang/cem/libcc.ansi/headers/stdlib.h
@@ -6,59 +6,58 @@
  */
 /* $Id$ */
 
-#if	!defined(_STDLIB_H)
+#ifndef _STDLIB_H
 #define	_STDLIB_H
 
-#define	NULL		((void *)0)
+#include <stddef.h>
 
-#define	EXIT_FAILURE	1
-#define	EXIT_SUCCESS	0
-#define	RAND_MAX	32767
-#define	MB_CUR_MAX	1
+#define	EXIT_FAILURE 1
+#define	EXIT_SUCCESS 0
+#define	RAND_MAX 32767
+#define	MB_CUR_MAX sizeof(wchar_t)
 
 typedef struct { int quot, rem; } div_t;
 typedef struct { long quot, rem; } ldiv_t;
 
-#if	!defined(_SIZE_T)
-#define	_SIZE_T
-typedef unsigned int	size_t;		/* type returned by sizeof */
-#endif	/* _SIZE_T */
-
-#if	!defined(_WCHAR_T)
-#define	_WCHAR_T
-typedef char	wchar_t;
-#endif	/* _WCHAR_T */
-
-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,
+extern double atof(const char *_nptr);
+extern int atoi(const char *_nptr);
+extern long atol(const char *_nptr);
+extern double strtod(const char *_nptr, char **_endptr);
+extern long strtol(const char *_nptr, char **_endptr, int _base);
+extern unsigned long strtoul(const char *_nptr, char **_endptr, int _base);
+extern int rand(void);
+extern void srand(unsigned int _seed);
+extern void* calloc(size_t _nmemb, size_t _size);
+extern void free(void *_ptr);
+extern void* malloc(size_t _size);
+extern void* realloc(void *_ptr, size_t _size);
+extern void abort(void);
+extern int atexit(void (*_func)(void));
+extern void exit(int _status);
+extern void _Exit(int _status);
+extern char* getenv(const char *_name);
+extern int system(const char *_string);
+extern 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,
+extern 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(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);
+extern int abs(int _j);
+extern div_t div(int _numer, int _denom);
+extern long labs(long _j);
+extern ldiv_t ldiv(long _numer, long _denom);
+extern int mblen(const char *_s, size_t _n);
+extern int mbtowc(wchar_t *_pwc, const char *_s, size_t _n);
+extern int wctomb(char *_s, wchar_t _wchar);
+extern size_t mbstowcs(wchar_t *_pwcs, const char *_s, size_t _n);
+extern size_t wcstombs(char *_s, const wchar_t *_pwcs, size_t _n);
 
-#endif	/* _STDLIB_H */
+/* Extensions (not part of the standard) */
+
+#define atof(n)   strtod(n, (char **)NULL)
+#define atoi(n)   ((int)strtol(n, (char **)NULL, 10))
+#define atol(n)   strtol(n, (char **)NULL, 10)
+#define atoll(n)  strtoll(n, (char **)NULL, 10)
+#define mblen(s, n)   mbtowc((wchar_t *)0, s, n)
+
+#endif
diff --git a/lang/cem/libcc.ansi/headers/string.h b/lang/cem/libcc.ansi/headers/string.h
index e7cdad68a..b9d50617b 100644
--- a/lang/cem/libcc.ansi/headers/string.h
+++ b/lang/cem/libcc.ansi/headers/string.h
@@ -6,37 +6,32 @@
  */
 /* $Id$ */
 
-#if	!defined(_STRING_H)
+#ifndef _STRING_H
 #define	_STRING_H
 
-#define	NULL		((void *)0)
+#include <stddef.h>
 
-#if	!defined(_SIZE_T)
-#define	_SIZE_T
-typedef unsigned int	size_t;		/* type returned by sizeof */
-#endif	/* _SIZE_T */
+extern void	*memcpy(void *_s1, const void *_s2, size_t _n);
+extern void	*memmove(void *_s1, const void *_s2, size_t _n);
+extern char	*strcpy(char *_s1, const char *_s2);
+extern char	*strncpy(char *_s1, const char *_s2, size_t _n);
+extern char	*strcat(char *_s1, const char *_s2);
+extern char	*strncat(char *_s1, const char *_s2, size_t _n);
+extern int	memcmp(const void *_s1, const void *_s2, size_t _n);
+extern int	strcmp(const char *_s1, const char *_s2);
+extern int	strcoll(const char *_s1, const char *_s2);
+extern int	strncmp(const char *_s1, const char *_s2, size_t _n);
+extern size_t	strxfrm(char *_s1, const char *_s2, size_t _n);
+extern void	*memchr(const void *_s, int _c, size_t _n);
+extern char	*strchr(const char *_s, int _c);
+extern size_t	strcspn(const char *_s1, const char *_s2);
+extern char	*strpbrk(const char *_s1, const char *_s2);
+extern char	*strrchr(const char *_s, int _c);
+extern size_t	strspn(const char *_s1, const char *_s2);
+extern char	*strstr(const char *_s1, const char *_s2);
+extern char	*strtok(char *_s1, const char *_s2);
+extern void	*memset(void *_s, int _c, size_t _n);
+extern char	*strerror(int _errnum);
+extern size_t	strlen(const char *_s);
 
-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	/* _STRING_H */
+#endif
diff --git a/lang/cem/libcc.ansi/headers/sys/dirent.h b/lang/cem/libcc.ansi/headers/sys/dirent.h
deleted file mode 100644
index 0440eb428..000000000
--- a/lang/cem/libcc.ansi/headers/sys/dirent.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
-	<sys/dirent.h> -- file system independent directory entry (SVR3)
-
-	last edit:	25-Apr-1987	D A Gwyn
-
-	prerequisite:	<sys/types.h>
-*/
-/* $Id$ */
-
-#if	!defined(_SYS_DIRENT_H)
-#define	_SYS_DIRENT_H
-
-struct dirent				/* data from getdents()/readdir() */
-	{
-	long		d_ino;		/* inode number of entry */
-	off_t		d_off;		/* offset of disk directory entry */
-	unsigned short	d_reclen;	/* length of this record */
-	char		d_name[1];	/* name of file */	/* non-POSIX */
-	};
-
-/* The following nonportable ugliness could have been avoided by defining
-   DIRENTSIZ and DIRENTBASESIZ to also have (struct dirent *) arguments. */
-#define	DIRENTBASESIZ		(((struct dirent *)0)->d_name \
-				- (char *)&((struct dirent *)0)->d_ino)
-#define	DIRENTSIZ( namlen )	((DIRENTBASESIZ + sizeof(long) + (namlen)) \
-				/ sizeof(long) * sizeof(long))
-
-/* DAG -- the following was moved from <dirent.h>, which was the wrong place */
-#define	MAXNAMLEN	512		/* maximum filename length */
-
-#if	!defined(NAME_MAX)
-#define	NAME_MAX	(MAXNAMLEN - 1)	/* DAG -- added for POSIX */
-#endif
-
-#endif	/* _SYS_DIRENT_H */
diff --git a/lang/cem/libcc.ansi/headers/sys/errno.h b/lang/cem/libcc.ansi/headers/sys/errno.h
deleted file mode 100644
index ea9fe50d1..000000000
--- a/lang/cem/libcc.ansi/headers/sys/errno.h
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * sys/errno.h - error numbers
- */
-/* $Id$ */
-
-#if	!defined(_SYS_ERRNO_H)
-#define	_SYS_ERRNO_H
-
-#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 */
-
-#if	defined(__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 */
-
-#if	defined(__BSD4_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 */
-
-#if	defined(_POSIX_SOURCE)
-#if	defined(_MINIX)
-#define	EDEADLK		35	/* resource deadlock avoided */
-#define	ENAMETOOLONG	36	/* file name too long */
-#define	ENOLCK		37	/* no locks available */
-#define	ENOSYS		38	/* function not implemented */
-#define	ENOTEMPTY	39	/* directory not empty */
-
-#define	ELOCKED		101	/* can't send message */
-#define	EBADCALL	102	/* error on send/recieve */
-#define	ELONGSTRING	103	/* string too long */
-#endif
-/* Room for other POSIX implementations */
-#endif
-
-#endif	/* _SYS_ERRNO_H */
diff --git a/lang/cem/libcc.ansi/headers/sys/ioctl.h b/lang/cem/libcc.ansi/headers/sys/ioctl.h
new file mode 100644
index 000000000..2823d4581
--- /dev/null
+++ b/lang/cem/libcc.ansi/headers/sys/ioctl.h
@@ -0,0 +1,11 @@
+/* $Source$
+ * $State$
+ * $Revision$
+ */
+
+#ifndef _SYS_IOCTL_H
+#define _SYS_IOCTL_H
+
+#include <unistd.h>
+
+#endif
diff --git a/lang/cem/libcc.ansi/headers/sys/time.h b/lang/cem/libcc.ansi/headers/sys/time.h
new file mode 100644
index 000000000..04ce7636d
--- /dev/null
+++ b/lang/cem/libcc.ansi/headers/sys/time.h
@@ -0,0 +1,12 @@
+/* $Source$
+ * $State$
+ * $Revision$
+ */
+
+#ifndef _SYS_TIME_H
+#define _SYS_TIME_H
+
+#include <time.h>
+#include <unistd.h>
+
+#endif
diff --git a/lang/cem/libcc.ansi/headers/tgmath.h b/lang/cem/libcc.ansi/headers/tgmath.h
new file mode 100644
index 000000000..85114e14f
--- /dev/null
+++ b/lang/cem/libcc.ansi/headers/tgmath.h
@@ -0,0 +1,11 @@
+/*
+    <tgmath.h> -- simple version used by "gimplify"
+
+    last edit:  2007-02-12  D A Gwyn
+*/
+
+/* XXX -- Can't be done right without compiler support; it *may* suffice to
+   use automatic coercion to type double with the <math.h> prototypes. */
+
+#include    <math.h>
+#include    <complex.h>
diff --git a/lang/cem/libcc.ansi/headers/time.h b/lang/cem/libcc.ansi/headers/time.h
index a67966ad8..27901bee9 100644
--- a/lang/cem/libcc.ansi/headers/time.h
+++ b/lang/cem/libcc.ansi/headers/time.h
@@ -3,28 +3,15 @@
  */
 /* $Id$ */
 
-#if	!defined(_TIME_H)
+#ifndef _TIME_H
 #define	_TIME_H
 
-#define	NULL		((void *)0)
+#include <stddef.h>
 
-#if	defined(__BSD4_2)
-#define	CLOCKS_PER_SEC	1000000		/* ticks per second */
-#else
-#define	CLOCKS_PER_SEC	60
-#endif	/* __BSD4_2 */
+#define CLOCKS_PER_SEC 1000000
 
-#if	!defined(_SIZE_T)
-#define	_SIZE_T
-typedef unsigned int	size_t;		/* type returned by sizeof */
-#endif	/* _SIZE_T */
-
-#if	!defined(_TIME_T)
-#define	_TIME_T
-typedef	unsigned long	time_t;		/* type returned by TOD clock */
-#endif	/* _TIME_T */
-
-typedef	unsigned long	clock_t;	/* type returned by real time clock */
+typedef	unsigned long time_t;		/* type returned by TOD clock */
+typedef	unsigned long clock_t;	/* type returned by real time clock */
 
 struct tm {
 	int	tm_sec;			/* seconds after the minute - [0, 59] */
@@ -38,27 +25,20 @@ struct tm {
 	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,
+extern clock_t clock(void);
+extern double difftime(time_t _time1, time_t _time0);
+extern time_t mktime(struct tm *_timeptr);
+extern time_t time(time_t *_timeptr);
+extern char* asctime(const struct tm *_timeptr);
+extern char* ctime(const time_t *_timer);
+extern struct tm* gmtime(const time_t *_timer);
+extern struct tm* localtime(const time_t *_timer);
+extern size_t strftime(char *_s, size_t _maxsize,
 			const char *_format,
 			const struct tm *_timeptr);
 
-#if	defined(__USG) || defined(_POSIX_SOURCE)
+/* Extensions not in the standard */
 
-void	tzset(void);
+#define ctime(t)  asctime(localtime(t))
 
-#if	defined(__USG)
-extern long timezone;
-extern int daylight;
-extern char *tzname[2];
 #endif
-#endif	/* __USG || _POSIX_SOURCE */
-
-#endif	/* _TIME_H */
diff --git a/lang/cem/libcc.ansi/headers/varargs.h b/lang/cem/libcc.ansi/headers/varargs.h
deleted file mode 100644
index b2337a45a..000000000
--- a/lang/cem/libcc.ansi/headers/varargs.h
+++ /dev/null
@@ -1,12 +0,0 @@
-/*
- * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
- * See the copyright notice in the ACK home directory, in the file "Copyright".
- */
-/* $Id$ */
-
-typedef char *va_list;
-# define __va_sz(mode)	(((sizeof(mode) + sizeof(int) - 1) / sizeof(int)) * sizeof(int))
-# define va_dcl int va_alist;
-# define va_start(list) (list = (char *) &va_alist)
-# define va_end(list)
-# define va_arg(list,mode) (*((mode *)((list += __va_sz(mode)) - __va_sz(mode))))
diff --git a/lang/cem/libcc.ansi/math/hugeval.c b/lang/cem/libcc.ansi/math/hugeval.c
index 759bab9e4..2d51c2994 100644
--- a/lang/cem/libcc.ansi/math/hugeval.c
+++ b/lang/cem/libcc.ansi/math/hugeval.c
@@ -5,10 +5,7 @@
  * Author: Hans van Eck
  */
 /* $Id$ */
-#include	<math.h>
 
-double
-__huge_val(void)
-{
-	return 1.0e+1000;	/* This will generate a warning */
-}
+#include <math.h>
+
+double __huge_val = 1.0e+1000; /* This will generate a warning */
diff --git a/lang/cem/libcc.ansi/math/localmath.h b/lang/cem/libcc.ansi/math/localmath.h
index 8ac442286..7c9a67465 100644
--- a/lang/cem/libcc.ansi/math/localmath.h
+++ b/lang/cem/libcc.ansi/math/localmath.h
@@ -3,26 +3,6 @@
  */
 /* $Id$ */
 
-/* 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
-
 /* macros for constructing polynomials */
 #define	POLYNOM1(x, a)	((a)[1]*(x)+(a)[0])
 #define	POLYNOM2(x, a)	(POLYNOM1((x),(a)+1)*(x)+(a)[0])
@@ -38,5 +18,18 @@
 #define	POLYNOM12(x, a)	(POLYNOM11((x),(a)+1)*(x)+(a)[0])
 #define	POLYNOM13(x, a)	(POLYNOM12((x),(a)+1)*(x)+(a)[0])
 
-#define	M_LN_MAX_D	(M_LN2 * DBL_MAX_EXP)
-#define	M_LN_MIN_D	(M_LN2 * (DBL_MIN_EXP - 1))
+/* These are set up for 64-bit doubles. */
+
+#ifndef M_MAX_D
+#define M_MAX_D          1.7976931348623157e+308
+#define M_MIN_D		 2.2250738585072014e-308
+#define M_DEXPLEN	 11
+#endif
+#define M_DMAXEXP	 ((1 << (M_DEXPLEN - 1)) - 1)
+#define M_DMINEXP	 (-M_DMAXEXP)
+#define M_LN_MAX_D	 (M_LN2 * M_DMAXEXP)
+#define M_LN_MIN_D	 (M_LN2 * (M_DMINEXP - 1))
+
+#define HUGE		M_MAX_D
+#define MAXDOUBLE	M_MAX_D
+
diff --git a/lang/cem/libcc.ansi/pmfile b/lang/cem/libcc.ansi/pmfile
index 6368244f5..672c6cd82 100644
--- a/lang/cem/libcc.ansi/pmfile
+++ b/lang/cem/libcc.ansi/pmfile
@@ -12,7 +12,7 @@ local crt = ackfile {
 local libc = acklibrary {
 	ACKBUILDFLAGS = {PARENT, "-ansi"},
 	ACKINCLUDES = {PARENT, "%ROOTDIR%h", d.."headers"},
-	outputs = {"%U%/libc-ansi.a"},
+	outputs = {"%U%/libc.a"},
 	
 	-- assert
 	
@@ -85,6 +85,8 @@ local libc = acklibrary {
 
 	-- misc
 	
+	ackfile (d.."misc/environ.c"),
+	--[[
 	ackfile (d.."misc/getgrent.c"),
 	ackfile (d.."misc/getopt.c"),
 	ackfile (d.."misc/getpass.c"),
@@ -110,11 +112,12 @@ local libc = acklibrary {
 	ackfile (d.."misc/isatty.c"),
 	ackfile (d.."misc/mktemp.c"),
 	ackfile (d.."misc/hypot.c"),
+	--]]
 
 	-- setjmp
 	
 	ackfile (d.."setjmp/setjmp.e"),
-	ackfile (d.."setjmp/sigmisc.c"),
+	--ackfile (d.."setjmp/sigmisc.c"),
 	
 	-- signal
 	
@@ -124,8 +127,8 @@ local libc = acklibrary {
 	
 	ackfile (d.."stdio/tmpfile.c"),
 	ackfile (d.."stdio/tmpnam.c"),
-	ackfile (d.."stdio/rename.c"),
-	ackfile (d.."stdio/remove.c"),
+--	ackfile (d.."stdio/rename.c"),
+--	ackfile (d.."stdio/remove.c"),
 	ackfile (d.."stdio/fopen.c"),
 	ackfile (d.."stdio/freopen.c"),
 	ackfile (d.."stdio/setbuf.c"),
@@ -171,7 +174,7 @@ local libc = acklibrary {
 	ackfile (d.."stdio/fclose.c"),
 	ackfile (d.."stdio/flushbuf.c"),
 	ackfile (d.."stdio/fflush.c"),
-	ackfile (d.."stdio/isatty.c"),
+--	ackfile (d.."stdio/isatty.c"),
 	ackfile (d.."stdio/data.c"),
 
 	-- stdlib
@@ -195,7 +198,7 @@ local libc = acklibrary {
 	ackfile (d.."stdlib/rand.c"),
 	ackfile (d.."stdlib/strtod.c"),
 	ackfile (d.."stdlib/strtol.c"),
-	ackfile (d.."stdlib/system.c"),
+--	ackfile (d.."stdlib/system.c"),
 	ackfile (d.."stdlib/wcstombs.c"),
 	ackfile (d.."stdlib/wctomb.c"),
 	ackfile (d.."stdlib/ext_comp.c"),
@@ -260,22 +263,24 @@ local libc = acklibrary {
 	ackfile (d.."time/misc.c"),
 
 	install = {
-		pm.install("%BINDIR%%PLATIND%/%PLATFORM%/libc-ansi.a")
+		pm.install("%BINDIR%%PLATIND%/%PLATFORM%/libc.a")
 	}
 }
 
 local headers = group {
 	install = {
+		pm.install(d.."headers/sys/time.h", "%BINDIR%include/ansi/sys/time.h"),
+		pm.install(d.."headers/sys/ioctl.h", "%BINDIR%include/ansi/sys/ioctl.h"),
 		pm.install(d.."headers/assert.h", "%BINDIR%include/ansi/assert.h"),
 		pm.install(d.."headers/ctype.h", "%BINDIR%include/ansi/ctype.h"),
-		pm.install(d.."headers/dirent.h", "%BINDIR%include/ansi/dirent.h"),
+--		pm.install(d.."headers/dirent.h", "%BINDIR%include/ansi/dirent.h"),
 		pm.install(d.."headers/errno.h", "%BINDIR%include/ansi/errno.h"),
 		pm.install(d.."headers/float.h", "%BINDIR%include/ansi/float.h"),
-		pm.install(d.."headers/grp.h", "%BINDIR%include/ansi/grp.h"),
+--		pm.install(d.."headers/grp.h", "%BINDIR%include/ansi/grp.h"),
 		pm.install(d.."headers/limits.h", "%BINDIR%include/ansi/limits.h"),
-		pm.install(d.."headers/locale.h", "%BINDIR%include/ansi/locale.h"),
+--		pm.install(d.."headers/locale.h", "%BINDIR%include/ansi/locale.h"),
 		pm.install(d.."headers/math.h", "%BINDIR%include/ansi/math.h"),
-		pm.install(d.."headers/mathconst.h", "%BINDIR%include/ansi/mathconst.h"),
+--		pm.install(d.."headers/mathconst.h", "%BINDIR%include/ansi/mathconst.h"),
 		pm.install(d.."headers/setjmp.h", "%BINDIR%include/ansi/setjmp.h"),
 		pm.install(d.."headers/signal.h", "%BINDIR%include/ansi/signal.h"),
 		pm.install(d.."headers/stdarg.h", "%BINDIR%include/ansi/stdarg.h"),
@@ -284,8 +289,6 @@ local headers = group {
 		pm.install(d.."headers/stdlib.h", "%BINDIR%include/ansi/stdlib.h"),
 		pm.install(d.."headers/string.h", "%BINDIR%include/ansi/string.h"),
 		pm.install(d.."headers/time.h", "%BINDIR%include/ansi/time.h"),
-		pm.install(d.."headers/sys/dirent.h", "%BINDIR%include/ansi/sys/dirent.h"),
-		pm.install(d.."headers/sys/errno.h", "%BINDIR%include/ansi/sys/errno.h"),
 	}
 }