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

  1. /* wmputsaa.c (emx+gcc) -- Copyright (c) 1987-1993 by Eberhard Mattes */
  2.  
  3. #include <sys/winmgr.h>
  4. #include "winmgr2.h"
  5.  
  6. void wm_putsa_at (wm_handle wh, int x, int y, const char *p, int len)
  7. {
  8.   int max, cnt, i, px, py, mx, my;
  9.   char *mem;
  10.  
  11.   while (len > 0)
  12.     {
  13.       max = wh->width-x;
  14.       if (len < max)
  15.         cnt = len;
  16.       else
  17.         cnt = max;
  18.       if (cnt > 0)
  19.         {
  20.           px = x + wh->ax;
  21.           py = y + wh->ay;
  22.           i = px + py * wh->bwidth;
  23.           mem = &wh->data[2*i];
  24.           _wm_putsa2 (mem, p, cnt);                     /* Copy to memory */
  25.           if (wh->display)            /* Copy from memory to video buffer */
  26.             {
  27.               mx = x + wh->x0;
  28.               my = y + wh->y0;
  29.               if (wh->visible)
  30.                 _wm_move2 (mem, my, mx, mx+cnt-1, 1);
  31.               else
  32.                 _wm_line2 (&wh->mask[i], mem, my, mx, mx+cnt-1);
  33.             }
  34.           else
  35.             wh->update_req = TRUE;
  36.           if (cnt == max)
  37.             {
  38.               if (wh->wrap)
  39.                 {
  40.                   x = 0;
  41.                   ++y;
  42.                   if (y >= wh->height)
  43.                     break;
  44.                 }
  45.               else
  46.                 break;
  47.             }
  48.           else
  49.             x += cnt;
  50.         }
  51.       len -= cnt;
  52.       p += 2*cnt;
  53.     }
  54. }
  55.