1
0
mirror of https://github.com/koenkooi/foo2zjs.git synced 2026-01-22 03:34:49 +08:00
foo2zjs/oak.h
Koen Kooi 66819e6d05 import 'Tarball last modified: Fri Jan 22 05:14:24 2016 CST'
Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
2016-01-25 16:22:04 +01:00

218 lines
5.8 KiB
C

#include <inttypes.h>
typedef uint32_t DWORD;
typedef uint16_t WORD;
typedef uint8_t BYTE;
/*
* JBIG BIH. But note that Oak uses it little endian.
*/
typedef struct
{
DWORD opt1;
DWORD xd; // Oak has this little endian
DWORD yd; // Oak has this little endian
DWORD l0; // Oak has this little endian
DWORD opt2;
} OAKBIH;
/*
* Oak record header. Every record starts with one of these and
* the entire record is always padded out to a multiple of 16 bytes.
*/
typedef struct
{
char magic[4];
#define OAK_HDR_MAGIC "OAKT"
DWORD len; // Total length of record including this header
DWORD type; // Record type
} OAK_HDR;
/*
* Note that the upper nibble of the type number encodes the class
*
* 0x - start/end doc
* 1x - start/end page
* 2x - page parameters
* 3x - image data
*/
/************************************************************************/
/* 0x - start/end doc */
/************************************************************************/
/*
* First record in file.
*
* No idea what the payload means yet. My guess is username.
*/
#define OAK_TYPE_OTHER 0x0D
typedef struct
{
WORD unk; // Always 1
char string[64]; // "OTHER" padded with 0's
// WORD pad; // "PAD_PAD_" as needed.
} OAK_OTHER;
//typedef OAK_OTHER HDR_0D;
/*
* date/time record
*/
#define OAK_TYPE_TIME 0x0C
typedef struct
{
char datetime[32]; // Date/time in string format (with NL)
DWORD time_t; // Time in seconds since the Unix epoch
WORD year; // e.g. 2003
WORD tm_mon; // Month-1
WORD tm_mday; // Day of month (1-31)
WORD tm_hour; // Hour (0-23)
WORD tm_min; // Minute (0-59)
WORD tm_sec; // Second (0-59)
// DWORD pad;
} OAK_TIME;
//typedef OAK_TIME HDR_0C;
/*
* Filename record
*/
#define OAK_TYPE_FILENAME 0x0A
typedef struct
{
char string[64]; // "OTHER" padded with 0's
} OAK_FILENAME;
/*
* Duplex record
*/
#define OAK_TYPE_DUPLEX 0x0F
typedef struct
{
DWORD duplex; // Duplex
DWORD short_edge;
} OAK_DUPLEX;
/*
* Driver record
*/
#define OAK_TYPE_DRIVER 0x1F
typedef struct
{
char string[36]; // "OTHER" padded with 0's
} OAK_DRIVER;
/*
* End of document
*/
#define OAK_TYPE_END_DOC 0x0B
/************************************************************************/
/* 1x - start/end page */
/************************************************************************/
#define OAK_TYPE_START_PAGE 0x14 // No arguments
#define OAK_TYPE_START_IMAGE 0x15 // No arguments
#define OAK_TYPE_END_IMAGE 0x17 // No arguments
#define OAK_TYPE_END_PAGE 0x18 // WORD argument (0)
/************************************************************************/
/* 2x - page parameters */
/************************************************************************/
#define OAK_TYPE_SOURCE 0x28 // DWORD argument: paper source
#define OAK_SOURCE_TRAY1 1
#define OAK_SOURCE_TRAY2 2
#define OAK_SOURCE_MANUAL 4
#define OAK_SOURCE_AUTO 7
#define OAK_TYPE_MEDIA 0x29
typedef struct
{
BYTE media; // Media code
#define OAK_MEDIA_AUTO 0
#define OAK_MEDIA_PLAIN 1
#define OAK_MEDIA_PREPRINTED 2
#define OAK_MEDIA_LETTERHEAD 3
#define OAK_MEDIA_GRAYTRANS 4
#define OAK_MEDIA_PREPUNCHED 5
#define OAK_MEDIA_LABELS 6
#define OAK_MEDIA_BOND 7
#define OAK_MEDIA_RECYCLED 8
#define OAK_MEDIA_COLOR 9
#define OAK_MEDIA_CARDSTOCK 10
#define OAK_MEDIA_HEAVY 11
#define OAK_MEDIA_ENVELOPE 12
#define OAK_MEDIA_LIGHT 13
#define OAK_MEDIA_TOUGH 14
BYTE unk8[3]; // Unknown, 2, 0, 0
char string[64]; // Unknown string, padd with blanks
} OAK_MEDIA;
#define OAK_TYPE_COPIES 0x2A
typedef struct
{
DWORD copies; // Number of copies
DWORD duplex; // Duplex
} OAK_COPIES;
#define OAK_TYPE_PAPER 0x2B
typedef struct
{
DWORD paper; // Paper code
#define OAK_PAPER_LETTER 1 // 8.5 x 11in
#define OAK_PAPER_LEGAL 5 // 8.5 x 14in
#define OAK_PAPER_EXECUTIVE 7 // 7.25 x 10.5in
#define OAK_PAPER_A4 9 // 210 x 297mm
#define OAK_PAPER_A5 11 // 148 x 210mm
#define OAK_PAPER_B5_JIS 13 // 182 x 257mm
#define OAK_PAPER_ENV_10 20 // 4.125 x 9.5in
#define OAK_PAPER_ENV_DL 27 // 110 x 220mm
#define OAK_PAPER_ENV_C5 28 // 162 x 229mm
#define OAK_PAPER_ENV_B5 34 // 176 x 250mm
#define OAK_PAPER_ENV_MONARCH 37 // 3.875 x 7.5in
#define OAK_PAPER_B5_ISO 257 // 176 x 250mm
#define OAK_PAPER_EXECUTIVE_JIS 258 // 8 x 13in
#define OAK_PAPER_16K 93 // 7.75 x 10.75in
#define OAK_PAPER_DOUBLE_POSTCARD 69 // 5.8 x 7.9in
#define OAK_PAPER_POSTCARD 43 // 4.25 x 6in
#define OAK_PAPER_CUSTOM 256 // user defined
DWORD w1200; // Paper width at 1200 DPI
DWORD h1200; // Paper height at 1200 DPI
DWORD unk; // unknown, 0
} OAK_PAPER;
/************************************************************************/
/* 3x - JBIG image data */
/************************************************************************/
#define OAK_TYPE_IMAGE_COLOR 0x32
#define OAK_TYPE_IMAGE_MONO 0x33
typedef struct
{
DWORD unk0; // Likely x offset
DWORD unk1; // Likely y offset
DWORD w; // width of (clipped?) image
DWORD h; // height of (clipped?) image
DWORD resx; // X resolution in DPI
DWORD resy; // Y resolution in DPI
DWORD nbits; // bits per plane, 1 or 2
char unk[16]; // always 0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f
} OAK_IMAGE_PLANE;
typedef struct
{
OAK_IMAGE_PLANE plane;
} OAK_IMAGE_MONO;
typedef struct
{
OAK_IMAGE_PLANE plane[4];
} OAK_IMAGE_COLOR;
#define OAK_TYPE_IMAGE_DATA 0x3C
typedef struct
{
OAKBIH bih; // Little-endian JBIG BIH
DWORD datalen; // Length of actual image data
DWORD padlen; // Padded length of image data
DWORD unk1C; // unknown, 000
DWORD y; // Y offset of this chunk
DWORD plane; // 0=, 1=, 2=, 3=K
DWORD subplane; // 0 or 1
// DWORD pad[2];
} OAK_IMAGE_DATA;