1: #ifndef lint
   2: static char sccsid[] = "@(#)ttoutput.c	3.4 9/19/85";
   3: #endif
   4: 
   5: /*
   6:  * Copyright (c) 1983 Regents of the University of California,
   7:  * All rights reserved.  Redistribution permitted subject to
   8:  * the terms of the Berkeley Software License Agreement.
   9:  */
  10: 
  11: #include "ww.h"
  12: #include "tt.h"
  13: #include <sys/errno.h>
  14: 
  15: /*
  16:  * Buffered output package.
  17:  * We need this because stdio fails on non-blocking writes.
  18:  */
  19: 
  20: ttflush()
  21: {
  22:     register char *p;
  23:     register n;
  24:     extern errno;
  25: 
  26:     wwnflush++;
  27:     for (p = tt_ob; p < tt_obp;) {
  28:         wwnwr++;
  29:         n = write(1, p, tt_obp - p);
  30:         if (n < 0) {
  31:             wwnwre++;
  32:             if (errno != EWOULDBLOCK) {
  33:                 /* can't deal with this */
  34:                 p = tt_obp;
  35:             }
  36:         } else if (n == 0) {
  37:             /* what to do? */
  38:             wwnwrz++;
  39:         } else {
  40:             wwnwrc += n;
  41:             p += n;
  42:         }
  43:     }
  44:     tt_obp = tt_ob;
  45: }
  46: 
  47: ttputs(s)
  48: register char *s;
  49: {
  50:     while (*s)
  51:         ttputc(*s++);
  52: }
  53: 
  54: ttwrite(s, n)
  55:     register char *s;
  56:     register n;
  57: {
  58:     switch (n) {
  59:     case 0:
  60:         break;
  61:     case 1:
  62:         ttputc(*s);
  63:         break;
  64:     case 2:
  65:         if (tt_obe - tt_obp < 2)
  66:             ttflush();
  67:         *tt_obp++ = *s++;
  68:         *tt_obp++ = *s;
  69:         break;
  70:     case 3:
  71:         if (tt_obe - tt_obp < 3)
  72:             ttflush();
  73:         *tt_obp++ = *s++;
  74:         *tt_obp++ = *s++;
  75:         *tt_obp++ = *s;
  76:         break;
  77:     case 4:
  78:         if (tt_obe - tt_obp < 4)
  79:             ttflush();
  80:         *tt_obp++ = *s++;
  81:         *tt_obp++ = *s++;
  82:         *tt_obp++ = *s++;
  83:         *tt_obp++ = *s;
  84:         break;
  85:     case 5:
  86:         if (tt_obe - tt_obp < 5)
  87:             ttflush();
  88:         *tt_obp++ = *s++;
  89:         *tt_obp++ = *s++;
  90:         *tt_obp++ = *s++;
  91:         *tt_obp++ = *s++;
  92:         *tt_obp++ = *s;
  93:         break;
  94:     default:
  95:         while (n > 0) {
  96:             register m;
  97: 
  98:             while ((m = tt_obe - tt_obp) == 0)
  99:                 ttflush();
 100:             if ((m = tt_obe - tt_obp) > n)
 101:                 m = n;
 102:             bcopy(s, tt_obp, m);
 103:             tt_obp += m;
 104:             s += m;
 105:             n -= m;
 106:         }
 107:     }
 108: }

Defined functions

ttflush defined in line 20; used 8 times
ttputs defined in line 47; used 1 times

Defined variables

sccsid defined in line 2; never used
Last modified: 1987-02-17
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 683
Valid CSS Valid XHTML 1.0 Strict