home *** CD-ROM | disk | FTP | other *** search
/ Microsoft Programmer's Library 1.3 / Microsoft-Programers-Library-v1.3.iso / sampcode / prof_c / 12sbuf / sb_write.c < prev    next >
Encoding:
C/C++ Source or Header  |  1988-08-11  |  2.0 KB  |  103 lines

  1. /*
  2.  *    sb_write -- screen buffer write routines
  3.  */
  4.  
  5. #include <local\sbuf.h>
  6.  
  7. extern struct BUFFER Sbuf;
  8. extern union CELL Scrnbuf[SB_ROWS][SB_COLS];
  9.  
  10. /*
  11.  *    sb_wa -- write an attribute to a region of the screen buffer
  12.  */
  13.  
  14. int
  15. sb_wa(win, attr, n)
  16. struct REGION *win;    /* window pointer */
  17. unsigned char attr;    /* attribute */
  18. short n;        /* repetition count */
  19. {
  20.     short i;
  21.     short row;
  22.     short col;
  23.  
  24.     i = n;
  25.     row = win->r0 + win->row;
  26.     col = win->c0 + win->col;
  27.     while (i--)
  28.         Scrnbuf[row][col + i].b.attr = attr;
  29.  
  30.     /* marked the changed region */
  31.     if (col < Sbuf.lcol[row])
  32.         Sbuf.lcol[row] = col;
  33.     if (col + n > Sbuf.rcol[row])
  34.         Sbuf.rcol[row] = col + n;
  35.     Sbuf.flags |= SB_DELTA;
  36.  
  37.     return (i == 0) ? SB_OK : SB_ERR;
  38. } /* end sb_wa() */
  39.  
  40.  
  41. /*
  42.  *    sb_wc -- write a character to a region of the screen buffer
  43.  */
  44.  
  45. int
  46. sb_wc(win, ch, n)
  47. struct REGION *win;    /* window pointer */
  48. unsigned char ch;    /* character */
  49. short n;        /* repetition count */
  50. {
  51.     short i;
  52.     short row;
  53.     short col;
  54.  
  55.     i = n;
  56.     row = win->r0 + win->row;
  57.     col = win->c0 + win->col;
  58.     while (i--)
  59.         Scrnbuf[row][col + i].b.ch = ch;
  60.  
  61.     /* marked the changed region */
  62.     if (col < Sbuf.lcol[row])
  63.         Sbuf.lcol[row] = col;
  64.     if (col + n > Sbuf.rcol[row])
  65.         Sbuf.rcol[row] = col + n;
  66.     Sbuf.flags |= SB_DELTA;
  67.  
  68.     return (i == 0 ? SB_OK : SB_ERR);
  69. } /* end sb_wc() */
  70.  
  71.  
  72. /*
  73.  *    sb_wca -- write a character/attribute pair to a region
  74.  *    of the screen buffer
  75.  */
  76.  
  77. int
  78. sb_wca(win, ch, attr, n)
  79. struct REGION *win;    /* window pointer */
  80. unsigned char ch;    /* character */
  81. unsigned char attr;    /* attribute */
  82. short n;        /* repetition count */
  83. {
  84.     int i;
  85.     short row;
  86.     short col;
  87.  
  88.     i = n;
  89.     row = win->r0 + win->row;
  90.     col = win->c0 + win->col;
  91.     while (i--)
  92.         Scrnbuf[row][col + i].cap = (attr << 8) | ch;
  93.  
  94.     /* marked the changed region */
  95.     if (col < Sbuf.lcol[row])
  96.         Sbuf.lcol[row] = col;
  97.     if (col + n > Sbuf.rcol[row])
  98.         Sbuf.rcol[row] = col + n;
  99.     Sbuf.flags |= SB_DELTA;
  100.  
  101.     return (i == 0 ? SB_OK : SB_ERR);
  102. } /* end sb_wca() */
  103.