1: /*	cflsbuf.c	1.10	83/05/13	*/
   2: 
   3: #include <stdio.h>
   4: #include "cpmio.h"
   5: #include "cpmfio.h"
   6: 
   7: /*
   8:  * Flush a full block to floppy disk file
   9:  * (these routines are never called unless a full block is
  10:  * to be written)
  11:  * Create a new extent if required
  12:  */
  13: 
  14: c_flush(fptr)
  15:     register C_FILE *fptr;
  16: {
  17: 
  18:     int it;
  19:     char    alloc();
  20: 
  21:     if (!(fptr->c_flag & WRITE)) {
  22:         fprintf(stderr, "no write access");
  23:         return (EOF);
  24:     }
  25:     fptr->c_seccnt += blksiz/seclth;
  26:     if (putblock(0xff & (int)fptr->c_dirp->pointers[fptr->c_blk++],
  27:                  fptr->c_base, -1) == EOF)
  28:         return (EOF);
  29:     if (fptr->c_blk == 16) {
  30:         fptr->c_dirp->blkcnt =  (char) 0x80;
  31:         savedir();
  32:         /* create new extent */
  33:         if ((it = creext(fptr->c_ext)) == NULL) {
  34:             fprintf(stderr,"can't create new extent, current: %d\n",
  35:                 fptr->c_ext);
  36:             return (EOF);
  37:         }
  38:         fptr->c_dirp = dirbuf+it;
  39:         fptr->c_ext  = it;
  40:         fptr->c_blk  = 0;
  41:         fptr->c_seccnt = 0;
  42:         fptr->c_extno++;
  43:         fptr->c_dirp->extno= fptr->c_extno;
  44:     }
  45:     fptr->c_buf = fptr->c_base;
  46:     fptr->c_cnt = blksiz;
  47:     if ((fptr->c_dirp->pointers[fptr->c_blk] = alloc()) == '\0') {
  48:         fprintf(stderr, "disk full\n");
  49:         return (EOF);
  50:     }
  51:     return (0);
  52: }
  53: 
  54: c_flsbuf(c, fptr)
  55:     register C_FILE *fptr;
  56: {
  57:     if (c_flush(fptr) == EOF)
  58:         return (EOF);
  59:     *(fptr->c_buf++) = c;
  60:     fptr->c_cnt--;
  61:     return (c);
  62: }
  63: 
  64: /*
  65:  * move the contents of 'buf' into the cpm block buffer,
  66:  * flush the buffer if full (for binary file transfers)
  67:  */
  68: 
  69: c_write(fptr, buf, cnt)
  70:     register C_FILE *fptr;
  71:     char *buf;
  72: {
  73:     int i = cnt;
  74: 
  75:     while (i-- > 0) {
  76:         *(fptr->c_buf++) = *(buf++);
  77:         if (--fptr->c_cnt == 0)
  78:             if (c_flush(fptr) == EOF)
  79:                 return (EOF);
  80:     }
  81:     return (cnt);
  82: }

Defined functions

c_flsbuf defined in line 54; used 1 times
c_flush defined in line 14; used 2 times
c_write defined in line 69; used 1 times
Last modified: 1983-06-24
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 905
Valid CSS Valid XHTML 1.0 Strict