home *** CD-ROM | disk | FTP | other *** search
/ Boldly Go Collection / version40.iso / TS / 17A / DRWIN101.ZIP / BUFUTIL.C < prev    next >
C/C++ Source or Header  |  1991-07-23  |  2KB  |  135 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #include "bufutil.h"
  5.  
  6. int buferr=0;
  7.  
  8.  
  9. int bufseterr(int e) { buferr=e; return (e==BUF_NONE); }
  10.  
  11.  
  12. BUFF *bufopen(int size)
  13. {
  14.   BUFF *b;
  15.  
  16.   buferr=BUF_NONE;
  17.   b=(BUFF *)malloc(sizeof(BUFF));
  18.   if (b==NULL) { bufseterr(BUF_NOMEM); return NULL; }
  19.   b->siz=size;
  20.   b->buf=(BYTE*)malloc(size);
  21.   if (b->buf==NULL) {
  22.     free(b);
  23.     bufseterr(BUF_NOMEM);
  24.     return NULL;
  25.   }
  26.   b->hed=0;
  27.   b->tal=0;
  28.   b->cnt=0;
  29.   b->trm='\n';
  30.   return b;
  31. }   /*bufopen*/
  32.  
  33.  
  34. int  bufclose(BUFF *b)
  35. {
  36.   buferr=BUF_NONE;
  37.   if (b==NULL) return bufseterr(BUF_BADBUFF);
  38.   free(b->buf);
  39.   free(b);
  40.   return bufseterr(BUF_NONE);
  41. }   /*bufclose*/
  42.  
  43.  
  44. int  bufputc(BUFF *b,int c)
  45. {
  46.   buferr=BUF_NONE;
  47.   if (b==NULL) return bufseterr(BUF_BADBUFF);
  48.   if (b->cnt>=b->siz) return bufseterr(BUF_FULL);
  49.   b->cnt++;
  50.   b->buf[b->hed++]=c;
  51.   if (b->hed>=b->siz) b->hed=0;
  52.   return 1;
  53. }   /*bufputc*/
  54.  
  55.  
  56. int  bufgetc(BUFF *b)
  57. {
  58.   int c;
  59.  
  60.   buferr=BUF_NONE;
  61.   if (b==NULL) return bufseterr(BUF_BADBUFF);
  62.   if (b->cnt==0) return bufseterr(BUF_EMPTY);
  63.   b->cnt--;
  64.   c=b->buf[b->tal++];
  65.   if (b->tal>=b->siz) b->tal=0;
  66.   return c;
  67. }   /*bufgetc*/
  68.  
  69.  
  70. int  bufputs(BUFF *b,char *s)
  71. {
  72.   buferr=BUF_NONE;
  73.   if (b==NULL) return bufseterr(BUF_BADBUFF);
  74.   while (*s && bufputc(b,*s)) s++;
  75.   if (*s) return 0;
  76.   return 1;
  77. }   /*bufputs*/
  78.  
  79.  
  80. int  bufgets(BUFF *b,char *s,int n)
  81. {
  82.   buferr=BUF_NONE;
  83.   if (b==NULL) return bufseterr(BUF_BADBUFF);
  84.   while ((--n>0) && ((*s=bufgetc(b))!=b->trm) && (!buferr)) s++;
  85.   *s=0;
  86.   return buferr==BUF_NONE;
  87. }   /*bufgets*/
  88.  
  89.  
  90. int  bufputns(BUFF *b,char *s,int n)
  91. {
  92.   buferr=BUF_NONE;
  93.   if (b==NULL) return bufseterr(BUF_BADBUFF);
  94.   while ((n-->0) && (!buferr)) bufputc(b,*s++);
  95.   return buferr==BUF_NONE;
  96. }   /*bufputns*/
  97.  
  98.  
  99. int  bufgetns(BUFF *b,char *s,int n)
  100. {
  101.   buferr=BUF_NONE;
  102.   if (b==NULL) return bufseterr(BUF_BADBUFF);
  103.   while ((n-->0) && (!buferr)) *s++=bufgetc(b);
  104.   return buferr==BUF_NONE;
  105. }   /*bufgetns*/
  106.  
  107.  
  108. int  bufempty(BUFF *b)
  109. {
  110.   buferr=BUF_NONE;
  111.   if (b==NULL) return bufseterr(BUF_BADBUFF);
  112.   return b->cnt==0;
  113. }   /*bufempty*/
  114.  
  115.  
  116. int  buffull(BUFF *b)
  117. {
  118.   buferr=BUF_NONE;
  119.   if (b==NULL) return bufseterr(BUF_BADBUFF);
  120.   return (b->cnt==b->siz);
  121. }   /*buffull*/
  122.  
  123.  
  124. int  bufflush(BUFF *b)
  125. {
  126.   buferr=BUF_NONE;
  127.   if (b==NULL) return bufseterr(BUF_BADBUFF);
  128.   b->cnt=0;
  129.   b->hed=0;
  130.   b->tal=0;
  131.   return 1;
  132. }   /*bufflush*/
  133.  
  134.  
  135.