home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / ENTERPRS / CPM / UTILS / S / SGTOOL11.ARC / COPYMEM.C < prev    next >
C/C++ Source or Header  |  1993-07-25  |  2KB  |  77 lines

  1. /*
  2. SG C Tools 1.1
  3.  
  4. (C) 1993 Steve Goldsmith
  5. All Rights Reserved
  6.  
  7. VDC memory copy example.  Shows how fast copymemvdc() is by copying the top
  8. half of display and attribute memory to the bottom half of the screen.
  9.  
  10. Compiled with HI-TECH C 3.09 (CP/M-80).
  11.  
  12. To compile with HI-TECH C and SG C Tools source on same disk use:
  13. C COPYMEM.C -LC128
  14. */
  15.  
  16. #include <hitech.h>
  17. #include <conio.h>
  18. #include <vdc.h>
  19.  
  20. #define appClrScrCh 32
  21. #define appBoxCh    137
  22.  
  23. void makescreen(void);
  24. void copyscreen(void);
  25.  
  26. extern uchar  vdcScrHorz;
  27. extern uchar  vdcScrVert;
  28. extern ushort vdcScrSize;
  29. extern ushort vdcDispMem;
  30. extern ushort vdcAttrMem;
  31.  
  32. main()
  33. {
  34.   savevdc();                        /* save vdc regs and set global vars */
  35.   clrscrvdc(appClrScrCh);           /* clear screen */
  36.   clrattrvdc(vdcAltChrSet);         /* clear attributes */
  37.   setcursorvdc(0,0,vdcCurNone);     /* turn cursor off */
  38.   outvdc(vdcFgBgColor,vdcDarkBlue); /* set new screen color */
  39.   makescreen();                     /* draw top screen */
  40.   while (getch() != 0x0D);          /* wait for return press */
  41.   copyscreen();                     /* copy top screen to bottom */
  42.   restorevdc();                     /* restore registers saved by savevdc() */
  43.   clrscrvdc(appClrScrCh);
  44.   clrattrvdc(vdcAltChrSet+vdcWhite);
  45. }
  46.  
  47. void makescreen(void)
  48. {
  49.   uchar X, Y, CopyLines;
  50.  
  51.   CopyLines = (vdcScrVert >> 1);        /* copy half the screen */
  52.   filldspvdc(0,0,vdcScrHorz,appBoxCh);  /* draw top of box */
  53.   for (Y = 1; Y < CopyLines-1; Y++)     /* draw sides */
  54.   {
  55.     filldspvdc(0,Y,1,appBoxCh);
  56.     filldspvdc(vdcScrHorz-1,Y,1,appBoxCh);
  57.   }
  58.   filldspvdc(0,CopyLines-1,vdcScrHorz,appBoxCh); /* draw bottom */
  59.   printstrvdc(28,2,vdcAltChrSet+vdcDarkCyan,
  60.   "VDC memory copy example");
  61.   printstrvdc(15,4,vdcAltChrSet+vdcWhite,
  62.   "Press [RETURN] to copy this to bottom of screen.");
  63.   for (Y = 0; Y < 4; Y++)                          /* draw alt chr set */
  64.     for (X = 0; X < 64; X++)
  65.       filldspvdc(X+8,Y+6,1,Y*64+X);
  66. }
  67.  
  68. void copyscreen(void)
  69. {
  70.   ushort ScrSize;
  71.  
  72.   ScrSize = (vdcScrVert >> 1)*vdcScrHorz;
  73.   copymemvdc(vdcDispMem,vdcDispMem+ScrSize,ScrSize); /* copy screen mem */
  74.   copymemvdc(vdcAttrMem,vdcAttrMem+ScrSize,ScrSize); /* copy attr mem */
  75.   while (getch() != 0x0D);                           /* wait for return */
  76. }
  77.