⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 memory.h

📁 winsail v2.0是用于DOS下的图形界面空间系统
💻 H
字号:
#ifndef _EMS_MEMORY_H_H_
#define _EMS_MEMORY_H_H_

#ifndef TRUE
#define TRUE  1
#endif
#ifndef FALSE
#define FALSE 0
#endif

#include "stdlib.h"
#include "dos.h"
#include "stdio.h"
#include "conio.h"
#include "sys\\stat.h"

#define XMSMEMORY_STYLE_NORMAL  0
#define XMSMEMORY_STYLE_DISK    1
#define XMSMEMORY_STYLE_EMSCARD 2



//#define  USE_EMSMEMORY_FLAGS  FALSE
#define  EMS_PAGE_LENGTH   (16L*1024L)
#define  MANAGER_EMS_PAGE  (64L*1024L/(EMS_PAGE_LENGTH))
typedef struct _tagEMSMOVEPARAMETERBLOCK
{
	DWORD   dwCount;
	BYTE	bySourceType;
	HANDLE  hSource;
	WORD    wSourceOffset;
	WORD    wSourceSeg;
	BYTE	byTargetType;
	HANDLE  hTarget;
	WORD    wTargetOffset;
	WORD    wTargetSeg;
}EMSMOVEPARAMETERBLOCK;


struct XMS_MEMORY_BLOCK1
{
	DWORD dwDead;
    DWORD dwActiveCount;
    DWORD dwFirst;
    DWORD dwLast;
};


#define MEMORY_CONTROL_FLAGS 0x005AA55Alu
struct XMS_MEMORY_BLOCK2
{
	DWORD dwFlags;
	long dwSelf;
    long dwPrev;
    long dwNext;
    long dwBusy;
  	long dwSize;
	long dwTrueSize;
};


#define EMSMEMORY_INT_CODE  0x67

_CLASSDEF(CEmsMemory);
class _CLASSTYPE CEmsMemory
{
protected:
	static   BOOL    m_bInit;
protected:
	BYTE     far *m_pPhysicalEms;
	HANDLE   m_hMemory;
	WORD	 m_wLocal;
	BOOL	 m_bEmsFrame;

	DWORD	 m_dwBufferSize;
	WORD     m_wLogicalPageCount;
protected:
	WORD     m_wLocalMap[1][2];
public:
	static   BOOL     m_sbGlobalMap[MANAGER_EMS_PAGE];
public:
	void   SetWrite(BOOL bWrite){m_wLocalMap[0][1]=bWrite;}
	BOOL   GetWrite(){return(m_wLocalMap[0][1]);}
	BOOL   IsEms();
	int    GetEmsVersion();
	BOOL   FreeEms();
	BOOL   MallocEms(DWORD  dwCount);
	BOOL   RemallocEms(DWORD  dwCount);
	HANDLE GetEmsHandle(){return(m_hMemory);}
	WORD   GetEmsPageFrame();
	BOOL   SaveFrameToEms();
	BOOL   MoveEmsToPageFrame(WORD wLogicalPage);
	BOOL   MoveEmsBlock(EMSMOVEPARAMETERBLOCK *pEmsMoveParameterBlock);
	BOOL   LoadFile(const char *pszFile);

	BYTE*  GetPoint(DWORD dwIndex,int nCount=1);
	BOOL   SetSize(DWORD dwSize,DWORD dwCount=1);
	BOOL   SetSizeEx(DWORD dwSize,DWORD dwCount=1);
	BYTE   GetByteData(DWORD dwIndex);
	BYTE   GetByteData(DWORD dwIndex,BYTE* pByte,DWORD dwCount);

	int    GetIntData(DWORD dwIndex);
	long   GetLongData(DWORD dwIndex);
	float  GetFloatData(DWORD dwIndex);
	BOOL   SetByteData(DWORD dwIndex,BYTE );
	BOOL   SetByteData(DWORD dwIndex,BYTE* pbyData,DWORD dwCount);
	BOOL   SetIntData(DWORD dwIndex,int);
	BOOL   SetLongData(DWORD dwIndex,long);
	BOOL   SetFloatData(DWORD dwIndex,float);
public:
	BOOL CoEmsMemory(BOOL bEmsFrame);
	CEmsMemory();
	~CEmsMemory();
public:
	DWORD  GetSize(){return(m_dwBufferSize);}
};


class _CLASSTYPE CXmsMemory
{
protected:
    static void*    m_pIntVector;
    BOOL     m_bWrite;
    int      m_nLockCounter;
	HANDLE   m_hMemory;
	DWORD    m_lgSegment;

    WORD     m_wXmsPageLength;
    BYTE*    m_pBuffer;//[XMS_PAGE_LENGTH];
protected:
    DWORD    m_dwSize;
	FILE*    m_pFile;

    int      m_nXmsStyle;
    BOOL     m_bChangeXms;
    void     ModifyXmsStyle();
protected:
	BOOL     InitXmsMemoryIntVector();
public:
	void     SetXmsStyle(int nStyle);

	int      GetVersion();
    BOOL     GetFreeInformation(WORD* pwMaxFreeBlock, WORD* pwTotalFreeBlock);

	BOOL     MallocXms(DWORD  dwCount);
	BOOL     FreeXms();
	BOOL     RemallocXms(DWORD  dwCount);

    BOOL     LockXms();
    BOOL     UnlockXms();

    BOOL     Fill(char nCh);
    void     SetWrite(BOOL bWrite){m_bWrite = bWrite;}
    BOOL     GetWrite(){return(m_bWrite);}
protected:
    BOOL     CopyMemory(BYTE* pBuffer, DWORD dwCount, DWORD dwIndex, BOOL bConventionalToXms);
public:
    BOOL     MallocHma(WORD wSize);
    BOOL     FreeHma();

    BOOL     MallocUmb(DWORD dwSize, WORD* pwUmbNumber);
	BOOL     FreeUmb(WORD wUmbNumber);
public:
	DWORD    GetSize(){return(m_dwSize);}
	BOOL     SetSize(DWORD dwSize, DWORD dwCount = 1)
    {
        return(this->MallocXms(1L * dwCount * dwSize));
    }

	BOOL     SetSizeEx(DWORD dwSize, DWORD dwCount = 1)
    {
        return(this->RemallocXms(1L * dwCount * dwSize));
    }

	BOOL 	 AddFile(const char* strFile, DWORD dwFileIndex,
		DWORD dwXmsIndex, DWORD* pdwLoadSize = NULL);
	BOOL     LoadFile(const char *strFile, DWORD dwIndex = 0);
	BOOL     SaveFile(const char *strFile, DWORD dwIndex = 0);

	BOOL   MoveXmsMemory(DWORD dwTarget, DWORD dwSource, DWORD dwCount);
	BYTE*    GetPoint(DWORD dwIndex, int nCount = 1);

    BYTE     GetByteData(DWORD dwIndex);
	int      GetIntData(DWORD dwIndex);
	long     GetLongData(DWORD dwIndex);
	float    GetFloatData(DWORD dwIndex);
	double   GetDoubleData(DWORD dwIndex);

	BOOL     SetByteData(DWORD dwIndex,BYTE);
	BOOL     SetIntData(DWORD dwIndex,int);
	BOOL     SetLongData(DWORD dwIndex,long);
	BOOL     SetFloatData(DWORD dwIndex,float);
	BOOL     SetDoubleData(DWORD dwIndex,double);

	BYTE*    GetByteData(DWORD dwIndex, BYTE* pByte, DWORD dwCount);
	BOOL     SetByteData(DWORD dwIndex, BYTE* pByte, DWORD dwCount);

    BYTE*    ChangeFrame(BYTE* pFrame, WORD wFrameLength);
    WORD      GetXmsPageLength(){return(m_wXmsPageLength);}
private:
    BOOL CoXmsMemory();
public:
	CXmsMemory();
    CXmsMemory(WORD wPageLength);
	~CXmsMemory();
};

class CXmsMemoryListingManager:public CXmsMemory
{
private:
    XMS_MEMORY_BLOCK1 m_XmsMemoryBlock1;
public:
	BOOL  m_bRecycleBin;

private:
	BOOL  ExpandSize(DWORD dwSize);
public:
	BOOL  RecycleBin();
	DWORD FindMallocNode(DWORD dwRow);

    BOOL  GetContext(DWORD dwLoc, XMS_MEMORY_BLOCK2* pXmsMemoryBlock2);

	BOOL  SetText(DWORD dwLoc, BYTE* pBuffer, DWORD dwSize);
	BOOL  SetTextEx(DWORD dwLoc, DWORD dwIndex, BYTE* pBuffer, DWORD dwSize);

	BYTE* GetText(DWORD dwLoc, BYTE* pBuffer, DWORD* pdwSize);
	BYTE* GetTextEx(DWORD dwLoc, DWORD dwIndex, BYTE* pBuffer, DWORD* pdwSize);

    void Display();
public:
	XMS_MEMORY_BLOCK1* GetControlBlock(){return(&m_XmsMemoryBlock1);}
    void  SetAutoRecycleBin(BOOL bRecycleBin) {m_bRecycleBin = bRecycleBin; }
	BOOL  GetAutoRecycleBin() {return(m_bRecycleBin);}

	BOOL  InitListing(DWORD dwSize);
	DWORD New(DWORD dwSize, BOOL bAuto = TRUE);
    BOOL  Delete(DWORD dwLoc);

	BOOL  RemoveNode(DWORD dwLoc);
	BOOL  InsertNode(DWORD dwLoc, DWORD dwInsert);

public:
	CXmsMemoryListingManager(DWORD dwSize);
	CXmsMemoryListingManager();
};

BOOL far InitEmsBuffer();
BOOL far CloseEmsBuffer();

CXmsMemory* GetFontXms();
BOOL ReadDateFromFontXms(DWORD dwIndex,int nCount,BYTE *pStr);
void SetFontXmsDirty(BOOL bFlags);
BOOL GetFontXmsDirty();
/***************************************/
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -