home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / CLIPPER / MISC / EMXLIB8F.ZIP / EMX / LIB / VIDEO / WMPUTS.C < prev    next >
Encoding:
C/C++ Source or Header  |  1993-01-02  |  2.1 KB  |  91 lines

  1. /* wmputs.c (emx+gcc) -- Copyright (c) 1987-1993 by Eberhard Mattes */
  2.  
  3. #include <string.h>
  4. #include <sys/winmgr.h>
  5. #include "winmgr2.h"
  6.  
  7. static void _wm_puts1 (wm_handle wh, const char *p, int len)
  8. {
  9.   int max, cnt, i, px, py, mx, my;
  10.   char *mem;
  11.  
  12.   while (len > 0)
  13.     {
  14.       max = wh->width-wh->x;
  15.       if (len < max)
  16.         cnt = len;
  17.       else
  18.         cnt = max;
  19.       if (cnt > 0)
  20.         {
  21.           px = wh->x+wh->ax;
  22.           py = wh->y+wh->ay;
  23.           i = px+py*wh->bwidth;
  24.           mem = &wh->data[2*i];
  25.           _wm_puts2 (mem, p, cnt, wh->wattr);           /* Copy to memory */
  26.           if (wh->display)            /* Copy from memory to video buffer */
  27.             {
  28.               mx = wh->x+wh->x0;
  29.               my = wh->y+wh->y0;
  30.               if (wh->visible)
  31.                 _wm_move2 (mem, my, mx, mx+cnt-1, 1);
  32.               else
  33.                 _wm_line2 (&wh->mask[i], mem, my, mx, mx+cnt-1);
  34.             }
  35.           else
  36.             wh->update_req = TRUE;
  37.           if (cnt == max)
  38.             {
  39.               if (wh->wrap)
  40.                 {
  41.                   wh->x = 0;
  42.                   ++wh->y;
  43.                   if (wh->y >= wh->height)
  44.                     {
  45.                       --wh->y;
  46.                       wm_scroll (wh, 1);
  47.                     }
  48.                 }
  49.               else
  50.                 {
  51.                   wh->x = wh->width - 1;
  52.                   break;
  53.                 }
  54.             }
  55.           else
  56.             wh->x += cnt;
  57.         }
  58.       len -= cnt;
  59.       p += cnt;
  60.     }
  61. }
  62.  
  63.  
  64. void _wm_puts_len (wm_handle wh, const char *p, int len)
  65. {
  66.   const char *q;
  67.   int n;
  68.  
  69.   do
  70.     {
  71.       q = memchr (p, '\n', len);
  72.       if (q == NULL)
  73.         _wm_puts1 (wh, p, len);
  74.       else
  75.         {
  76.           n = q - p;
  77.           _wm_puts1 (wh, p, n);
  78.           wm_putc (wh, '\n');
  79.           p = q + 1;
  80.           len -= n + 1;
  81.         }
  82.     } while (q != NULL);
  83. }
  84.  
  85.  
  86. void wm_puts (wm_handle wh, const char *p)
  87. {
  88.   _wm_puts_len (wh, p, strlen (p));
  89.   _wm_cursor1 ();
  90. }
  91.