home *** CD-ROM | disk | FTP | other *** search
/ 100 af Verdens Bedste Spil / 100Spil.iso / dos / wolf3d / source / wolfsrc.1 / ID_PM.H < prev    next >
C/C++ Source or Header  |  1993-02-04  |  2KB  |  84 lines

  1. //
  2. //    ID_PM.H
  3. //    Header file for Id Engine's Page Manager
  4. //
  5.  
  6. //    NOTE! PMPageSize must be an even divisor of EMSPageSize, and >= 1024
  7. #define    EMSPageSize        16384
  8. #define    EMSPageSizeSeg    (EMSPageSize >> 4)
  9. #define    EMSPageSizeKB    (EMSPageSize >> 10)
  10. #define    EMSFrameCount    4
  11. #define    PMPageSize        4096
  12. #define    PMPageSizeSeg    (PMPageSize >> 4)
  13. #define    PMPageSizeKB    (PMPageSize >> 10)
  14. #define    PMEMSSubPage    (EMSPageSize / PMPageSize)
  15.  
  16. #define    PMMinMainMem    10            // Min acceptable # of pages from main
  17. #define    PMMaxMainMem    100            // Max number of pages in main memory
  18.  
  19. #define    PMThrashThreshold    1    // Number of page thrashes before panic mode
  20. #define    PMUnThrashThreshold    5    // Number of non-thrashing frames before leaving panic mode
  21.  
  22. typedef    enum
  23.         {
  24.             pml_Unlocked,
  25.             pml_Locked
  26.         } PMLockType;
  27.  
  28. typedef    enum
  29.         {
  30.             pmba_Unused = 0,
  31.             pmba_Used = 1,
  32.             pmba_Allocated = 2
  33.         } PMBlockAttr;
  34.  
  35. typedef    struct
  36.         {
  37.             longword    offset;        // Offset of chunk into file
  38.             word        length;        // Length of the chunk
  39.  
  40.             int            xmsPage;    // If in XMS, (xmsPage * PMPageSize) gives offset into XMS handle
  41.  
  42.             PMLockType    locked;        // If set, this page can't be purged
  43.             int            emsPage;    // If in EMS, logical page/offset into page
  44.             int            mainPage;    // If in Main, index into handle array
  45.  
  46.             longword    lastHit;    // Last frame number of hit
  47.         } PageListStruct;
  48.  
  49. typedef    struct
  50.         {
  51.             int            baseEMSPage;    // Base EMS page for this phys frame
  52.             longword    lastHit;        // Last frame number of hit
  53.         } EMSListStruct;
  54.  
  55. extern    boolean            XMSPresent,EMSPresent;
  56. extern    word            XMSPagesAvail,EMSPagesAvail;
  57.  
  58. extern    word            ChunksInFile,
  59.                         PMSpriteStart,PMSoundStart;
  60. extern    PageListStruct    far *PMPages;
  61.  
  62. #define    PM_GetSoundPage(v)    PM_GetPage(PMSoundStart + (v))
  63. #define    PM_GetSpritePage(v)    PM_GetPage(PMSpriteStart + (v))
  64.  
  65. #define    PM_LockMainMem()    PM_SetMainMemPurge(0)
  66. #define    PM_UnlockMainMem()    PM_SetMainMemPurge(3)
  67.  
  68.  
  69. extern    char    PageFileName[13];
  70.  
  71.  
  72. extern    void    PM_Startup(void),
  73.                 PM_Shutdown(void),
  74.                 PM_Reset(void),
  75.                 PM_Preload(boolean (*update)(word current,word total)),
  76.                 PM_NextFrame(void),
  77.                 PM_SetPageLock(int pagenum,PMLockType lock),
  78.                 PM_SetMainPurge(int level),
  79.                 PM_CheckMainMem(void);
  80. extern    memptr    PM_GetPageAddress(int pagenum),
  81.                 PM_GetPage(int pagenum);        // Use this one to cache page
  82.  
  83. void PM_SetMainMemPurge(int level);
  84.