Mercurial > repos > dawe > srf2fastq
diff srf2fastq/io_lib-1.12.2/io_lib/ztr.h @ 0:d901c9f41a6a default tip
Migrated tool version 1.0.1 from old tool shed archive to new tool shed repository
author | dawe |
---|---|
date | Tue, 07 Jun 2011 17:48:05 -0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/srf2fastq/io_lib-1.12.2/io_lib/ztr.h Tue Jun 07 17:48:05 2011 -0400 @@ -0,0 +1,155 @@ +#ifndef _ZTR_H +#define _ZTR_H + +#include "io_lib/Read.h" +#include "io_lib/deflate_interlaced.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* The header */ +typedef struct { + unsigned char magic[8]; /* 0xae5a54520d0a1a0a (be) */ + unsigned char version_major; /* ZTR_VERSION_MAJOR */ + unsigned char version_minor; /* ZTR_VERSION_MINOR */ +} ztr_header_t; + +/* The ZTR magic numbers */ +#define ZTR_MAGIC "\256ZTR\r\n\032\n" +#define ZTR_VERSION_MAJOR 1 +#define ZTR_VERSION_MINOR 2 + +/* + * CHUNKS + * + * Chunks consist of a block length followed by the type, format and data. + */ + +typedef struct { + uint4 type; /* chunk type (be) */ + uint4 mdlength; /* length of meta data field (be) */ + char *mdata; /* meta data */ + uint4 dlength; /* length of data field (be) */ + char *data; /* a format byte and the data itself */ + int ztr_owns; /* boolean: true if we can free (meta)data */ +} ztr_chunk_t; + +/* Format types */ +#define ZTR_FORM_RAW 0 +#define ZTR_FORM_RLE 1 +#define ZTR_FORM_ZLIB 2 +#define ZTR_FORM_XRLE 3 +#define ZTR_FORM_XRLE2 4 +#define ZTR_FORM_DELTA1 64 +#define ZTR_FORM_DELTA2 65 +#define ZTR_FORM_DELTA4 66 +#define ZTR_FORM_DDELTA1 67 +#define ZTR_FORM_DDELTA2 68 +#define ZTR_FORM_DDELTA4 69 +#define ZTR_FORM_16TO8 70 +#define ZTR_FORM_32TO8 71 +#define ZTR_FORM_FOLLOW1 72 +#define ZTR_FORM_CHEB445 73 +#define ZTR_FORM_ICHEB 74 +#define ZTR_FORM_LOG2 75 +#define ZTR_FORM_STHUFF 77 +#define ZTR_FORM_QSHIFT 79 +#define ZTR_FORM_TSHIFT 80 + +/* Converts a C string to a big-endian 4-byte int */ +#define ZTR_STR2BE(str) (((str)[0] << 24) + \ + ((str)[1] << 16) + \ + ((str)[2] << 8) + \ + ((str)[3] << 0)) + +/* Converts a big-endian 4-byte int to a C string */ +#define ZTR_BE2STR(i,str) (((str)[0]=((i)>>24)&0xff),\ + ((str)[1]=((i)>>16)&0xff),\ + ((str)[2]=((i)>> 8)&0xff),\ + ((str)[3]=((i)>> 0)&0xff),\ + (str)[4]='\0',str)\ + +#define ZTR_TYPE_HEADER 0xae5a5452 /* M-. Z T R */ + +#define ZTR_TYPE_SAMP 0x53414d50 +#define ZTR_TYPE_SMP4 0x534d5034 +#define ZTR_TYPE_BASE 0x42415345 +#define ZTR_TYPE_BPOS 0x42504f53 +#define ZTR_TYPE_CNF4 0x434e4634 +#define ZTR_TYPE_CNF1 0x434e4631 +#define ZTR_TYPE_CSID 0x43534944 +#define ZTR_TYPE_TEXT 0x54455854 +#define ZTR_TYPE_CLIP 0x434c4950 +#define ZTR_TYPE_COMM 0x434f4d4d +#define ZTR_TYPE_CR32 0x43523332 +#define ZTR_TYPE_FLWO 0x464c574f +#define ZTR_TYPE_FLWC 0x464c5743 +#define ZTR_TYPE_HUFF 0x48554646 +#define ZTR_TYPE_REGN 0x5245474e + +/* A text segment consists of identifier and value */ +typedef struct { + char *ident; /* Pointer to identifier */ + char *value; /* Pointer to value */ +} ztr_text_t; + +typedef struct { + int ztr_owns; /* true is ZTR is to free the data later */ + huffman_codeset_t *codes; +} ztr_hcode_t; + +/* The main ZTR structure, which holds the entire file contents */ +typedef struct { + /* General bits to do with the ZTR file format */ + ztr_header_t header; /* File Header */ + ztr_chunk_t *chunk; /* Array of chunks */ + int nchunks; /* Number of chunks */ + + /* Specifics to do with the standard chunk types */ + ztr_text_t *text_segments; + int ntext_segments; + + /* 'Hint' for delta of SAMP and SMP4 */ + int delta_level; + + /* Cached huffman encoding/decoding tables for STHUFF format */ + ztr_hcode_t *hcodes; + int nhcodes; + int hcodes_checked; +} ztr_t; + +int ztr_read_header(mFILE *fp, ztr_header_t *h); +ztr_chunk_t *ztr_read_chunk_hdr(mFILE *fp); + +int fwrite_ztr(FILE *fp, ztr_t *ztr); +int mfwrite_ztr(mFILE *fp, ztr_t *ztr); +ztr_t *fread_ztr(FILE *fp); +ztr_t *mfread_ztr(mFILE *fp); +Read *ztr2read(ztr_t *ztr); +ztr_t *read2ztr(Read *r); +int compress_ztr(ztr_t *ztr, int level); +int uncompress_ztr(ztr_t *ztr); +ztr_t *new_ztr(void); +void delete_ztr(ztr_t *ztr); +ztr_chunk_t **ztr_find_chunks(ztr_t *ztr, uint4 type, int *nchunks_p); +void ztr_process_text(ztr_t *ztr); +int compress_chunk(ztr_t *ztr, ztr_chunk_t *chunk, int format, + int option, int option2); +int uncompress_chunk(ztr_t *ztr, ztr_chunk_t *chunk); +ztr_hcode_t *ztr_add_hcode(ztr_t *ztr, huffman_codeset_t *codes, int ztr_owns); +int ztr_store_hcodes(ztr_t *ztr); +ztr_hcode_t *ztr_find_hcode(ztr_t *ztr, int code_set); +ztr_chunk_t *ztr_find_hcode_chunk(ztr_t *ztr, int code_set); +char *ztr_lookup_mdata_value(ztr_t *z, ztr_chunk_t *chunk, char *key); +ztr_chunk_t *ztr_new_chunk(ztr_t *ztr, uint4 type, + char *data, uint4 dlength, + char *mdata, uint4 mdlength); +ztr_chunk_t *ztr_add_text(ztr_t *z, ztr_chunk_t *ch, + const char *key, const char *value); + +#ifdef __cplusplus +} +#endif + +#endif /* _ZTR_H */