constant BUFSIZ
constant FILENAME_MAX
constant FOPEN_MAX >= 8

constant _IOFBF
constant _IOLBF
constant _IONBF

constant L_ctermid
#if !defined XOPEN2K && !defined XOPEN2K8 && !defined POSIX2008
constant L_cuserid
#endif
constant L_tmpnam

constant SEEK_CUR
constant SEEK_END
constant SEEK_SET

constant TMP_MAX >= 10000

constant EOF

constant NULL

#if !defined POSIX && !defined POSIX2008
constant P_tmpdir
#endif

macro stdin
macro stdout
macro stderr

type FILE
type fpos_t
type va_list
type size_t
#if defined XOPEN2K8 || defined POSIX2008
type off_t
type ssize_t
#endif

function void clearerr (FILE*)
function {char*} ctermid (char*)
#if !defined XOPEN2K && !defined XOPEN2K8 && !defined POSIX2008
function {char*} cuserid (char*)
#endif
#if defined XOPEN2K8 || defined POSIX2008
function int dprintf (int, const char*, ...)
#endif
function int fclose (FILE*)
function {FILE*} fdopen (int, const char*)
function int feof (FILE*)
function int ferror (FILE*)
function int fflush (FILE*)
function int fgetc (FILE*)
function int fgetpos (FILE*, fpos_t*)
function {char*} fgets (char*, int, FILE*)
function int fileno (FILE*)
function void flockfile (FILE*)
#if defined XOPEN2K8 || defined POSIX2008
function {FILE*} fmemopen (void*, size_t, const char*)
#endif
function {FILE*} fopen (const char*, const char*)
function int fprintf (FILE*, const char*, ...)
function int fputc (int, FILE*)
function int fputs (const char*, FILE*)
function size_t fread (void*, size_t, size_t, FILE*)
function {FILE*} freopen (const char*, const char*, FILE*)
function int fscanf (FILE*, const char*, ...)
function int fseek (FILE*, long int, int)
function int fseeko (FILE*, off_t, int)
function int fsetpos (FILE*, const fpos_t*)
function {long int} ftell (FILE*)
function off_t ftello (FILE*)
function int ftrylockfile (FILE*)
function void funlockfile (FILE*)
function size_t fwrite (const void*, size_t, size_t, FILE*)
function int getc (FILE*)
function int getchar (void)
function int getc_unlocked (FILE*)
function int getchar_unlocked ()
#if defined XOPEN2K8 || defined POSIX2008
function ssize_t getdelim (char**, size_t*, int, FILE*)
function ssize_t getline (char**, size_t*, FILE*)
#endif
#if !defined XOPEN2K && !defined XOPEN2K8 && !defined POSIX2008
function int getopt (int, char *const[], const char *)
#endif
function {char*} gets (char*)
#if !defined XOPEN2K && !defined XOPEN2K8 && !defined POSIX2008
function int getw (FILE*)
#endif
#if defined XOPEN2K8 || defined POSIX2008
function {FILE*} open_memstream (char**, size_t*)
#endif
function int pclose (FILE*)
function void perror (const char*)
function {FILE*} popen (const char*, const char*)
function int printf (const char*, ...)
function int putc (int, FILE*)
function int putchar (int)
function int putc_unlocked (int, FILE*)
function int putchar_unlocked (int)
function int puts (const char*)
#if !defined XOPEN2K && !defined XOPEN2K8 && !defined POSIX2008
function int putw (int, FILE*)
#endif
function int remove (const char*)
function int rename (const char*, const char*)
#if defined XOPEN2K8 || defined POSIX2008
function int renameat (int, const char*, int, const char*)
#endif
function void rewind (FILE*)
function int scanf (const char*, ...)
function void setbuf (FILE*, char*)
function int setvbuf (FILE*, char*, int, size_t)
function int snprintf (char*, size_t, const char*, ...)
function int sprintf (char *, const char *, ...)
function int sscanf (const char*, const char*, ...)
#if !defined POSIX && !defined POSIX2008
function {char*} tempnam (const char*, const char*)
#endif
function {FILE*} tmpfile (void)
function {char*} tmpnam (char*)
function int ungetc (int, FILE*)
#if defined XOPEN2K8 || defined POSIX2008
function int vdprintf (int, const char*, va_list)
#endif
function int vfprintf (FILE*, const char*, va_list)
#if defined XOPEN2K || defined XOPEN2K8 || defined POSIX2008
function int vfscanf (FILE*, const char*, va_list)
#endif
function int vprintf (const char*, va_list)
#if defined XOPEN2K || defined XOPEN2K8 || defined POSIX2008
function int vscanf (const char*, va_list)
#endif
function int vsnprintf (char*, size_t, const char*, va_list)
function int vsprintf (char*, const char*, va_list)
#if defined XOPEN2K || defined XOPEN2K8 || defined POSIX2008
function int vsscanf (const char*, const char*, va_list)
#endif

#if !defined ISO && !defined POSIX
#if !defined XOPEN2K && !defined XOPEN2K8 && !defined POSIX2008
variable {char*} optarg
variable int opterr
variable int optind
variable int optopt
#endif

allow-header stddef.h

allow *_t
#endif
