home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / snip9707.zip / SCRNSAVE.C < prev    next >
C/C++ Source or Header  |  1997-07-05  |  2KB  |  91 lines

  1. /* +++Date last modified: 05-Jul-1997 */
  2.  
  3. /*
  4. **  Portable PC screen functions
  5. **  Public domain by Bob Stout
  6. **  Uses VIDPORT.C, also from SNIPPETS
  7. **  Uses _fmemcpy(), available in most PC compiler libraries
  8. **  A portable _fmemcpy() is available in FMEMOPS.C, also from SNIPPETS
  9. */
  10.  
  11. #include <stdlib.h>
  12.  #if defined(__POWERC) || (defined(__ZTC__) && !defined(__SC__)) || \
  13.        (defined(__TURBOC__) && !defined(__BORLANDC__))
  14.   #include "fmemops.h"
  15.  #else
  16.   #include <string.h>
  17.  #endif
  18. #include "scrnmacs.h"         /* Also in SNIPPETS     */
  19.  
  20. /*
  21. **  Save the text screen
  22. */
  23.  
  24. struct SCREEN *SaveScrn(void)
  25. {
  26.       struct SCREEN *screen;
  27.  
  28.       if (NULL == (screen = malloc(sizeof(struct SCREEN))))
  29.             return NULL;
  30.       if (NULL == (screen->vbuf = malloc(SCRNBYTES)))
  31.       {
  32.             free(screen);
  33.             return NULL;
  34.       }
  35.       _fmemcpy((unsigned short FAR *)(screen->vbuf), SCRBUFF, SCRNBYTES);
  36.       GetCurPos(&screen->curX, &screen->curY);
  37.       return screen;
  38. }
  39.  
  40. /*
  41. **  Restore the text screen
  42. */
  43.  
  44. void RestoreScrn(struct SCREEN *screen)
  45. {
  46.       _fmemcpy(SCRBUFF, (unsigned short FAR *)(screen->vbuf), SCRNBYTES);
  47.       GotoXY(screen->curX, screen->curY);
  48. }
  49.  
  50. /*
  51. **  Free a saved screen buffer
  52. */
  53.  
  54. void FreeScrnBuf(struct SCREEN *screen)
  55. {
  56.       free(screen->vbuf);
  57.       free(screen);
  58. }
  59.  
  60.  
  61. #ifdef TEST
  62.  
  63. #include <stdio.h>
  64. #include <conio.h>
  65.  
  66. /*
  67. **  Run this test with a screenful of misc. stuff
  68. */
  69.  
  70. main()
  71. {
  72.       struct SCREEN *screen;
  73.       int vatr = GetCurAtr();
  74.  
  75.       if (NULL == (screen = SaveScrn()))
  76.       {
  77.             puts("Unable to save the screen");
  78.             return 1;
  79.       }
  80.       ClrScrn(vatr);
  81.       GotoXY(0, 0);
  82.       fputs("ClrScrn() tested", stderr);
  83.       fputs("\nHit any key to continue...\n", stderr);
  84.       getch();
  85.       RestoreScrn(screen);
  86.       FreeScrnBuf(screen);
  87.       return 0;
  88. }
  89.  
  90. #endif /* TEST */
  91.