home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume26 / mytinfo / part01 / fake_stdio.c < prev    next >
C/C++ Source or Header  |  1992-12-26  |  2KB  |  129 lines

  1. /*
  2.  * fake_stdio.c
  3.  *
  4.  * By Ross Ridge
  5.  * Public Domain
  6.  * 92/02/01 07:29:52
  7.  *
  8.  * fake some stdio functions
  9.  *
  10.  */
  11.  
  12. #include "defs.h"
  13.  
  14. #include <fcntl.h>
  15.  
  16. #ifdef USE_FAKE_STDIO
  17.  
  18. #ifdef USE_SCCS_IDS
  19. static const char SCCSid[] = "@(#) mytinfo fake_stdio.c 3.2 92/02/01 public domain, By Ross Ridge";
  20. #endif
  21. #include "fake_stdio.h"
  22.  
  23. static FILE _fake_files[] = {
  24.     {NULL, NULL, -1, {'\0'}},
  25.     {NULL, NULL, -1, {'\0'}},
  26.     {NULL, NULL, -1, {'\0'}},
  27.     {NULL, NULL, -1, {'\0'}},
  28.     {NULL, NULL, -1, {'\0'}}
  29. };
  30.  
  31. int
  32. _fillbuf(f)
  33. register FILE *f; {
  34.     register int r;
  35.  
  36.     r = read(f->fd, f->buf, FAKE_BUF_SIZE);
  37.     if (r == -1 || r == 0) {
  38.         f->pos = f->end = f->buf;
  39.         return EOF;
  40.     }
  41.     f->pos = f->buf + 1;
  42.     f->end = f->buf + r;
  43.  
  44.     return f->buf[0];
  45. }
  46.  
  47. int
  48. fgetc(f)
  49. register FILE *f; {
  50.     return getc(f);
  51. }
  52.  
  53. char *
  54. fgets(s, n, f)
  55. char *s;
  56. int n;
  57. register FILE *f; {
  58.     register char *d;
  59.     register int l;
  60.     register int c;
  61.  
  62.     d = s;
  63.     l = 1;
  64.     while(l < n) {
  65.         if ((c = getc(f)) == EOF) {
  66.             if (l == 0)
  67.                 return NULL;
  68.             break;
  69.         }
  70.         *d++ = c;
  71.         if (c == '\n') 
  72.             break;
  73.         l++;
  74.     }
  75.     *d = '\0';
  76.     return s;
  77. }
  78.  
  79. static FILE *
  80. _fdopen(fd)
  81. int fd; {
  82.     register FILE *f;
  83.     int i, r;
  84.  
  85.     for(f = _fake_files, i = 0; i < FILES; i++, f++) {
  86.         if (f->fd == -1) {
  87.             f->fd = fd;
  88.             r = read(fd, f->buf, FAKE_BUF_SIZE);
  89.             if (r == -1) {
  90.                 f->pos = f->end = f->buf;
  91.                 return NULL;
  92.             }
  93.             f->pos = f->buf;
  94.             f->end = f->buf + r;
  95.             return f;
  96.         }
  97.     }
  98.     return NULL;
  99. }
  100.  
  101. FILE *
  102. fopen(name, type)
  103. char *name;
  104. char *type; {
  105.     FILE *f;
  106.     int fd;
  107.  
  108.     if (strcmp(type, "r") != 0)
  109.         return NULL;
  110.     fd = open(name, O_RDONLY);
  111.     if (fd == -1)
  112.         return NULL;
  113.     f = _fdopen(fd);
  114.     if (f == NULL)
  115.         close(fd);
  116.     return f;
  117. }
  118.  
  119. FILE *
  120. fdopen(fd, type)
  121. int fd;
  122. char *type; {
  123.     if (strcmp(type, "r") != 0)
  124.         return NULL;
  125.     return _fdopen(fd);
  126. }
  127.  
  128. #endif /* USE_FAKE_STDIO */
  129.