
libfpk -- using FPK / PAR archive on P/ECE
	By Yui N., 2003.
==========================================

ٍ fpkarc / par Őgk fpk Ɂiparj̓WJ P/ECE ōs
̃CułBCʏ̔񈳏k fpk ܂B

 deflate ̓WJɂ P/ECE J[l̃\[X̂܂ܖߍł܂B

d Chu  pva tH[}bgɂ̓WJɑΉ܂Dpva ̂Ƃ̂݁CWJ
ꂽf[^̖ '\0' t܂D


^̐
--------
libfpk ł Windows Ɏ^gpĂ܂B
Win2Piece.h ɁC̑ΉLڂĂ܂C/usr/piece/include/PIECE_Std.h
ɂl݂̂̂܂B

typedef struct
{
  FPKHEADER  fpkHeader;
  FILEACC    pfa;
}FPK, *PFPK;
typedef PFPK HFPK;

	fpk t@C̏ێ܂BfpkHeader ́Cfpk t@Cwb_
	̂̂łBfpk t@Cwb_ɂĂ͌q܂B
	pfa ́CpceFileOpen() œ FILEACC \̂łBlibfpk ł́C
	pfa gpăt@CWJ܂B

	HFPK ͈ꌩnĥ悤ɌăG(޺)łĈ PFPK
	l̃|C^łB

typedef struct
{
  DWORD  dwHeader;
  DWORD  dwFilesAmount;
}FPKHEADER;

	fpk t@Cwb_łBdwFilesAmount ɂ́Ci[ꂽt@C̑
	1 x[Xœ܂Bfpklib gpɃt@C̑m肽ȂC
		hFpk->fpkHeader.dwFilesAmount
	̂悤 HFPK ^tQƂ邱Ƃœ邱Ƃł܂B

typedef struct
{
  CHAR   szFileName[16];
  DWORD  dwOffset;
  DWORD  dwSize;
}FPKENTRY;

	fpk ɓ̃t@Ce[ũGgłBlibfpk ł́C̍\
	̂gďɓ̃t@C肵܂B
	Kvȏ͂̂܂܋tQƂœ邱Ƃł܂B

	szFileName ɂ́Cɓ̃t@C܂B̃t@Cg
	kGgłƂ́C(szFileName[15] & 0x80) ^ƂȂ܂B
	łȂɂ́C̎͋UƂȂ܂i̍Ō̃oCgȂ̂ŁCk
	Ă͂jB

	(szFileName[15] & 0xc0) == 0xc0 ƂȂꍇC̃Gg zlib ɂ
	ĈkĂ܂B(szFileName[15] & 0xc0) == 0x80 ƂȂꍇC̃G
	g LZSS ɂĈkĂ܂Blibfpk ł́Cǂ̃Gg
	V[XɈƂł܂B

	dwOffSet ́Cfpk / par ɂ̐擪琔oCgPʂ̃ItZbgłB
	fpkarc / par  nsawa  dfpck, і{Ƃ FilePack gĂ
	΁C̒l DWORD ACgĂ܂B

	dwSize ́C̃t@C̃TCYłBpar ̏ꍇCk̃t@CTCY
	i[Ă܂B̒lɂ́CL DWORD ACg邽߂
	pfBOoCg̓JEgĂ܂BmɃt@Ĉ̂̃TC
	YĂ܂B


֐̐
----------
HFPK fpkOpenArchive(LPSTR lpszFileName)
	fpk / par t@CJ܂B
	lpszFileName ɂ́CPFFS ̏Ƀt@Cn܂B
	֐ƁCFPK ^\̂ւ̃|C^Ԃ܂B
	s NULL Ԃ܂B
	ԂĂ|C^ pceHeapAlloc() ꂽ̂Ȃ̂ŁCt@CgI
	K fpkCloseArchive() ĂB

VOID fpkCloseArchive(HFPK hFpk)
	Ƀt@C܂B
	hFpk ɂ́CfpkOpenArchive() œꂽ|C^n܂B
	̊֐sƁChFpk ͖ȃ|C^ƂȂ܂B

BOOL fpkGetFileInfoS(HFPK hFpk, LPSTR lpszFileName, FPKENTRY *lpFileEntry)
BOOL fpkGetFileInfoN(HFPK hFpk, DWORD dwFileIndex, FPKENTRY *lpFileEntry)
	Ƀt@C̒́Cw肳ꂽt@CɊւ𓾂܂B
	fpkExtractToBuffer() ƂɂC̊֐œ lpFileEntry K
	vłB

	w肷@͂ӂCɒ̃t@CĝƁCɒ̃t@
	Ce[ũCfbNXĝ܂B

	fpkGetFileInfoS()iȉ S()j̓t@CilpszFileNamejĝł
	CfpkGetFileInfoN()iȉ N()j̓CfbNXidwFileIndexjg
	̂łBN() ̕ꔭŃAhbVOł邽ߍłB

	N() ŗpCfbNXƎۂ̃t@CƂ̑Ή́Cpar l gƂ
	ׂ邱Ƃł܂Bpar l ́C
		0: hogehoge.pmd    offset:0xdeadbeef    size: 12345
	̕\sCɒ hogehoge.pmd w肷CfbNX 0 ł
	Ƃ킩܂B

	hFpk ɂ́CfpkOpenArchive() œꂽ|C^n܂B
	lpFileEntry ɂ́CFPKENTRY ^̍\̂̎̂炩ߒ`ĂC
	̃|C^n܂BƂ΁CȂӂɁB
	{
		FPKENTRY fpkEntry;
		if(fpkGetFileInfoN(hFpk, 0, &fpkEntry) == TRUE)
			fpkEntry gĉ;
	}

	֐ƁClpFileEntry ɓK؂Ȓl TRUE Ԃ܂B
	sƂɂ FALSE ԂClpFileEntry ɂ͎܂B

BYTE *fpkExtractToBuffer(HFPK hFpk, FPKENTRY *fpkEntry)
	fpkEntry œ肳鏑ɓt@CɓWJC̃|C^
	܂BfpkEntry ŎꂽGggkGgłꍇ́C
	IɈkf[^ւ̃|C^Ԃ܂B

	fpkEntry ɂ́CfpkGetFileInfo[NS]() œꂽ̂nĂB
	fpkExtractToBuffer() ł́CfpkEntry ȃf[^ł邩ǂ`Fb
	NĂ܂itɂ𗘗pƂl܂ccjB

	̊֐ŕԂꂽobt@ fpkExtractToBuffer()  pceHeapAlloc()
	ꂽ̂łBsvɂȂ pceHeapFree() ĂB


\[Xɂ
--------------
S\[XR[hYtĂ܂B
W P/ECE J make ʂ͂łB

Ȃ̊JAvɍ킹ēK؂Ƀ`[jOĂB


TvAv
--------------
P/ECE @œ삷 libfpk ̃TvAvYtĂ܂B
 mypmds.par Ɋi[ꂽ pmd t@Ct̂łB
炩 mypmds.par 쐬CP/ECE ɓ]ĂĂB
ipmd t@CȊÔ̂i[ĎsƕsKȂƂɂȂ܂ij

pbh̍EŋȑICA ŉt܂B


쌠Ƃ
----------

GŁC par Ƃ͔ɓeقȂ܂̂ōŌ܂œǂłB

libfpk ́CpceFileReadPos()  LZSS / zlib WJ[`ȊO̒쌠 Yui N. 
ێ܂B

libfpk  LZSS WJ[`́Cp/ware / Hitode Yamatsuki  plz ̃\[XR
[hьq URL ̋LɂȂĂ܂B LZSS WJ[`̒쌠\
͈ȉ̂Ƃłit@C֐ libfpk ɍ킹Ă܂jB

	hitodeLZSSDecoder() ̃\[XR[h̒쌠 p/ware / Hitode Yamatsuki
	ێĂ܂A]ځEρEĔzzEp͎RłB֗Ǝv
	ϋɓIɂp

p/ware ɂIWi LZSS fR[h[`́C
	http://www.aw.wakwak.com/~hitode/piece/index.html#plz
瓾邱Ƃł܂B

pceFileReadPos() ́Cuł}`ṽ\[XR[h piece_ex.c p܂
B̃̕CZXɂẮCAQUAPLUS ́ut\[XɂvO
̍Ĕzz̈ɂāvɏ]܂B

{̒쌠\͈ȉ̂ƂłB
	Copyright:	AQUA (Leaf)  since 2001 - 
	Programd by.	Miyakusa Masakazu

libfpk ɂ zlib kGg̓WJɂ́CdChu  myunpack ̃\[X
pĂC܂ׂЂ낵 ɂ zlib WJ[`TviP/ECE HAND
BOOK Vol.2uF̖vj̃R[h܂݂܂B

d Chu  myunpack ́C
	http://zurachu.net/piece/tips/ppack.html
瓾邱Ƃł܂B

̐S pceZlibExpand() ́CP/ECE J[l 1.20 ̃\[XR[ĥ܂ܗp
܂iinflate.c, inflate.h, piecezl.hjB̃̕CZXɂẮC
AQUAPLUS ́ut\[XɂvO̍Ĕzz̈ɂāvɏ]܂B
iinflate.c ̓pubNhCj

{̒쌠\͈ȉ̂ƂłB
	Copyright (C)2001 AQUAPLUS Co., Ltd. / OeRSTED, Inc. 
	all rights reserved.
	Coded by MIO.H (OeRSTED)

ɂĂ͓]ځEρEĔzzRłBȂJAvɍ
킹ă`[jOCvCx[grh쐬ĔzzȂǂĂB


-----------------------------
Yui N. (a.k.a. Autch)
mailto:yui@autch.net
http://www.autch.net/
