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

  1. /*
  2.  *     sb_fill -- fill region 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_fill -- set all cells in a specified region
  12.  *    to the same character/attribute value
  13.  */
  14.  
  15. int
  16. sb_fill(win, ch, attr)
  17. struct REGION *win;
  18. unsigned char ch;    /* fill character */
  19. unsigned char attr;    /* fill attribute */
  20. {
  21.     register int i, j;
  22.     unsigned short ca;
  23.  
  24.     ca = (attr << 8) | ch;
  25.     for (i = win->sr0; i <= win->sr1; ++i) {
  26.         for (j = win->sc0; j <= win->sc1; ++j)
  27.             Scrnbuf[i][j].cap = ca;
  28.         if (win->sc0 < Sbuf.lcol[i])
  29.             Sbuf.lcol[i] = win->sc0;
  30.         if (win->sc1 > Sbuf.rcol[i])
  31.             Sbuf.rcol[i] = win->sc1;
  32.     }
  33.     Sbuf.flags |= SB_DELTA;
  34.  
  35.     return SB_OK;
  36. }
  37.  
  38.  
  39. /*
  40.  *    sb_fillc -- set all cells in a specified region
  41.  *    to the same character value; leave attributes undisturbed
  42.  */
  43.  
  44. int
  45. sb_fillc(win, ch)
  46. struct REGION *win;
  47. unsigned char ch;    /* fill character */
  48. {
  49.     register int i, j;
  50.  
  51.     for (i = win->sr0; i <= win->sr1; ++i) {
  52.         for (j = win->sc0; j <= win->sc1; ++j)
  53.             Scrnbuf[i][j].b.ch = ch;
  54.         if (win->sc0 < Sbuf.lcol[i])
  55.             Sbuf.lcol[i] = win->sc0;
  56.         if (win->sc1 > Sbuf.rcol[i])
  57.             Sbuf.rcol[i] = win->sc1;
  58.     }
  59.     Sbuf.flags |= SB_DELTA;
  60.  
  61.     return SB_OK;
  62. }
  63.  
  64.  
  65. /*
  66.  *    sb_filla -- set all cells in a specified region
  67.  *    to the same attribute value; leave characters undisturbed
  68.  */
  69.  
  70. int
  71. sb_filla(win, attr)
  72. struct REGION *win;
  73. unsigned char attr;    /* fill attribute */
  74. {
  75.     register int i, j;
  76.  
  77.     for (i = win->sr0; i <= win->sr1; ++i) {
  78.         for (j = win->sc0; j <= win->sc1; ++j)
  79.             Scrnbuf[i][j].b.attr = attr;
  80.         if (win->sc0 < Sbuf.lcol[i])
  81.             Sbuf.lcol[i] = win->sc0;
  82.         if (win->sc1 > Sbuf.rcol[i])
  83.             Sbuf.rcol[i] = win->sc1;
  84.     }
  85.     Sbuf.flags |= SB_DELTA;
  86.  
  87.     return SB_OK;
  88. }
  89.