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

  1. /* wmputsat.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. void wm_puts_at (wm_handle wh, int x, int y, const char *p)
  8. {
  9.   int max, len, cnt, i, px, py, mx, my;
  10.   char *mem;
  11.  
  12.   len = strlen (p);
  13.   while (len > 0)
  14.     {
  15.       max = wh->width-x;
  16.       if (len < max)
  17.         cnt = len;
  18.       else
  19.         cnt = max;
  20.       if (cnt > 0)
  21.         {
  22.           px = x + wh->ax;
  23.           py = y + wh->ay;
  24.           i = px + py * wh->bwidth;
  25.           mem = &wh->data[2*i];
  26.           _wm_puts2 (mem, p, cnt, wh->wattr);           /* Copy to memory */
  27.           if (wh->display)            /* Copy from memory to video buffer */
  28.             {
  29.               mx = x+wh->x0;
  30.               my = y+wh->y0;
  31.               if (wh->visible)
  32.                 _wm_move2 (mem, my, mx, mx+cnt-1, 1);
  33.               else
  34.                 _wm_line2 (&wh->mask[i], mem, my, mx, mx+cnt-1);
  35.             }
  36.           else
  37.             wh->update_req = TRUE;
  38.           if (cnt == max)
  39.             {
  40.               if (wh->wrap)
  41.                 {
  42.                   x = 0;
  43.                   ++y;
  44.                   if (y >= wh->height)
  45.                     break;
  46.                 }
  47.               else
  48.                 break;
  49.             }
  50.           else
  51.             x += cnt;
  52.         }
  53.       len -= cnt;
  54.       p += cnt;
  55.     }
  56. }
  57.