diff options
Diffstat (limited to 'Build/source/texk/web2c/pdftexdir/writejbig2.c')
-rw-r--r-- | Build/source/texk/web2c/pdftexdir/writejbig2.c | 140 |
1 files changed, 118 insertions, 22 deletions
diff --git a/Build/source/texk/web2c/pdftexdir/writejbig2.c b/Build/source/texk/web2c/pdftexdir/writejbig2.c index e2c23c2605a..eeea9d7ea04 100644 --- a/Build/source/texk/web2c/pdftexdir/writejbig2.c +++ b/Build/source/texk/web2c/pdftexdir/writejbig2.c @@ -76,10 +76,106 @@ object exists, reference it. Else create fresh one. ***********************************************************************/ -#include "writejbig2.h" +#include "ptexlib.h" +#include <stdlib.h> +#include <stdio.h> +#include <assert.h> +#include "ptexmac.h" +#include "image.h" + +/* 7.3 Segment types */ +#define M_SymbolDictionary 0 +#define M_IntermediateTextRegion 4 +#define M_ImmediateTextRegion 6 +#define M_ImmediateLosslessTextRegion 7 +#define M_PatternDictionary 16 +#define M_IntermediateHalftoneRegion 20 +#define M_ImmediateHalftoneRegion 22 +#define M_ImmediateLosslessHalftoneRegion 23 +#define M_IntermediateGenericRegion 36 +#define M_ImmediateGenericRegion 38 +#define M_ImmediateLosslessGenericRegion 39 +#define M_IntermediateGenericRefinementRegion 40 +#define M_ImmediateGenericRefinementRegion 42 +#define M_ImmediateLosslessGenericRefinementRegion 43 +#define M_PageInformation 48 +#define M_EndOfPage 49 +#define M_EndOfStripe 50 +#define M_EndOfFile 51 +#define M_Profiles 52 +#define M_Tables 53 +#define M_Extension 62 /**********************************************************************/ +typedef enum { INITIAL, HAVEINFO, WRITEPDF } PHASE; + +typedef struct _LITEM { + struct _LITEM *prev; + struct _LITEM *next; + void *d; /* data */ +} LITEM; + +typedef struct _LIST { + LITEM *first; + LITEM *last; + struct avl_table *tree; +} LIST; + +typedef struct _SEGINFO { + unsigned long segnum; + boolean isrefered; + boolean refers; + unsigned int seghdrflags; /* set by readseghdr() */ + boolean pageassocsizeflag; /* set by readseghdr() */ + unsigned int reftosegcount; /* set by readseghdr() */ + unsigned int countofrefered; /* set by readseghdr() */ + unsigned int fieldlen; /* set by readseghdr() */ + unsigned int segnumwidth; /* set by readseghdr() */ + long segpage; /* set by readseghdr() */ + unsigned long segdatalen; /* set by readseghdr() */ + unsigned long hdrstart; /* set by readseghdr() */ + unsigned long hdrend; /* set by readseghdr() */ + unsigned long datastart; + unsigned long dataend; + boolean endofstripeflag; /* set by checkseghdrflags() */ + boolean endofpageflag; /* set by checkseghdrflags() */ + boolean pageinfoflag; /* set by checkseghdrflags() */ + boolean endoffileflag; /* set by checkseghdrflags() */ +} SEGINFO; + +typedef struct _PAGEINFO { + LIST segments; /* segments associated with page */ + unsigned long pagenum; + unsigned int width; + unsigned int height; + unsigned int xres; + unsigned int yres; + unsigned int pagesegmentflags; + unsigned int stripinginfo; + unsigned int stripedheight; +} PAGEINFO; + +typedef struct _FILEINFO { + FILE *file; + char *filename; + long filesize; + LIST pages; /* not including page0 */ + LIST page0; + unsigned int filehdrflags; /* set by readfilehdr() */ + boolean sequentialaccess; /* set by readfilehdr() */ + unsigned long numofpages; /* set by readfilehdr() */ + unsigned long streamstart; /* set by get_jbig2_info() */ + unsigned long pdfpage0objnum; + PHASE phase; +} FILEINFO; + +/**********************************************************************/ + +static void initlinkedlist(LIST * lp); +static void checkseghdrflags(SEGINFO * sip); +static void markpage0seg(FILEINFO * fip, unsigned long referedseg); + /**********************************************************************/ struct avl_table *file_tree = NULL; @@ -102,7 +198,7 @@ static int comp_segment_entry(const void *pa, const void *pb, void *p) /**********************************************************************/ -int ygetc(FILE * stream) +static int ygetc(FILE * stream) { int c = getc(stream); if (c < 0) { @@ -116,7 +212,7 @@ int ygetc(FILE * stream) /**********************************************************************/ -FILEINFO *new_fileinfo(void) +static FILEINFO *new_fileinfo(void) { FILEINFO *fip; fip = xtalloc(1, FILEINFO); @@ -134,7 +230,7 @@ FILEINFO *new_fileinfo(void) return fip; } -PAGEINFO *new_pageinfo(void) +static PAGEINFO *new_pageinfo(void) { PAGEINFO *pip; pip = xtalloc(1, PAGEINFO); @@ -175,14 +271,14 @@ static void init_seginfo(SEGINFO * sip) /**********************************************************************/ -void initlinkedlist(LIST * lp) +static void initlinkedlist(LIST * lp) { lp->first = NULL; lp->last = NULL; lp->tree = NULL; } -LIST *litem_append(LIST * lp) +static LIST *litem_append(LIST * lp) { LITEM *ip; ip = xtalloc(1, LITEM); @@ -201,7 +297,7 @@ LIST *litem_append(LIST * lp) /**********************************************************************/ -void pages_maketree(LIST * plp) +static void pages_maketree(LIST * plp) { LITEM *ip; void **aa; @@ -214,7 +310,7 @@ void pages_maketree(LIST * plp) } } -void segments_maketree(LIST * slp) +static void segments_maketree(LIST * slp) { LITEM *ip; void **aa; @@ -229,7 +325,7 @@ void segments_maketree(LIST * slp) /**********************************************************************/ -PAGEINFO *find_pageinfo(LIST * plp, unsigned long pagenum) +static PAGEINFO *find_pageinfo(LIST * plp, unsigned long pagenum) { PAGEINFO tmp; tmp.pagenum = pagenum; @@ -237,7 +333,7 @@ PAGEINFO *find_pageinfo(LIST * plp, unsigned long pagenum) return (PAGEINFO *) avl_find(plp->tree, &tmp); } -SEGINFO *find_seginfo(LIST * slp, unsigned long segnum) +static SEGINFO *find_seginfo(LIST * slp, unsigned long segnum) { SEGINFO tmp; tmp.segnum = segnum; @@ -247,13 +343,13 @@ SEGINFO *find_seginfo(LIST * slp, unsigned long segnum) /**********************************************************************/ -unsigned int read2bytes(FILE * f) +static unsigned int read2bytes(FILE * f) { unsigned int c = ygetc(f); return (c << 8) + ygetc(f); } -unsigned long read4bytes(FILE * f) +static unsigned long read4bytes(FILE * f) { unsigned int l = read2bytes(f); return (l << 16) + read2bytes(f); @@ -261,7 +357,7 @@ unsigned long read4bytes(FILE * f) /**********************************************************************/ -unsigned long getstreamlen(LITEM * slip, boolean refer) +static unsigned long getstreamlen(LITEM * slip, boolean refer) { SEGINFO *sip; unsigned long len = 0; @@ -275,7 +371,7 @@ unsigned long getstreamlen(LITEM * slip, boolean refer) /**********************************************************************/ -void readfilehdr(FILEINFO * fip) +static void readfilehdr(FILEINFO * fip) { unsigned int i; /* Annex D.4 File header syntax */ @@ -303,7 +399,7 @@ void readfilehdr(FILEINFO * fip) /**********************************************************************/ /* for first reading of file; return value tells if header been read */ -boolean readseghdr(FILEINFO * fip, SEGINFO * sip) +static boolean readseghdr(FILEINFO * fip, SEGINFO * sip) { unsigned int i; sip->hdrstart = xftell(fip->file, fip->filename); @@ -361,7 +457,7 @@ boolean readseghdr(FILEINFO * fip, SEGINFO * sip) /**********************************************************************/ /* for writing, marks refered page0 segments, sets segpage > 0 to 1 */ -void writeseghdr(FILEINFO * fip, SEGINFO * sip) +static void writeseghdr(FILEINFO * fip, SEGINFO * sip) { unsigned int i; unsigned long referedseg = 0; @@ -412,7 +508,7 @@ void writeseghdr(FILEINFO * fip, SEGINFO * sip) /**********************************************************************/ /* for recursive marking of refered page0 segments */ -void checkseghdr(FILEINFO * fip, SEGINFO * sip) +static void checkseghdr(FILEINFO * fip, SEGINFO * sip) { unsigned int i; unsigned long referedseg = 0; @@ -449,7 +545,7 @@ void checkseghdr(FILEINFO * fip, SEGINFO * sip) /**********************************************************************/ -void checkseghdrflags(SEGINFO * sip) +static void checkseghdrflags(SEGINFO * sip) { sip->endofstripeflag = false; sip->endofpageflag = false; @@ -497,7 +593,7 @@ void checkseghdrflags(SEGINFO * sip) /**********************************************************************/ -void markpage0seg(FILEINFO * fip, unsigned long referedseg) +static void markpage0seg(FILEINFO * fip, unsigned long referedseg) { PAGEINFO *pip; SEGINFO *sip; @@ -512,7 +608,7 @@ void markpage0seg(FILEINFO * fip, unsigned long referedseg) /**********************************************************************/ -unsigned long findstreamstart(FILEINFO * fip) +static unsigned long findstreamstart(FILEINFO * fip) { SEGINFO tmp; assert(!fip->sequentialaccess); /* D.2 Random-access organisation */ @@ -526,7 +622,7 @@ unsigned long findstreamstart(FILEINFO * fip) /**********************************************************************/ -void rd_jbig2_info(FILEINFO * fip) +static void rd_jbig2_info(FILEINFO * fip) { unsigned long seekdist = 0; /* for sequential-access only */ unsigned long streampos = 0; /* for random-access only */ @@ -609,7 +705,7 @@ void rd_jbig2_info(FILEINFO * fip) /**********************************************************************/ -void wr_jbig2(FILEINFO * fip, unsigned long page) +static void wr_jbig2(FILEINFO * fip, unsigned long page) { LITEM *slip; PAGEINFO *pip; |