#if !defined(stdio_h) && !defined(FILE)
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* One of the real portability hassles is that fileno(fd)  is  defined  on  some  *
* systems and not on others, and where it is defined, it is sometimes an lvalue  *
* and sometimes not.  We try to handle this by not using fileno() directly, but  *
* rather  by  splitting  it  into  two  macros:  Filefd(fp)  is  an lvalue, and  *
* Fileno(fp) need not be.  We try to make sure these are defined so they work.   *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

#if !defined(stdio_h)
#include <stdio.h>
#define stdio_h
#endif

#if defined(Darwin)
#include <stdio.h>
#define stdio_h
#define Fileno(fp) ((fp)?fileno(fp):-1)
#define Filefd(fp) ((fp)->_file)
#endif

#if !defined(stdio_h) && defined(Linux)
#include <stdio.h>
#define stdio_h
#ifndef	fileno
static char* id_fileno = "*** define fileno ***";
#define	fileno(x)	((x)->_fileno)
#endif
#define Fileno(fp) ((fp)?fileno(fp):-1)
#define Filefd(fp) ((fp)->_fileno)
#define stdio_h
#endif

#if !defined(stdio_h) && defined(SunOS)
#include <stdio.h>
#define stdio_h
#define Fileno(fp) ((fp)?(fp)->_file:-1)
#define Filefd(fp) ((fp)->_file)
#define stdio_h
#endif

#if defined(FreeBSD)
#include <stdio.h>
#define	Fileno(p)	((p)->_file)
#define	Filefd(p)	((p)->_file)
#define _fileno _file	// The above seems to be not enough
#define stdio_h
#endif

#if defined(FREEBSD)
#include <stdio.h>
#define	Fileno(p)	((p)->_file)
#define	Filefd(p)	((p)->_file)
#define _fileno _file	// The above seems to be not enough
#define stdio_h
#endif

#if defined(IRIX64)
#include "/usr/include/stdio.h"
#define stdio_h
#define Filefd(fp) fileno(fp)
#define Fileno(fp) fileno(fp)
#endif

#if !defined(stdio_h) && !defined(FILE)
#include <stdio.h>
#define stdio_h
#define Filefd(fp) ((fp)->_fileno)
#define Fileno(fp) ((fp)->_fileno)
#endif

#if defined(ULTRIX)
#undef	fileno	/* Ultrix makes this not an lvalue */
#define	Filefd(p)   ((p)->_file)
#define	Fileno(p)   ((p)->_file)
#endif

#endif
