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

📄 pdb.cpp

📁 PALM PDB文件阅读器源代码
💻 CPP
字号:

#include "stdafx.h"
#include "PDB.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

typedef union uctLongTag {
	struct {
		BYTE	Byte4;
		BYTE	Byte3;
		BYTE	Byte2;
		BYTE	Byte1;
	}	bytValues;
	long		value;
} uctLong, *lpuctLong;

typedef union uctULongTag {
	struct {
		BYTE	Byte4;
		BYTE	Byte3;
		BYTE	Byte2;
		BYTE	Byte1;
	}	bytValues;
	unsigned long	value;
} uctULong, *lpuctULong;

typedef union uctIntTag {
	struct {
			BYTE	Byte2;
			BYTE	Byte1;
	} bytValues;
	short			value;
} uctInt, *lpuctInt;

typedef union uctUIntTag {
	struct {
			BYTE	Byte2;
			BYTE	Byte1;
	} bytValues;
	unsigned short	value;
} uctUInt, *lpuctUInt;

int GetInt(CFile& filInput)
{
	uctInt	intTemp;

	filInput.Read(&intTemp.bytValues.Byte1, 1);
	filInput.Read(&intTemp.bytValues.Byte2, 1);

	return intTemp.value;
}

unsigned int GetUInt(CFile& filInput)
{
	uctUInt	intTemp;

	filInput.Read(&intTemp.bytValues.Byte1, 1);
	filInput.Read(&intTemp.bytValues.Byte2, 1);

	return intTemp.value;
}

long GetLong(CFile& filInput)
{
	uctLong	lngTemp;

	filInput.Read(&lngTemp.bytValues.Byte1, 1);
	filInput.Read(&lngTemp.bytValues.Byte2, 1);
	filInput.Read(&lngTemp.bytValues.Byte3, 1);
	filInput.Read(&lngTemp.bytValues.Byte4, 1);

	return lngTemp.value;
}

unsigned long GetULong(CFile& filInput)
{
	uctULong	lngTemp;

	filInput.Read(&lngTemp.bytValues.Byte1, 1);
	filInput.Read(&lngTemp.bytValues.Byte2, 1);
	filInput.Read(&lngTemp.bytValues.Byte3, 1);
	filInput.Read(&lngTemp.bytValues.Byte4, 1);

	return lngTemp.value;
}

CString GetString(CFile& filInput, long lngSize)
{
	CString	strTemp;
	long	i;
	char	chrTemp;
	BOOL	bolDone;

	strTemp = "";
	if (lngSize > 0) {
		bolDone = FALSE;

		for (i = 0 ; i < lngSize; i++) {
			filInput.Read(&chrTemp, 1);
			if (chrTemp == '\0')
				bolDone = TRUE;
			else if (! bolDone)
				strTemp += chrTemp;
		}
	}
	else {
		filInput.Read(&chrTemp, 1);
		while (chrTemp != '\0') {
			strTemp += chrTemp;
			filInput.Read(&chrTemp, 1);
		}
	}

	return strTemp;
}

void GetHeader(CFile& filInput, pdbHeader* puctHeader)
{
	filInput.SeekToBegin();

	puctHeader->strName = GetString(filInput, 32);
    puctHeader->intAttr = GetInt(filInput);
    puctHeader->intVers = GetInt(filInput);
    puctHeader->lngCreate = GetLong(filInput);
    puctHeader->lngMod = GetLong(filInput);
    puctHeader->lngBackUp = GetLong(filInput);
    puctHeader->lngModNum = GetLong(filInput);
    puctHeader->lngAppInfoArea = GetLong(filInput);
    puctHeader->lngSortArea = GetLong(filInput);
	puctHeader->strType = GetString(filInput, 4);
	puctHeader->strCreator = GetString(filInput, 4);
    puctHeader->lngSeed = GetLong(filInput);
    puctHeader->lngNextRec = GetLong(filInput);
    puctHeader->intNumRecs = GetInt(filInput);

}

void GetRecInfo(CFile& filInput, pdbRecInfo* puctRecInfo)
{
	uctULong	lngTemp;

	puctRecInfo->lngOffset = GetLong(filInput);
	filInput.Read(&puctRecInfo->bytAttr, 1);

	lngTemp.bytValues.Byte4 = 0;
	filInput.Read(&lngTemp.bytValues.Byte1, 1);
	filInput.Read(&lngTemp.bytValues.Byte2, 1);
	filInput.Read(&lngTemp.bytValues.Byte3, 1);

	puctRecInfo->lngUniqueID = lngTemp.value;
}

⌨️ 快捷键说明

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