home *** CD-ROM | disk | FTP | other *** search
- /****************************************************************************
- *
- * $Source: /unixb/home/unixlib/source/unixlib37/src/stdio/c/RCS/stdio,v $
- * $Date: 1996/10/30 21:59:00 $
- * $Revision: 1.4 $
- * $State: Rel $
- * $Author: unixlib $
- *
- * $Log: stdio,v $
- * Revision 1.4 1996/10/30 21:59:00 unixlib
- * Massive changes made by Nick Burret and Peter Burwood.
- *
- * Revision 1.3 1996/07/21 22:12:31 unixlib
- * CL_0001 Nick Burret
- * Improve memory handling. Remove C++ library incompatibilities.
- * Improve file stat routines.
- *
- * Revision 1.2 1996/05/06 09:01:34 unixlib
- * Updates to sources made by Nick Burrett, Peter Burwood and Simon Callan.
- * Saved for 3.7a release.
- *
- * Revision 1.1 1996/04/19 21:32:42 simon
- * Initial revision
- *
- ***************************************************************************/
-
- static const char rcs_id[] = "$Id: stdio,v 1.4 1996/10/30 21:59:00 unixlib Rel $";
-
- #include <errno.h>
- #include <stdlib.h>
- #include <string.h>
- #include <stdio.h>
- #include <unistd.h>
-
- #include <sys/os.h>
- #include <sys/param.h>
-
- __STDIOLIB__
-
- FILE __iob[FOPEN_MAX];
-
- char *__null = "(null)";
-
- char *__pbuf, *__sbuf;
-
- FILE *__tmpf;
- char __tmpn[L_tmpnam + 1];
- unsigned int __tmpcnt;
-
- int
- (feof) (register FILE * f)
- {
- return (feof (f));
- }
-
- int
- (ferror) (register FILE * f)
- {
- return (ferror (f));
- }
-
- int
- (fileno) (register FILE * f)
- {
- return (fileno (f));
- }
-
- int
- (fisatty) (register FILE * f)
- {
- return (fisatty (f));
- }
-
- int
- (fisopen) (register FILE * f)
- {
- return (fisopen (f));
- }
-
- void
- (clearerr) (register FILE * f)
- {
- clearerr (f);
- }
-
- void
- __stdioinit (void)
- {
- register FILE *f;
- register int i;
-
- i = getpid () & 0x3ff;
-
- __tmpf = 0;
- __tmpcnt = i ^ (i << 5) ^ 0x131; /* hash it */
- __pbuf = 0;
- __sbuf = 0;
- if (!(__pbuf = malloc (BUFSIZ << 1)))
- {
- os_print ("UnixLib: not enough memory\n");
- _exit (1);
- }
-
- for (i = 0, f = __iob; i < 3; i++, f++)
- {
- f->i_ptr = f->i_base = 0;
- f->o_ptr = f->o_base = 0;
- f->i_cnt = f->o_cnt = 0;
- if (isatty (f->fd = i))
- {
- if (!i)
- f->flag = _IOREAD | _IOLBF | _IOTTY;
- else if (i == 1)
- f->flag = _IOWRITE | _IOLBF | _IOTTY;
- else
- f->flag = _IOWRITE | _IONBF | _IOTTY;
- }
- else
- {
- if (!i)
- f->flag = _IOREAD | _IOFBF;
- else if (i == 1)
- f->flag = _IOWRITE | _IOFBF;
- else
- f->flag = _IOWRITE | _IONBF;
- }
- f->pos = 0;
- f->bufsiz = BUFSIZ;
- }
- for (; i < FOPEN_MAX; i++, f++)
- {
- f->flag = 0;
- }
- }
-
- void
- __stdioexit (void)
- {
- register FILE *f;
- register int i;
-
- for (i = 0, f = __iob; i < FOPEN_MAX; i++, f++)
- {
- if (fisopen (f))
- fclose (f);
- }
- if (__tmpf)
- unlink (__tmpn);
-
- if (__pbuf)
- free (__pbuf);
- if (__sbuf)
- free (__sbuf);
- }
-