home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 14 / CD_ASCQ_14_0694.iso / maj / 4151 / fpushpop.c < prev    next >
Text File  |  1994-03-22  |  2KB  |  57 lines

  1.  
  2. /** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  3. *                                                                           *
  4. *       P U S H  /  P O P   S C R E E N S   T O   F A R   M E M O R Y       *
  5. *                Mike Dumdei, 6 Holly Lane, Texarkana TX  75503             *
  6. *                  Requires ASM modules FPO_SCRN & FPU_SCRN                 *
  7. *                                                                           *
  8. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * **/
  9. #if defined(__TURBOC__)
  10.   #define _fmalloc farmalloc
  11.   #define _ffree   farfree
  12.   #include <alloc.h>
  13. #elif defined(__ZTC__)
  14.   #define _fmalloc farmalloc
  15.   #define _ffree   farfree
  16.   #include <dos.h>
  17. #else
  18.   #include <malloc.h>
  19. #endif
  20.  
  21. int     fpu_scrnd(int, int, int, int, char far *);
  22. int     fpo_scrnd(char far *);
  23.  
  24. static char far *ScrnPtrAry[10];        /* max of 10 screens may be pushed */
  25. static char far **ScrnPtr = ScrnPtrAry;
  26. static char CurntScrn = -1;
  27.  
  28. /*
  29.         f p u s h s c r n
  30. */
  31. int fpushscrn(int row, int col, int nrows, int ncols)
  32. {
  33.     if (CurntScrn == 9)
  34.         return (-1);                 /* can't push it if 10 already pushed */
  35.     if ((*ScrnPtr = _fmalloc(2 * nrows * ncols + 16)) == (char far *)0)
  36.         return (-2);                    /* can't push it if no memory left */
  37.     fpu_scrnd(row, col, nrows, ncols, *ScrnPtr);
  38.     CurntScrn++, ScrnPtr++;
  39.     return (0);         /* push scrn, update variables, and return success */
  40. }
  41.  
  42. /*
  43.         f p o p s c r n
  44. */
  45. int fpopscrn(void)
  46. {
  47.     if (CurntScrn < 0)
  48.         return (-1);                         /* can't pop it if not pushed */
  49.     --CurntScrn, --ScrnPtr;
  50.     fpo_scrnd(*ScrnPtr);
  51.     _ffree(*ScrnPtr);
  52.     return (0);         /* adj vars, pop the screen, free the mem, & retrn */
  53. }
  54.  
  55.  
  56.  
  57.