home *** CD-ROM | disk | FTP | other *** search
/ ARM Club 3 / TheARMClub_PDCD3.iso / hensa / unix / unixlib_1 / !UnixLib37_src_stdio_c_stdio < prev    next >
Encoding:
C/C++ Source or Header  |  1996-11-09  |  2.7 KB  |  155 lines

  1. /****************************************************************************
  2.  *
  3.  * $Source: /unixb/home/unixlib/source/unixlib37/src/stdio/c/RCS/stdio,v $
  4.  * $Date: 1996/10/30 21:59:00 $
  5.  * $Revision: 1.4 $
  6.  * $State: Rel $
  7.  * $Author: unixlib $
  8.  *
  9.  * $Log: stdio,v $
  10.  * Revision 1.4  1996/10/30 21:59:00  unixlib
  11.  * Massive changes made by Nick Burret and Peter Burwood.
  12.  *
  13.  * Revision 1.3  1996/07/21 22:12:31  unixlib
  14.  * CL_0001 Nick Burret
  15.  * Improve memory handling. Remove C++ library incompatibilities.
  16.  * Improve file stat routines.
  17.  *
  18.  * Revision 1.2  1996/05/06 09:01:34  unixlib
  19.  * Updates to sources made by Nick Burrett, Peter Burwood and Simon Callan.
  20.  * Saved for 3.7a release.
  21.  *
  22.  * Revision 1.1  1996/04/19 21:32:42  simon
  23.  * Initial revision
  24.  *
  25.  ***************************************************************************/
  26.  
  27. static const char rcs_id[] = "$Id: stdio,v 1.4 1996/10/30 21:59:00 unixlib Rel $";
  28.  
  29. #include <errno.h>
  30. #include <stdlib.h>
  31. #include <string.h>
  32. #include <stdio.h>
  33. #include <unistd.h>
  34.  
  35. #include <sys/os.h>
  36. #include <sys/param.h>
  37.  
  38. __STDIOLIB__
  39.  
  40. FILE __iob[FOPEN_MAX];
  41.  
  42. char *__null = "(null)";
  43.  
  44. char *__pbuf, *__sbuf;
  45.  
  46. FILE *__tmpf;
  47. char __tmpn[L_tmpnam + 1];
  48. unsigned int __tmpcnt;
  49.  
  50. int
  51. (feof) (register FILE * f)
  52. {
  53.   return (feof (f));
  54. }
  55.  
  56. int
  57. (ferror) (register FILE * f)
  58. {
  59.   return (ferror (f));
  60. }
  61.  
  62. int
  63. (fileno) (register FILE * f)
  64. {
  65.   return (fileno (f));
  66. }
  67.  
  68. int
  69. (fisatty) (register FILE * f)
  70. {
  71.   return (fisatty (f));
  72. }
  73.  
  74. int
  75. (fisopen) (register FILE * f)
  76. {
  77.   return (fisopen (f));
  78. }
  79.  
  80. void
  81. (clearerr) (register FILE * f)
  82. {
  83.   clearerr (f);
  84. }
  85.  
  86. void
  87. __stdioinit (void)
  88. {
  89.   register FILE *f;
  90.   register int i;
  91.  
  92.   i = getpid () & 0x3ff;
  93.  
  94.   __tmpf = 0;
  95.   __tmpcnt = i ^ (i << 5) ^ 0x131;    /* hash it */
  96.   __pbuf = 0;
  97.   __sbuf = 0;
  98.   if (!(__pbuf = malloc (BUFSIZ << 1)))
  99.     {
  100.       os_print ("UnixLib: not enough memory\n");
  101.       _exit (1);
  102.     }
  103.  
  104.   for (i = 0, f = __iob; i < 3; i++, f++)
  105.     {
  106.       f->i_ptr = f->i_base = 0;
  107.       f->o_ptr = f->o_base = 0;
  108.       f->i_cnt = f->o_cnt = 0;
  109.       if (isatty (f->fd = i))
  110.     {
  111.       if (!i)
  112.         f->flag = _IOREAD | _IOLBF | _IOTTY;
  113.       else if (i == 1)
  114.         f->flag = _IOWRITE | _IOLBF | _IOTTY;
  115.       else
  116.         f->flag = _IOWRITE | _IONBF | _IOTTY;
  117.     }
  118.       else
  119.     {
  120.       if (!i)
  121.         f->flag = _IOREAD | _IOFBF;
  122.       else if (i == 1)
  123.         f->flag = _IOWRITE | _IOFBF;
  124.       else
  125.         f->flag = _IOWRITE | _IONBF;
  126.     }
  127.       f->pos = 0;
  128.       f->bufsiz = BUFSIZ;
  129.     }
  130.   for (; i < FOPEN_MAX; i++, f++)
  131.     {
  132.       f->flag = 0;
  133.     }
  134. }
  135.  
  136. void
  137. __stdioexit (void)
  138. {
  139.   register FILE *f;
  140.   register int i;
  141.  
  142.   for (i = 0, f = __iob; i < FOPEN_MAX; i++, f++)
  143.     {
  144.       if (fisopen (f))
  145.     fclose (f);
  146.     }
  147.   if (__tmpf)
  148.     unlink (__tmpn);
  149.  
  150.   if (__pbuf)
  151.     free (__pbuf);
  152.   if (__sbuf)
  153.     free (__sbuf);
  154. }
  155.