亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? garmintdbloader.cpp

?? garmin 協議處理范例: 處理了 0183協議 處理了 gps的專有格式等
?? CPP
字號:
//
// GPSMapEdit
// (c) Konstantin Galichsky (kg@geopainting.com), 2002-2005
// Garmin and MapSource are registered trademarks or trademarks of Garmin Ltd. or one of its subsidiaries.
//
// Garmin TDB parser.
//

# include "StdAfx.h"
# include "GarminTdb.h"
# include "GarminTypes.h"
# include "Map.h"
# include "Load.h"
# include "Log.h"
# include "Status.h"

class CGarminTdbLoader : public CMapLoader {
  public:
	// Override.
	virtual bool IsValid (const char * _pData, size_t _cFileSize) const;
	virtual LoadStatus_t Load (const char * _pData, size_t _cFileSize, const char * _strFileName, map_t * _pMap);
};

DECLARE_MAP_LOADER (CGarminTdbLoader, "garmin-tdb", "tdb", "Garmin MapSource map index (*.tdb)");

bool CGarminTdbLoader::IsValid (const char * _pData, size_t _cFileSize) const {
	return _cFileSize > sizeof (CTdbProduct) && _pData [0] == 'P';
}

static
void CreateRgn (
	map_t * _pMap, size_t _cStart, size_t _cLen, file_ref_t * _pFileRef,
	RGN_KIND _Kind, USHORT _ushType,
	const char * _strLabel, const char * _strComment,
	float _x0, float _y0, float _x1, float _y1
) {
	// 
	layer_t & layer = _pMap->layers [_Kind];
	++ layer.cRgns;
	layer.rgns.push_back (rgn_t ());
	rgn_t & rgn = layer.rgns.back ();
	// Update the load order list.
	_pMap->InsertRgnToSaveList (rgn);

	// Initialize the rgn.
	rgn.cBeginPos = _cStart;
	rgn.cEndPos = _cStart + _cLen;
	rgn.cFileLine = -1;
//	rgn.cOrdinal = m_cOrdinal ++;
	rgn.pFileRef = _pFileRef;

	rgn.SetType (_pMap->pTypeSet, _ushType, _Kind);

	if (_strLabel)
		rgn.strLabel = _strLabel;
	if (_strComment)
		rgn.strComment = _strComment;

	rgn.elements.resize (1);
	rgn_element_t & element = rgn.elements [0];
	element.cFileOffset = rgn.cBeginPos;
	element.cLevel = 0;
	element.bHole = false;

	element.points.resize (_Kind == rkPolyline ? 5 : 4);
	element.points [0].x = _x0;
	element.points [0].y = _y0;
	element.points [1].x = _x1;
	element.points [1].y = _y0;
	element.points [2].x = _x1;
	element.points [2].y = _y1;
	element.points [3].x = _x0;
	element.points [3].y = _y1;
	if (_Kind == rkPolyline) {
		element.points [4].x = _x0;
		element.points [4].y = _y0;
	}
}

LoadStatus_t CGarminTdbLoader::Load (const char * _pData, size_t _cFileSize, const char * _strFileName, map_t * _pMap) {
	const char * const pEnd = _pData + _cFileSize;

	file_refs_t file_refs;
	file_refs.push_back (file_ref_t ());
	file_refs.back ().strFileName = _strFileName;
	file_refs.back ().bAttachment = false;

	_pMap->cHeaderLen = 0;
	_pMap->pTypeSet = & g_tsGarmin;

	SetProgressStatus (0);

	const char * pRecord = _pData;
	do {
		if (g_bStop)
			return lsInterrupted;

		const CTdbRecordHdr * const pHdr = reinterpret_cast<const CTdbRecordHdr *> (pRecord);
		const char * const pNextRecord = pRecord + sizeof (CTdbRecordHdr) + pHdr->wLen;

		switch (pHdr->btType) {
			case 'P': { // Product info.
				const CTdbProduct * const pProduct = static_cast<const CTdbProduct *> (pHdr);
				ReportText ("* Product id:  \t %d", pProduct->dwProductId);
				ReportText ("* Product ver: \t %d.%02d", pProduct->dwVer/100, pProduct->dwVer%100);
				ReportText ("* Product name:\t %s", pProduct->strName);

				const CTdbProduct2 * const pProduct2 = reinterpret_cast<const CTdbProduct2 *> (pProduct->strName + ::strlen (pProduct->strName) + 1);
				ReportText ("* Data version:\t %d.%02d", pProduct2->wDataVer/100, pProduct2->wDataVer%100);
				ReportText ("* CD set name: \t %s", pProduct2->strCDSetName);

				break;
			}

			case 'D': { // Copyright strings.
				const CTdbCopyrights * const pCopyrights = static_cast<const CTdbCopyrights *> (pHdr);
				const CTdbCopyright * pCopyright = & pCopyrights->c0;
				while (true) {
					if (pCopyright->btType == 6)
						ReportText ("* Copyright #%d:\t %s", pCopyright->wOrdinal, pCopyright->strText);
					else if (pCopyright->btType == 7)
						ReportText ("* Logo #%d:     \t %s", pCopyright->wOrdinal, pCopyright->strText);

					const char * const pNextCopyrightData = pCopyright->strText + ::strlen (pCopyright->strText) + 1;
					if (pNextCopyrightData >= pNextRecord)
						break;
					pCopyright = reinterpret_cast<const CTdbCopyright *> (pNextCopyrightData);
				}

				break;
			}

			case 'R': { // ?? trademarks ??
				const CTdbRegs * const pRegs = static_cast<const CTdbRegs *> (pHdr);
				const CTdbReg * pReg = & pRegs->r0;
				while (true) {
					ReportText ("* Trademark #%d:\t %s", pReg->btOrdinal, pReg->strText);

					const char * const pNextRegData = pReg->strText + ::strlen (pReg->strText) + 1;
					if (pNextRegData >= pNextRecord)
						break;
					pReg = reinterpret_cast<const CTdbReg *> (pNextRegData);
				}
				break;
			}

			case 'B': { // Whole map.
				const CTdbImgRef * const pArea = static_cast<const CTdbImgRef *> (pHdr);
				break;
			}

			case 'L': { // Detail map ref.
				const CTdbImgRef * const pRef = static_cast<const CTdbImgRef *> (pHdr);

				if (_pMap->cHeaderLen == 0)
					_pMap->cHeaderLen = pRecord - _pData;

				char strLabel [32];
				::sprintf (strLabel, "%08d.img", pRef->dwImgId);

				const float x0 = pRef->lWest*180.f/(1UL << 31);
				float       x1 = pRef->lEast*180.f/(1UL << 31);
				if (x0 - x1 > 180)
					x1 += 360;
				const float y0 = pRef->lSouth*180.f/(1UL << 31);
				const float y1 = pRef->lNorth*180.f/(1UL << 31);

				CreateRgn (_pMap, reinterpret_cast<const char *> (pRef) - _pData, pRef->wLen, & file_refs.back (), rkPolyline, 0x1c, NULL,     NULL,                 x0, y0, x1, y1);
				CreateRgn (_pMap, reinterpret_cast<const char *> (pRef) - _pData, pRef->wLen, & file_refs.back (), rkPolygon,  0x4a, strLabel, pRef->strDisplayName, x0, y0, x1, y1);

				const CTdbImgRef2 * const pRef2 = reinterpret_cast<const CTdbImgRef2 *> (pRef->strDisplayName + ::strlen (pRef->strDisplayName) + 1);
				for (size_t c = 0; c < pRef2->wCount; ++ c) {
					//pRef2->dwSectionSize [c];
				}
				const char * const pRef2End = reinterpret_cast<const char *> (& pRef2->dwSectionSize [pRef2->wCount]);
				assert (pRef2End [0] == 0x01);
				if (pRef2End + 1 < pNextRecord) {
					//const CTdbImgRef3 * const pRef3 = reinterpret_cast<const CTdbImgRef3 *> (pRef2End + 1);
				}

				break;
			}

			case 'T': { // ?? tail ??
				const CTdbTail * const pTail = static_cast<const CTdbTail *> (pHdr);
				// 41 78 74 03 46 43 2B 47 28 B8 F0 94 DA 2F 6F EA 75 59 0B F1
				break;
			}
		}

		pRecord = pNextRecord;

		SetProgressStatus (50.*(pRecord - _pData)/_cFileSize);
	} while (pRecord < pEnd);

	SetProgressStatus (50);

	_pMap->file_refs.swap (file_refs);

	// Suppress warning about empty Zoom etc.
	_pMap->bNoHeader = true;

	return lsOK;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲人成影院在线观看| 国产综合色产在线精品| 日韩一区二区影院| 国产v综合v亚洲欧| 亚洲精品自拍动漫在线| 日韩精品中文字幕一区二区三区| 国产老肥熟一区二区三区| 国产精品成人一区二区三区夜夜夜| 一本一道久久a久久精品综合蜜臀| 亚洲午夜免费视频| 中文字幕av一区二区三区高| 一本大道久久a久久综合| 久久国产综合精品| 亚洲高清视频在线| 亚洲欧美成人一区二区三区| 日韩欧美一级二级三级| 欧美电影免费观看高清完整版 | 亚洲成人免费电影| 欧美经典一区二区三区| 91麻豆精品国产91久久久使用方法 | av资源站一区| 成人精品一区二区三区四区| 狠狠色综合播放一区二区| 日本不卡视频在线观看| 视频一区二区三区入口| 视频一区视频二区中文字幕| 夜夜操天天操亚洲| 午夜精品福利久久久| 五月激情综合婷婷| 日本中文一区二区三区| 久久国产视频网| 国产成人精品亚洲777人妖| 国产精品88888| 91蜜桃在线免费视频| 欧美专区亚洲专区| 欧美人体做爰大胆视频| 欧美成人a∨高清免费观看| 精品91自产拍在线观看一区| 精品国产乱码久久久久久影片| 久久综合九色综合97婷婷| 久久久高清一区二区三区| 亚洲欧美日韩电影| 日韩不卡一区二区| 国产成人精品一区二区三区四区 | 成人福利电影精品一区二区在线观看| 成人精品免费视频| 欧美日韩久久久| 中文子幕无线码一区tr| 午夜精品一区二区三区三上悠亚| 蜜桃91丨九色丨蝌蚪91桃色| 91香蕉视频黄| 精品国产免费一区二区三区香蕉| 国产欧美日韩久久| 久久99国产精品麻豆| 91亚洲国产成人精品一区二三| 欧美精品亚洲二区| 亚洲欧洲日韩在线| 国产一区二区在线看| 777xxx欧美| 一区二区三区久久| 成人激情黄色小说| 久久精品无码一区二区三区| 男女性色大片免费观看一区二区 | 狠狠色丁香婷婷综合久久片| 欧美精品第1页| 亚洲一区在线观看网站| heyzo一本久久综合| 久久久国产精品不卡| 国产白丝精品91爽爽久久| 久久久久久久久久久久久夜| 看国产成人h片视频| 日韩欧美二区三区| 激情五月激情综合网| 精品女同一区二区| 懂色一区二区三区免费观看| 中文字幕制服丝袜一区二区三区| 色综合天天综合网天天狠天天| 亚洲综合小说图片| 欧美日韩色一区| 国产一区二区三区黄视频| 欧美激情在线免费观看| 91亚洲精品久久久蜜桃| 日韩高清在线观看| 国产亚洲欧美一区在线观看| 91视频你懂的| 日韩福利电影在线| 综合网在线视频| 欧美亚洲一区二区三区四区| 视频一区视频二区在线观看| 欧美激情综合网| 欧美一区二区三区的| 国产91丝袜在线播放| 亚欧色一区w666天堂| 中文字幕电影一区| 欧美一区二区性放荡片| 成人久久久精品乱码一区二区三区| 亚洲欧美日韩国产一区二区三区| 欧美一级片免费看| 欧美日韩一区二区三区四区五区 | 狠狠色丁香婷综合久久| 天天av天天翘天天综合网| 久久精品免费在线观看| 欧美肥妇bbw| 欧美性大战久久| 99久久免费精品高清特色大片| 国产成人一级电影| 国内国产精品久久| 美女网站一区二区| 亚洲一二三级电影| 偷窥国产亚洲免费视频| 亚洲国产精品一区二区久久| 日本一区二区高清| 国产欧美一区在线| 亚洲国产精品99久久久久久久久 | 国产精品网站导航| 国产精品热久久久久夜色精品三区| 国产网红主播福利一区二区| 国产女同性恋一区二区| 国产精品久久久久aaaa| 中文字幕精品三区| 亚洲精品中文字幕乱码三区| 亚洲午夜成aⅴ人片| 中文字幕av资源一区| 亚洲图片欧美激情| 免费看日韩a级影片| 国产精品2024| 91视频在线看| 2欧美一区二区三区在线观看视频| 国产人伦精品一区二区| 一区二区成人在线| 免费观看30秒视频久久| 粗大黑人巨茎大战欧美成人| 欧美精选一区二区| 国产精品视频观看| 狠狠色综合日日| 欧美日韩高清不卡| 亚洲天堂a在线| 国产自产视频一区二区三区| 日本国产一区二区| 国产精品传媒入口麻豆| 国产精品一二三| 欧美一区二区三区视频在线观看 | 国产午夜亚洲精品理论片色戒| 偷拍自拍另类欧美| 精品视频一区二区三区免费| 国产精品女主播av| 国产高清精品在线| 欧美精品一区二区三区高清aⅴ | 成人免费高清在线| 精品国精品自拍自在线| 午夜精品久久久久久久久久| 欧美在线视频不卡| 一级精品视频在线观看宜春院 | 国产91综合网| 亚洲欧美在线视频| 91久久精品日日躁夜夜躁欧美| 国产精品久久久久久久岛一牛影视 | 欧美日韩综合在线免费观看| 国产精品理论在线观看| 不卡高清视频专区| 日本一区二区成人| 91免费观看国产| 亚洲成人先锋电影| 日韩一区二区三区四区五区六区| 免费日本视频一区| ...av二区三区久久精品| 欧美视频一区二区三区在线观看| 日本色综合中文字幕| 久久久久久久久伊人| 在线视频欧美精品| 韩国v欧美v亚洲v日本v| 日韩理论在线观看| 欧美精品一区二区三区四区| 成人免费毛片app| 日本成人在线网站| 国产精品久久久久天堂| 这里是久久伊人| 欧美中文字幕一区二区三区| 日韩—二三区免费观看av| 久久精品免费在线观看| 91精品国产综合久久婷婷香蕉 | 成人少妇影院yyyy| 亚洲国产综合在线| 国产精品久久久久影院| 日韩三级.com| 欧美日韩国产片| 一本大道av伊人久久综合| 国产乱国产乱300精品| 青青草精品视频| 蜜臀99久久精品久久久久久软件| 亚洲美女屁股眼交3| 国产精品久久久久婷婷二区次| 久久亚洲二区三区| 2024国产精品| 久久久美女艺术照精彩视频福利播放| 精品国产自在久精品国产| 欧美精品一区二区三| 久久久亚洲精品石原莉奈| 国产精品久久久久久亚洲伦| 中文字幕中文字幕一区|