-= BondFormat Specification v1.0 =- - 첫번째 문서작업: 2008/03/19 - 두번째 문서작업: 2009/01/29 * 저작권 정보 - 이 문서 및 BOND/HV3 파일 포맷에 대한 모든 저작권은 본인(kippler@gmail.com)에게 있습니다. * 포맷소개 BOND 포맷은 여러개의 파일을 하나의 파일로 묶기 위해서 만들어진 포맷이며, 파일에 대한 압축은 아직 지원하지 않는다. 다른 압축 포맷과 다른점은 파일에 대한 정보가 전부 파일의 앞쪽에 존재하기 때문에 스트리밍 처리등에 유리하며, 손상된 파일에 대한 처리가 쉽다는 점이다. 특징 - 모든 문자열은 유니코드(UCS-2 LE)로 저장된다. 따라서, 다국어 처리에 유리하다. - 모든 숫자 데이터는 Little Endian 으로 저장된다. - 전체 파일 크기 및 내부 파일의 크기는 전부 4BYTE DWORD로 처리되기 때문에, 최대 4GB 로 제한된다. - 파일의 구조가 간단하여, 파서를 만들기 쉽다. (파일을 만들기는 좀 까다롭다...) - 모든 정보가 청크로 처리되기 때문에 나중에 새로운 속성을 추가하기가 용이하다. 기본 타입 설명 - FOURCC: 4바이트 ASCII 문자열로 이루어져 있으며, 청크나 속성 정보를 구분하기 위해서 사용된다. 실제로 FOURCC 는 내부에서 다음과 같이 정의되어 사용된다. #define FOURCC DWORD "HV30" 이라는 FOURCC 는 MAKEFOURCC('H', 'V', '3', '0') 과 같이 만들며, MAKEFOURCC 매크로는 다음과 같이 정의된다. #define MAKEFOURCC(ch0, ch1, ch2, ch3) ((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) | \ ((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 )) * BOND 포맷의 청크 구조 CHUNK NAME : 4 bytes, FOURCC, 청크의 이름 | +- ATTRIBUTE SIZE : 4 bytes, DWORD, 속성 청크의 크기를 기술한다. +- SUB CHUNK SIZE : 4 bytes, DWORD, 모든 하위 청크의 크기의 합을 기술한다. +- CHUNK DATA SIZE : 4 bytes, DWORD, 현재 청크의 데이터 크기를 기술한다. | +--+ ATTRIBUTES CHUNK : 속성청크 | +- ATTR NAME : 4 bytes, FOURCC, 속성의 이름 +- ATTR DATA SIZE : 4 bytes, DWORD, 속성정보의 크기를 기술한다. +- ATTR DATA : attr-data-size, 속성 데이터가 저장된다. | +- ATTR NAME : 4 bytes +- ATTR DATA SIZE : 4 bytes +- ATTR DATA : attr-data-size ... ... | | +--+ SUB CHUNKS : 하위 청크 | +- SUB CHUNK | .... | +- SUB CHUNK | .... | +- SUB CHUNK | .... | +--+ CHUNK DATA : chunk-data-size - 청크는 하나의 속성(ATTR)청크를 가질 수 있으며 없을 수도 있다. - 청크는 한개 이상의 하위 청크(SUB CHUNK)를 가질 수 있으며 없을 수도 있다. - 속성 청크는 한개 이상의 속성 데이터를 가질 수 있으며 없을 수도 있다. - 속성 데이터는 하위 청크를 가지지 않는다. - 청크 데이터는 하나만 존재하며 크기는 0바이트 일 수 있다. - 청크의 최소 크기는 16바이트(4+4+4+4) 이다. - 청크 속성(attr)의 최소 크기는 8바이트(4+4) 이다. - 청크의 크기는 하위 청크를 포함하여 최대 4GB를 넘지 못한다. * 데이터 구조 - 청크 헤더는 다음과 같이 정의되어 있다. struct SBondChunkHeader { FOURCC chunkName; DWORD attrSize; DWORD subChunkSize; DWORD chunkDataSize; }; - 속성 청크는 다음과 같이 정의되어 있다. struct SBondChunkAttr { FOURCC attrName; DWORD attrDataSize; BYTE* attrData; // attrDataSize 만큼의 크기를 가진다. }; * HV3 DATA FORMAT * * HV3 포맷은 BOND 포맷을 이용하여 여러개의 이미지 파일을 하나의 묶음으로 저장하는데 사용하는 포맷이다. - c 는 chunk 를 표시하고, a 는 attribute 를, d 는 데이터 자체를 의미한다. - 모든 문자열은 UCS-2 LE 로 저장된다. HV30 c 이 파일이 HV3 파일임을 의미한다. { VERS a DWORD HV3 포맷의 버전 정보 FSIZ a DWORD 전체 파일의 크기 HEAD c HV3 파일에 대한 정보 { GUID a GUID 파일의 GUID UUID a UUID UUID FTIM a FILETIME 파일이 만들어진 시간 FILETIME은 WinDef.h 에 정의되어 있다. DIRE a DWORD 책의 제본방식 0: 정보없음, 1:left to right 2:right to left ENCR a DWORD 파일의 암호화 방식, 0:암호화 없음 COPY a STRING 저작권 정보 LINK a STRING 관련 링크 URL TITL a STRING 파일의 제목 ISBN a STRING 책의 ISBN 정보 WRTR a STRING Original Writer PUBL a STRING Publisher DATE a STRING Original Publishing date COPY a STRING Copyright Information COMT a STRING Comment MAKR a STRING HV3 File maker GENR a STRING Genere LIST c 파일 정보 목록, 여러개의 하위 FINF 청크를 가진다. { FINF c File Info { NAME a STRING File Name POS4 a DWORD "FILE" chunk position of file CRC3 a DWORD crc32 of file data COMP a DWORD Compression Method of file(0: store, 1~: reserved) } FINF { .. } ... .. . } } BODY c 파일데이터를 담는 청크, 속성 청크는 가지지 않으며, 여러개의 하위 FILE 청크를 가진다. { FILE c 파일 데이터 청크, 속성청크는 가지지 않는다. { raw_data d 파일 데이터 } FILE { .. } ... .. . } }