home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_400 / 428_02 / libsrc / wputc.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-03-13  |  1.5 KB  |  69 lines

  1. /*
  2. ** wputc.c
  3. **
  4. ** Pictor, Version 1.51, Copyright (c) 1992-94 SoftCircuits
  5. ** Redistributed by permission.
  6. */
  7.  
  8. #include <stdio.h>
  9. #include "pictor.h"
  10.  
  11. int _PL_wintab = 8;     /* window tab displacement */
  12.  
  13. /*
  14. ** Advances the current window pane to the next line.
  15. */
  16. static void newline(void)
  17. {
  18.     if((_CURR_WPANE.row + 1) < getwrows())
  19.         _CURR_WPANE.row++;
  20.     else {
  21.         vcolor(_CURR_WPANE.color);
  22.         scroll(1,_CURR_WPANE.top + 1,_CURR_WPANE.left + 1,getwrows(),getwcols());
  23.     }
  24.     _CURR_WPANE.column = 0;
  25.  
  26. } /* scrollwin */
  27.  
  28. /*
  29. ** Writes a character to the current window.
  30. */
  31. void wputc(char c)
  32. {
  33.     if(_PL_winhead == NULL || getwrows() < 1 || getwcols() < 1)
  34.         return;
  35.  
  36.     switch(c) {
  37.         case '\b':
  38.             if(_CURR_WPANE.column > 0) {
  39.                 _CURR_WPANE.column--;
  40.                 wputc(' ');
  41.                 _CURR_WPANE.column--;
  42.             }
  43.             break;
  44.         case '\n':
  45.         case '\r':
  46.             newline();
  47.             break;
  48.         case '\t':
  49.             wrepc(' ',_PL_wintab - (_CURR_WPANE.column % _PL_wintab));
  50.             break;
  51.         default:
  52.             if((unsigned)_CURR_WPANE.row < (unsigned)getwrows() &&
  53.                 (unsigned)_CURR_WPANE.column < (unsigned)getwcols()) {
  54.                 setvpos(_CURR_WPANE.top + 1 + _CURR_WPANE.row,
  55.                     _CURR_WPANE.left + 1 + _CURR_WPANE.column);
  56.                 vputca((unsigned char)c | (_CURR_WPANE.color << 8));
  57.                 _CURR_WPANE.column++;
  58.             }
  59.             if((_PL_winhead->style & WO_TEXTWRAP) &&
  60.                 (unsigned)_CURR_WPANE.column >= (unsigned)getwcols()) {
  61.                 newline();
  62.             }
  63.             break;
  64.     }
  65.     if(_PL_winhead->style & WO_TEXTCURSOR)
  66.         wsynccurs();
  67.  
  68. } /* wputc */
  69.