home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 3 Comm / 03-Comm.zip / MCOMM530.ZIP / FPUSHPOP.C < prev    next >
Text File  |  1990-06-22  |  2KB  |  53 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. #else
  14.     #include <malloc.h>
  15. #endif
  16.  
  17. int     fpu_scrnd(int, int, int, int, char far *);
  18. int     fpo_scrnd(char far *);
  19.  
  20. static char far *ScrnPtrAry[10];        /* max of 10 screens may be pushed */
  21. static char far **ScrnPtr = ScrnPtrAry;
  22. static char CurntScrn = -1;
  23.  
  24. /*
  25.         f p u s h s c r n
  26. */
  27. int fpushscrn(int row, int col, int nrows, int ncols)
  28. {
  29.     if (CurntScrn == 9)
  30.         return (-1);                 /* can't push it if 10 already pushed */
  31.     if (!(*ScrnPtr = _fmalloc(2 * nrows * ncols + 16)))
  32.         return (-2);                    /* can't push it if no memory left */
  33.     fpu_scrnd(row, col, nrows, ncols, *ScrnPtr);
  34.     CurntScrn++, ScrnPtr++;
  35.     return (0);         /* push scrn, update variables, and return success */
  36. }
  37.  
  38. /*
  39.         f p o p s c r n
  40. */
  41. int fpopscrn(void)
  42. {
  43.     if (CurntScrn < 0)
  44.         return (-1);                         /* can't pop it if not pushed */
  45.     --CurntScrn, --ScrnPtr;
  46.     fpo_scrnd(*ScrnPtr);
  47.     _ffree(*ScrnPtr);
  48.     return (0);         /* adj vars, pop the screen, free the mem, & retrn */
  49. }
  50.  
  51.  
  52.  
  53.