home *** CD-ROM | disk | FTP | other *** search
/ Microsoft Programmer's Library 1.3 / Microsoft-Programers-Library-v1.3.iso / sampcode / prof_c / 11screen / cpblk.c next >
Encoding:
C/C++ Source or Header  |  1988-08-11  |  870 b   |  42 lines

  1. /*
  2.  *    cpblk -- copy a block of characters and attributes
  3.  *    while eliminating "snow" on a standard CGA display
  4.  */
  5.  
  6. #include <conio.h>
  7. #include <memory.h>
  8.  
  9. #define BLKCNT    10
  10. #define VSTAT    0x3DA
  11. #define VRBIT    8
  12. #define WRDCNT    200
  13. #define NBYTES    (2 * WRDCNT)
  14.  
  15. /* macro to synchronize with vertical retrace period */
  16. #define VSYNC    while ((inp(VSTAT) & VRBIT) == VRBIT); \
  17.         while ((inp(VSTAT) & VRBIT) != VRBIT)
  18.  
  19. int
  20. cpblk(src_os, src_seg, dest_os, dest_seg)
  21. unsigned int src_os, src_seg, dest_os, dest_seg;
  22. {
  23.     register int i;
  24.     int n;
  25.     register int delta;
  26.  
  27.     n = 0;
  28.     delta = 0;
  29.     for (i = 0; i < BLKCNT ; ++i) {
  30.         /* copy a block of words during vertical retrace */
  31.         VSYNC;
  32.         movedata(src_seg, src_os + delta,
  33.             dest_seg, dest_os + delta, NBYTES);
  34.         n += WRDCNT;
  35.  
  36.         /* adjust buffer offset */
  37.         delta += NBYTES;
  38.     }
  39.  
  40.     return (n);
  41. }
  42.