From ffb93f10e4c2b769780b463168ce9cdf7509c6ec Mon Sep 17 00:00:00 2001 From: Christophe Geuzaine <cgeuzaine@ulg.ac.be> Date: Fri, 9 Feb 2001 07:47:52 +0000 Subject: [PATCH] *** empty log message *** --- jpeg/Makefile | 349 +++---- jpeg/README | 349 ------- jpeg/TAGS | 762 --------------- jpeg/ansi2knr.1 | 19 - jpeg/ansi2knr.c | 488 ---------- jpeg/cderror.h | 135 --- jpeg/cdjpeg.h | 124 --- jpeg/change.log | 39 - jpeg/cjpeg.1 | 280 ------ jpeg/cjpeg.c | 877 ----------------- jpeg/ckconfig.c | 402 -------- jpeg/coderules.doc | 118 --- jpeg/coderules.doc.gz | Bin 2626 -> 0 bytes jpeg/config.status | 155 --- jpeg/configure | 1168 ---------------------- jpeg/depend | 58 -- jpeg/djpeg.1 | 245 ----- jpeg/djpeg.c | 736 -------------- jpeg/example.c | 417 -------- jpeg/filelist.doc | 185 ---- jpeg/filelist.doc.gz | Bin 2331 -> 0 bytes jpeg/install.doc | 745 -------------- jpeg/install.doc.gz | Bin 1325 -> 0 bytes jpeg/jconfig.auto | 44 - jpeg/jconfig.bcc | 44 - jpeg/jconfig.dj | 38 - jpeg/jconfig.doc | 155 --- jpeg/jconfig.doc.gz | Bin 2381 -> 0 bytes jpeg/jconfig.manx | 43 - jpeg/jconfig.mc6 | 52 - jpeg/jconfig.sas | 43 - jpeg/jconfig.st | 39 - jpeg/jconfig.vms | 37 - jpeg/jmemansi.c | 167 ---- jpeg/jmemdos.c | 634 ------------ jpeg/jmemdosa.asm | 379 -------- jpeg/jmemname.c | 248 ----- jpeg/jmorecfg.h | 6 +- jpeg/libjpeg.doc | 2144 ----------------------------------------- jpeg/libjpeg.doc.gz | Bin 3775 -> 0 bytes jpeg/makcjpeg.st | 35 - jpeg/makdjpeg.st | 36 - jpeg/makefile.ansi | 178 ---- jpeg/makefile.auto | 238 ----- jpeg/makefile.bcc | 207 ---- jpeg/makefile.dj | 200 ---- jpeg/makefile.manx | 178 ---- jpeg/makefile.mc6 | 196 ---- jpeg/makefile.mms | 181 ---- jpeg/makefile.sas | 207 ---- jpeg/makefile.test | 185 ---- jpeg/makefile.unix | 192 ---- jpeg/makefile.vms | 104 -- jpeg/makljpeg.st | 61 -- jpeg/makvms.opt | 4 - jpeg/rdbmp.c | 421 -------- jpeg/rdcolmap.c | 253 ----- jpeg/rdgif.c | 671 ------------- jpeg/rdjpgcom.1 | 44 - jpeg/rdjpgcom.c | 475 --------- jpeg/rdppm.c | 384 -------- jpeg/rdraw.c | 383 -------- jpeg/rdrle.c | 384 -------- jpeg/rdtarga.c | 499 ---------- jpeg/structure.doc | 862 ----------------- jpeg/structure.doc.gz | Bin 16346 -> 0 bytes jpeg/testimg.gif | Bin 21701 -> 0 bytes jpeg/testimg.jpg | Bin 5767 -> 0 bytes jpeg/testimg.ppm | 4 - jpeg/testorig.jpg | Bin 5782 -> 0 bytes jpeg/usage.doc | 449 --------- jpeg/usage.doc.gz | Bin 5882 -> 0 bytes jpeg/wrbmp.c | 440 --------- jpeg/wrgif.c | 500 ---------- jpeg/wrjpgcom.1 | 102 -- jpeg/wrjpgcom.c | 574 ----------- jpeg/wrppm.c | 248 ----- jpeg/wrraw.c | 189 ---- jpeg/wrrle.c | 302 ------ jpeg/wrtarga.c | 253 ----- 80 files changed, 121 insertions(+), 21242 deletions(-) delete mode 100644 jpeg/README delete mode 100644 jpeg/TAGS delete mode 100644 jpeg/ansi2knr.1 delete mode 100644 jpeg/ansi2knr.c delete mode 100644 jpeg/cderror.h delete mode 100644 jpeg/cdjpeg.h delete mode 100644 jpeg/change.log delete mode 100644 jpeg/cjpeg.1 delete mode 100644 jpeg/cjpeg.c delete mode 100644 jpeg/ckconfig.c delete mode 100644 jpeg/coderules.doc delete mode 100644 jpeg/coderules.doc.gz delete mode 100644 jpeg/config.status delete mode 100644 jpeg/configure delete mode 100644 jpeg/depend delete mode 100644 jpeg/djpeg.1 delete mode 100644 jpeg/djpeg.c delete mode 100644 jpeg/example.c delete mode 100644 jpeg/filelist.doc delete mode 100644 jpeg/filelist.doc.gz delete mode 100644 jpeg/install.doc delete mode 100644 jpeg/install.doc.gz delete mode 100644 jpeg/jconfig.auto delete mode 100644 jpeg/jconfig.bcc delete mode 100644 jpeg/jconfig.dj delete mode 100644 jpeg/jconfig.doc delete mode 100644 jpeg/jconfig.doc.gz delete mode 100644 jpeg/jconfig.manx delete mode 100644 jpeg/jconfig.mc6 delete mode 100644 jpeg/jconfig.sas delete mode 100644 jpeg/jconfig.st delete mode 100644 jpeg/jconfig.vms delete mode 100644 jpeg/jmemansi.c delete mode 100644 jpeg/jmemdos.c delete mode 100644 jpeg/jmemdosa.asm delete mode 100644 jpeg/jmemname.c delete mode 100644 jpeg/libjpeg.doc delete mode 100644 jpeg/libjpeg.doc.gz delete mode 100644 jpeg/makcjpeg.st delete mode 100644 jpeg/makdjpeg.st delete mode 100644 jpeg/makefile.ansi delete mode 100644 jpeg/makefile.auto delete mode 100644 jpeg/makefile.bcc delete mode 100644 jpeg/makefile.dj delete mode 100644 jpeg/makefile.manx delete mode 100644 jpeg/makefile.mc6 delete mode 100644 jpeg/makefile.mms delete mode 100644 jpeg/makefile.sas delete mode 100644 jpeg/makefile.test delete mode 100644 jpeg/makefile.unix delete mode 100644 jpeg/makefile.vms delete mode 100644 jpeg/makljpeg.st delete mode 100644 jpeg/makvms.opt delete mode 100644 jpeg/rdbmp.c delete mode 100644 jpeg/rdcolmap.c delete mode 100644 jpeg/rdgif.c delete mode 100644 jpeg/rdjpgcom.1 delete mode 100644 jpeg/rdjpgcom.c delete mode 100644 jpeg/rdppm.c delete mode 100644 jpeg/rdraw.c delete mode 100644 jpeg/rdrle.c delete mode 100644 jpeg/rdtarga.c delete mode 100644 jpeg/structure.doc delete mode 100644 jpeg/structure.doc.gz delete mode 100644 jpeg/testimg.gif delete mode 100644 jpeg/testimg.jpg delete mode 100644 jpeg/testimg.ppm delete mode 100644 jpeg/testorig.jpg delete mode 100644 jpeg/usage.doc delete mode 100644 jpeg/usage.doc.gz delete mode 100644 jpeg/wrbmp.c delete mode 100644 jpeg/wrgif.c delete mode 100644 jpeg/wrjpgcom.1 delete mode 100644 jpeg/wrjpgcom.c delete mode 100644 jpeg/wrppm.c delete mode 100644 jpeg/wrraw.c delete mode 100644 jpeg/wrrle.c delete mode 100644 jpeg/wrtarga.c diff --git a/jpeg/Makefile b/jpeg/Makefile index 6b3e61429f..7109131b3a 100644 --- a/jpeg/Makefile +++ b/jpeg/Makefile @@ -1,246 +1,131 @@ +# $Id: Makefile,v 1.5 2001-02-09 07:42:03 geuzaine Exp $ # -# WARNING: This file was modified for inclusion in Gmsh +# Makefile for "libJpeg.a" # -# Generated automatically from Makefile.auto by configure. -# Makefile for Independent JPEG Group's software +.IGNORE: -# makefile.auto is edited by configure to produce a custom Makefile. +CC = c++ +RM = rm +RANLIB = ranlib -# Read installation instructions before saying "make" !! +LIB = ../lib/libJpeg.a +INCLUDE = -I. -# For compiling with source and object files in different directories. -srcdir = . -VPATH = . +C_FLAGS = -g -Wall +OS_FLAGS = +VERSION_FLAGS = -# Where to install the programs and man pages. -prefix = /usr/cluster -exec_prefix = $(prefix) -bindir = $(exec_prefix)/bin -libdir = $(exec_prefix)/lib -includedir = $(prefix)/include -mandir = $(prefix)/man/man1 -binprefix = -manprefix = -manext = 1 +RMFLAGS = -f +CFLAGS = $(C_FLAGS) $(OS_FLAGS) $(VERSION_FLAGS) $(INCLUDE) -# The name of your C compiler: -#CC= gcc -CC= g++ -C_FLAGS= -O +SRC = jcomapi.c jutils.c jerror.c jmemmgr.c jmemnobs.c \ + jcapi.c jcparam.c jdatadst.c jcmaster.c jcmarker.c jcmainct.c \ + jcprepct.c jccoefct.c jccolor.c jcsample.c jchuff.c jcdctmgr.c \ + jfdctfst.c jfdctflt.c jfdctint.c \ + jdapi.c jdatasrc.c jdmaster.c jdmarker.c jdmainct.c jdcoefct.c \ + jdpostct.c jddctmgr.c jidctfst.c jidctflt.c jidctint.c jidctred.c \ + jdhuff.c jdsample.c jdcolor.c jquant1.c jquant2.c jdmerge.c -# You may need to adjust these cc options: -CFLAGS= $(C_FLAGS) -I$(srcdir) -# Generally, we recommend defining any configuration symbols in jconfig.h, -# NOT via -D switches here. -# However, any special defines for ansi2knr.c may be included here: -ANSI2KNRFLAGS= +OBJ = $(SRC:.c=.o) -# Link-time cc options: -LDFLAGS= +.SUFFIXES: .o .cpp -# To link any special libraries, add the necessary -l commands here. -LDLIBS= +$(LIB): $(OBJ) + ar ruvs $(LIB) $(OBJ) + $(RANLIB) $(LIB) -# Put here the object file name for the correct system-dependent memory -# manager file. For Unix this is usually jmemnobs.o, but you may want -# to use jmemansi.o or jmemname.o if you have limited swap space. -SYSDEPMEM= jmemnobs.o - -# miscellaneous OS-dependent stuff -SHELL= /bin/sh -# linker -LN= $(CC) -# file deletion command -RM= rm -f -# file rename command -MV= mv -# library (.a) file creation command -AR= ar rc -# second step in .a creation (use "touch" if not needed) -RANLIB= ranlib -# installation program -INSTALL= /bin/install -c -INSTALL_PROGRAM= $(INSTALL) -INSTALL_DATA= $(INSTALL) -m 644 - -# End of configurable options. - - -# source files: JPEG library proper -LIBSOURCES= jcapi.c jccoefct.c jccolor.c jcdctmgr.c jchuff.c jcmainct.c \ - jcmarker.c jcmaster.c jcomapi.c jcparam.c jcprepct.c jcsample.c \ - jdapi.c jdatasrc.c jdatadst.c jdcoefct.c jdcolor.c jddctmgr.c \ - jdhuff.c jdmainct.c jdmarker.c jdmaster.c jdpostct.c jdsample.c \ - jerror.c jutils.c jfdctfst.c jfdctflt.c jfdctint.c jidctfst.c \ - jidctflt.c jidctint.c jidctred.c jquant1.c jquant2.c jdmerge.c \ - jmemmgr.c jmemansi.c jmemname.c jmemnobs.c jmemdos.c -# source files: cjpeg/djpeg applications, also rdjpgcom/wrjpgcom -APPSOURCES= cjpeg.c djpeg.c rdcolmap.c rdppm.c wrppm.c rdgif.c wrgif.c \ - rdtarga.c wrtarga.c rdbmp.c wrbmp.c rdrle.c wrrle.c rdjpgcom.c \ - wrjpgcom.c -SOURCES= $(LIBSOURCES) $(APPSOURCES) -# files included by source files -INCLUDES= jdct.h jerror.h jinclude.h jmemsys.h jmorecfg.h jpegint.h \ - jpeglib.h jversion.h cdjpeg.h cderror.h -# documentation, test, and support files -DOCS= README install.doc usage.doc cjpeg.1 djpeg.1 rdjpgcom.1 wrjpgcom.1 \ - example.c libjpeg.doc structure.doc coderules.doc filelist.doc \ - change.log -MKFILES= configure makefile.auto makefile.ansi makefile.unix makefile.manx \ - makefile.sas makcjpeg.st makdjpeg.st makljpeg.st makefile.bcc \ - makefile.mc6 makefile.dj makefile.mms makefile.vms makvms.opt -CONFIGFILES= jconfig.auto jconfig.manx jconfig.sas jconfig.st jconfig.bcc \ - jconfig.mc6 jconfig.dj jconfig.vms -OTHERFILES= jconfig.doc ckconfig.c ansi2knr.c ansi2knr.1 jmemdosa.asm -TESTFILES= testorig.jpg testimg.ppm testimg.gif testimg.jpg -DISTFILES= $(DOCS) $(MKFILES) $(CONFIGFILES) $(SOURCES) $(INCLUDES) \ - $(OTHERFILES) $(TESTFILES) -# library object files common to compression and decompression -COMOBJECTS= jcomapi.o jutils.o jerror.o jmemmgr.o $(SYSDEPMEM) -# compression library object files -CLIBOBJECTS= jcapi.o jcparam.o jdatadst.o jcmaster.o jcmarker.o jcmainct.o \ - jcprepct.o jccoefct.o jccolor.o jcsample.o jchuff.o jcdctmgr.o \ - jfdctfst.o jfdctflt.o jfdctint.o -# decompression library object files -DLIBOBJECTS= jdapi.o jdatasrc.o jdmaster.o jdmarker.o jdmainct.o jdcoefct.o \ - jdpostct.o jddctmgr.o jidctfst.o jidctflt.o jidctint.o jidctred.o \ - jdhuff.o jdsample.o jdcolor.o jquant1.o jquant2.o jdmerge.o -# These objectfiles are included in libjpeg.a -LIBOBJECTS= $(CLIBOBJECTS) $(DLIBOBJECTS) $(COMOBJECTS) -# object files for cjpeg and djpeg applications (excluding library files) -COBJECTS= cjpeg.o rdppm.o rdgif.o rdtarga.o rdrle.o rdbmp.o -DOBJECTS= djpeg.o wrppm.o wrgif.o wrtarga.o wrrle.o wrbmp.o rdcolmap.o - - -#all: libjpeg.a cjpeg djpeg rdjpgcom wrjpgcom -all: libjpeg.a - -# This rule causes ansi2knr to be invoked. -# .c.o: -# ./ansi2knr $(srcdir)/$*.c T$*.c -# $(CC) $(CFLAGS) -c T$*.c -# $(RM) T$*.c $*.o -# $(MV) T$*.o $*.o - -ansi2knr: ansi2knr.c - $(CC) $(CFLAGS) $(ANSI2KNRFLAGS) -o ansi2knr ansi2knr.c - -libjpeg.a: $(LIBOBJECTS) - $(RM) libjpeg.a - $(AR) libjpeg.a $(LIBOBJECTS) - $(RANLIB) libjpeg.a - -cjpeg: $(COBJECTS) libjpeg.a - $(LN) $(LDFLAGS) -o cjpeg $(COBJECTS) libjpeg.a $(LDLIBS) - -djpeg: $(DOBJECTS) libjpeg.a - $(LN) $(LDFLAGS) -o djpeg $(DOBJECTS) libjpeg.a $(LDLIBS) - -rdjpgcom: rdjpgcom.o - $(LN) $(LDFLAGS) -o rdjpgcom rdjpgcom.o $(LDLIBS) - -wrjpgcom: wrjpgcom.o - $(LN) $(LDFLAGS) -o wrjpgcom wrjpgcom.o $(LDLIBS) - -jconfig.h: jconfig.doc - echo You must prepare a system-dependent jconfig.h file. - echo Please read the installation directions in install.doc. - exit 1 - -install: cjpeg djpeg rdjpgcom wrjpgcom - $(INSTALL_PROGRAM) cjpeg $(bindir)/$(binprefix)cjpeg - $(INSTALL_PROGRAM) djpeg $(bindir)/$(binprefix)djpeg - $(INSTALL_PROGRAM) rdjpgcom $(bindir)/$(binprefix)rdjpgcom - $(INSTALL_PROGRAM) wrjpgcom $(bindir)/$(binprefix)wrjpgcom - $(INSTALL_DATA) $(srcdir)/cjpeg.1 $(mandir)/$(manprefix)cjpeg.$(manext) - $(INSTALL_DATA) $(srcdir)/djpeg.1 $(mandir)/$(manprefix)djpeg.$(manext) - $(INSTALL_DATA) $(srcdir)/rdjpgcom.1 $(mandir)/$(manprefix)rdjpgcom.$(manext) - $(INSTALL_DATA) $(srcdir)/wrjpgcom.1 $(mandir)/$(manprefix)wrjpgcom.$(manext) - -install-lib: libjpeg.a jconfig.h - $(INSTALL_DATA) libjpeg.a $(libdir)/$(binprefix)libjpeg.a - $(INSTALL_DATA) jconfig.h $(includedir)/jconfig.h - $(INSTALL_DATA) $(srcdir)/jpeglib.h $(includedir)/jpeglib.h - $(INSTALL_DATA) $(srcdir)/jmorecfg.h $(includedir)/jmorecfg.h - $(INSTALL_DATA) $(srcdir)/jerror.h $(includedir)/jerror.h +.cpp.o: + $(CC) $(CFLAGS) -c $< clean: - $(RM) *.o cjpeg djpeg libjpeg.a rdjpgcom wrjpgcom ansi2knr core testout.* - -distribute: - $(RM) jpegsrc.tar* - tar cvf jpegsrc.tar $(DISTFILES) - compress -v jpegsrc.tar - -test: cjpeg djpeg - $(RM) testout.ppm testout.gif testout.jpg - ./djpeg -dct int -ppm -outfile testout.ppm testorig.jpg - ./djpeg -dct int -gif -outfile testout.gif testorig.jpg - ./cjpeg -dct int -outfile testout.jpg testimg.ppm - cmp testimg.ppm testout.ppm - cmp testimg.gif testout.gif - cmp testimg.jpg testout.jpg - -check: test - -# GNU Make likes to know which target names are not really files to be made: -.PHONY: all install install-lib clean distribute test check - - -jcapi.o : jcapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jccoefct.o : jccoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jccolor.o : jccolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcdctmgr.o : jcdctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jchuff.o : jchuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcmainct.o : jcmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcmarker.o : jcmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcmaster.o : jcmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcomapi.o : jcomapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcparam.o : jcparam.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcprepct.o : jcprepct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcsample.o : jcsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdapi.o : jdapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdatasrc.o : jdatasrc.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h -jdatadst.o : jdatadst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h -jdcoefct.o : jdcoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdcolor.o : jdcolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jddctmgr.o : jddctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jdhuff.o : jdhuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmainct.o : jdmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmarker.o : jdmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmaster.o : jdmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdpostct.o : jdpostct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdsample.o : jdsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jerror.o : jerror.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jversion.h jerror.h -jutils.o : jutils.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jfdctfst.o : jfdctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jfdctflt.o : jfdctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jfdctint.o : jfdctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctfst.o : jidctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctflt.o : jidctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctint.o : jidctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctred.o : jidctred.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jquant1.o : jquant1.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jquant2.o : jquant2.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmerge.o : jdmerge.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jmemmgr.o : jmemmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemansi.o : jmemansi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemname.o : jmemname.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemnobs.o : jmemnobs.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemdos.o : jmemdos.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -cjpeg.o : cjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h -djpeg.o : djpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h -rdcolmap.o : rdcolmap.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdppm.o : rdppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrppm.o : wrppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdgif.o : rdgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrgif.o : wrgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdtarga.o : rdtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrtarga.o : wrtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdbmp.o : rdbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrbmp.o : wrbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdrle.o : rdrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrrle.o : wrrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdjpgcom.o : rdjpgcom.c jinclude.h jconfig.h -wrjpgcom.o : wrjpgcom.c jinclude.h jconfig.h + $(RM) $(RMFLAGS) *.o + +lint: + $(LINT) $(CFLAGS) $(SRC) + +depend: + (sed '/^# DO NOT DELETE THIS LINE/q' Makefile && \ + $(CC) -MM $(CFLAGS) ${SRC} \ + ) >Makefile.new + cp Makefile Makefile.bak + cp Makefile.new Makefile + $(RM) $(RMFLAGS) Makefile.new + +# DO NOT DELETE THIS LINE +jcomapi.o: jcomapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \ + jpegint.h jerror.h +jutils.o: jutils.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h \ + jerror.h +jerror.o: jerror.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \ + jversion.h jerror.h +jmemmgr.o: jmemmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \ + jpegint.h jerror.h jmemsys.h +jmemnobs.o: jmemnobs.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \ + jpegint.h jerror.h jmemsys.h +jcapi.o: jcapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h \ + jerror.h +jcparam.o: jcparam.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \ + jpegint.h jerror.h +jdatadst.o: jdatadst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \ + jerror.h +jcmaster.o: jcmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \ + jpegint.h jerror.h +jcmarker.o: jcmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \ + jpegint.h jerror.h +jcmainct.o: jcmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \ + jpegint.h jerror.h +jcprepct.o: jcprepct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \ + jpegint.h jerror.h +jccoefct.o: jccoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \ + jpegint.h jerror.h +jccolor.o: jccolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \ + jpegint.h jerror.h +jcsample.o: jcsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \ + jpegint.h jerror.h +jchuff.o: jchuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h \ + jerror.h +jcdctmgr.o: jcdctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \ + jpegint.h jerror.h jdct.h +jfdctfst.o: jfdctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \ + jpegint.h jerror.h jdct.h +jfdctflt.o: jfdctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \ + jpegint.h jerror.h jdct.h +jfdctint.o: jfdctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \ + jpegint.h jerror.h jdct.h +jdapi.o: jdapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h \ + jerror.h +jdatasrc.o: jdatasrc.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \ + jerror.h +jdmaster.o: jdmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \ + jpegint.h jerror.h +jdmarker.o: jdmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \ + jpegint.h jerror.h +jdmainct.o: jdmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \ + jpegint.h jerror.h +jdcoefct.o: jdcoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \ + jpegint.h jerror.h +jdpostct.o: jdpostct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \ + jpegint.h jerror.h +jddctmgr.o: jddctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \ + jpegint.h jerror.h jdct.h +jidctfst.o: jidctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \ + jpegint.h jerror.h jdct.h +jidctflt.o: jidctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \ + jpegint.h jerror.h jdct.h +jidctint.o: jidctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \ + jpegint.h jerror.h jdct.h +jidctred.o: jidctred.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \ + jpegint.h jerror.h jdct.h +jdhuff.o: jdhuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h \ + jerror.h +jdsample.o: jdsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \ + jpegint.h jerror.h +jdcolor.o: jdcolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \ + jpegint.h jerror.h +jquant1.o: jquant1.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \ + jpegint.h jerror.h +jquant2.o: jquant2.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \ + jpegint.h jerror.h +jdmerge.o: jdmerge.c jinclude.h jconfig.h jpeglib.h jmorecfg.h \ + jpegint.h jerror.h diff --git a/jpeg/README b/jpeg/README deleted file mode 100644 index c882ffb759..0000000000 --- a/jpeg/README +++ /dev/null @@ -1,349 +0,0 @@ -The Independent JPEG Group's JPEG software -========================================== - -README for release 5 of 24-Sep-94 -================================= - -This distribution contains the fifth public release of the Independent JPEG -Group's free JPEG software. You are welcome to redistribute this software and -to use it for any purpose, subject to the conditions under LEGAL ISSUES, below. - -Serious users of this software (particularly those incorporating it into -larger programs) should contact jpeg-info@uunet.uu.net to be added to our -electronic mailing list. Mailing list members are notified of updates and -have a chance to participate in technical discussions, etc. - -This software is the work of Tom Lane, Philip Gladstone, Luis Ortiz, Jim -Boucher, Lee Crocker, George Phillips, Davide Rossi, Ge' Weijers, and other -members of the Independent JPEG Group. - -IJG is not associated with the official ISO JPEG standards committee. - - -DOCUMENTATION ROADMAP -===================== - -This file contains the following sections: - -OVERVIEW General description of JPEG and the IJG software. -LEGAL ISSUES Copyright, lack of warranty, terms of distribution. -REFERENCES Where to learn more about JPEG. -ARCHIVE LOCATIONS Where to find newer versions of this software. -RELATED SOFTWARE Other stuff you should get. -FILE FORMAT WARS Software *not* to get. -TO DO Plans for future IJG releases. - -Other documentation files in the distribution are: - -User documentation: - install.doc How to configure and install the IJG software. - usage.doc Usage instructions for cjpeg, djpeg, rdjpgcom, wrjpgcom. - *.1 Unix-style man pages for programs (same info as usage.doc). - change.log Version-to-version change highlights. -Programmer and internal documentation: - libjpeg.doc How to use the JPEG library in your own programs. - example.c Sample code for calling the JPEG library. - structure.doc Overview of the JPEG library's internal structure. - filelist.doc Road map of IJG files. - coderules.doc Coding style rules --- please read if you contribute code. - -Please read at least the files install.doc and usage.doc. Useful information -can also be found in the JPEG FAQ (Frequently Asked Questions) article. See -ARCHIVE LOCATIONS below to find out where to obtain the FAQ article. - -If you want to understand how the JPEG code works, we suggest reading one or -more of the REFERENCES, then looking at the documentation files (in roughly -the order listed) before diving into the code. - - -OVERVIEW -======== - -This package contains C software to implement JPEG image compression and -decompression. JPEG (pronounced "jay-peg") is a standardized compression -method for full-color and gray-scale images. JPEG is intended for compressing -"real-world" scenes; cartoons and other non-realistic images are not its -strong suit. JPEG is lossy, meaning that the output image is not necessarily -identical to the input image. Hence you must not use JPEG if you have to have -identical output bits. However, on typical images of real-world scenes, very -good compression levels can be obtained with no visible change, and amazingly -high compression levels are possible if you can tolerate a low-quality image. -For more details, see the references, or just experiment with various -compression settings. - -We provide a set of library routines for reading and writing JPEG image files, -plus two simple applications "cjpeg" and "djpeg", which use the library to -perform conversion between JPEG and some other popular image file formats. -The library is intended to be reused in other applications. - -This software implements JPEG baseline and extended-sequential compression -processes. Provision is made for supporting all variants of these processes, -although some uncommon parameter settings aren't implemented yet. For legal -reasons, we are not distributing code for the arithmetic-coding process; see -LEGAL ISSUES. At present we have made no provision for supporting the -progressive, hierarchical, or lossless processes defined in the standard. -(Support for progressive mode may be offered in a future release.) - -In order to support file conversion and viewing software, we have included -considerable functionality beyond the bare JPEG coding/decoding capability; -for example, the color quantization modules are not strictly part of JPEG -decoding, but they are essential for output to colormapped file formats or -colormapped displays. These extra functions can be compiled out of the -library if not required for a particular application. We have also included -two simple applications for inserting and extracting textual comments in -JFIF files. - -The emphasis in designing this software has been on achieving portability and -flexibility, while also making it fast enough to be useful. In particular, -the software is not intended to be read as a tutorial on JPEG. (See the -REFERENCES section for introductory material.) While we hope that the entire -package will someday be industrial-strength code, much remains to be done in -performance tuning and in improving the capabilities of individual modules. - -We welcome the use of this software as a component of commercial products. -No royalty is required, but we do ask for an acknowledgement in product -documentation, as described under LEGAL ISSUES. - - -LEGAL ISSUES -============ - -In plain English: - -1. We don't promise that this software works. (But if you find any bugs, - please let us know!) -2. You can use this software for whatever you want. You don't have to pay us. -3. You may not pretend that you wrote this software. If you use it in a - program, you must acknowledge somewhere in your documentation that - you've used the IJG code. - -In legalese: - -The authors make NO WARRANTY or representation, either express or implied, -with respect to this software, its quality, accuracy, merchantability, or -fitness for a particular purpose. This software is provided "AS IS", and you, -its user, assume the entire risk as to its quality and accuracy. - -This software is copyright (C) 1991, 1992, 1993, 1994, Thomas G. Lane. -All Rights Reserved except as specified below. - -Permission is hereby granted to use, copy, modify, and distribute this -software (or portions thereof) for any purpose, without fee, subject to these -conditions: -(1) If any part of the source code for this software is distributed, then this -README file must be included, with this copyright and no-warranty notice -unaltered; and any additions, deletions, or changes to the original files -must be clearly indicated in accompanying documentation. -(2) If only executable code is distributed, then the accompanying -documentation must state that "this software is based in part on the work of -the Independent JPEG Group". -(3) Permission for use of this software is granted only if the user accepts -full responsibility for any undesirable consequences; the authors accept -NO LIABILITY for damages of any kind. - -These conditions apply to any software derived from or based on the IJG code, -not just to the unmodified library. If you use our work, you ought to -acknowledge us. - -Permission is NOT granted for the use of any IJG author's name or company name -in advertising or publicity relating to this software or products derived from -it. This software may be referred to only as "the Independent JPEG Group's -software". - -We specifically permit and encourage the use of this software as the basis of -commercial products, provided that all warranty or liability claims are -assumed by the product vendor. - - -ansi2knr.c is included in this distribution by permission of L. Peter Deutsch, -sole proprietor of its copyright holder, Aladdin Enterprises of Menlo Park, CA. -ansi2knr.c is NOT covered by the above copyright and conditions, but instead -by the usual distribution terms of the Free Software Foundation; principally, -that you must include source code if you redistribute it. (See the file -ansi2knr.c for full details.) However, since ansi2knr.c is not needed as part -of any program generated from the IJG code, this does not limit you more than -the foregoing paragraphs do. - -The configuration script "configure" was produced by GNU Autoconf. Again, -the FSF copyright terms apply only to configure, not to the IJG code; and -again, that does not limit your use of the object code. - -It appears that the arithmetic coding option of the JPEG spec is covered by -patents owned by IBM, AT&T, and Mitsubishi. Hence arithmetic coding cannot -legally be used without obtaining one or more licenses. For this reason, -support for arithmetic coding has been removed from the free JPEG software. -(Since arithmetic coding provides only a marginal gain over the unpatented -Huffman mode, it is unlikely that very many implementations will support it.) -So far as we are aware, there are no patent restrictions on the remaining -code. - -We are required to state that - "The Graphics Interchange Format(c) is the Copyright property of - CompuServe Incorporated. GIF(sm) is a Service Mark property of - CompuServe Incorporated." - - -REFERENCES -========== - -We highly recommend reading one or more of these references before trying to -understand the innards of the JPEG software. - -The best short technical introduction to the JPEG compression algorithm is - Wallace, Gregory K. "The JPEG Still Picture Compression Standard", - Communications of the ACM, April 1991 (vol. 34 no. 4), pp. 30-44. -(Adjacent articles in that issue discuss MPEG motion picture compression, -applications of JPEG, and related topics.) If you don't have the CACM issue -handy, a PostScript file containing a revised version of Wallace's article is -available at ftp.uu.net, graphics/jpeg/wallace.ps.gz. The file (actually a -preprint for an article to appear in IEEE Trans. Consumer Electronics) omits -the sample images that appeared in CACM, but it includes corrections and some -added material. Note: the Wallace article is copyright ACM and IEEE, and it -may not be used for commercial purposes. - -A somewhat less technical, more leisurely introduction to JPEG can be found in -"The Data Compression Book" by Mark Nelson, published by M&T Books (Redwood -City, CA), 1991, ISBN 1-55851-216-0. This book provides good explanations and -example C code for a multitude of compression methods including JPEG. It is -an excellent source if you are comfortable reading C code but don't know much -about data compression in general. The book's JPEG sample code is far from -industrial-strength, but when you are ready to look at a full implementation, -you've got one here... - -The best full description of JPEG is the textbook "JPEG Still Image Data -Compression Standard" by William B. Pennebaker and Joan L. Mitchell, published -by Van Nostrand Reinhold, 1993, ISBN 0-442-01272-1. Price US$59.95, 638 pp. -The book includes the complete text of the ISO JPEG standards (DIS 10918-1 -and draft DIS 10918-2). This is by far the most complete exposition of JPEG -in existence, and we highly recommend it. - -The JPEG standard itself is not available electronically; you must order a -paper copy through ISO. (Unless you feel a need to own a certified official -copy, we recommend buying the Pennebaker and Mitchell book instead; it's much -cheaper and includes a great deal of useful explanatory material.) In the US, -copies of the standard may be ordered from ANSI Sales at (212) 642-4900, or -from Global Engineering Documents at (800) 854-7179. (ANSI doesn't take -credit card orders, but Global does.) It's not cheap: as of 1992, ANSI was -charging $95 for Part 1 and $47 for Part 2, plus 7% shipping/handling. The -standard is divided into two parts, Part 1 being the actual specification, -while Part 2 covers compliance testing methods. Part 1 is titled "Digital -Compression and Coding of Continuous-tone Still Images, Part 1: Requirements -and guidelines" and has document number ISO/IEC IS 10918-1. As of mid-1994, -Part 2 is still at Draft International Standard status. It is titled "Digital -Compression and Coding of Continuous-tone Still Images, Part 2: Compliance -testing" and has document number ISO/IEC DIS 10918-2. (The document number -will change to IS 10918-2 when final approval is obtained.) A Part 3, -covering extensions, is likely to appear in draft form in late 1994. - -The JPEG standard does not specify all details of an interchangeable file -format. For the omitted details we follow the "JFIF" conventions, revision -1.02. A copy of the JFIF spec is available from: - Literature Department - C-Cube Microsystems, Inc. - 1778 McCarthy Blvd. - Milpitas, CA 95035 - phone (408) 944-6300, fax (408) 944-6314 -A PostScript version of this document is available at ftp.uu.net, file -graphics/jpeg/jfif.ps.gz. It can also be obtained by e-mail from the C-Cube -mail server, netlib@c3.pla.ca.us. Send the message "send jfif_ps from jpeg" -to the server to obtain the JFIF document; send the message "help" if you have -trouble. - -The TIFF 6.0 file format specification can be obtained by FTP from sgi.com -(192.48.153.1), file graphics/tiff/TIFF6.ps.Z; or you can order a printed copy -from Aldus Corp. at (206) 628-6593. It should be noted that the TIFF 6.0 spec -of 3-June-92 has a number of serious problems in its JPEG features. A -redesign effort is currently underway to correct these problems; it is -expected to result in a new, incompatible, spec. IJG intends to support the -corrected version of TIFF when the new spec is issued. - - -ARCHIVE LOCATIONS -================= - -The "official" archive site for this software is ftp.uu.net (Internet -address 192.48.96.9). The most recent released version can always be found -there in directory graphics/jpeg. This particular version will be archived -as graphics/jpeg/jpegsrc.v5.tar.gz. If you are on the Internet, you -can retrieve files from ftp.uu.net by standard anonymous FTP. If you don't -have FTP access, UUNET's archives are also available via UUCP; contact -help@uunet.uu.net for information on retrieving files that way. - -Numerous Internet sites maintain copies of the UUNET files; in particular, -you can probably find a copy at any site that archives comp.sources.misc -submissions. However, only ftp.uu.net is guaranteed to have the latest -official version. - -You can also obtain this software from CompuServe, in the GRAPHSUPPORT forum -(GO GRAPHSUP); this version will be file jpsrc5.zip in library 15. Again, -CompuServe is not guaranteed to have the very latest version. - -The JPEG FAQ (Frequently Asked Questions) article is a useful source of -general information about JPEG. It is updated constantly and therefore -is not included in this distribution. The FAQ is posted every two weeks -to Usenet newsgroups comp.graphics, news.answers, and other groups. You -can always obtain the latest version from the news.answers archive at -rtfm.mit.edu (18.181.0.24). By FTP, fetch /pub/usenet/news.answers/jpeg-faq. -If you don't have FTP, send e-mail to mail-server@rtfm.mit.edu with body -"send usenet/news.answers/jpeg-faq". - - -RELATED SOFTWARE -================ - -Numerous viewing and image manipulation programs now support JPEG. (Quite a -few of them use this library to do so.) The JPEG FAQ described above lists -some of the more popular free and shareware viewers, and tells where to -obtain them on Internet. - -If you are on a Unix machine, we highly recommend Jef Poskanzer's free -PBMPLUS image software, which provides many useful operations on PPM-format -image files. In particular, it can convert PPM images to and from a wide -range of other formats. You can obtain this package by FTP from ftp.x.org -(contrib/pbmplus*.tar.Z) or ftp.ee.lbl.gov (pbmplus*.tar.Z). There is also -a newer update of this package called NETPBM, available from -wuarchive.wustl.edu under directory /graphics/graphics/packages/NetPBM/. -Unfortunately PBMPLUS/NETPBM is not nearly as portable as the IJG software -is; you are likely to have difficulty making it work on any non-Unix machine. - -A different free JPEG implementation, written by the PVRG group at Stanford, -is available from havefun.stanford.edu in directory pub/jpeg. This program -is designed for research and experimentation rather than production use; -it is slower, harder to use, and less portable than the IJG code, but it -implements a larger subset of the JPEG standard. In particular, it supports -lossless JPEG. - - -FILE FORMAT WARS -================ - -Some JPEG programs produce files that are not compatible with our library. -The root of the problem is that the ISO JPEG committee failed to specify a -concrete file format. Some vendors "filled in the blanks" on their own, -creating proprietary formats that no one else could read. (For example, none -of the early commercial JPEG implementations for the Macintosh were able to -exchange compressed files.) - -The file format we have adopted is called JFIF (see REFERENCES). This format -has been agreed to by a number of major commercial JPEG vendors, and it has -become the de facto standard. JFIF is a minimal or "low end" representation. -Work is also going forward to incorporate JPEG compression into the TIFF -standard, for use in "high end" applications that need to record a lot of -additional data about an image. We intend to support TIFF in the future. -We hope that these two formats will be sufficient and that other, -incompatible JPEG file formats will not proliferate. - -Indeed, part of the reason for developing and releasing this free software is -to help force rapid convergence to de facto standards for JPEG file formats. -SUPPORT STANDARD, NON-PROPRIETARY FORMATS: demand JFIF or TIFF/JPEG! - - -TO DO -===== - -In future versions, we are considering supporting progressive JPEG -compression, the upcoming JPEG Part 3 extensions, and other improvements. - -As always, speeding things up is high on our priority list. - -Please send bug reports, offers of help, etc. to jpeg-info@uunet.uu.net. diff --git a/jpeg/TAGS b/jpeg/TAGS deleted file mode 100644 index be11a10e15..0000000000 --- a/jpeg/TAGS +++ /dev/null @@ -1,762 +0,0 @@ - -ansi2knr.c,156 -convert1(370,13445 -#define isidchar(220,9913 -#define isidfirstchar(221,9963 -main(230,10135 -skipspace(285,11319 -test1(323,12206 -writeblanks(305,11755 - -cderror.h,0 - -cdjpeg.h,0 - -cjpeg.c,287 -keymatch 276,8909 -main 703,22146 -parse_switches 472,14622 -progress_monitor 185,5560 -qt_getc 301,9712 -read_qt_integer 318,10025 -read_quant_tables 347,10625 -select_file_type 107,4015 -set_quant_slots 404,12602 -set_sample_factors 438,13566 -signal_catcher 165,5180 -usage 221,6639 - -ckconfig.c,411 -int is_char_signed 243,6953 -int is_char_signed 245,6988 -int is_shifting_signed 261,7435 -int is_shifting_signed 263,7475 -int main 286,8178 -int main 288,8218 -int possibly_dupli_function 222,6346 -int possibly_duplicate_function 217,6294 -int test2function 116,4131 -void test3function 163,5239 -void test3function 165,5296 -int test4function 187,5772 -int test4function 189,5813 -int testfunction 111,4041 - -djpeg.c,172 -COM_handler 472,15110 -jpeg_getc 457,14768 -keymatch 240,7793 -main 522,16176 -parse_switches 265,8596 -progress_monitor 132,3835 -signal_catcher 112,3455 -usage 168,4914 - -example.c,76 -my_error_exit 257,10295 -read_JPEG_file 278,10849 -write_JPEG_file 72,2388 - -jcapi.c,300 -jpeg_abort_compress 366,11862 -jpeg_create_compress 26,741 -jpeg_destroy_compress 69,1729 -jpeg_finish_compress 261,8308 -jpeg_start_compress 124,3650 -jpeg_suppress_tables 88,2423 -jpeg_write_marker 307,9959 -jpeg_write_raw_data 206,6531 -jpeg_write_scanlines 163,5143 -jpeg_write_tables 341,11094 - -jccoefct.c,141 -compress_data 113,3369 -compress_first_pass 205,7426 -compress_output 301,11224 -jinit_c_coef_controller 373,13780 -start_pass_coef 73,2330 - -jccolor.c,232 -#define FIX(55,2046 -cmyk_ycck_convert 215,7252 -grayscale_convert 270,9078 -jinit_color_converter 342,10739 -null_convert 299,9841 -null_method 331,10589 -rgb_gray_convert 176,6112 -rgb_ycc_convert 120,4334 -rgb_ycc_start 80,2909 - -jcdctmgr.c,107 -forward_DCT 192,6059 -forward_DCT_float 282,9149 -jinit_forward_dct 356,11705 -start_pass_fdctmgr 68,1951 - -jchuff.c,450 -#define ASSIGN_STATE(48,1611 -#define ASSIGN_STATE(51,1693 -dump_buffer 251,8106 -emit_bits 275,8859 -#define emit_byte(243,7901 -emit_restart 416,12785 -encode_mcu_gather 609,18163 -encode_mcu_huff 441,13331 -encode_one_block 326,10278 -finish_pass_gather 784,23520 -finish_pass_huff 498,14976 -fix_huff_tbl 183,6342 -flush_bits 313,9972 -gen_huff_coding 643,19203 -htest_one_block 544,16606 -jinit_huff_encoder 829,24796 -start_pass_huff 115,3873 - -jcmainct.c,129 -jinit_c_main_controller 251,7686 -process_data_buffer_main 174,5156 -process_data_simple_main 115,3336 -start_pass_main 70,2242 - -jcmarker.c,435 -emit_2bytes 120,2380 -emit_adobe_app14 358,8324 -emit_byte 97,1921 -emit_dac 209,4215 -emit_dht 171,3422 -emit_dqt 133,2639 -emit_dri 252,5337 -emit_jfif_app0 320,7097 -emit_marker 111,2227 -emit_sof 264,5540 -emit_sos 295,6450 -jinit_marker_writer 592,14876 -write_any_marker 412,10032 -write_file_header 441,10909 -write_file_trailer 549,13994 -write_frame_header 461,11502 -write_scan_header 511,13011 -write_tables_only 563,14350 - -jcmaster.c,188 -finish_pass_master 356,12072 -initial_setup 35,802 -jinit_master_compress 374,12520 -master_selection 201,7220 -pass_startup 342,11803 -per_scan_setup 115,4120 -prepare_for_pass 256,8888 - -jcomapi.c,104 -jpeg_abort 29,821 -jpeg_alloc_huff_table 86,2485 -jpeg_alloc_quant_table 74,2208 -jpeg_destroy 57,1684 - -jconfig.h,0 - -jcparam.c,265 -add_huff_table 148,5075 -jpeg_add_quant_table 23,547 -jpeg_default_colorspace 332,12102 -jpeg_quality_scaling 102,3569 -jpeg_set_colorspace 364,12816 -jpeg_set_defaults 250,9476 -jpeg_set_linear_quality 59,1801 -jpeg_set_quality 128,4462 -std_huff_tables 164,5543 - -jcprepct.c,178 -create_context_buffer 284,9650 -expand_bottom_edge 106,3501 -jinit_c_prep_controller 332,11402 -pre_process_context 195,6424 -pre_process_data 128,4074 -start_pass_prep 78,2668 - -jcsample.c,315 -typedef JMETHOD(54,2543 -expand_right_edge 87,3225 -fullsize_downsample 187,6197 -fullsize_smooth_downsample 392,14104 -h2v1_downsample 212,7135 -h2v2_downsample 249,8266 -h2v2_smooth_downsample 292,9611 -int_downsample 140,4727 -jinit_downsampler 464,16776 -sep_downsample 114,3872 -start_pass_downsample 75,3011 - -jdapi.c,321 -default_decompress_parms 100,2467 -jpeg_abort_decompress 435,13700 -jpeg_create_decompress 25,691 -jpeg_destroy_decompress 72,1821 -jpeg_finish_decompress 396,12455 -jpeg_read_header 215,6664 -jpeg_read_raw_data 352,11095 -jpeg_read_scanlines 321,10213 -jpeg_set_marker_processor 83,2023 -jpeg_start_decompress 269,8321 - -jdatadst.c,108 -empty_output_buffer 81,2925 -init_destination 43,1295 -jpeg_stdio_dest 130,4223 -term_destination 106,3565 - -jdatasrc.c,121 -fill_input_buffer 90,3492 -init_source 44,1311 -jpeg_stdio_src 179,6114 -skip_input_data 128,4660 -term_source 166,5859 - -jdcoefct.c,140 -decompress_data 103,3107 -decompress_output 261,8918 -decompress_read 184,6064 -jinit_d_coef_controller 318,10729 -start_pass_coef 61,1961 - -jdcolor.c,205 -#define FIX(62,2368 -grayscale_convert 204,7041 -jinit_color_deconverter 283,9433 -null_convert 172,6170 -null_method 272,9280 -ycc_rgb_convert 120,4434 -ycc_rgb_start 70,2499 -ycck_cmyk_convert 221,7511 - -jdct.h,292 -#define DESCALE(146,5796 -#define FIX(139,5549 -#define IDCT_range_limit(76,3112 -typedef JMETHOD(35,1357 -typedef JMETHOD(36,1422 -#define MULTIPLY16C16(158,6404 -#define MULTIPLY16C16(161,6548 -#define MULTIPLY16C16(165,6676 -#define MULTIPLY16V16(171,6840 -#define MULTIPLY16V16(175,6968 - -jddctmgr.c,82 -jinit_inverse_dct 221,6983 -start_input_pass 76,2406 -start_output_pass 201,6586 - -jdhuff.c,460 -#define ASSIGN_STATE(63,2269 -#define ASSIGN_STATE(66,2351 -#define check_bit_buffer(368,12632 -decode_mcu 549,18539 -#define drop_bits(379,13045 -fill_bit_buffer 269,9218 -fix_huff_tbl 153,5228 -#define get_bits(373,12792 -#define huff_DECODE(399,13894 -#define huff_EXTEND(461,15568 -#define huff_EXTEND(465,15655 -jinit_huff_decoder 671,21716 -#define peek_bits(376,12918 -process_restart 486,16393 -slow_DECODE 422,14565 -start_pass_huff_decoder 116,3961 - -jdmainct.c,300 -jinit_d_main_controller 489,19467 -make_funny_pointers 159,7787 -process_data_context_main 377,15376 -process_data_crank_post 472,19075 -process_data_input_only 451,18501 -process_data_simple_main 337,14015 -set_bottom_pointers 244,10913 -set_wraparound_pointers 216,9984 -start_pass_main 285,12405 - -jdmarker.c,577 -#define INPUT_2BYTES(134,3312 -#define INPUT_BYTE(127,3054 -#define INPUT_RELOAD(108,2407 -#define INPUT_SYNC(103,2207 -#define INPUT_VARS(97,1941 -#define MAKE_BYTE_AVAIL(116,2747 -first_marker 701,18970 -get_app0 346,9812 -get_app14 402,11513 -get_dac 449,12814 -get_dht 486,13697 -get_dqt 551,15272 -get_dri 603,16524 -get_sof 204,5447 -get_soi 166,4596 -get_sos 279,8030 -jinit_marker_reader 1031,30254 -jpeg_resync_to_restart 965,28301 -next_marker 654,17620 -read_markers 733,19870 -read_restart_marker 887,24484 -reset_marker_reader 1016,29886 -skip_variable 627,16922 - -jdmaster.c,249 -finish_pass_master 589,21500 -jinit_master_decompress 636,22919 -jpeg_calc_output_dimensions 91,2932 -master_selection 391,14928 -per_scan_setup 237,8578 -prepare_for_pass 510,18655 -prepare_range_limit_table 353,13450 -use_merged_upsample 50,1407 - -jdmerge.c,211 -#define FIX(74,2797 -h2v1_merged_upsample 217,7610 -h2v2_merged_upsample 279,9732 -jinit_merged_upsampler 361,12767 -merged_1v_upsample 184,6602 -merged_2v_upsample 135,4885 -start_pass_merged_upsample 82,2916 - -jdpostct.c,149 -jinit_d_post_controller 239,7639 -post_process_1pass 117,3808 -post_process_2pass 192,6210 -post_process_prepass 149,4806 -start_pass_dpost 73,2495 - -jdsample.c,286 -typedef JMETHOD(27,908 -fullsize_upsample 157,5201 -h2v1_fancy_upsample 304,9755 -h2v1_upsample 233,7543 -h2v2_fancy_upsample 345,11191 -h2v2_upsample 261,8272 -int_upsample 189,6246 -jinit_upsampler 399,13107 -noop_upsample 170,5523 -sep_upsample 89,2858 -start_pass_upsample 69,2279 - -jerror.c,142 -emit_message 87,2577 -error_exit 44,1491 -format_message 116,3518 -jpeg_std_error 190,5715 -output_message 63,1884 -reset_error_mgr 171,5181 - -jerror.h,463 -#define ERREXIT(184,8633 -#define ERREXIT1(187,8759 -#define ERREXIT2(191,8930 -#define ERREXIT3(196,9145 -#define ERREXIT4(202,9404 -#define ERREXITS(209,9707 -#define MAKESTMT(214,9905 -#define TRACEMS(231,10597 -#define TRACEMS1(234,10736 -#define TRACEMS2(238,10920 -#define TRACEMS3(243,11148 -#define TRACEMS4(248,11403 -#define TRACEMS8(253,11676 -#define TRACEMSS(259,12027 -#define WARNMS(217,10030 -#define WARNMS1(220,10161 -#define WARNMS2(224,10337 - -jfdctflt.c,25 -jpeg_fdct_float 59,2189 - -jfdctfst.c,78 -#define DESCALE(98,3997 -#define MULTIPLY(106,4158 -jpeg_fdct_ifast 114,4310 - -jfdctint.c,80 -#define MULTIPLY(129,5535 -#define MULTIPLY(131,5595 -jpeg_fdct_islow 140,5723 - -jidctflt.c,53 -#define DEQUANTIZE(60,2393 -jpeg_idct_float 68,2559 - -jidctfst.c,253 -#define DEQUANTIZE(129,5272 -#define DEQUANTIZE(131,5355 -#define DESCALE(111,4744 -#define IDESCALE(152,5934 -#define IDESCALE(154,6009 -#define IRIGHT_SHIFT(142,5670 -#define IRIGHT_SHIFT(148,5852 -#define MULTIPLY(119,4905 -jpeg_idct_ifast 163,6160 - -jidctint.c,109 -#define DEQUANTIZE(140,5942 -#define MULTIPLY(129,5611 -#define MULTIPLY(131,5671 -jpeg_idct_islow 148,6113 - -jidctred.c,155 -#define DEQUANTIZE(109,4058 -#define MULTIPLY(98,3727 -#define MULTIPLY(100,3787 -jpeg_idct_1x1 378,12780 -jpeg_idct_2x2 270,9268 -jpeg_idct_4x4 118,4275 - -jinclude.h,173 -#define JFREAD(88,3012 -#define JFWRITE(90,3127 -#define MEMCOPY(62,2021 -#define MEMCOPY(68,2255 -#define MEMZERO(61,1952 -#define MEMZERO(67,2182 -#define SIZEOF(80,2737 - -jmemansi.c,296 -close_backing_store 123,3485 -jpeg_free_large 62,1684 -jpeg_free_small 42,1173 -jpeg_get_large 56,1566 -jpeg_get_small 36,1059 -jpeg_mem_available 81,2260 -jpeg_mem_init 158,4430 -jpeg_mem_term 164,4544 -jpeg_open_backing_store 141,3974 -read_backing_store 97,2732 -write_backing_store 110,3106 - -jmemdos.c,1112 -#define DST_HANDLE(475,14605 -#define DST_OFFSET(476,14653 -#define DST_PAGE(477,14711 -#define DST_PTR(478,14768 -#define DST_TYPE(474,14558 -#define FIELD_AT(468,14233 -#define HIBYTE(482,14877 -#define LOBYTE(483,14916 -#define ODD(325,10102 -#define SRC_HANDLE(470,14351 -#define SRC_OFFSET(471,14398 -#define SRC_PAGE(472,14455 -#define SRC_PTR(473,14511 -#define SRC_TYPE(469,14305 -close_ems_store 537,16339 -close_file_store 271,8638 -close_xms_store 397,12067 -#define far_free(59,2101 -#define far_free(64,2295 -#define far_free(70,2400 -#define far_malloc(58,2066 -#define far_malloc(63,2261 -#define far_malloc(69,2368 -jpeg_free_large 185,5695 -jpeg_free_small 168,5392 -jpeg_get_large 179,5573 -jpeg_get_small 162,5278 -jpeg_mem_available 204,6279 -jpeg_mem_init 619,18370 -jpeg_mem_term 626,18548 -jpeg_open_backing_store 595,17790 -open_ems_store 550,16653 -open_file_store 284,9064 -open_xms_store 410,12393 -read_ems_store 487,14965 -read_file_store 239,7572 -read_xms_store 329,10152 -select_file_name 124,4158 -write_ems_store 512,15650 -write_file_store 255,8102 -write_xms_store 362,11059 - -jmemmgr.c,418 -access_virt_barray 817,30868 -access_virt_sarray 761,28694 -alloc_barray 439,16331 -alloc_large 338,12917 -alloc_sarray 391,14964 -alloc_small 253,9643 -do_barray_io 730,27490 -do_sarray_io 699,26305 -free_pool 877,33096 -jinit_memory_mgr 975,35998 -out_of_memory 213,8354 -print_mem_stats 182,7411 -realize_virt_arrays 594,22357 -request_virt_barray 562,21283 -request_virt_sarray 530,20205 -self_destruct 949,35298 - -jmemname.c,354 -close_backing_store 202,6159 -jpeg_free_large 141,4358 -jpeg_free_small 121,3847 -jpeg_get_large 135,4240 -jpeg_get_small 115,3733 -jpeg_mem_available 160,4934 -jpeg_mem_init 238,7225 -jpeg_mem_term 245,7403 -jpeg_open_backing_store 219,6639 -read_backing_store 176,5406 -select_file_name 76,2692 -select_file_name 98,3305 -write_backing_store 189,5780 - -jmemnobs.c,207 -jpeg_free_large 61,1754 -jpeg_free_small 41,1243 -jpeg_get_large 55,1636 -jpeg_get_small 35,1129 -jpeg_mem_available 73,1997 -jpeg_mem_init 100,2605 -jpeg_mem_term 106,2709 -jpeg_open_backing_store 87,2324 - -jmemsys.h,0 - -jmorecfg.h,196 -#define GETJOCTET(111,3417 -#define GETJOCTET(117,3533 -#define GETJOCTET(119,3573 -#define GETJSAMPLE(60,2109 -#define GETJSAMPLE(66,2235 -#define GETJSAMPLE(68,2284 -#define GETJSAMPLE(85,2662 - -jpegint.h,132 -typedef JMETHOD(204,7857 -#define MAX(251,9451 -#define MIN(253,9503 -#define RIGHT_SHIFT(268,10163 -#define RIGHT_SHIFT(274,10338 - -jpeglib.h,123 -#define JMETHOD(54,1998 -#define JMETHOD(56,2073 -typedef JMETHOD(709,28849 -#define JPP(718,29127 -#define JPP(720,29162 - -jquant1.c,344 -color_quantize 367,14848 -color_quantize3 395,15615 -create_colormap 235,9523 -finish_pass_1_quant 641,24400 -jinit_1pass_quantizer 652,24566 -largest_input_value 220,9046 -output_value 206,8496 -quantize3_ord_dither 473,18294 -quantize_fs_dither 518,19859 -quantize_ord_dither 423,16527 -select_ncolors 154,6663 -start_pass_1_quant 630,24238 - -jquant2.c,471 -compute_color 493,17241 -fill_inverse_cmap 850,31263 -find_best_colors 770,28348 -find_biggest_color_pop 267,10702 -find_biggest_volume 287,11173 -find_nearby_colors 641,23942 -finish_pass1 1138,42546 -finish_pass2 1146,42698 -init_error_limit 1103,41565 -jinit_2pass_quantizer 1188,43697 -median_cut 418,14872 -pass2_fs_dither 944,34611 -pass2_no_dither 910,33527 -prescan_quantize 218,9321 -select_colors 533,18588 -start_pass_2_quant 1157,42821 -update_box 307,11611 - -jutils.c,216 -#define FMEMCOPY(52,1461 -#define FMEMCOPY(56,1627 -#define FMEMZERO(53,1516 -#define FMEMZERO(57,1729 -jcopy_block_row 97,2789 -jcopy_sample_rows 63,1837 -jdiv_round_up 24,526 -jround_up 33,690 -jzero_far 117,3286 - -jversion.h,0 - -rdbmp.c,280 -#define ReadOK(45,1416 -#define UCH(33,1183 -#define UCH(37,1287 -#define UCH(40,1341 -finish_input_bmp 394,12543 -get_24bit_row 149,4322 -get_8bit_row 119,3445 -jinit_read_bmp 405,12715 -preload_image 185,5375 -read_byte 68,2107 -read_colormap 81,2348 -start_input_bmp 238,6960 - -rdcolmap.c,139 -add_map_entry 46,1663 -pbm_getc 121,3543 -read_color_map 231,6229 -read_gif_map 79,2529 -read_pbm_integer 138,3852 -read_ppm_map 171,4659 - -rdgif.c,442 -#define BitSet(55,2222 -DoExtension 363,12310 -GetCode 203,7137 -GetDataBlock 146,5578 -InitLZWCode 184,6518 -#define LM_to_uint(53,2163 -LZWReadByte 257,8877 -ReInitLZW 173,6143 -ReadByte 133,5347 -ReadColorMap 349,12000 -#define ReadOK(59,2410 -SkipDataBlocks 162,5945 -finish_input_gif 644,21671 -get_interlaced_row 597,20299 -get_pixel_rows 526,18077 -jinit_read_gif 655,21843 -load_interlaced_image 552,18745 -start_input_gif 382,12731 - -rdjpgcom.c,288 -#define ERREXIT(63,1700 -#define NEXTBYTE(59,1640 -first_marker 166,4514 -keymatch 387,10776 -main 416,11589 -next_marker 131,3647 -process_COM 214,5666 -process_SOFn 259,6640 -read_1_byte 68,1823 -read_2_bytes 81,2068 -scan_JPEG_header 317,8867 -skip_variable 188,5058 -usage 372,10400 - -rdppm.c,348 -#define ReadOK(54,1759 -#define UCH(42,1526 -#define UCH(46,1630 -#define UCH(49,1684 -finish_input_ppm 358,11171 -get_raw_row 222,6566 -get_scaled_gray_row 178,5237 -get_scaled_rgb_row 199,5861 -get_text_gray_row 140,4124 -get_text_rgb_row 158,4626 -jinit_read_ppm 369,11343 -pbm_getc 83,2727 -read_pbm_integer 100,3036 -start_input_ppm 240,7092 - -rdrle.c,152 -finish_input_rle 357,10690 -get_pseudocolor_row 203,6311 -get_rle_row 186,5891 -jinit_read_rle 368,10862 -load_image 238,7460 -start_input_rle 80,2497 - -rdtarga.c,413 -#define ReadOK(41,1174 -#define UCH(29,941 -#define UCH(33,1045 -#define UCH(36,1099 -finish_input_tga 472,14193 -get_16bit_row 211,5838 -get_24bit_row 239,6660 -get_8bit_gray_row 174,4756 -get_8bit_row 190,5230 -get_memory_row 273,7784 -jinit_read_targa 483,14367 -preload_image 299,8592 -read_byte 88,2671 -read_colormap 101,2914 -read_non_rle_pixel 123,3461 -read_rle_pixel 136,3750 -start_input_tga 332,9652 - -wrbmp.c,210 -finish_output_bmp 342,10649 -jinit_write_bmp 388,11990 -put_gray_rows 105,3132 -put_pixel_rows 71,2166 -start_output_bmp 140,4064 -write_bmp_header 155,4343 -write_colormap 290,9172 -write_os2_header 228,7127 - -wrgif.c,407 -#define CHAR_OUT(129,4584 -#define HASH_ENTRY(70,2624 -#define MAXCODE(49,1803 -clear_block 180,5888 -clear_hash 171,5695 -compress_byte 214,6882 -compress_init 192,6236 -compress_term 272,8465 -emit_header 312,9342 -finish_output_gif 431,13169 -flush_packet 115,4135 -jinit_write_gif 453,13739 -output 139,4828 -put_3bytes 302,9093 -put_pixel_rows 412,12786 -put_word 293,8903 -start_output_gif 395,12416 - -wrjpgcom.c,389 -#define ERREXIT(81,2233 -#define NEXTBYTE(72,2059 -#define PUTBYTE(77,2167 -copy_rest_of_file 136,3150 -copy_variable 238,6031 -first_marker 216,5487 -keymatch 375,10036 -main 404,10849 -next_marker 181,4620 -read_1_byte 86,2356 -read_2_bytes 99,2601 -scan_JPEG_header 283,7071 -skip_variable 258,6497 -usage 342,8759 -write_1_byte 116,2916 -write_2_bytes 122,2968 -write_marker 129,3071 - -wrppm.c,239 -#define DOWNSCALE(32,1123 -#define DOWNSCALE(34,1155 -copy_pixel_rows 88,2719 -finish_output_ppm 186,5485 -jinit_write_ppm 200,5788 -put_demapped_gray 136,4193 -put_demapped_rgb 111,3338 -put_pixel_rows 73,2333 -start_output_ppm 159,4803 - -wrrle.c,109 -finish_output_rle 171,4942 -jinit_write_rle 274,8142 -rle_put_pixel_rows 153,4494 -start_output_rle 77,2091 - -wrtarga.c,181 -finish_output_tga 211,6214 -jinit_write_targa 225,6519 -put_demapped_gray 144,4202 -put_gray_rows 120,3540 -put_pixel_rows 99,2882 -start_output_tga 167,4800 -write_header 54,1514 diff --git a/jpeg/ansi2knr.1 b/jpeg/ansi2knr.1 deleted file mode 100644 index 434ce8f042..0000000000 --- a/jpeg/ansi2knr.1 +++ /dev/null @@ -1,19 +0,0 @@ -.TH ANSI2KNR 1 "31 December 1990" -.SH NAME -ansi2knr \- convert ANSI C to Kernighan & Ritchie C -.SH SYNOPSIS -.I ansi2knr -input_file output_file -.SH DESCRIPTION -If no output_file is supplied, output goes to stdout. -.br -There are no error messages. -.sp -.I ansi2knr -recognizes functions by seeing a non-keyword identifier at the left margin, followed by a left parenthesis, with a right parenthesis as the last character on the line. It will recognize a multi-line header if the last character on each line but the last is a left parenthesis or comma. These algorithms ignore whitespace and comments, except that the function name must be the first thing on the line. -.sp -The following constructs will confuse it: -.br - - Any other construct that starts at the left margin and follows the above syntax (such as a macro or function call). -.br - - Macros that tinker with the syntax of the function header. diff --git a/jpeg/ansi2knr.c b/jpeg/ansi2knr.c deleted file mode 100644 index 392421543e..0000000000 --- a/jpeg/ansi2knr.c +++ /dev/null @@ -1,488 +0,0 @@ -/* Copyright (C) 1989, 1991, 1993 Aladdin Enterprises. All rights reserved. */ - -/* ansi2knr.c */ -/* Convert ANSI function declarations to K&R syntax */ - -/* -ansi2knr is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY. No author or distributor accepts responsibility -to anyone for the consequences of using it or for whether it serves any -particular purpose or works at all, unless he says so in writing. Refer -to the GNU General Public License for full details. - -Everyone is granted permission to copy, modify and redistribute -ansi2knr, but only under the conditions described in the GNU -General Public License. A copy of this license is supposed to have been -given to you along with ansi2knr so you can know your rights and -responsibilities. It should be in a file named COPYING. Among other -things, the copyright notice and this notice must be preserved on all -copies. -*/ - -/* ----------- Here is the GNU GPL file COPYING, referred to above ---------- ------ These terms do NOT apply to the JPEG software itself; see README ------ - - GHOSTSCRIPT GENERAL PUBLIC LICENSE - (Clarified 11 Feb 1988) - - Copyright (C) 1988 Richard M. Stallman - Everyone is permitted to copy and distribute verbatim copies of this - license, but changing it is not allowed. You can also use this wording - to make the terms for other programs. - - The license agreements of most software companies keep you at the -mercy of those companies. By contrast, our general public license is -intended to give everyone the right to share Ghostscript. To make sure -that you get the rights we want you to have, we need to make -restrictions that forbid anyone to deny you these rights or to ask you -to surrender the rights. Hence this license agreement. - - Specifically, we want to make sure that you have the right to give -away copies of Ghostscript, that you receive source code or else can get -it if you want it, that you can change Ghostscript or use pieces of it -in new free programs, and that you know you can do these things. - - To make sure that everyone has such rights, we have to forbid you to -deprive anyone else of these rights. For example, if you distribute -copies of Ghostscript, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must tell them their rights. - - Also, for our own protection, we must make certain that everyone finds -out that there is no warranty for Ghostscript. If Ghostscript is -modified by someone else and passed on, we want its recipients to know -that what they have is not what we distributed, so that any problems -introduced by others will not reflect on our reputation. - - Therefore we (Richard M. Stallman and the Free Software Foundation, -Inc.) make the following terms which say what you must do to be allowed -to distribute or change Ghostscript. - - - COPYING POLICIES - - 1. You may copy and distribute verbatim copies of Ghostscript source -code as you receive it, in any medium, provided that you conspicuously -and appropriately publish on each copy a valid copyright and license -notice "Copyright (C) 1989 Aladdin Enterprises. All rights reserved. -Distributed by Free Software Foundation, Inc." (or with whatever year is -appropriate); keep intact the notices on all files that refer to this -License Agreement and to the absence of any warranty; and give any other -recipients of the Ghostscript program a copy of this License Agreement -along with the program. You may charge a distribution fee for the -physical act of transferring a copy. - - 2. You may modify your copy or copies of Ghostscript or any portion of -it, and copy and distribute such modifications under the terms of -Paragraph 1 above, provided that you also do the following: - - a) cause the modified files to carry prominent notices stating - that you changed the files and the date of any change; and - - b) cause the whole of any work that you distribute or publish, - that in whole or in part contains or is a derivative of Ghostscript - or any part thereof, to be licensed at no charge to all third - parties on terms identical to those contained in this License - Agreement (except that you may choose to grant more extensive - warranty protection to some or all third parties, at your option). - - c) You may charge a distribution fee for the physical act of - transferring a copy, and you may at your option offer warranty - protection in exchange for a fee. - -Mere aggregation of another unrelated program with this program (or its -derivative) on a volume of a storage or distribution medium does not bring -the other program under the scope of these terms. - - 3. You may copy and distribute Ghostscript (or a portion or derivative -of it, under Paragraph 2) in object code or executable form under the -terms of Paragraphs 1 and 2 above provided that you also do one of the -following: - - a) accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of - Paragraphs 1 and 2 above; or, - - b) accompany it with a written offer, valid for at least three - years, to give any third party free (except for a nominal - shipping charge) a complete machine-readable copy of the - corresponding source code, to be distributed under the terms of - Paragraphs 1 and 2 above; or, - - c) accompany it with the information you received as to where the - corresponding source code may be obtained. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form alone.) - -For an executable file, complete source code means all the source code for -all modules it contains; but, as a special exception, it need not include -source code for modules which are standard libraries that accompany the -operating system on which the executable file runs. - - 4. You may not copy, sublicense, distribute or transfer Ghostscript -except as expressly provided under this License Agreement. Any attempt -otherwise to copy, sublicense, distribute or transfer Ghostscript is -void and your rights to use the program under this License agreement -shall be automatically terminated. However, parties who have received -computer software programs from you with this License Agreement will not -have their licenses terminated so long as such parties remain in full -compliance. - - 5. If you wish to incorporate parts of Ghostscript into other free -programs whose distribution conditions are different, write to the Free -Software Foundation at 675 Mass Ave, Cambridge, MA 02139. We have not -yet worked out a simple rule that can be stated here, but we will often -permit this. We will be guided by the two goals of preserving the free -status of all derivatives of our free software and of promoting the -sharing and reuse of software. - -Your comments and suggestions about our licensing policies and our -software are welcome! Please contact the Free Software Foundation, -Inc., 675 Mass Ave, Cambridge, MA 02139, or call (617) 876-3296. - - NO WARRANTY - - BECAUSE GHOSTSCRIPT IS LICENSED FREE OF CHARGE, WE PROVIDE ABSOLUTELY -NO WARRANTY, TO THE EXTENT PERMITTED BY APPLICABLE STATE LAW. EXCEPT -WHEN OTHERWISE STATED IN WRITING, FREE SOFTWARE FOUNDATION, INC, RICHARD -M. STALLMAN, ALADDIN ENTERPRISES, L. PETER DEUTSCH, AND/OR OTHER PARTIES -PROVIDE GHOSTSCRIPT "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER -EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE -ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF GHOSTSCRIPT IS WITH -YOU. SHOULD GHOSTSCRIPT PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL -NECESSARY SERVICING, REPAIR OR CORRECTION. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW WILL RICHARD M. -STALLMAN, THE FREE SOFTWARE FOUNDATION, INC., L. PETER DEUTSCH, ALADDIN -ENTERPRISES, AND/OR ANY OTHER PARTY WHO MAY MODIFY AND REDISTRIBUTE -GHOSTSCRIPT AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING -ANY LOST PROFITS, LOST MONIES, OR OTHER SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE -(INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED -INACCURATE OR LOSSES SUSTAINED BY THIRD PARTIES OR A FAILURE OF THE -PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS) GHOSTSCRIPT, EVEN IF YOU -HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES, OR FOR ANY CLAIM -BY ANY OTHER PARTY. - --------------------- End of file COPYING ------------------------------ -*/ - - -#include <stdio.h> -#include <ctype.h> - -#ifdef BSD -#include <strings.h> -#else -#ifdef VMS - extern int strlen(), strncmp(); -#else -#include <string.h> -#endif -#endif - -/* malloc and free should be declared in stdlib.h, */ -/* but if you've got a K&R compiler, they probably aren't. */ -#ifdef MSDOS -#include <malloc.h> -#else -#ifdef VMS - extern char *malloc(); - extern void free(); -#else - extern char *malloc(); - extern int free(); -#endif -#endif - -/* Usage: - ansi2knr input_file [output_file] - * If no output_file is supplied, output goes to stdout. - * There are no error messages. - * - * ansi2knr recognizes functions by seeing a non-keyword identifier - * at the left margin, followed by a left parenthesis, - * with a right parenthesis as the last character on the line. - * It will recognize a multi-line header provided that the last character - * of the last line of the header is a right parenthesis, - * and no intervening line ends with a left brace or a semicolon. - * These algorithms ignore whitespace and comments, except that - * the function name must be the first thing on the line. - * The following constructs will confuse it: - * - Any other construct that starts at the left margin and - * follows the above syntax (such as a macro or function call). - * - Macros that tinker with the syntax of the function header. - */ - -/* Scanning macros */ -#define isidchar(ch) (isalnum(ch) || (ch) == '_') -#define isidfirstchar(ch) (isalpha(ch) || (ch) == '_') - -/* Forward references */ -char *skipspace(); -int writeblanks(); -int test1(); -int convert1(); - -/* The main program */ -main(argc, argv) - int argc; - char *argv[]; -{ FILE *in, *out; -#define bufsize 5000 /* arbitrary size */ - char *buf; - char *line; - switch ( argc ) - { - default: - printf("Usage: ansi2knr input_file [output_file]\n"); - exit(0); - case 2: - out = stdout; break; - case 3: - out = fopen(argv[2], "w"); - if ( out == NULL ) - { fprintf(stderr, "Cannot open %s\n", argv[2]); - exit(1); - } - } - in = fopen(argv[1], "r"); - if ( in == NULL ) - { fprintf(stderr, "Cannot open %s\n", argv[1]); - exit(1); - } - fprintf(out, "#line 1 \"%s\"\n", argv[1]); - buf = malloc(bufsize); - line = buf; - while ( fgets(line, (unsigned)(buf + bufsize - line), in) != NULL ) - { switch ( test1(buf) ) - { - case 1: /* a function */ - convert1(buf, out); - break; - case -1: /* maybe the start of a function */ - line = buf + strlen(buf); - if ( line != buf + (bufsize - 1) ) /* overflow check */ - continue; - /* falls through */ - default: /* not a function */ - fputs(buf, out); - break; - } - line = buf; - } - if ( line != buf ) fputs(buf, out); - free(buf); - fclose(out); - fclose(in); - return 0; -} - -/* Skip over space and comments, in either direction. */ -char * -skipspace(p, dir) - register char *p; - register int dir; /* 1 for forward, -1 for backward */ -{ for ( ; ; ) - { while ( isspace(*p) ) p += dir; - if ( !(*p == '/' && p[dir] == '*') ) break; - p += dir; p += dir; - while ( !(*p == '*' && p[dir] == '/') ) - { if ( *p == 0 ) return p; /* multi-line comment?? */ - p += dir; - } - p += dir; p += dir; - } - return p; -} - -/* - * Write blanks over part of a string. - */ -int -writeblanks(start, end) - char *start; - char *end; -{ char *p; - for ( p = start; p < end; p++ ) *p = ' '; - return 0; -} - -/* - * Test whether the string in buf is a function definition. - * The string may contain and/or end with a newline. - * Return as follows: - * 0 - definitely not a function definition; - * 1 - definitely a function definition; - * -1 - may be the beginning of a function definition, - * append another line and look again. - */ -int -test1(buf) - char *buf; -{ register char *p = buf; - char *bend; - char *endfn; - int contin; - if ( !isidfirstchar(*p) ) - return 0; /* no name at left margin */ - bend = skipspace(buf + strlen(buf) - 1, -1); - switch ( *bend ) - { - case ')': contin = 1; break; - case '{': - case ';': return 0; /* not a function */ - default: contin = -1; - } - while ( isidchar(*p) ) p++; - endfn = p; - p = skipspace(p, 1); - if ( *p++ != '(' ) - return 0; /* not a function */ - p = skipspace(p, 1); - if ( *p == ')' ) - return 0; /* no parameters */ - /* Check that the apparent function name isn't a keyword. */ - /* We only need to check for keywords that could be followed */ - /* by a left parenthesis (which, unfortunately, is most of them). */ - { static char *words[] = - { "asm", "auto", "case", "char", "const", "double", - "extern", "float", "for", "if", "int", "long", - "register", "return", "short", "signed", "sizeof", - "static", "switch", "typedef", "unsigned", - "void", "volatile", "while", 0 - }; - char **key = words; - char *kp; - int len = endfn - buf; - while ( (kp = *key) != 0 ) - { if ( strlen(kp) == len && !strncmp(kp, buf, len) ) - return 0; /* name is a keyword */ - key++; - } - } - return contin; -} - -int -convert1(buf, out) - char *buf; - FILE *out; -{ char *endfn; - register char *p; - char **breaks; - unsigned num_breaks = 2; /* for testing */ - char **btop; - char **bp; - char **ap; - /* Pre-ANSI implementations don't agree on whether strchr */ - /* is called strchr or index, so we open-code it here. */ - for ( endfn = buf; *(endfn++) != '('; ) ; -top: p = endfn; - breaks = (char **)malloc(sizeof(char *) * num_breaks * 2); - if ( breaks == 0 ) - { /* Couldn't allocate break table, give up */ - fprintf(stderr, "Unable to allocate break table!\n"); - fputs(buf, out); - return -1; - } - btop = breaks + num_breaks * 2 - 2; - bp = breaks; - /* Parse the argument list */ - do - { int level = 0; - char *end = NULL; - if ( bp >= btop ) - { /* Filled up break table. */ - /* Allocate a bigger one and start over. */ - free((char *)breaks); - num_breaks <<= 1; - goto top; - } - *bp++ = p; - /* Find the end of the argument */ - for ( ; end == NULL; p++ ) - { switch(*p) - { - case ',': if ( !level ) end = p; break; - case '(': level++; break; - case ')': if ( --level < 0 ) end = p; break; - case '/': p = skipspace(p, 1) - 1; break; - default: ; - } - } - p--; /* back up over terminator */ - /* Find the name being declared. */ - /* This is complicated because of procedure and */ - /* array modifiers. */ - for ( ; ; ) - { p = skipspace(p - 1, -1); - switch ( *p ) - { - case ']': /* skip array dimension(s) */ - case ')': /* skip procedure args OR name */ - { int level = 1; - while ( level ) - switch ( *--p ) - { - case ']': case ')': level++; break; - case '[': case '(': level--; break; - case '/': p = skipspace(p, -1) + 1; break; - default: ; - } - } - if ( *p == '(' && *skipspace(p + 1, 1) == '*' ) - { /* We found the name being declared */ - while ( !isidfirstchar(*p) ) - p = skipspace(p, 1) + 1; - goto found; - } - break; - default: goto found; - } - } -found: if ( *p == '.' && p[-1] == '.' && p[-2] == '.' ) - { p++; - if ( bp == breaks + 1 ) /* sole argument */ - writeblanks(breaks[0], p); - else - writeblanks(bp[-1] - 1, p); - bp--; - } - else - { while ( isidchar(*p) ) p--; - *bp++ = p+1; - } - p = end; - } - while ( *p++ == ',' ); - *bp = p; - /* Make a special check for 'void' arglist */ - if ( bp == breaks+2 ) - { p = skipspace(breaks[0], 1); - if ( !strncmp(p, "void", 4) ) - { p = skipspace(p+4, 1); - if ( p == breaks[2] - 1 ) - { bp = breaks; /* yup, pretend arglist is empty */ - writeblanks(breaks[0], p + 1); - } - } - } - /* Put out the function name */ - p = buf; - while ( p != endfn ) putc(*p, out), p++; - /* Put out the declaration */ - for ( ap = breaks+1; ap < bp; ap += 2 ) - { p = *ap; - while ( isidchar(*p) ) putc(*p, out), p++; - if ( ap < bp - 1 ) fputs(", ", out); - } - fputs(") ", out); - /* Put out the argument declarations */ - for ( ap = breaks+2; ap <= bp; ap += 2 ) (*ap)[-1] = ';'; - fputs(breaks[0], out); - free((char *)breaks); - return 0; -} diff --git a/jpeg/cderror.h b/jpeg/cderror.h deleted file mode 100644 index 6479a4d6d4..0000000000 --- a/jpeg/cderror.h +++ /dev/null @@ -1,135 +0,0 @@ -/* - * cderror.h - * - * Copyright (C) 1994, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file defines the error and message codes for the cjpeg/djpeg - * applications. These strings are not needed as part of the JPEG library - * proper. - * Edit this file to add new codes, or to translate the message strings to - * some other language. - */ - - -/* To define the enum list of message codes, include this file without - * defining JMAKE_MSG_TABLE. To create the message string table, include it - * again with JMAKE_MSG_TABLE defined (this should be done in just one module). - */ - -#ifdef JMAKE_MSG_TABLE - -#ifdef NEED_SHORT_EXTERNAL_NAMES -#define addon_message_table cdMsgTable -#endif - -const char * const addon_message_table[] = { - -#define JMESSAGE(code,string) string , - -#else /* not JMAKE_MSG_TABLE */ - -typedef enum { - -#define JMESSAGE(code,string) code , - -#endif /* JMAKE_MSG_TABLE */ - -JMESSAGE(JMSG_FIRSTADDONCODE=1000, NULL) /* Must be first entry! */ - -#ifdef BMP_SUPPORTED -JMESSAGE(JERR_BMP_BADCMAP, "Unsupported BMP colormap format") -JMESSAGE(JERR_BMP_BADDEPTH, "Only 8- and 24-bit BMP files are supported") -JMESSAGE(JERR_BMP_BADHEADER, "Invalid BMP file: bad header length") -JMESSAGE(JERR_BMP_BADPLANES, "Invalid BMP file: biPlanes not equal to 1") -JMESSAGE(JERR_BMP_COLORSPACE, "BMP output must be grayscale or RGB") -JMESSAGE(JERR_BMP_COMPRESSED, "Sorry, compressed BMPs not yet supported") -JMESSAGE(JERR_BMP_NOT, "Not a BMP file - does not start with BM") -JMESSAGE(JTRC_BMP, "%ux%u 24-bit BMP image") -JMESSAGE(JTRC_BMP_MAPPED, "%ux%u 8-bit colormapped BMP image") -JMESSAGE(JTRC_BMP_OS2, "%ux%u 24-bit OS2 BMP image") -JMESSAGE(JTRC_BMP_OS2_MAPPED, "%ux%u 8-bit colormapped OS2 BMP image") -#endif /* BMP_SUPPORTED */ - -#ifdef GIF_SUPPORTED -JMESSAGE(JERR_GIF_BUG, "GIF output got confused") -JMESSAGE(JERR_GIF_CODESIZE, "Bogus GIF codesize %d") -JMESSAGE(JERR_GIF_COLORSPACE, "GIF output must be grayscale or RGB") -JMESSAGE(JERR_GIF_IMAGENOTFOUND, "Too few images in GIF file") -JMESSAGE(JERR_GIF_NOT, "Not a GIF file") -JMESSAGE(JTRC_GIF, "%ux%ux%d GIF image") -JMESSAGE(JTRC_GIF_BADVERSION, - "Warning: unexpected GIF version number '%c%c%c'") -JMESSAGE(JTRC_GIF_EXTENSION, "Ignoring GIF extension block of type 0x%02x") -JMESSAGE(JTRC_GIF_NONSQUARE, "Caution: nonsquare pixels in input") -JMESSAGE(JWRN_GIF_BADDATA, "Corrupt data in GIF file") -JMESSAGE(JWRN_GIF_CHAR, "Bogus char 0x%02x in GIF file, ignoring") -JMESSAGE(JWRN_GIF_ENDCODE, "Premature end of GIF image") -JMESSAGE(JWRN_GIF_NOMOREDATA, "Ran out of GIF bits") -#endif /* GIF_SUPPORTED */ - -#ifdef PPM_SUPPORTED -JMESSAGE(JERR_PPM_COLORSPACE, "PPM output must be grayscale or RGB") -JMESSAGE(JERR_PPM_NONNUMERIC, "Nonnumeric data in PPM file") -JMESSAGE(JERR_PPM_NOT, "Not a PPM file") -JMESSAGE(JTRC_PGM, "%ux%u PGM image") -JMESSAGE(JTRC_PGM_TEXT, "%ux%u text PGM image") -JMESSAGE(JTRC_PPM, "%ux%u PPM image") -JMESSAGE(JTRC_PPM_TEXT, "%ux%u text PPM image") -#endif /* PPM_SUPPORTED */ - -#ifdef RLE_SUPPORTED -JMESSAGE(JERR_RLE_BADERROR, "Bogus error code from RLE library") -JMESSAGE(JERR_RLE_COLORSPACE, "RLE output must be grayscale or RGB") -JMESSAGE(JERR_RLE_DIMENSIONS, "Image dimensions (%ux%u) too large for RLE") -JMESSAGE(JERR_RLE_EMPTY, "Empty RLE file") -JMESSAGE(JERR_RLE_EOF, "Premature EOF in RLE header") -JMESSAGE(JERR_RLE_MEM, "Insufficient memory for RLE header") -JMESSAGE(JERR_RLE_NOT, "Not an RLE file") -JMESSAGE(JERR_RLE_TOOMANYCHANNELS, "Cannot handle %d output channels for RLE") -JMESSAGE(JERR_RLE_UNSUPPORTED, "Cannot handle this RLE setup") -JMESSAGE(JTRC_RLE, "%ux%u full-color RLE file") -JMESSAGE(JTRC_RLE_FULLMAP, "%ux%u full-color RLE file with map of length %d") -JMESSAGE(JTRC_RLE_GRAY, "%ux%u grayscale RLE file") -JMESSAGE(JTRC_RLE_MAPGRAY, "%ux%u grayscale RLE file with map of length %d") -JMESSAGE(JTRC_RLE_MAPPED, "%ux%u colormapped RLE file with map of length %d") -#endif /* RLE_SUPPORTED */ - -#ifdef TARGA_SUPPORTED -JMESSAGE(JERR_TGA_BADCMAP, "Unsupported Targa colormap format") -JMESSAGE(JERR_TGA_BADPARMS, "Invalid or unsupported Targa file") -JMESSAGE(JERR_TGA_COLORSPACE, "Targa output must be grayscale or RGB") -JMESSAGE(JTRC_TGA, "%ux%u RGB Targa image") -JMESSAGE(JTRC_TGA_GRAY, "%ux%u grayscale Targa image") -JMESSAGE(JTRC_TGA_MAPPED, "%ux%u colormapped Targa image") -#else -JMESSAGE(JERR_TGA_NOTCOMP, "Targa support was not compiled") -#endif /* TARGA_SUPPORTED */ - -JMESSAGE(JERR_BAD_CMAP_FILE, - "Color map file is invalid or of unsupported format") -JMESSAGE(JERR_TOO_MANY_COLORS, - "Output file format cannot handle %d colormap entries") -JMESSAGE(JERR_UNGETC_FAILED, "ungetc failed") -#ifdef TARGA_SUPPORTED -JMESSAGE(JERR_UNKNOWN_FORMAT, - "Unrecognized input file format --- perhaps you need -targa") -#else -JMESSAGE(JERR_UNKNOWN_FORMAT, "Unrecognized input file format") -#endif -JMESSAGE(JERR_UNSUPPORTED_FORMAT, "Unsupported output file format") - -#ifdef JMAKE_MSG_TABLE - - NULL -}; - -#else /* not JMAKE_MSG_TABLE */ - - JMSG_LASTADDONCODE -} ADDON_MESSAGE_CODE; - -#endif /* JMAKE_MSG_TABLE */ - -#undef JMESSAGE diff --git a/jpeg/cdjpeg.h b/jpeg/cdjpeg.h deleted file mode 100644 index 35acc35543..0000000000 --- a/jpeg/cdjpeg.h +++ /dev/null @@ -1,124 +0,0 @@ -/* - * cdjpeg.h - * - * Copyright (C) 1994, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains common declarations for the sample applications - * cjpeg and djpeg. It is NOT used by the core JPEG library. - */ - -#define JPEG_CJPEG_DJPEG /* define proper options in jconfig.h */ -#define JPEG_INTERNAL_OPTIONS /* cjpeg.c,djpeg.c need to see xxx_SUPPORTED */ -#include "jinclude.h" -#include "jpeglib.h" -#include "jerror.h" /* get library error codes too */ -#include "cderror.h" /* get application-specific error codes */ - - -/* - * Object interface for cjpeg's source file decoding modules - */ - -typedef struct cjpeg_source_struct * cjpeg_source_ptr; - -struct cjpeg_source_struct { - JMETHOD(void, start_input, (j_compress_ptr cinfo, - cjpeg_source_ptr sinfo)); - JMETHOD(JDIMENSION, get_pixel_rows, (j_compress_ptr cinfo, - cjpeg_source_ptr sinfo)); - JMETHOD(void, finish_input, (j_compress_ptr cinfo, - cjpeg_source_ptr sinfo)); - - FILE *input_file; - - JSAMPARRAY buffer; - JDIMENSION buffer_height; -}; - - -/* - * Object interface for djpeg's output file encoding modules - */ - -typedef struct djpeg_dest_struct * djpeg_dest_ptr; - -struct djpeg_dest_struct { - /* start_output is called after jpeg_start_decompress finishes. - * The color map will be ready at this time, if one is needed. - */ - JMETHOD(void, start_output, (j_decompress_ptr cinfo, - djpeg_dest_ptr dinfo)); - /* Emit the specified number of pixel rows from the buffer. */ - JMETHOD(void, put_pixel_rows, (j_decompress_ptr cinfo, - djpeg_dest_ptr dinfo, - JDIMENSION rows_supplied)); - /* Finish up at the end of the image. */ - JMETHOD(void, finish_output, (j_decompress_ptr cinfo, - djpeg_dest_ptr dinfo)); - - /* Target file spec; filled in by djpeg.c after object is created. */ - FILE * output_file; - - /* Output pixel-row buffer. Created by module init or start_output. - * Width is cinfo->output_width * cinfo->output_components; - * height is buffer_height. - */ - JSAMPARRAY buffer; - JDIMENSION buffer_height; -}; - - -/* - * cjpeg/djpeg may need to perform extra passes to convert to or from - * the source/destination file format. The JPEG library does not know - * about these passes, but we'd like them to be counted by the progress - * monitor. We use an expanded progress monitor object to hold the - * additional pass count. - */ - -struct cdjpeg_progress_mgr { - struct jpeg_progress_mgr pub; /* fields known to JPEG library */ - int completed_extra_passes; /* extra passes completed */ - int total_extra_passes; /* total extra */ - /* last printed percentage stored here to avoid multiple printouts */ - int percent_done; -}; - -typedef struct cdjpeg_progress_mgr * cd_progress_ptr; - - -/* Short forms of external names for systems with brain-damaged linkers. */ - -#ifdef NEED_SHORT_EXTERNAL_NAMES -#define jinit_read_bmp jIRdBMP -#define jinit_write_bmp jIWrBMP -#define jinit_read_gif jIRdGIF -#define jinit_write_gif jIWrGIF -#define jinit_read_ppm jIRdPPM -#define jinit_write_ppm jIWrPPM -#define jinit_read_rle jIRdRLE -#define jinit_write_rle jIWrRLE -#define jinit_read_targa jIRdTarga -#define jinit_write_targa jIWrTarga -#define read_color_map RdCMap -#endif /* NEED_SHORT_EXTERNAL_NAMES */ - -/* Module selection routines for I/O modules. */ - -EXTERN cjpeg_source_ptr jinit_read_bmp JPP((j_compress_ptr cinfo)); -EXTERN djpeg_dest_ptr jinit_write_bmp JPP((j_decompress_ptr cinfo, - boolean is_os2)); -EXTERN cjpeg_source_ptr jinit_read_gif JPP((j_compress_ptr cinfo)); -EXTERN djpeg_dest_ptr jinit_write_gif JPP((j_decompress_ptr cinfo)); -EXTERN cjpeg_source_ptr jinit_read_ppm JPP((j_compress_ptr cinfo)); -EXTERN djpeg_dest_ptr jinit_write_ppm JPP((j_decompress_ptr cinfo)); -EXTERN cjpeg_source_ptr jinit_read_rle JPP((j_compress_ptr cinfo)); -EXTERN djpeg_dest_ptr jinit_write_rle JPP((j_decompress_ptr cinfo)); -EXTERN cjpeg_source_ptr jinit_read_targa JPP((j_compress_ptr cinfo)); -EXTERN djpeg_dest_ptr jinit_write_targa JPP((j_decompress_ptr cinfo)); - -/* Other global routines */ - -EXTERN void read_color_map JPP((j_decompress_ptr cinfo, FILE * infile)); diff --git a/jpeg/change.log b/jpeg/change.log deleted file mode 100644 index ac2bbea2b8..0000000000 --- a/jpeg/change.log +++ /dev/null @@ -1,39 +0,0 @@ -CHANGE LOG for Independent JPEG Group's JPEG software - - -Version 5 24-Sep-94 --------------------- - -Version 5 represents a nearly complete redesign and rewrite of the IJG -software. Major user-visible changes include: - * Automatic configuration simplifies installation for most Unix systems. - * A range of speed vs. image quality tradeoffs are supported. - This includes resizing of an image during decompression: scaling down - by a factor of 1/2, 1/4, or 1/8 is handled very efficiently. - * New programs rdjpgcom and wrjpgcom allow insertion and extraction - of text comments in a JPEG file. - -The application programmer's interface to the library has changed completely. -Notable improvements include: - * We have eliminated the use of callback routines for handling the - uncompressed image data. The application now sees the library as a - set of routines that it calls to read or write image data on a - scanline-by-scanline basis. - * The application image data is represented in a conventional interleaved- - pixel format, rather than as a separate array for each color channel. - This can save a copying step in many programs. - * The handling of compressed data has been cleaned up: the application can - supply routines to source or sink the compressed data. It is possible to - suspend processing on source/sink buffer overrun, although this is not - supported in all operating modes. - * All static state has been eliminated from the library, so that multiple - instances of compression or decompression can be active concurrently. - * JPEG abbreviated datastream formats are supported, ie, quantization and - Huffman tables can be stored separately from the image data. - * And not only that, but the documentation of the library has improved - considerably! - - -The last widely used release before the version 5 rewrite was version 4A of -18-Feb-93. Change logs before that point have been discarded, since they -are not of much interest after the rewrite. diff --git a/jpeg/cjpeg.1 b/jpeg/cjpeg.1 deleted file mode 100644 index 80c21103a4..0000000000 --- a/jpeg/cjpeg.1 +++ /dev/null @@ -1,280 +0,0 @@ -.TH CJPEG 1 "30 August 1994" -.SH NAME -cjpeg \- compress an image file to a JPEG file -.SH SYNOPSIS -.B cjpeg -[ -.I options -] -[ -.I filename -] -.LP -.SH DESCRIPTION -.LP -.B cjpeg -compresses the named image file, or the standard input if no file is -named, and produces a JPEG/JFIF file on the standard output. -The currently supported input file formats are: PPM (PBMPLUS color -format), PGM (PBMPLUS gray-scale format), BMP, GIF, Targa, and RLE (Utah Raster -Toolkit format). (RLE is supported only if the URT library is available.) -.SH OPTIONS -All switch names may be abbreviated; for example, -.B \-grayscale -may be written -.B \-gray -or -.BR \-gr . -Most of the "basic" switches can be abbreviated to as little as one letter. -Upper and lower case are equivalent (thus -.B \-GIF -is the same as -.BR \-gif ). -British spellings are also accepted (e.g., -.BR \-greyscale ), -though for brevity these are not mentioned below. -.PP -The basic switches are: -.TP -.BI \-quality " N" -Scale quantization tables to adjust image quality. Quality is 0 (worst) to -100 (best); default is 75. (See below for more info.) -.TP -.B \-grayscale -Create monochrome JPEG file from color input. Be sure to use this switch when -compressing a grayscale GIF file, because -.B cjpeg -isn't bright enough to notice whether a GIF file uses only shades of gray. -By saying -.BR \-grayscale , -you'll get a smaller JPEG file that takes less time to process. -.TP -.B \-optimize -Perform optimization of entropy encoding parameters. Without this, default -encoding parameters are used. -.B \-optimize -usually makes the JPEG file a little smaller, but -.B cjpeg -runs somewhat slower and needs much more memory. Image quality and speed of -decompression are unaffected by -.BR \-optimize . -.TP -.B \-targa -Input file is Targa format. Targa files that contain an "identification" -field will not be automatically recognized by -.BR cjpeg ; -for such files you must specify -.B \-targa -to make -.B cjpeg -treat the input as Targa format. -For most Targa files, you won't need this switch. -.PP -The -.B \-quality -switch lets you trade off compressed file size against quality of the -reconstructed image: the higher the quality setting, the larger the JPEG file, -and the closer the output image will be to the original input. Normally you -want to use the lowest quality setting (smallest file) that decompresses into -something visually indistinguishable from the original image. For this -purpose the quality setting should be between 50 and 95; the default of 75 is -often about right. If you see defects at -.B \-quality -75, then go up 5 or 10 counts at a time until you are happy with the output -image. (The optimal setting will vary from one image to another.) -.PP -.B \-quality -100 will generate a quantization table of all 1's, eliminating loss in the -quantization step (but there is still information loss in subsampling, as well -as roundoff error). This setting is mainly of interest for experimental -purposes. Quality values above about 95 are -.B not -recommended for normal use; the compressed file size goes up dramatically for -hardly any gain in output image quality. -.PP -In the other direction, quality values below 50 will produce very small files -of low image quality. Settings around 5 to 10 might be useful in preparing an -index of a large image library, for example. Try -.B \-quality -2 (or so) for some amusing Cubist effects. (Note: quality -values below about 25 generate 2-byte quantization tables, which are -considered optional in the JPEG standard. -.B cjpeg -emits a warning message when you give such a quality value, because some -commercial JPEG programs may be unable to decode the resulting file. Use -.B \-baseline -if you need to ensure compatibility at low quality values.) -.PP -Switches for advanced users: -.TP -.B \-dct int -Use integer DCT method (default). -.TP -.B \-dct fast -Use fast integer DCT (less accurate). -.TP -.B \-dct float -Use floating-point DCT method. -The floating-point method is the most accurate, but will be the slowest unless -your machine has very fast floating-point hardware. Also note that results of -the floating-point method may vary slightly across machines, while the integer -methods should give the same results everywhere. The fast integer method is -much less accurate than the other two. -.TP -.BI \-restart " N" -Emit a JPEG restart marker every N MCU rows, or every N MCU blocks if "B" is -attached to the number. -.B \-restart 0 -(the default) means no restart markers. -.TP -.BI \-smooth " N" -Smooth the input image to eliminate dithering noise. N, ranging from 1 to -100, indicates the strength of smoothing. 0 (the default) means no smoothing. -.TP -.BI \-maxmemory " N" -Set limit for amount of memory to use in processing large images. Value is -in thousands of bytes, or millions of bytes if "M" is attached to the -number. For example, -.B \-max 4m -selects 4000000 bytes. If more space is needed, temporary files will be used. -.TP -.BI \-outfile " name" -Send output image to the named file, not to standard output. -.TP -.B \-verbose -Enable debug printout. More -.BR \-v 's -give more output. Also, version information is printed at startup. -.TP -.B \-debug -Same as -.BR \-verbose . -.PP -The -.B \-restart -option inserts extra markers that allow a JPEG decoder to resynchronize after -a transmission error. Without restart markers, any damage to a compressed -file will usually ruin the image from the point of the error to the end of the -image; with restart markers, the damage is usually confined to the portion of -the image up to the next restart marker. Of course, the restart markers -occupy extra space. We recommend -.B \-restart 1 -for images that will be transmitted across unreliable networks such as Usenet. -.PP -The -.B \-smooth -option filters the input to eliminate fine-scale noise. This is often useful -when converting GIF files to JPEG: a moderate smoothing factor of 10 to 50 -gets rid of dithering patterns in the input file, resulting in a smaller JPEG -file and a better-looking image. Too large a smoothing factor will visibly -blur the image, however. -.PP -Switches for wizards: -.TP -.B \-arithmetic -Use arithmetic coding rather than Huffman coding. (Not currently -supported for legal reasons.) -.TP -.B \-baseline -Force a baseline JPEG file to be generated. This clamps quantization values -to 8 bits even at low quality settings. -.TP -.B \-nointerleave -Generate noninterleaved JPEG file (not yet supported). -.TP -.BI \-qtables " file" -Use the quantization tables given in the specified file. The file should -contain one to four tables (64 values each) as plain text. Comments preceded -by '#' may be included in the file. The tables are implicitly numbered -0,1,etc. If -.BI \-quality " N" -is also specified, the values in the file are scaled according to -.BR cjpeg 's -quality scaling curve. -.TP -.BI \-qslots " N[,...]" -Select which quantization table to use for each color component. By default, -table 0 is used for luminance and table 1 for chrominance components. -.TP -.BI \-sample " HxV[,...]" -Set JPEG sampling factors. If you specify fewer H/V pairs than there are -components, the remaining components are set to 1x1 sampling. The default -setting is equivalent to \fB\-sample 2x2\fR. -.PP -The "wizard" switches are intended for experimentation with JPEG. If you -don't know what you are doing, \fBdon't use them\fR. You can easily produce -files with worse image quality and/or poorer compression than you'll get from -the default settings. Furthermore, these switches should not be used when -making files intended for general use, because not all JPEG implementations -will support unusual JPEG parameter settings. -.SH EXAMPLES -.LP -This example compresses the PPM file foo.ppm with a quality factor of -60 and saves the output as foo.jpg: -.IP -.B cjpeg \-quality -.I 60 foo.ppm -.B > -.I foo.jpg -.SH HINTS -Color GIF files are not the ideal input for JPEG; JPEG is really intended for -compressing full-color (24-bit) images. In particular, don't try to convert -cartoons, line drawings, and other images that have only a few distinct -colors. GIF works great on these, JPEG does not. If you want to convert a -GIF to JPEG, you should experiment with -.BR cjpeg 's -.B \-quality -and -.B \-smooth -options to get a satisfactory conversion. -.B \-smooth 10 -or so is often helpful. -.PP -Avoid running an image through a series of JPEG compression/decompression -cycles. Image quality loss will accumulate; after ten or so cycles the image -may be noticeably worse than it was after one cycle. It's best to use a -lossless format while manipulating an image, then convert to JPEG format when -you are ready to file the image away. -.PP -The -.B \-optimize -option to -.B cjpeg -is worth using when you are making a "final" version for posting or archiving. -It's also a win when you are using low quality settings to make very small -JPEG files; the percentage improvement is often a lot more than it is on -larger files. -.SH ENVIRONMENT -.TP -.B JPEGMEM -If this environment variable is set, its value is the default memory limit. -The value is specified as described for the -.B \-maxmemory -switch. -.B JPEGMEM -overrides the default value specified when the program was compiled, and -itself is overridden by an explicit -.BR \-maxmemory . -.SH SEE ALSO -.BR djpeg (1), -.BR rdjpgcom (1), -.BR wrjpgcom (1) -.br -.BR ppm (5), -.BR pgm (5) -.br -Wallace, Gregory K. "The JPEG Still Picture Compression Standard", -Communications of the ACM, April 1991 (vol. 34, no. 4), pp. 30-44. -.SH AUTHOR -Independent JPEG Group -.SH BUGS -Arithmetic coding is not supported for legal reasons. -.PP -Not all variants of BMP and Targa file formats are supported. -.PP -The -.B \-targa -switch is not a bug, it's a feature. (It would be a bug if the Targa format -designers had not been clueless.) -.PP -Still not as fast as we'd like. diff --git a/jpeg/cjpeg.c b/jpeg/cjpeg.c deleted file mode 100644 index 33347f3f42..0000000000 --- a/jpeg/cjpeg.c +++ /dev/null @@ -1,877 +0,0 @@ -/* - * cjpeg.c - * - * Copyright (C) 1991-1994, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains a command-line user interface for the JPEG compressor. - * It should work on any system with Unix- or MS-DOS-style command lines. - * - * Two different command line styles are permitted, depending on the - * compile-time switch TWO_FILE_COMMANDLINE: - * cjpeg [options] inputfile outputfile - * cjpeg [options] [inputfile] - * In the second style, output is always to standard output, which you'd - * normally redirect to a file or pipe to some other program. Input is - * either from a named file or from standard input (typically redirected). - * The second style is convenient on Unix but is unhelpful on systems that - * don't support pipes. Also, you MUST use the first style if your system - * doesn't do binary I/O to stdin/stdout. - * To simplify script writing, the "-outfile" switch is provided. The syntax - * cjpeg [options] -outfile outputfile inputfile - * works regardless of which command line style is used. - */ - -#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ -#define JMAKE_MSG_TABLE -#include "cderror.h" /* create message string table */ -#include "jversion.h" /* for version message */ - -#include <ctype.h> /* to declare isupper(), tolower() */ -#ifdef NEED_SIGNAL_CATCHER -#include <signal.h> /* to declare signal() */ -#endif -#ifdef USE_SETMODE -#include <fcntl.h> /* to declare setmode()'s parameter macros */ -/* If you have setmode() but not <io.h>, just delete this line: */ -#include <io.h> /* to declare setmode() */ -#endif - -#ifdef USE_CCOMMAND /* command-line reader for Macintosh */ -#ifdef __MWERKS__ -#include <SIOUX.h> /* Metrowerks declares it here */ -#endif -#ifdef THINK_C -#include <console.h> /* Think declares it here */ -#endif -#endif - -#ifdef DONT_USE_B_MODE /* define mode parameters for fopen() */ -#define READ_BINARY "r" -#define WRITE_BINARY "w" -#else -#define READ_BINARY "rb" -#define WRITE_BINARY "wb" -#endif - -#ifndef EXIT_FAILURE /* define exit() codes if not provided */ -#define EXIT_FAILURE 1 -#endif -#ifndef EXIT_SUCCESS -#ifdef VMS -#define EXIT_SUCCESS 1 /* VMS is very nonstandard */ -#else -#define EXIT_SUCCESS 0 -#endif -#endif -#ifndef EXIT_WARNING -#ifdef VMS -#define EXIT_WARNING 1 /* VMS is very nonstandard */ -#else -#define EXIT_WARNING 2 -#endif -#endif - - -/* - * This routine determines what format the input file is, - * and selects the appropriate input-reading module. - * - * To determine which family of input formats the file belongs to, - * we may look only at the first byte of the file, since C does not - * guarantee that more than one character can be pushed back with ungetc. - * Looking at additional bytes would require one of these approaches: - * 1) assume we can fseek() the input file (fails for piped input); - * 2) assume we can push back more than one character (works in - * some C implementations, but unportable); - * 3) provide our own buffering (breaks input readers that want to use - * stdio directly, such as the RLE library); - * or 4) don't put back the data, and modify the input_init methods to assume - * they start reading after the start of file (also breaks RLE library). - * #1 is attractive for MS-DOS but is untenable on Unix. - * - * The most portable solution for file types that can't be identified by their - * first byte is to make the user tell us what they are. This is also the - * only approach for "raw" file types that contain only arbitrary values. - * We presently apply this method for Targa files. Most of the time Targa - * files start with 0x00, so we recognize that case. Potentially, however, - * a Targa file could start with any byte value (byte 0 is the length of the - * seldom-used ID field), so we provide a switch to force Targa input mode. - */ - -static boolean is_targa; /* records user -targa switch */ - - -LOCAL cjpeg_source_ptr -select_file_type (j_compress_ptr cinfo, FILE * infile) -{ - int c; - - if (is_targa) { -#ifdef TARGA_SUPPORTED - return jinit_read_targa(cinfo); -#else - ERREXIT(cinfo, JERR_TGA_NOTCOMP); -#endif - } - - if ((c = getc(infile)) == EOF) - ERREXIT(cinfo, JERR_INPUT_EMPTY); - if (ungetc(c, infile) == EOF) - ERREXIT(cinfo, JERR_UNGETC_FAILED); - - switch (c) { -#ifdef BMP_SUPPORTED - case 'B': - return jinit_read_bmp(cinfo); -#endif -#ifdef GIF_SUPPORTED - case 'G': - return jinit_read_gif(cinfo); -#endif -#ifdef PPM_SUPPORTED - case 'P': - return jinit_read_ppm(cinfo); -#endif -#ifdef RLE_SUPPORTED - case 'R': - return jinit_read_rle(cinfo); -#endif -#ifdef TARGA_SUPPORTED - case 0x00: - return jinit_read_targa(cinfo); -#endif - default: - ERREXIT(cinfo, JERR_UNKNOWN_FORMAT); - break; - } - - return NULL; /* suppress compiler warnings */ -} - - -/* - * Signal catcher to ensure that temporary files are removed before aborting. - * NB: for Amiga Manx C this is actually a global routine named _abort(); - * we put "#define signal_catcher _abort" in jconfig.h. Talk about bogus... - */ - -#ifdef NEED_SIGNAL_CATCHER - -static j_common_ptr sig_cinfo; - -GLOBAL void -signal_catcher (int signum) -{ - if (sig_cinfo != NULL) { - if (sig_cinfo->err != NULL) /* turn off trace output */ - sig_cinfo->err->trace_level = 0; - jpeg_destroy(sig_cinfo); /* clean up memory allocation & temp files */ - } - exit(EXIT_FAILURE); -} - -#endif - - -/* - * Optional routine to display a percent-done figure on stderr. - */ - -#ifdef PROGRESS_REPORT - -METHODDEF void -progress_monitor (j_common_ptr cinfo) -{ - cd_progress_ptr prog = (cd_progress_ptr) cinfo->progress; - int total_passes = prog->pub.total_passes + prog->total_extra_passes; - int percent_done = (int) (prog->pub.pass_counter*100L/prog->pub.pass_limit); - - if (percent_done != prog->percent_done) { - prog->percent_done = percent_done; - if (total_passes > 1) { - fprintf(stderr, "\rPass %d/%d: %3d%% ", - prog->pub.completed_passes + prog->completed_extra_passes + 1, - total_passes, percent_done); - } else { - fprintf(stderr, "\r %3d%% ", percent_done); - } - fflush(stderr); - } -} - -#endif - - -/* - * Argument-parsing code. - * The switch parser is designed to be useful with DOS-style command line - * syntax, ie, intermixed switches and file names, where only the switches - * to the left of a given file name affect processing of that file. - * The main program in this file doesn't actually use this capability... - */ - - -static const char * progname; /* program name for error messages */ -static char * outfilename; /* for -outfile switch */ - - -LOCAL void -usage (void) -/* complain about bad command line */ -{ - fprintf(stderr, "usage: %s [switches] ", progname); -#ifdef TWO_FILE_COMMANDLINE - fprintf(stderr, "inputfile outputfile\n"); -#else - fprintf(stderr, "[inputfile]\n"); -#endif - - fprintf(stderr, "Switches (names may be abbreviated):\n"); - fprintf(stderr, " -quality N Compression quality (0..100; 5-95 is useful range)\n"); - fprintf(stderr, " -grayscale Create monochrome JPEG file\n"); -#ifdef ENTROPY_OPT_SUPPORTED - fprintf(stderr, " -optimize Optimize Huffman table (smaller file, but slow compression)\n"); -#endif -#ifdef TARGA_SUPPORTED - fprintf(stderr, " -targa Input file is Targa format (usually not needed)\n"); -#endif - fprintf(stderr, "Switches for advanced users:\n"); -#ifdef DCT_ISLOW_SUPPORTED - fprintf(stderr, " -dct int Use integer DCT method%s\n", - (JDCT_DEFAULT == JDCT_ISLOW ? " (default)" : "")); -#endif -#ifdef DCT_IFAST_SUPPORTED - fprintf(stderr, " -dct fast Use fast integer DCT (less accurate)%s\n", - (JDCT_DEFAULT == JDCT_IFAST ? " (default)" : "")); -#endif -#ifdef DCT_FLOAT_SUPPORTED - fprintf(stderr, " -dct float Use floating-point DCT method%s\n", - (JDCT_DEFAULT == JDCT_FLOAT ? " (default)" : "")); -#endif - fprintf(stderr, " -restart N Set restart interval in rows, or in blocks with B\n"); -#ifdef INPUT_SMOOTHING_SUPPORTED - fprintf(stderr, " -smooth N Smooth dithered input (N=1..100 is strength)\n"); -#endif - fprintf(stderr, " -maxmemory N Maximum memory to use (in kbytes)\n"); - fprintf(stderr, " -outfile name Specify name for output file\n"); - fprintf(stderr, " -verbose or -debug Emit debug output\n"); - fprintf(stderr, "Switches for wizards:\n"); -#ifdef C_ARITH_CODING_SUPPORTED - fprintf(stderr, " -arithmetic Use arithmetic coding\n"); -#endif - fprintf(stderr, " -baseline Force baseline output\n"); -#ifdef C_MULTISCAN_FILES_SUPPORTED - fprintf(stderr, " -nointerleave Create noninterleaved JPEG file\n"); -#endif - fprintf(stderr, " -qtables file Use quantization tables given in file\n"); - fprintf(stderr, " -qslots N[,...] Set component quantization tables\n"); - fprintf(stderr, " -sample HxV[,...] Set component sampling factors\n"); - exit(EXIT_FAILURE); -} - - -LOCAL boolean -keymatch (char * arg, const char * keyword, int minchars) -/* Case-insensitive matching of (possibly abbreviated) keyword switches. */ -/* keyword is the constant keyword (must be lower case already), */ -/* minchars is length of minimum legal abbreviation. */ -{ - register int ca, ck; - register int nmatched = 0; - - while ((ca = *arg++) != '\0') { - if ((ck = *keyword++) == '\0') - return FALSE; /* arg longer than keyword, no good */ - if (isupper(ca)) /* force arg to lcase (assume ck is already) */ - ca = tolower(ca); - if (ca != ck) - return FALSE; /* no good */ - nmatched++; /* count matched characters */ - } - /* reached end of argument; fail if it's too short for unique abbrev */ - if (nmatched < minchars) - return FALSE; - return TRUE; /* A-OK */ -} - - -LOCAL int -qt_getc (FILE * file) -/* Read next char, skipping over any comments (# to end of line) */ -/* A comment/newline sequence is returned as a newline */ -{ - register int ch; - - ch = getc(file); - if (ch == '#') { - do { - ch = getc(file); - } while (ch != '\n' && ch != EOF); - } - return ch; -} - - -LOCAL long -read_qt_integer (FILE * file) -/* Read an unsigned decimal integer from a quantization-table file */ -/* Swallows one trailing character after the integer */ -{ - register int ch; - register long val; - - /* Skip any leading whitespace, detect EOF */ - do { - ch = qt_getc(file); - if (ch == EOF) - return EOF; - } while (isspace(ch)); - - if (! isdigit(ch)) { - fprintf(stderr, "%s: bogus data in quantization file\n", progname); - exit(EXIT_FAILURE); - } - - val = ch - '0'; - while (ch = qt_getc(file), isdigit(ch)) { - val *= 10; - val += ch - '0'; - } - return val; -} - - -LOCAL void -read_quant_tables (j_compress_ptr cinfo, char * filename, int scale_factor, - boolean force_baseline) -/* Read a set of quantization tables from the specified file. - * The file is plain ASCII text: decimal numbers with whitespace between. - * Comments preceded by '#' may be included in the file. - * There may be one to NUM_QUANT_TBLS tables in the file, each of 64 values. - * The tables are implicitly numbered 0,1,etc. - * NOTE: does not affect the qslots mapping, which will default to selecting - * table 0 for luminance (or primary) components, 1 for chrominance components. - * You must use -qslots if you want a different component->table mapping. - */ -{ - /* ZIG[i] is the zigzag-order position of the i'th element of a DCT block */ - /* read in natural order (left to right, top to bottom). */ - static const int ZIG[DCTSIZE2] = { - 0, 1, 5, 6, 14, 15, 27, 28, - 2, 4, 7, 13, 16, 26, 29, 42, - 3, 8, 12, 17, 25, 30, 41, 43, - 9, 11, 18, 24, 31, 40, 44, 53, - 10, 19, 23, 32, 39, 45, 52, 54, - 20, 22, 33, 38, 46, 51, 55, 60, - 21, 34, 37, 47, 50, 56, 59, 61, - 35, 36, 48, 49, 57, 58, 62, 63 - }; - FILE * fp; - int tblno, i; - long val; - unsigned int table[DCTSIZE2]; - - if ((fp = fopen(filename, "r")) == NULL) { - fprintf(stderr, "%s: can't open %s\n", progname, filename); - exit(EXIT_FAILURE); - } - tblno = 0; - - while ((val = read_qt_integer(fp)) != EOF) { /* read 1st element of table */ - if (tblno >= NUM_QUANT_TBLS) { - fprintf(stderr, "%s: too many tables in file %s\n", progname, filename); - exit(EXIT_FAILURE); - } - table[0] = (unsigned int) val; - for (i = 1; i < DCTSIZE2; i++) { - if ((val = read_qt_integer(fp)) == EOF) { - fprintf(stderr, "%s: incomplete table in file %s\n", progname, filename); - exit(EXIT_FAILURE); - } - table[ZIG[i]] = (unsigned int) val; - } - jpeg_add_quant_table(cinfo, tblno, table, scale_factor, force_baseline); - tblno++; - } - - fclose(fp); -} - - -LOCAL void -set_quant_slots (j_compress_ptr cinfo, char *arg) -/* Process a quantization-table-selectors parameter string, of the form - * N[,N,...] - * If there are more components than parameters, the last value is replicated. - */ -{ - int val = 0; /* default table # */ - int ci; - char ch; - - for (ci = 0; ci < MAX_COMPONENTS; ci++) { - if (*arg) { - ch = ','; /* if not set by sscanf, will be ',' */ - if (sscanf(arg, "%d%c", &val, &ch) < 1) - usage(); - if (ch != ',') - usage(); /* syntax check */ - if (val < 0 || val >= NUM_QUANT_TBLS) { - fprintf(stderr, "JPEG quantization tables are numbered 0..%d\n", - NUM_QUANT_TBLS-1); - exit(EXIT_FAILURE); - } - cinfo->comp_info[ci].quant_tbl_no = val; - while (*arg && *arg++ != ',') /* advance to next segment of arg string */ - ; - } else { - /* reached end of parameter, set remaining components to last table */ - cinfo->comp_info[ci].quant_tbl_no = val; - } - } -} - - -LOCAL void -set_sample_factors (j_compress_ptr cinfo, char *arg) -/* Process a sample-factors parameter string, of the form - * HxV[,HxV,...] - * If there are more components than parameters, "1x1" is assumed. - */ -{ - int ci, val1, val2; - char ch1, ch2; - - for (ci = 0; ci < MAX_COMPONENTS; ci++) { - if (*arg) { - ch2 = ','; /* if not set by sscanf, will be ',' */ - if (sscanf(arg, "%d%c%d%c", &val1, &ch1, &val2, &ch2) < 3) - usage(); - if ((ch1 != 'x' && ch1 != 'X') || ch2 != ',') - usage(); /* syntax check */ - if (val1 <= 0 || val1 > 4 || val2 <= 0 || val2 > 4) { - fprintf(stderr, "JPEG sampling factors must be 1..4\n"); - exit(EXIT_FAILURE); - } - cinfo->comp_info[ci].h_samp_factor = val1; - cinfo->comp_info[ci].v_samp_factor = val2; - while (*arg && *arg++ != ',') /* advance to next segment of arg string */ - ; - } else { - /* reached end of parameter, set remaining components to 1x1 sampling */ - cinfo->comp_info[ci].h_samp_factor = 1; - cinfo->comp_info[ci].v_samp_factor = 1; - } - } -} - - -LOCAL int -parse_switches (j_compress_ptr cinfo, int argc, char **argv, - int last_file_arg_seen, boolean for_real) -/* Parse optional switches. - * Returns argv[] index of first file-name argument (== argc if none). - * Any file names with indexes <= last_file_arg_seen are ignored; - * they have presumably been processed in a previous iteration. - * (Pass 0 for last_file_arg_seen on the first or only iteration.) - * for_real is FALSE on the first (dummy) pass; we may skip any expensive - * processing. - */ -{ - int argn; - char * arg; - int quality; /* -quality parameter */ - int q_scale_factor; /* scaling percentage for -qtables */ - boolean force_baseline; - char * qtablefile = NULL; /* saves -qtables filename if any */ - char * qslotsarg = NULL; /* saves -qslots parm if any */ - char * samplearg = NULL; /* saves -sample parm if any */ - - /* Set up default JPEG parameters. */ - /* Note that default -quality level need not, and does not, - * match the default scaling for an explicit -qtables argument. - */ - quality = 75; /* default -quality value */ - q_scale_factor = 100; /* default to no scaling for -qtables */ - force_baseline = FALSE; /* by default, allow 16-bit quantizers */ - is_targa = FALSE; - outfilename = NULL; - cinfo->err->trace_level = 0; - - /* Scan command line options, adjust parameters */ - - for (argn = 1; argn < argc; argn++) { - arg = argv[argn]; - if (*arg != '-') { - /* Not a switch, must be a file name argument */ - if (argn <= last_file_arg_seen) { - outfilename = NULL; /* -outfile applies to just one input file */ - continue; /* ignore this name if previously processed */ - } - break; /* else done parsing switches */ - } - arg++; /* advance past switch marker character */ - - if (keymatch(arg, "arithmetic", 1)) { - /* Use arithmetic coding. */ -#ifdef C_ARITH_CODING_SUPPORTED - cinfo->arith_code = TRUE; -#else - fprintf(stderr, "%s: sorry, arithmetic coding not supported\n", - progname); - exit(EXIT_FAILURE); -#endif - - } else if (keymatch(arg, "baseline", 1)) { - /* Force baseline output (8-bit quantizer values). */ - force_baseline = TRUE; - - } else if (keymatch(arg, "dct", 2)) { - /* Select DCT algorithm. */ - if (++argn >= argc) /* advance to next argument */ - usage(); - if (keymatch(argv[argn], "int", 1)) { - cinfo->dct_method = JDCT_ISLOW; - } else if (keymatch(argv[argn], "fast", 2)) { - cinfo->dct_method = JDCT_IFAST; - } else if (keymatch(argv[argn], "float", 2)) { - cinfo->dct_method = JDCT_FLOAT; - } else - usage(); - - } else if (keymatch(arg, "debug", 1) || keymatch(arg, "verbose", 1)) { - /* Enable debug printouts. */ - /* On first -d, print version identification */ - static boolean printed_version = FALSE; - - if (! printed_version) { - fprintf(stderr, "Independent JPEG Group's CJPEG, version %s\n%s\n", - JVERSION, JCOPYRIGHT); - printed_version = TRUE; - } - cinfo->err->trace_level++; - - } else if (keymatch(arg, "grayscale", 2) || keymatch(arg, "greyscale",2)) { - /* Force a monochrome JPEG file to be generated. */ - jpeg_set_colorspace(cinfo, JCS_GRAYSCALE); - - } else if (keymatch(arg, "maxmemory", 3)) { - /* Maximum memory in Kb (or Mb with 'm'). */ - long lval; - char ch = 'x'; - - if (++argn >= argc) /* advance to next argument */ - usage(); - if (sscanf(argv[argn], "%ld%c", &lval, &ch) < 1) - usage(); - if (ch == 'm' || ch == 'M') - lval *= 1000L; - cinfo->mem->max_memory_to_use = lval * 1000L; - - } else if (keymatch(arg, "nointerleave", 3)) { - /* Create noninterleaved file. */ -#ifdef C_MULTISCAN_FILES_SUPPORTED - cinfo->interleave = FALSE; -#else - fprintf(stderr, "%s: sorry, multiple-scan support was not compiled\n", - progname); - exit(EXIT_FAILURE); -#endif - - } else if (keymatch(arg, "optimize", 1) || keymatch(arg, "optimise", 1)) { - /* Enable entropy parm optimization. */ -#ifdef ENTROPY_OPT_SUPPORTED - cinfo->optimize_coding = TRUE; -#else - fprintf(stderr, "%s: sorry, entropy optimization was not compiled\n", - progname); - exit(EXIT_FAILURE); -#endif - - } else if (keymatch(arg, "outfile", 4)) { - /* Set output file name. */ - if (++argn >= argc) /* advance to next argument */ - usage(); - outfilename = argv[argn]; /* save it away for later use */ - - } else if (keymatch(arg, "quality", 1)) { - /* Quality factor (quantization table scaling factor). */ - if (++argn >= argc) /* advance to next argument */ - usage(); - if (sscanf(argv[argn], "%d", &quality) != 1) - usage(); - /* Change scale factor in case -qtables is present. */ - q_scale_factor = jpeg_quality_scaling(quality); - - } else if (keymatch(arg, "qslots", 2)) { - /* Quantization table slot numbers. */ - if (++argn >= argc) /* advance to next argument */ - usage(); - qslotsarg = argv[argn]; - /* Must delay setting qslots until after we have processed any - * colorspace-determining switches, since jpeg_set_colorspace sets - * default quant table numbers. - */ - - } else if (keymatch(arg, "qtables", 2)) { - /* Quantization tables fetched from file. */ - if (++argn >= argc) /* advance to next argument */ - usage(); - qtablefile = argv[argn]; - /* We postpone actually reading the file in case -quality comes later. */ - - } else if (keymatch(arg, "restart", 1)) { - /* Restart interval in MCU rows (or in MCUs with 'b'). */ - long lval; - char ch = 'x'; - - if (++argn >= argc) /* advance to next argument */ - usage(); - if (sscanf(argv[argn], "%ld%c", &lval, &ch) < 1) - usage(); - if (lval < 0 || lval > 65535L) - usage(); - if (ch == 'b' || ch == 'B') { - cinfo->restart_interval = (unsigned int) lval; - cinfo->restart_in_rows = 0; /* else prior '-restart n' overrides me */ - } else { - cinfo->restart_in_rows = (int) lval; - /* restart_interval will be computed during startup */ - } - - } else if (keymatch(arg, "sample", 2)) { - /* Set sampling factors. */ - if (++argn >= argc) /* advance to next argument */ - usage(); - samplearg = argv[argn]; - /* Must delay setting sample factors until after we have processed any - * colorspace-determining switches, since jpeg_set_colorspace sets - * default sampling factors. - */ - - } else if (keymatch(arg, "smooth", 2)) { - /* Set input smoothing factor. */ - int val; - - if (++argn >= argc) /* advance to next argument */ - usage(); - if (sscanf(argv[argn], "%d", &val) != 1) - usage(); - if (val < 0 || val > 100) - usage(); - cinfo->smoothing_factor = val; - - } else if (keymatch(arg, "targa", 1)) { - /* Input file is Targa format. */ - is_targa = TRUE; - - } else { - usage(); /* bogus switch */ - } - } - - /* Post-switch-scanning cleanup */ - - if (for_real) { - - /* Set quantization tables for selected quality. */ - /* Some or all may be overridden if -qtables is present. */ - jpeg_set_quality(cinfo, quality, force_baseline); - - if (qtablefile != NULL) /* process -qtables if it was present */ - read_quant_tables(cinfo, qtablefile, q_scale_factor, force_baseline); - - if (qslotsarg != NULL) /* process -qslots if it was present */ - set_quant_slots(cinfo, qslotsarg); - - if (samplearg != NULL) /* process -sample if it was present */ - set_sample_factors(cinfo, samplearg); - - } - - return argn; /* return index of next arg (file name) */ -} - - -/* - * The main program. - */ - -GLOBAL int -main (int argc, char **argv) -{ - struct jpeg_compress_struct cinfo; - struct jpeg_error_mgr jerr; -#ifdef PROGRESS_REPORT - struct cdjpeg_progress_mgr progress; -#endif - int file_index; - cjpeg_source_ptr src_mgr; - FILE * input_file; - FILE * output_file; - JDIMENSION num_scanlines; - - /* On Mac, fetch a command line. */ -#ifdef USE_CCOMMAND - argc = ccommand(&argv); -#endif - - progname = argv[0]; - if (progname == NULL || progname[0] == 0) - progname = "cjpeg"; /* in case C library doesn't provide it */ - - /* Initialize the JPEG compression object with default error handling. */ - cinfo.err = jpeg_std_error(&jerr); - jpeg_create_compress(&cinfo); - /* Add some application-specific error messages (from cderror.h) */ - jerr.addon_message_table = addon_message_table; - jerr.first_addon_message = JMSG_FIRSTADDONCODE; - jerr.last_addon_message = JMSG_LASTADDONCODE; - - /* Now safe to enable signal catcher. */ -#ifdef NEED_SIGNAL_CATCHER - sig_cinfo = (j_common_ptr) &cinfo; - signal(SIGINT, signal_catcher); -#ifdef SIGTERM /* not all systems have SIGTERM */ - signal(SIGTERM, signal_catcher); -#endif -#endif - - /* Initialize JPEG parameters. - * Much of this may be overridden later. - * In particular, we don't yet know the input file's color space, - * but we need to provide some value for jpeg_set_defaults() to work. - */ - - cinfo.in_color_space = JCS_RGB; /* arbitrary guess */ - jpeg_set_defaults(&cinfo); - - /* Scan command line to find file names. - * It is convenient to use just one switch-parsing routine, but the switch - * values read here are ignored; we will rescan the switches after opening - * the input file. - */ - - file_index = parse_switches(&cinfo, argc, argv, 0, FALSE); - -#ifdef TWO_FILE_COMMANDLINE - /* Must have either -outfile switch or explicit output file name */ - if (outfilename == NULL) { - if (file_index != argc-2) { - fprintf(stderr, "%s: must name one input and one output file\n", - progname); - usage(); - } - outfilename = argv[file_index+1]; - } else { - if (file_index != argc-1) { - fprintf(stderr, "%s: must name one input and one output file\n", - progname); - usage(); - } - } -#else - /* Unix style: expect zero or one file name */ - if (file_index < argc-1) { - fprintf(stderr, "%s: only one input file\n", progname); - usage(); - } -#endif /* TWO_FILE_COMMANDLINE */ - - /* Open the input file. */ - if (file_index < argc) { - if ((input_file = fopen(argv[file_index], READ_BINARY)) == NULL) { - fprintf(stderr, "%s: can't open %s\n", progname, argv[file_index]); - exit(EXIT_FAILURE); - } - } else { - /* default input file is stdin */ -#ifdef USE_SETMODE /* need to hack file mode? */ - setmode(fileno(stdin), O_BINARY); -#endif -#ifdef USE_FDOPEN /* need to re-open in binary mode? */ - if ((input_file = fdopen(fileno(stdin), READ_BINARY)) == NULL) { - fprintf(stderr, "%s: can't open stdin\n", progname); - exit(EXIT_FAILURE); - } -#else - input_file = stdin; -#endif - } - - /* Open the output file. */ - if (outfilename != NULL) { - if ((output_file = fopen(outfilename, WRITE_BINARY)) == NULL) { - fprintf(stderr, "%s: can't open %s\n", progname, outfilename); - exit(EXIT_FAILURE); - } - } else { - /* default output file is stdout */ -#ifdef USE_SETMODE /* need to hack file mode? */ - setmode(fileno(stdout), O_BINARY); -#endif -#ifdef USE_FDOPEN /* need to re-open in binary mode? */ - if ((output_file = fdopen(fileno(stdout), WRITE_BINARY)) == NULL) { - fprintf(stderr, "%s: can't open stdout\n", progname); - exit(EXIT_FAILURE); - } -#else - output_file = stdout; -#endif - } - -#ifdef PROGRESS_REPORT - /* Enable progress display, unless trace output is on */ - if (jerr.trace_level == 0) { - progress.pub.progress_monitor = progress_monitor; - progress.completed_extra_passes = 0; - progress.total_extra_passes = 0; - progress.percent_done = -1; - cinfo.progress = &progress.pub; - } -#endif - - /* Figure out the input file format, and set up to read it. */ - src_mgr = select_file_type(&cinfo, input_file); - src_mgr->input_file = input_file; - - /* Read the input file header to obtain file size & colorspace. */ - (*src_mgr->start_input) (&cinfo, src_mgr); - - /* Now that we know input colorspace, fix colorspace-dependent defaults */ - jpeg_default_colorspace(&cinfo); - - /* Adjust default compression parameters by re-parsing the options */ - file_index = parse_switches(&cinfo, argc, argv, 0, TRUE); - - /* Specify data destination for compression */ - jpeg_stdio_dest(&cinfo, output_file); - - /* Start compressor */ - jpeg_start_compress(&cinfo, TRUE); - - /* Process data */ - while (cinfo.next_scanline < cinfo.image_height) { - num_scanlines = (*src_mgr->get_pixel_rows) (&cinfo, src_mgr); - (void) jpeg_write_scanlines(&cinfo, src_mgr->buffer, num_scanlines); - } - - /* Finish compression and release memory */ - (*src_mgr->finish_input) (&cinfo, src_mgr); - jpeg_finish_compress(&cinfo); - jpeg_destroy_compress(&cinfo); - -#ifdef PROGRESS_REPORT - /* Clear away progress display */ - if (jerr.trace_level == 0) { - fprintf(stderr, "\r \r"); - fflush(stderr); - } -#endif - - /* All done. */ - exit(jerr.num_warnings ? EXIT_WARNING : EXIT_SUCCESS); - return 0; /* suppress no-return-value warnings */ -} diff --git a/jpeg/ckconfig.c b/jpeg/ckconfig.c deleted file mode 100644 index 34baf795b0..0000000000 --- a/jpeg/ckconfig.c +++ /dev/null @@ -1,402 +0,0 @@ -/* - * ckconfig.c - * - * Copyright (C) 1991-1994, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - */ - -/* - * This program is intended to help you determine how to configure the JPEG - * software for installation on a particular system. The idea is to try to - * compile and execute this program. If your compiler fails to compile the - * program, make changes as indicated in the comments below. Once you can - * compile the program, run it, and it will produce a "jconfig.h" file for - * your system. - * - * As a general rule, each time you try to compile this program, - * pay attention only to the *first* error message you get from the compiler. - * Many C compilers will issue lots of spurious error messages once they - * have gotten confused. Go to the line indicated in the first error message, - * and read the comments preceding that line to see what to change. - * - * Almost all of the edits you may need to make to this program consist of - * changing a line that reads "#define SOME_SYMBOL" to "#undef SOME_SYMBOL", - * or vice versa. This is called defining or undefining that symbol. - */ - - -/* First we must see if your system has the include files we need. - * We start out with the assumption that your system has all the ANSI-standard - * include files. If you get any error trying to include one of these files, - * undefine the corresponding HAVE_xxx symbol. - */ - -#define HAVE_STDDEF_H /* replace 'define' by 'undef' if error here */ -#ifdef HAVE_STDDEF_H /* next line will be skipped if you undef... */ -#include <stddef.h> -#endif - -#define HAVE_STDLIB_H /* same thing for stdlib.h */ -#ifdef HAVE_STDLIB_H -#include <stdlib.h> -#endif - -#include <stdio.h> /* If you ain't got this, you ain't got C. */ - -/* We have to see if your string functions are defined by - * strings.h (old BSD convention) or string.h (everybody else). - * We try the non-BSD convention first; define NEED_BSD_STRINGS - * if the compiler says it can't find string.h. - */ - -#undef NEED_BSD_STRINGS - -#ifdef NEED_BSD_STRINGS -#include <strings.h> -#else -#include <string.h> -#endif - -/* On some systems (especially older Unix machines), type size_t is - * defined only in the include file <sys/types.h>. If you get a failure - * on the size_t test below, try defining NEED_SYS_TYPES_H. - */ - -#undef NEED_SYS_TYPES_H /* start by assuming we don't need it */ -#ifdef NEED_SYS_TYPES_H -#include <sys/types.h> -#endif - - -/* Usually type size_t is defined in one of the include files we've included - * above. If not, you'll get an error on the "typedef size_t my_size_t;" line. - * In that case, first try defining NEED_SYS_TYPES_H just above. - * If that doesn't work, you'll have to search through your system library - * to figure out which include file defines "size_t". Look for a line that - * says "typedef something-or-other size_t;". Then, change the line below - * that says "#include <someincludefile.h>" to instead include the file - * you found size_t in, and define NEED_SPECIAL_INCLUDE. If you can't find - * type size_t anywhere, try replacing "#include <someincludefile.h>" with - * "typedef unsigned int size_t;". - */ - -#undef NEED_SPECIAL_INCLUDE /* assume we DON'T need it, for starters */ - -#ifdef NEED_SPECIAL_INCLUDE -#include <someincludefile.h> -#endif - -typedef size_t my_size_t; /* The payoff: do we have size_t now? */ - - -/* The next question is whether your compiler supports ANSI-style function - * prototypes. You need to know this in order to choose between using - * makefile.ansi and using makefile.unix. - * The #define line below is set to assume you have ANSI function prototypes. - * If you get an error in this group of lines, undefine HAVE_PROTOTYPES. - */ - -#define HAVE_PROTOTYPES - -#ifdef HAVE_PROTOTYPES -int testfunction (int arg1, int * arg2); /* check prototypes */ - -struct methods_struct { /* check method-pointer declarations */ - int (*error_exit) (char *msgtext); - int (*trace_message) (char *msgtext); - int (*another_method) (void); -}; - -int testfunction (int arg1, int * arg2) /* check definitions */ -{ - return arg2[arg1]; -} - -int test2function (void) /* check void arg list */ -{ - return 0; -} -#endif - - -/* Now we want to find out if your compiler knows what "unsigned char" means. - * If you get an error on the "unsigned char un_char;" line, - * then undefine HAVE_UNSIGNED_CHAR. - */ - -#define HAVE_UNSIGNED_CHAR - -#ifdef HAVE_UNSIGNED_CHAR -unsigned char un_char; -#endif - - -/* Now we want to find out if your compiler knows what "unsigned short" means. - * If you get an error on the "unsigned short un_short;" line, - * then undefine HAVE_UNSIGNED_SHORT. - */ - -#define HAVE_UNSIGNED_SHORT - -#ifdef HAVE_UNSIGNED_SHORT -unsigned short un_short; -#endif - - -/* Now we want to find out if your compiler understands type "void". - * If you get an error anywhere in here, undefine HAVE_VOID. - */ - -#define HAVE_VOID - -#ifdef HAVE_VOID -/* Caution: a C++ compiler will insist on complete prototypes */ -typedef void * void_ptr; /* check void * */ -#ifdef HAVE_PROTOTYPES /* check ptr to function returning void */ -typedef void (*void_func) (int a, int b); -#else -typedef void (*void_func) (); -#endif - -#ifdef HAVE_PROTOTYPES /* check void function result */ -void test3function (void_ptr arg1, void_func arg2) -#else -void test3function (arg1, arg2) - void_ptr arg1; - void_func arg2; -#endif -{ - char * locptr = (char *) arg1; /* check casting to and from void * */ - arg1 = (void *) locptr; - (*arg2) (1, 2); /* check call of fcn returning void */ -} -#endif - - -/* Now we want to find out if your compiler knows what "const" means. - * If you get an error here, undefine HAVE_CONST. - */ - -#define HAVE_CONST - -#ifdef HAVE_CONST -static const int carray[3] = {1, 2, 3}; - -#ifdef HAVE_PROTOTYPES -int test4function (const int arg1) -#else -int test4function (arg1) - const int arg1; -#endif -{ - return carray[arg1]; -} -#endif - - -/* If you get an error or warning about this structure definition, - * define INCOMPLETE_TYPES_BROKEN. - */ - -#undef INCOMPLETE_TYPES_BROKEN - -#ifndef INCOMPLETE_TYPES_BROKEN -typedef struct undefined_structure * undef_struct_ptr; -#endif - - -/* If you get an error about duplicate names, - * define NEED_SHORT_EXTERNAL_NAMES. - */ - -#undef NEED_SHORT_EXTERNAL_NAMES - -#ifndef NEED_SHORT_EXTERNAL_NAMES - -int possibly_duplicate_function () -{ - return 0; -} - -int possibly_dupli_function () -{ - return 1; -} - -#endif - - - -/************************************************************************ - * OK, that's it. You should not have to change anything beyond this - * point in order to compile and execute this program. (You might get - * some warnings, but you can ignore them.) - * When you run the program, it will make a couple more tests that it - * can do automatically, and then it will create jconfig.h and print out - * any additional suggestions it has. - ************************************************************************ - */ - - -#ifdef HAVE_PROTOTYPES -int is_char_signed (int arg) -#else -int is_char_signed (arg) - int arg; -#endif -{ - if (arg == 189) { /* expected result for unsigned char */ - return 0; /* type char is unsigned */ - } - else if (arg != -67) { /* expected result for signed char */ - printf("Hmm, it seems 'char' is not eight bits wide on your machine.\n"); - printf("I fear the JPEG software will not work at all.\n\n"); - } - return 1; /* assume char is signed otherwise */ -} - - -#ifdef HAVE_PROTOTYPES -int is_shifting_signed (long arg) -#else -int is_shifting_signed (arg) - long arg; -#endif -/* See whether right-shift on a long is signed or not. */ -{ - long res = arg >> 4; - - if (res == -0x7F7E80CL) { /* expected result for signed shift */ - return 1; /* right shift is signed */ - } - /* see if unsigned-shift hack will fix it. */ - /* we can't just test exact value since it depends on width of long... */ - res |= (~0L) << (32-4); - if (res == -0x7F7E80CL) { /* expected result now? */ - return 0; /* right shift is unsigned */ - } - printf("Right shift isn't acting as I expect it to.\n"); - printf("I fear the JPEG software will not work at all.\n\n"); - return 0; /* try it with unsigned anyway */ -} - - -#ifdef HAVE_PROTOTYPES -int main (int argc, char ** argv) -#else -int main (argc, argv) - int argc; - char ** argv; -#endif -{ - char signed_char_check = (char) (-67); - FILE *outfile; - - /* Attempt to write jconfig.h */ - if ((outfile = fopen("jconfig.h", "w")) == NULL) { - printf("Failed to write jconfig.h\n"); - return 1; - } - - /* Write out all the info */ - fprintf(outfile, "/* jconfig.h --- generated by ckconfig.c */\n"); - fprintf(outfile, "/* see jconfig.doc for explanations */\n\n"); -#ifdef HAVE_PROTOTYPES - fprintf(outfile, "#define HAVE_PROTOTYPES\n"); -#else - fprintf(outfile, "#undef HAVE_PROTOTYPES\n"); -#endif -#ifdef HAVE_UNSIGNED_CHAR - fprintf(outfile, "#define HAVE_UNSIGNED_CHAR\n"); -#else - fprintf(outfile, "#undef HAVE_UNSIGNED_CHAR\n"); -#endif -#ifdef HAVE_UNSIGNED_SHORT - fprintf(outfile, "#define HAVE_UNSIGNED_SHORT\n"); -#else - fprintf(outfile, "#undef HAVE_UNSIGNED_SHORT\n"); -#endif -#ifdef HAVE_VOID - fprintf(outfile, "/* #define void char */\n"); -#else - fprintf(outfile, "#define void char\n"); -#endif -#ifdef HAVE_CONST - fprintf(outfile, "/* #define const */\n"); -#else - fprintf(outfile, "#define const\n"); -#endif - if (is_char_signed((int) signed_char_check)) - fprintf(outfile, "#undef CHAR_IS_UNSIGNED\n"); - else - fprintf(outfile, "#define CHAR_IS_UNSIGNED\n"); -#ifdef HAVE_STDDEF_H - fprintf(outfile, "#define HAVE_STDDEF_H\n"); -#else - fprintf(outfile, "#undef HAVE_STDDEF_H\n"); -#endif -#ifdef HAVE_STDLIB_H - fprintf(outfile, "#define HAVE_STDLIB_H\n"); -#else - fprintf(outfile, "#undef HAVE_STDLIB_H\n"); -#endif -#ifdef NEED_BSD_STRINGS - fprintf(outfile, "#define NEED_BSD_STRINGS\n"); -#else - fprintf(outfile, "#undef NEED_BSD_STRINGS\n"); -#endif -#ifdef NEED_SYS_TYPES_H - fprintf(outfile, "#define NEED_SYS_TYPES_H\n"); -#else - fprintf(outfile, "#undef NEED_SYS_TYPES_H\n"); -#endif - fprintf(outfile, "#undef NEED_FAR_POINTERS\n"); -#ifdef NEED_SHORT_EXTERNAL_NAMES - fprintf(outfile, "#define NEED_SHORT_EXTERNAL_NAMES\n"); -#else - fprintf(outfile, "#undef NEED_SHORT_EXTERNAL_NAMES\n"); -#endif -#ifdef INCOMPLETE_TYPES_BROKEN - fprintf(outfile, "#define INCOMPLETE_TYPES_BROKEN\n"); -#else - fprintf(outfile, "#undef INCOMPLETE_TYPES_BROKEN\n"); -#endif - fprintf(outfile, "\n#ifdef JPEG_INTERNALS\n\n"); - if (is_shifting_signed(-0x7F7E80B1L)) - fprintf(outfile, "#undef RIGHT_SHIFT_IS_UNSIGNED\n"); - else - fprintf(outfile, "#define RIGHT_SHIFT_IS_UNSIGNED\n"); - fprintf(outfile, "\n#endif /* JPEG_INTERNALS */\n"); - fprintf(outfile, "\n#ifdef JPEG_CJPEG_DJPEG\n\n"); - fprintf(outfile, "#define BMP_SUPPORTED /* BMP image file format */\n"); - fprintf(outfile, "#define GIF_SUPPORTED /* GIF image file format */\n"); - fprintf(outfile, "#define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */\n"); - fprintf(outfile, "#undef RLE_SUPPORTED /* Utah RLE image file format */\n"); - fprintf(outfile, "#define TARGA_SUPPORTED /* Targa image file format */\n\n"); - fprintf(outfile, "#undef TWO_FILE_COMMANDLINE /* You may need this on non-Unix systems */\n"); - fprintf(outfile, "#undef NEED_SIGNAL_CATCHER /* Define this if you use jmemname.c */\n"); - fprintf(outfile, "#undef DONT_USE_B_MODE\n"); - fprintf(outfile, "/* #define PROGRESS_REPORT */ /* optional */\n"); - fprintf(outfile, "\n#endif /* JPEG_CJPEG_DJPEG */\n"); - - /* Close the jconfig.h file */ - fclose(outfile); - - /* User report */ - printf("Configuration check for Independent JPEG Group's software done.\n"); - printf("\nI have written the jconfig.h file for you.\n\n"); -#ifdef HAVE_PROTOTYPES - printf("You should use makefile.ansi as the starting point for your Makefile.\n"); -#else - printf("You should use makefile.unix as the starting point for your Makefile.\n"); -#endif - -#ifdef NEED_SPECIAL_INCLUDE - printf("\nYou'll need to change jconfig.h to include the system include file\n"); - printf("that you found type size_t in, or add a direct definition of type\n"); - printf("size_t if that's what you used. Just add it to the end.\n"); -#endif - - return 0; -} diff --git a/jpeg/coderules.doc b/jpeg/coderules.doc deleted file mode 100644 index b28034eac2..0000000000 --- a/jpeg/coderules.doc +++ /dev/null @@ -1,118 +0,0 @@ -IJG JPEG LIBRARY: CODING RULES - -Copyright (C) 1991-1994, Thomas G. Lane. -This file is part of the Independent JPEG Group's software. -For conditions of distribution and use, see the accompanying README file. - - -Since numerous people will be contributing code and bug fixes, it's important -to establish a common coding style. The goal of using similar coding styles -is much more important than the details of just what that style is. - -In general we follow the recommendations of "Recommended C Style and Coding -Standards" revision 6.1 (Cannon et al. as modified by Spencer, Keppel and -Brader). This document is available in the IJG FTP archive (see -jpeg/doc/cstyle.ms.tbl.Z, or cstyle.txt.Z for those without nroff/tbl). - -Block comments should be laid out thusly: - -/* - * Block comments in this style. - */ - -We indent statements in K&R style, e.g., - if (test) { - then-part; - } else { - else-part; - } -with two spaces per indentation level. (This indentation convention is -handled automatically by GNU Emacs and many other text editors.) - -Multi-word names should be written in lower case with underscores, e.g., -multi_word_name (not multiWordName). Preprocessor symbols and enum constants -are similar but upper case (MULTI_WORD_NAME). Names should be unique within -the first fifteen characters. (On some older systems, global names must be -unique within six characters. We accommodate this without cluttering the -source code by using macros to substitute shorter names.) - -We use function prototypes everywhere; we rely on automatic source code -transformation to feed prototype-less C compilers. Transformation is done -by the simple and portable tool 'ansi2knr.c' (courtesy of Ghostscript). -ansi2knr is not very bright, so it imposes a format requirement on function -declarations: the function name MUST BEGIN IN COLUMN 1. Thus all functions -should be written in the following style: - -LOCAL int * -function_name (int a, char *b) -{ - code... -} - -Note that each function definition is prefixed with GLOBAL, LOCAL, or -METHODDEF. These macros expand to "static" or nothing as appropriate. -They provide a readable indication of the routine's usage and can readily be -changed for special needs. (For instance, all routines can be made global for -use with debuggers or code profilers that require it.) - -ansi2knr does not transform method declarations (function pointers in -structs). We handle these with a macro JMETHOD, defined as - #ifdef HAVE_PROTOTYPES - #define JMETHOD(type,methodname,arglist) type (*methodname) arglist - #else - #define JMETHOD(type,methodname,arglist) type (*methodname) () - #endif -which is used like this: - struct function_pointers { - JMETHOD(void, init_entropy_encoder, (int somearg, jparms *jp)); - JMETHOD(void, term_entropy_encoder, (void)); - }; -Note the set of parentheses surrounding the parameter list. - -A similar solution is used for external function declarations (see the JPP -macro). - -If the code is to work on non-ANSI compilers, we cannot rely on a prototype -declaration to coerce actual parameters into the right types. Therefore, use -explicit casts on actual parameters whenever the actual parameter type is not -identical to the formal parameter. Beware of implicit conversions to "int". - -It seems there are some non-ANSI compilers in which the sizeof() operator -is defined to return int, yet size_t is defined as long. Needless to say, -this is brain-damaged. Always use the SIZEOF() macro in place of sizeof(), -so that the result is guaranteed to be of type size_t. - - -The JPEG library is intended to be used within larger programs. Furthermore, -we want it to be reentrant so that it can be used by applications that process -multiple images concurrently. The following rules support these requirements: - -1. Avoid direct use of file I/O, "malloc", error report printouts, etc; -pass these through the common routines provided. - -2. Minimize global namespace pollution. Functions should be declared static -wherever possible. (Note that our method-based calling conventions help this -a lot: in many modules only the initialization function will ever need to be -called directly, so only that function need be externally visible.) All -global function names should begin with "jpeg_", and should have an -abbreviated name (unique in the first six characters) substituted by macro -when NEED_SHORT_EXTERNAL_NAMES is set. - -3. Don't use global variables; anything that must be used in another module -should be in the common data structures. - -4. Don't use static variables except for read-only constant tables. Variables -that should be private to a module can be placed into private structures (see -the system architecture document, structure.doc). - -5. Source file names should begin with "j" for files that are part of the -library proper; source files that are not part of the library, such as cjpeg.c -and djpeg.c, do not begin with "j". Keep source file names to eight -characters (plus ".c" or ".h", etc) to make life easy for MS-DOSers. Keep -compression and decompression code in separate source files --- some -applications may want only one half of the library. - -Note: these rules (particularly #4) are not followed religiously in the -modules that are used in cjpeg/djpeg but are not part of the JPEG library -proper. Those modules are not really intended to be used in other -applications. diff --git a/jpeg/coderules.doc.gz b/jpeg/coderules.doc.gz deleted file mode 100644 index aa6b024e4dea5dda94ed13b804464167e3d29b3b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2626 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 UvF+(25r4&JMu$Y+5Mf{d0H+@tUH||9 diff --git a/jpeg/config.status b/jpeg/config.status deleted file mode 100644 index 8603493b8b..0000000000 --- a/jpeg/config.status +++ /dev/null @@ -1,155 +0,0 @@ -#!/bin/sh -# Generated automatically by configure. -# Run this file to recreate the current configuration. -# This directory was configured as follows, -# on host dogbert: -# -# ./configure - -for arg -do - case "$arg" in - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - echo running ${CONFIG_SHELL-/bin/sh} ./configure - exec ${CONFIG_SHELL-/bin/sh} ./configure ;; - *) echo "Usage: config.status --recheck" 2>&1; exit 1 ;; - esac -done - -trap 'rm -fr Makefile jconfig.h conftest*; exit 1' 1 3 15 -CC='gcc' -CPP='gcc -E' -INSTALL='/usr/cluster/bin/install -c' -INSTALL_PROGRAM='$(INSTALL)' -INSTALL_DATA='$(INSTALL) -m 644' -RANLIB='ranlib' -MEMORYMGR='jmemnobs.o' -ANSI2KNR='' -ISANSICOM='# ' -ANSI2KNRFLAGS='' -LIBS='' -srcdir='.' -prefix='' -exec_prefix='' -prsub='' -extrasub='' - -top_srcdir=$srcdir - -CONFIG_FILES=${CONFIG_FILES-"Makefile"} -for file in .. ${CONFIG_FILES}; do if test "x$file" != x..; then - srcdir=$top_srcdir - # Remove last slash and all that follows it. Not all systems have dirname. - dir=`echo $file|sed 's%/[^/][^/]*$%%'` - if test "$dir" != "$file"; then - test "$top_srcdir" != . && srcdir=$top_srcdir/$dir - test ! -d $dir && mkdir $dir - fi - echo creating $file - rm -f $file - echo "# Generated automatically from `echo $file|sed 's|.*/||'`.auto by configure." > $file - sed -e " -$prsub -$extrasub -s%@CC@%$CC%g -s%@CPP@%$CPP%g -s%@INSTALL@%$INSTALL%g -s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g -s%@INSTALL_DATA@%$INSTALL_DATA%g -s%@RANLIB@%$RANLIB%g -s%@MEMORYMGR@%$MEMORYMGR%g -s%@ANSI2KNR@%$ANSI2KNR%g -s%@ISANSICOM@%$ISANSICOM%g -s%@ANSI2KNRFLAGS@%$ANSI2KNRFLAGS%g -s%@LIBS@%$LIBS%g -s%@srcdir@%$srcdir%g -s%@DEFS@%-DHAVE_CONFIG_H%" $top_srcdir/makefile.auto >> $file -fi; done - -CONFIG_HEADERS=${CONFIG_HEADERS-"jconfig.h"} -for file in .. ${CONFIG_HEADERS}; do if test "x$file" != x..; then -echo creating $file - -# These sed commands are put into SEDDEFS when defining a macro. -# They are broken into pieces to make the sed script easier to manage. -# They are passed to sed as "A NAME B NAME C VALUE D", where NAME -# is the cpp macro being defined and VALUE is the value it is being given. -# Each defining turns into a single global substitution command. -# -# SEDd sets the value in "#define NAME VALUE" lines. -SEDdA='s@^\([ ]*\)#\([ ]*define[ ][ ]*\)' -SEDdB='\([ ][ ]*\)[^ ]*@\1#\2' -SEDdC='\3' -SEDdD='@g' -# SEDu turns "#undef NAME" with trailing blanks into "#define NAME VALUE". -SEDuA='s@^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' -SEDuB='\([ ]\)@\1#\2define\3' -SEDuC=' ' -SEDuD='\4@g' -# SEDe turns "#undef NAME" without trailing blanks into "#define NAME VALUE". -SEDeA='s@^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' -SEDeB='$@\1#\2define\3' -SEDeC=' ' -SEDeD='@g' -rm -f conftest.sed -cat >> conftest.sed <<CONFEOF -${SEDdA}HAVE_PROTOTYPES${SEDdB}HAVE_PROTOTYPES${SEDdC}${SEDdD} -${SEDuA}HAVE_PROTOTYPES${SEDuB}HAVE_PROTOTYPES${SEDuC}${SEDuD} -${SEDeA}HAVE_PROTOTYPES${SEDeB}HAVE_PROTOTYPES${SEDeC}${SEDeD} -${SEDdA}HAVE_STDDEF_H${SEDdB}HAVE_STDDEF_H${SEDdC}${SEDdD} -${SEDuA}HAVE_STDDEF_H${SEDuB}HAVE_STDDEF_H${SEDuC}${SEDuD} -${SEDeA}HAVE_STDDEF_H${SEDeB}HAVE_STDDEF_H${SEDeC}${SEDeD} -${SEDdA}HAVE_STDLIB_H${SEDdB}HAVE_STDLIB_H${SEDdC}${SEDdD} -${SEDuA}HAVE_STDLIB_H${SEDuB}HAVE_STDLIB_H${SEDuC}${SEDuD} -${SEDeA}HAVE_STDLIB_H${SEDeB}HAVE_STDLIB_H${SEDeC}${SEDeD} -CONFEOF -cat >> conftest.sed <<CONFEOF -${SEDdA}HAVE_UNSIGNED_CHAR${SEDdB}HAVE_UNSIGNED_CHAR${SEDdC}${SEDdD} -${SEDuA}HAVE_UNSIGNED_CHAR${SEDuB}HAVE_UNSIGNED_CHAR${SEDuC}${SEDuD} -${SEDeA}HAVE_UNSIGNED_CHAR${SEDeB}HAVE_UNSIGNED_CHAR${SEDeC}${SEDeD} -${SEDdA}HAVE_UNSIGNED_SHORT${SEDdB}HAVE_UNSIGNED_SHORT${SEDdC}${SEDdD} -${SEDuA}HAVE_UNSIGNED_SHORT${SEDuB}HAVE_UNSIGNED_SHORT${SEDuC}${SEDuD} -${SEDeA}HAVE_UNSIGNED_SHORT${SEDeB}HAVE_UNSIGNED_SHORT${SEDeC}${SEDeD} -${SEDdA}INLINE${SEDdB}INLINE${SEDdC}inline${SEDdD} -${SEDuA}INLINE${SEDuB}INLINE${SEDuC}inline${SEDuD} -${SEDeA}INLINE${SEDeB}INLINE${SEDeC}inline${SEDeD} -CONFEOF -# This sed command replaces #undef's with comments. This is necessary, for -# example, in the case of _POSIX_SOURCE, which is predefined and required -# on some systems where configure will not decide to define it in -# jconfig.h. -cat >> conftest.sed <<\CONFEOF -CONFEOF -rm -f conftest.h -# Break up the sed commands because old seds have small limits. -maxsedlines=20 -cp $top_srcdir/jconfig.auto conftest.h1 -while : -do - lines=`grep -c . conftest.sed` - if test -z "$lines" || test "$lines" -eq 0; then break; fi - rm -f conftest.s1 conftest.s2 conftest.h2 - sed ${maxsedlines}q conftest.sed > conftest.s1 # Like head -20. - sed 1,${maxsedlines}d conftest.sed > conftest.s2 # Like tail +21. - sed -f conftest.s1 < conftest.h1 > conftest.h2 - rm -f conftest.s1 conftest.h1 conftest.sed - mv conftest.h2 conftest.h1 - mv conftest.s2 conftest.sed -done -rm -f conftest.sed conftest.h -echo "/* $file. Generated automatically by configure. */" > conftest.h -cat conftest.h1 >> conftest.h -rm -f conftest.h1 -if cmp -s $file conftest.h 2>/dev/null; then - # The file exists and we would not be changing it. - echo "$file is unchanged" - rm -f conftest.h -else - rm -f $file - mv conftest.h $file -fi -fi; done - - - -exit 0 diff --git a/jpeg/configure b/jpeg/configure deleted file mode 100644 index 0d62d685bd..0000000000 --- a/jpeg/configure +++ /dev/null @@ -1,1168 +0,0 @@ -#!/bin/sh -# Guess values for system-dependent variables and create Makefiles. -# Generated automatically using autoconf. -# Copyright (C) 1991, 1992, 1993 Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -# Usage: configure [--srcdir=DIR] [--host=HOST] [--gas] [--nfp] -# [--prefix=PREFIX] [--exec-prefix=PREFIX] [--with-PACKAGE[=VALUE]] -# Ignores all args except --srcdir, --prefix, --exec-prefix, and -# --with-PACKAGE[=VALUE] unless this script has special code to handle it. - -for arg -do - # Handle --exec-prefix with a space before the argument. - if test x$next_exec_prefix = xyes; then exec_prefix=$arg; next_exec_prefix= - # Handle --host with a space before the argument. - elif test x$next_host = xyes; then next_host= - # Handle --prefix with a space before the argument. - elif test x$next_prefix = xyes; then prefix=$arg; next_prefix= - # Handle --srcdir with a space before the argument. - elif test x$next_srcdir = xyes; then srcdir=$arg; next_srcdir= - else - case $arg in - # For backward compatibility, recognize -exec-prefix and --exec_prefix. - -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* | --exec=* | --exe=* | --ex=* | --e=*) - exec_prefix=`echo $arg | sed 's/[-a-z_]*=//'` ;; - -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- | --exec | --exe | --ex | --e) - next_exec_prefix=yes ;; - - -gas | --gas | --ga | --g) ;; - - -host=* | --host=* | --hos=* | --ho=* | --h=*) ;; - -host | --host | --hos | --ho | --h) - next_host=yes ;; - - -nfp | --nfp | --nf) ;; - - -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - prefix=`echo $arg | sed 's/[-a-z_]*=//'` ;; - -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) - next_prefix=yes ;; - - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=* | --s=*) - srcdir=`echo $arg | sed 's/[-a-z_]*=//'` ;; - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr | --s) - next_srcdir=yes ;; - - -with-* | --with-*) - package=`echo $arg|sed -e 's/-*with-//' -e 's/=.*//'` - # Reject names that aren't valid shell variable names. - if test -n "`echo $package| sed 's/[-a-zA-Z0-9_]//g'`"; then - echo "configure: $package: invalid package name" >&2; exit 1 - fi - package=`echo $package| sed 's/-/_/g'` - case "$arg" in - *=*) val="`echo $arg|sed 's/[^=]*=//'`" ;; - *) val=1 ;; - esac - eval "with_$package='$val'" ;; - - -v | -verbose | --verbose | --verbos | --verbo | --verb | --ver | --ve | --v) - verbose=yes ;; - - *=*) - varname=`echo $arg|sed -e 's/=.*//'` - # Reject names that aren't valid shell variable names. - if test -n "`echo $varname| sed 's/[a-zA-Z0-9_]//g'`"; then - echo "configure: $varname: invalid shell variable name" >&2; exit 1 - fi - val="`echo $arg|sed 's/[^=]*=//'`" - test -n "$verbose" && echo " setting shell variable $varname to $val" - eval "$varname='$val'" - eval "export $varname" ;; - - *) ;; - esac - fi -done - -trap 'rm -fr conftest* confdefs* core; exit 1' 1 3 15 -trap 'rm -f confdefs*' 0 - -# NLS nuisances. -# These must not be set unconditionally because not all systems understand -# e.g. LANG=C (notably SCO). -if test "${LC_ALL+set}" = 'set' ; then LC_ALL=C; export LC_ALL; fi -if test "${LANG+set}" = 'set' ; then LANG=C; export LANG; fi - -rm -f conftest* confdefs.h -# AIX cpp loses on an empty file, so make sure it contains at least a newline. -echo > confdefs.h -compile='${CC-cc} $CFLAGS conftest.c -o conftest $LIBS >/dev/null 2>&1' - -# A filename unique to this package, relative to the directory that -# configure is in, which we can look for to find out if srcdir is correct. -unique_file=jcmaster.c - -# Find the source files, if location was not specified. -if test -z "$srcdir"; then - srcdirdefaulted=yes - # Try the directory containing this script, then `..'. - prog=$0 - confdir=`echo $prog|sed 's%/[^/][^/]*$%%'` - test "X$confdir" = "X$prog" && confdir=. - srcdir=$confdir - if test ! -r $srcdir/$unique_file; then - srcdir=.. - fi -fi -if test ! -r $srcdir/$unique_file; then - if test x$srcdirdefaulted = xyes; then - echo "configure: Can not find sources in \`${confdir}' or \`..'." 1>&2 - else - echo "configure: Can not find sources in \`${srcdir}'." 1>&2 - fi - exit 1 -fi -# Preserve a srcdir of `.' to avoid automounter screwups with pwd. -# But we can't avoid them for `..', to make subdirectories work. -case $srcdir in - .|/*|~*) ;; - *) srcdir=`cd $srcdir; pwd` ;; # Make relative path absolute. -esac - - -# Save the original args to write them into config.status later. -configure_args="$*" - - -if test -z "$CC"; then - # Extract the first word of `gcc', so it can be a program name with args. - set dummy gcc; word=$2 - echo checking for $word - IFS="${IFS= }"; saveifs="$IFS"; IFS="${IFS}:" - for dir in $PATH; do - test -z "$dir" && dir=. - if test -f $dir/$word; then - CC="gcc" - break - fi - done - IFS="$saveifs" -fi -test -z "$CC" && CC="cc" -test -n "$CC" && test -n "$verbose" && echo " setting CC to $CC" - -# Find out if we are using GNU C, under whatever name. -cat > conftest.c <<EOF -#ifdef __GNUC__ - yes -#endif -EOF -${CC-cc} -E conftest.c > conftest.out 2>&1 -if egrep yes conftest.out >/dev/null 2>&1; then - GCC=1 # For later tests. -fi -rm -f conftest* - -echo checking how to run the C preprocessor -if test -z "$CPP"; then - # This must be in double quotes, not single quotes, because CPP may get - # substituted into the Makefile and ``${CC-cc}'' will simply confuse - # make. It must be expanded now. - CPP="${CC-cc} -E" - cat > conftest.c <<EOF -#include "confdefs.h" -#include <stdio.h> -Syntax Error -EOF -err=`eval "($CPP conftest.c >/dev/null) 2>&1"` -if test -z "$err"; then - : -else - rm -rf conftest* - CPP=/lib/cpp -fi -rm -f conftest* -fi -test ".${verbose}" != "." && echo " setting CPP to $CPP" - -echo checking whether cross-compiling -# If we cannot run a trivial program, we must be cross compiling. -cat > conftest.c <<EOF -#include "confdefs.h" -main(){exit(0);} -EOF -eval $compile -if test -s conftest && (./conftest; exit) 2>/dev/null; then - : -else - cross_compiling=1 -fi -rm -fr conftest* - -echo checking for function prototypes -cat > conftest.c <<EOF -#include "confdefs.h" - -int testfunction (int arg1, int * arg2); /* check prototypes */ -struct methods_struct { /* check method-pointer declarations */ - int (*error_exit) (char *msgtext); - int (*trace_message) (char *msgtext); - int (*another_method) (void); -}; -int testfunction (int arg1, int * arg2) /* check definitions */ -{ return arg2[arg1]; } -int test2function (void) /* check void arg list */ -{ return 0; } - -int main() { exit(0); } -int t() { } -EOF -if eval $compile; then - rm -rf conftest* - -{ -test -n "$verbose" && \ -echo " defining" HAVE_PROTOTYPES to be empty -echo "#define" HAVE_PROTOTYPES >> confdefs.h -DEFS="$DEFS -DHAVE_PROTOTYPES=" -SEDDEFS="${SEDDEFS}\${SEDdA}HAVE_PROTOTYPES\${SEDdB}HAVE_PROTOTYPES\${SEDdC}\${SEDdD} -\${SEDuA}HAVE_PROTOTYPES\${SEDuB}HAVE_PROTOTYPES\${SEDuC}\${SEDuD} -\${SEDeA}HAVE_PROTOTYPES\${SEDeB}HAVE_PROTOTYPES\${SEDeC}\${SEDeD} -" -} - - -else - rm -rf conftest* - echo Your compiler does not seem to know about function prototypes. -echo Perhaps it needs a special switch to enable ANSI C mode. -echo If so, we recommend running configure like this: -echo " ./configure CC='cc -switch'" -echo where -switch is the proper switch. - -fi -rm -f conftest* -echo checking for stddef.h -cat > conftest.c <<EOF -#include "confdefs.h" -#include <stddef.h> -EOF -err=`eval "($CPP conftest.c >/dev/null) 2>&1"` -if test -z "$err"; then - rm -rf conftest* - -{ -test -n "$verbose" && \ -echo " defining" HAVE_STDDEF_H to be empty -echo "#define" HAVE_STDDEF_H >> confdefs.h -DEFS="$DEFS -DHAVE_STDDEF_H=" -SEDDEFS="${SEDDEFS}\${SEDdA}HAVE_STDDEF_H\${SEDdB}HAVE_STDDEF_H\${SEDdC}\${SEDdD} -\${SEDuA}HAVE_STDDEF_H\${SEDuB}HAVE_STDDEF_H\${SEDuC}\${SEDuD} -\${SEDeA}HAVE_STDDEF_H\${SEDeB}HAVE_STDDEF_H\${SEDeC}\${SEDeD} -" -} - - -fi -rm -f conftest* - -echo checking for stdlib.h -cat > conftest.c <<EOF -#include "confdefs.h" -#include <stdlib.h> -EOF -err=`eval "($CPP conftest.c >/dev/null) 2>&1"` -if test -z "$err"; then - rm -rf conftest* - -{ -test -n "$verbose" && \ -echo " defining" HAVE_STDLIB_H to be empty -echo "#define" HAVE_STDLIB_H >> confdefs.h -DEFS="$DEFS -DHAVE_STDLIB_H=" -SEDDEFS="${SEDDEFS}\${SEDdA}HAVE_STDLIB_H\${SEDdB}HAVE_STDLIB_H\${SEDdC}\${SEDdD} -\${SEDuA}HAVE_STDLIB_H\${SEDuB}HAVE_STDLIB_H\${SEDuC}\${SEDuD} -\${SEDeA}HAVE_STDLIB_H\${SEDeB}HAVE_STDLIB_H\${SEDeC}\${SEDeD} -" -} - - -fi -rm -f conftest* - -echo checking for string.h -cat > conftest.c <<EOF -#include "confdefs.h" -#include <string.h> -EOF -err=`eval "($CPP conftest.c >/dev/null) 2>&1"` -if test -z "$err"; then - : -else - rm -rf conftest* - -{ -test -n "$verbose" && \ -echo " defining" NEED_BSD_STRINGS to be empty -echo "#define" NEED_BSD_STRINGS >> confdefs.h -DEFS="$DEFS -DNEED_BSD_STRINGS=" -SEDDEFS="${SEDDEFS}\${SEDdA}NEED_BSD_STRINGS\${SEDdB}NEED_BSD_STRINGS\${SEDdC}\${SEDdD} -\${SEDuA}NEED_BSD_STRINGS\${SEDuB}NEED_BSD_STRINGS\${SEDuC}\${SEDuD} -\${SEDeA}NEED_BSD_STRINGS\${SEDeB}NEED_BSD_STRINGS\${SEDeC}\${SEDeD} -" -} - -fi -rm -f conftest* - -echo checking for size_t -cat > conftest.c <<EOF -#include "confdefs.h" - -#ifdef HAVE_STDDEF_H -#include <stddef.h> -#endif -#ifdef HAVE_STDLIB_H -#include <stdlib.h> -#endif -#include <stdio.h> -#ifdef NEED_BSD_STRINGS -#include <strings.h> -#else -#include <string.h> -#endif -typedef size_t my_size_t; - -int main() { exit(0); } -int t() { my_size_t foovar; } -EOF -if eval $compile; then - : -else - rm -rf conftest* - echo checking for sys/types.h -cat > conftest.c <<EOF -#include "confdefs.h" -#include <sys/types.h> -EOF -err=`eval "($CPP conftest.c >/dev/null) 2>&1"` -if test -z "$err"; then - rm -rf conftest* - -{ -test -n "$verbose" && \ -echo " defining" NEED_SYS_TYPES_H to be empty -echo "#define" NEED_SYS_TYPES_H >> confdefs.h -DEFS="$DEFS -DNEED_SYS_TYPES_H=" -SEDDEFS="${SEDDEFS}\${SEDdA}NEED_SYS_TYPES_H\${SEDdB}NEED_SYS_TYPES_H\${SEDdC}\${SEDdD} -\${SEDuA}NEED_SYS_TYPES_H\${SEDuB}NEED_SYS_TYPES_H\${SEDuC}\${SEDuD} -\${SEDeA}NEED_SYS_TYPES_H\${SEDeB}NEED_SYS_TYPES_H\${SEDeC}\${SEDeD} -" -} - - -else - rm -rf conftest* - echo Type size_t is not defined in any of the usual places. -echo Try putting '"typedef unsigned int size_t;"' in jconfig.h. - -fi -rm -f conftest* - -fi -rm -f conftest* -echo checking for unsigned char -cat > conftest.c <<EOF -#include "confdefs.h" - -int main() { exit(0); } -int t() { unsigned char un_char; } -EOF -if eval $compile; then - rm -rf conftest* - -{ -test -n "$verbose" && \ -echo " defining" HAVE_UNSIGNED_CHAR to be empty -echo "#define" HAVE_UNSIGNED_CHAR >> confdefs.h -DEFS="$DEFS -DHAVE_UNSIGNED_CHAR=" -SEDDEFS="${SEDDEFS}\${SEDdA}HAVE_UNSIGNED_CHAR\${SEDdB}HAVE_UNSIGNED_CHAR\${SEDdC}\${SEDdD} -\${SEDuA}HAVE_UNSIGNED_CHAR\${SEDuB}HAVE_UNSIGNED_CHAR\${SEDuC}\${SEDuD} -\${SEDeA}HAVE_UNSIGNED_CHAR\${SEDeB}HAVE_UNSIGNED_CHAR\${SEDeC}\${SEDeD} -" -} - - -fi -rm -f conftest* -echo checking for unsigned short -cat > conftest.c <<EOF -#include "confdefs.h" - -int main() { exit(0); } -int t() { unsigned short un_short; } -EOF -if eval $compile; then - rm -rf conftest* - -{ -test -n "$verbose" && \ -echo " defining" HAVE_UNSIGNED_SHORT to be empty -echo "#define" HAVE_UNSIGNED_SHORT >> confdefs.h -DEFS="$DEFS -DHAVE_UNSIGNED_SHORT=" -SEDDEFS="${SEDDEFS}\${SEDdA}HAVE_UNSIGNED_SHORT\${SEDdB}HAVE_UNSIGNED_SHORT\${SEDdC}\${SEDdD} -\${SEDuA}HAVE_UNSIGNED_SHORT\${SEDuB}HAVE_UNSIGNED_SHORT\${SEDuC}\${SEDuD} -\${SEDeA}HAVE_UNSIGNED_SHORT\${SEDeB}HAVE_UNSIGNED_SHORT\${SEDeC}\${SEDeD} -" -} - - -fi -rm -f conftest* -echo checking for type void -cat > conftest.c <<EOF -#include "confdefs.h" - -/* Caution: a C++ compiler will insist on valid prototypes */ -typedef void * void_ptr; /* check void * */ -#ifdef HAVE_PROTOTYPES /* check ptr to function returning void */ -typedef void (*void_func) (int a, int b); -#else -typedef void (*void_func) (); -#endif - -#ifdef HAVE_PROTOTYPES /* check void function result */ -void test3function (void_ptr arg1, void_func arg2) -#else -void test3function (arg1, arg2) - void_ptr arg1; - void_func arg2; -#endif -{ - char * locptr = (char *) arg1; /* check casting to and from void * */ - arg1 = (void *) locptr; - (*arg2) (1, 2); /* check call of fcn returning void */ -} - -int main() { exit(0); } -int t() { } -EOF -if eval $compile; then - : -else - rm -rf conftest* - -{ -test -n "$verbose" && \ -echo " defining" void to be char -echo "#define" void char >> confdefs.h -DEFS="$DEFS -Dvoid=char" -SEDDEFS="${SEDDEFS}\${SEDdA}void\${SEDdB}void\${SEDdC}char\${SEDdD} -\${SEDuA}void\${SEDuB}void\${SEDuC}char\${SEDuD} -\${SEDeA}void\${SEDeB}void\${SEDeC}char\${SEDeD} -" -} - -fi -rm -f conftest* -prog='/* Ultrix mips cc rejects this. */ -typedef int charset[2]; const charset x; -/* SunOS 4.1.1 cc rejects this. */ -char const *const *ccp; -char **p; -/* AIX XL C 1.02.0.0 rejects this. - It does not let you subtract one const X* pointer from another in an arm - of an if-expression whose if-part is not a constant expression */ -const char *g = "string"; -ccp = &g + (g ? g-g : 0); -/* HPUX 7.0 cc rejects these. */ -++ccp; -p = (char**) ccp; -ccp = (char const *const *) p; -{ /* SCO 3.2v4 cc rejects this. */ - char *t; - char const *s = 0 ? (char *) 0 : (char const *) 0; - - *t++ = 0; -} -{ /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ - int x[] = {25,17}; - const int *foo = &x[0]; - ++foo; -} -{ /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ - typedef const int *iptr; - iptr p = 0; - ++p; -} -{ /* AIX XL C 1.02.0.0 rejects this saying - "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ - struct s { int j; const int *ap[3]; }; - struct s *b; b->j = 5; -} -{ /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ - const int foo = 10; -}' -echo checking for lack of working const -cat > conftest.c <<EOF -#include "confdefs.h" - -int main() { exit(0); } -int t() { $prog } -EOF -if eval $compile; then - : -else - rm -rf conftest* - -{ -test -n "$verbose" && \ -echo " defining" const to be empty -echo "#define" const >> confdefs.h -DEFS="$DEFS -Dconst=" -SEDDEFS="${SEDDEFS}\${SEDdA}const\${SEDdB}const\${SEDdC}\${SEDdD} -\${SEDuA}const\${SEDuB}const\${SEDuC}\${SEDuD} -\${SEDeA}const\${SEDeB}const\${SEDeC}\${SEDeD} -" -} - -fi -rm -f conftest* - -echo checking for inline -cat > conftest.c <<EOF -#include "confdefs.h" - -int main() { exit(0); } -int t() { } inline int foo() { return 0; } -int bar() { return foo(); } -EOF -if eval $compile; then - rm -rf conftest* - -{ -test -n "$verbose" && \ -echo " defining" INLINE to be inline -echo "#define" INLINE inline >> confdefs.h -DEFS="$DEFS -DINLINE=inline" -SEDDEFS="${SEDDEFS}\${SEDdA}INLINE\${SEDdB}INLINE\${SEDdC}inline\${SEDdD} -\${SEDuA}INLINE\${SEDuB}INLINE\${SEDuC}inline\${SEDuD} -\${SEDeA}INLINE\${SEDeB}INLINE\${SEDeC}inline\${SEDeD} -" -} - - -else - rm -rf conftest* - cat > conftest.c <<EOF -#include "confdefs.h" - -int main() { exit(0); } -int t() { } __inline__ int foo() { return 0; } -int bar() { return foo(); } -EOF -if eval $compile; then - rm -rf conftest* - -{ -test -n "$verbose" && \ -echo " defining" INLINE to be __inline__ -echo "#define" INLINE __inline__ >> confdefs.h -DEFS="$DEFS -DINLINE=__inline__" -SEDDEFS="${SEDDEFS}\${SEDdA}INLINE\${SEDdB}INLINE\${SEDdC}__inline__\${SEDdD} -\${SEDuA}INLINE\${SEDuB}INLINE\${SEDuC}__inline__\${SEDuD} -\${SEDeA}INLINE\${SEDeB}INLINE\${SEDeC}__inline__\${SEDeD} -" -} - - -else - rm -rf conftest* - cat > conftest.c <<EOF -#include "confdefs.h" - -int main() { exit(0); } -int t() { } __inline int foo() { return 0; } -int bar() { return foo(); } -EOF -if eval $compile; then - rm -rf conftest* - -{ -test -n "$verbose" && \ -echo " defining" INLINE to be __inline -echo "#define" INLINE __inline >> confdefs.h -DEFS="$DEFS -DINLINE=__inline" -SEDDEFS="${SEDDEFS}\${SEDdA}INLINE\${SEDdB}INLINE\${SEDdC}__inline\${SEDdD} -\${SEDuA}INLINE\${SEDuB}INLINE\${SEDuC}__inline\${SEDuD} -\${SEDeA}INLINE\${SEDeB}INLINE\${SEDeC}__inline\${SEDeD} -" -} - - -else - rm -rf conftest* - -{ -test -n "$verbose" && \ -echo " defining" INLINE to be empty -echo "#define" INLINE >> confdefs.h -DEFS="$DEFS -DINLINE=" -SEDDEFS="${SEDDEFS}\${SEDdA}INLINE\${SEDdB}INLINE\${SEDdC}\${SEDdD} -\${SEDuA}INLINE\${SEDuB}INLINE\${SEDuC}\${SEDuD} -\${SEDeA}INLINE\${SEDeB}INLINE\${SEDeC}\${SEDeD} -" -} - -fi -rm -f conftest* - -fi -rm -f conftest* - -fi -rm -f conftest* -echo checking for broken incomplete types -cat > conftest.c <<EOF -#include "confdefs.h" - typedef struct undefined_structure * undef_struct_ptr; -int main() { exit(0); } -int t() { } -EOF -if eval $compile; then - : -else - rm -rf conftest* - -{ -test -n "$verbose" && \ -echo " defining" INCOMPLETE_TYPES_BROKEN to be empty -echo "#define" INCOMPLETE_TYPES_BROKEN >> confdefs.h -DEFS="$DEFS -DINCOMPLETE_TYPES_BROKEN=" -SEDDEFS="${SEDDEFS}\${SEDdA}INCOMPLETE_TYPES_BROKEN\${SEDdB}INCOMPLETE_TYPES_BROKEN\${SEDdC}\${SEDdD} -\${SEDuA}INCOMPLETE_TYPES_BROKEN\${SEDuB}INCOMPLETE_TYPES_BROKEN\${SEDuC}\${SEDuD} -\${SEDeA}INCOMPLETE_TYPES_BROKEN\${SEDeB}INCOMPLETE_TYPES_BROKEN\${SEDeC}\${SEDeD} -" -} - -fi -rm -f conftest* -echo checking for short external names -cat > conftest.c <<EOF -#include "confdefs.h" - -int possibly_duplicate_function () { return 0; } -int possibly_dupli_function () { return 1; } - -int main() { exit(0); } -int t() { } -EOF -if eval $compile; then - : -else - rm -rf conftest* - -{ -test -n "$verbose" && \ -echo " defining" NEED_SHORT_EXTERNAL_NAMES to be empty -echo "#define" NEED_SHORT_EXTERNAL_NAMES >> confdefs.h -DEFS="$DEFS -DNEED_SHORT_EXTERNAL_NAMES=" -SEDDEFS="${SEDDEFS}\${SEDdA}NEED_SHORT_EXTERNAL_NAMES\${SEDdB}NEED_SHORT_EXTERNAL_NAMES\${SEDdC}\${SEDdD} -\${SEDuA}NEED_SHORT_EXTERNAL_NAMES\${SEDuB}NEED_SHORT_EXTERNAL_NAMES\${SEDuC}\${SEDuD} -\${SEDeA}NEED_SHORT_EXTERNAL_NAMES\${SEDeB}NEED_SHORT_EXTERNAL_NAMES\${SEDeC}\${SEDeD} -" -} - -fi -rm -f conftest* - -echo checking to see if char is signed -if test -n "$cross_compiling" -then - echo Assuming that char is signed on target machine. -echo If it is unsigned, this will be a little bit inefficient. - -else -cat > conftest.c <<EOF -#include "confdefs.h" - -#ifdef HAVE_PROTOTYPES -int is_char_signed (int arg) -#else -int is_char_signed (arg) - int arg; -#endif -{ - if (arg == 189) { /* expected result for unsigned char */ - return 0; /* type char is unsigned */ - } - else if (arg != -67) { /* expected result for signed char */ - printf("Hmm, it seems 'char' is not eight bits wide on your machine.\n"); - printf("I fear the JPEG software will not work at all.\n\n"); - } - return 1; /* assume char is signed otherwise */ -} -char signed_char_check = (char) (-67); -main() { - exit(is_char_signed((int) signed_char_check)); -} -EOF -eval $compile -if test -s conftest && (./conftest; exit) 2>/dev/null; then - -{ -test -n "$verbose" && \ -echo " defining" CHAR_IS_UNSIGNED to be empty -echo "#define" CHAR_IS_UNSIGNED >> confdefs.h -DEFS="$DEFS -DCHAR_IS_UNSIGNED=" -SEDDEFS="${SEDDEFS}\${SEDdA}CHAR_IS_UNSIGNED\${SEDdB}CHAR_IS_UNSIGNED\${SEDdC}\${SEDdD} -\${SEDuA}CHAR_IS_UNSIGNED\${SEDuB}CHAR_IS_UNSIGNED\${SEDuC}\${SEDuD} -\${SEDeA}CHAR_IS_UNSIGNED\${SEDeB}CHAR_IS_UNSIGNED\${SEDeC}\${SEDeD} -" -} - - -fi -fi -rm -fr conftest* -echo checking to see if right shift is signed -if test -n "$cross_compiling" -then - echo Assuming that right shift is signed on target machine. - -else -cat > conftest.c <<EOF -#include "confdefs.h" - -#ifdef HAVE_PROTOTYPES -int is_shifting_signed (long arg) -#else -int is_shifting_signed (arg) - long arg; -#endif -/* See whether right-shift on a long is signed or not. */ -{ - long res = arg >> 4; - - if (res == -0x7F7E80CL) { /* expected result for signed shift */ - return 1; /* right shift is signed */ - } - /* see if unsigned-shift hack will fix it. */ - /* we can't just test exact value since it depends on width of long... */ - res |= (~0L) << (32-4); - if (res == -0x7F7E80CL) { /* expected result now? */ - return 0; /* right shift is unsigned */ - } - printf("Right shift isn't acting as I expect it to.\n"); - printf("I fear the JPEG software will not work at all.\n\n"); - return 0; /* try it with unsigned anyway */ -} -main() { - exit(is_shifting_signed(-0x7F7E80B1L)); -} -EOF -eval $compile -if test -s conftest && (./conftest; exit) 2>/dev/null; then - -{ -test -n "$verbose" && \ -echo " defining" RIGHT_SHIFT_IS_UNSIGNED to be empty -echo "#define" RIGHT_SHIFT_IS_UNSIGNED >> confdefs.h -DEFS="$DEFS -DRIGHT_SHIFT_IS_UNSIGNED=" -SEDDEFS="${SEDDEFS}\${SEDdA}RIGHT_SHIFT_IS_UNSIGNED\${SEDdB}RIGHT_SHIFT_IS_UNSIGNED\${SEDdC}\${SEDdD} -\${SEDuA}RIGHT_SHIFT_IS_UNSIGNED\${SEDuB}RIGHT_SHIFT_IS_UNSIGNED\${SEDuC}\${SEDuD} -\${SEDeA}RIGHT_SHIFT_IS_UNSIGNED\${SEDeB}RIGHT_SHIFT_IS_UNSIGNED\${SEDeC}\${SEDeD} -" -} - - -fi -fi -rm -fr conftest* -echo checking to see if fopen accepts b spec -if test -n "$cross_compiling" -then - echo Assuming that it does. - -else -cat > conftest.c <<EOF -#include "confdefs.h" - -#include <stdio.h> -main() { - if (fopen("conftestdata", "wb") != NULL) - exit(0); - exit(1); -} -EOF -eval $compile -if test -s conftest && (./conftest; exit) 2>/dev/null; then - : -else - -{ -test -n "$verbose" && \ -echo " defining" DONT_USE_B_MODE to be empty -echo "#define" DONT_USE_B_MODE >> confdefs.h -DEFS="$DEFS -DDONT_USE_B_MODE=" -SEDDEFS="${SEDDEFS}\${SEDdA}DONT_USE_B_MODE\${SEDdB}DONT_USE_B_MODE\${SEDdC}\${SEDdD} -\${SEDuA}DONT_USE_B_MODE\${SEDuB}DONT_USE_B_MODE\${SEDuC}\${SEDuD} -\${SEDeA}DONT_USE_B_MODE\${SEDeB}DONT_USE_B_MODE\${SEDeC}\${SEDeD} -" -} - -fi -fi -rm -fr conftest* -# Make sure to not get the incompatible SysV /etc/install and -# /usr/sbin/install, which might be in PATH before a BSD-like install, -# or the SunOS /usr/etc/install directory, or the AIX /bin/install, -# or the AFS install, which mishandles nonexistent args, or -# /usr/ucb/install on SVR4, which tries to use the nonexistent group -# `staff'. On most BSDish systems install is in /usr/bin, not /usr/ucb -# anyway. Sigh. -if test "z${INSTALL}" = "z" ; then - echo checking for install - IFS="${IFS= }"; saveifs="$IFS"; IFS="${IFS}:" - for dir in $PATH; do - test -z "$dir" && dir=. - case $dir in - /etc|/usr/sbin|/usr/etc|/usr/afsws/bin|/usr/ucb) ;; - *) - if test -f $dir/installbsd; then - INSTALL="$dir/installbsd -c" # OSF1 - INSTALL_PROGRAM='$(INSTALL)' - INSTALL_DATA='$(INSTALL) -m 644' - break - fi - if test -f $dir/install; then - if grep dspmsg $dir/install >/dev/null 2>&1; then - : # AIX - else - INSTALL="$dir/install -c" - INSTALL_PROGRAM='$(INSTALL)' - INSTALL_DATA='$(INSTALL) -m 644' - break - fi - fi - ;; - esac - done - IFS="$saveifs" -fi -INSTALL=${INSTALL-cp} -test -n "$verbose" && echo " setting INSTALL to $INSTALL" -INSTALL_PROGRAM=${INSTALL_PROGRAM-'$(INSTALL)'} -test -n "$verbose" && echo " setting INSTALL_PROGRAM to $INSTALL_PROGRAM" -INSTALL_DATA=${INSTALL_DATA-'$(INSTALL)'} -test -n "$verbose" && echo " setting INSTALL_DATA to $INSTALL_DATA" - -if test -z "$RANLIB"; then - # Extract the first word of `ranlib', so it can be a program name with args. - set dummy ranlib; word=$2 - echo checking for $word - IFS="${IFS= }"; saveifs="$IFS"; IFS="${IFS}:" - for dir in $PATH; do - test -z "$dir" && dir=. - if test -f $dir/$word; then - RANLIB="ranlib" - break - fi - done - IFS="$saveifs" -fi -test -z "$RANLIB" && RANLIB=":" -test -n "$RANLIB" && test -n "$verbose" && echo " setting RANLIB to $RANLIB" - -# check whether --with-maxmem was given -withval="$with_maxmem" -if test -n "$withval"; then - DEFAULTMAXMEM=`expr $withval \* 1048576` - -{ -test -n "$verbose" && \ -echo " defining" DEFAULT_MAX_MEM to be ${DEFAULTMAXMEM} -echo "#define" DEFAULT_MAX_MEM ${DEFAULTMAXMEM} >> confdefs.h -DEFS="$DEFS -DDEFAULT_MAX_MEM=${DEFAULTMAXMEM}" -SEDDEFS="${SEDDEFS}\${SEDdA}DEFAULT_MAX_MEM\${SEDdB}DEFAULT_MAX_MEM\${SEDdC}${DEFAULTMAXMEM}\${SEDdD} -\${SEDuA}DEFAULT_MAX_MEM\${SEDuB}DEFAULT_MAX_MEM\${SEDuC}${DEFAULTMAXMEM}\${SEDuD} -\${SEDeA}DEFAULT_MAX_MEM\${SEDeB}DEFAULT_MAX_MEM\${SEDeC}${DEFAULTMAXMEM}\${SEDeD} -" -} - -echo checking for 'tmpfile()' -cat > conftest.c <<EOF -#include "confdefs.h" -#include <stdio.h> -int main() { exit(0); } -int t() { FILE * tfile = tmpfile(); } -EOF -if eval $compile; then - rm -rf conftest* - MEMORYMGR="jmemansi.o" - -else - rm -rf conftest* - MEMORYMGR="jmemname.o" - -{ -test -n "$verbose" && \ -echo " defining" NEED_SIGNAL_CATCHER to be empty -echo "#define" NEED_SIGNAL_CATCHER >> confdefs.h -DEFS="$DEFS -DNEED_SIGNAL_CATCHER=" -SEDDEFS="${SEDDEFS}\${SEDdA}NEED_SIGNAL_CATCHER\${SEDdB}NEED_SIGNAL_CATCHER\${SEDdC}\${SEDdD} -\${SEDuA}NEED_SIGNAL_CATCHER\${SEDuB}NEED_SIGNAL_CATCHER\${SEDuC}\${SEDuD} -\${SEDeA}NEED_SIGNAL_CATCHER\${SEDeB}NEED_SIGNAL_CATCHER\${SEDeC}\${SEDeD} -" -} -echo checking for 'mktemp()' -cat > conftest.c <<EOF -#include "confdefs.h" - -int main() { exit(0); } -int t() { char fname[80]; mktemp(fname); } -EOF -if eval $compile; then - : -else - rm -rf conftest* - -{ -test -n "$verbose" && \ -echo " defining" NO_MKTEMP to be empty -echo "#define" NO_MKTEMP >> confdefs.h -DEFS="$DEFS -DNO_MKTEMP=" -SEDDEFS="${SEDDEFS}\${SEDdA}NO_MKTEMP\${SEDdB}NO_MKTEMP\${SEDdC}\${SEDdD} -\${SEDuA}NO_MKTEMP\${SEDuB}NO_MKTEMP\${SEDuC}\${SEDuD} -\${SEDeA}NO_MKTEMP\${SEDeB}NO_MKTEMP\${SEDeC}\${SEDeD} -" -} - -fi -rm -f conftest* - -fi -rm -f conftest* - -else - MEMORYMGR="jmemnobs.o" -fi - -# Prepare to massage makefile.auto correctly. -case "$DEFS" in - *HAVE_PROTOTYPES*) - ANSI2KNR="" - ISANSICOM="# " - ;; - *) - ANSI2KNR="ansi2knr" - ISANSICOM="" - ;; -esac -case "$DEFS" in - *NEED_BSD_STRINGS*) - ANSI2KNRFLAGS="-DBSD" - ;; - *) - ANSI2KNRFLAGS="" - ;; -esac -# Set default prefixes. -if test -n "$prefix"; then - test -z "$exec_prefix" && exec_prefix='${prefix}' - prsub="s%^prefix\\([ ]*\\)=\\([ ]*\\).*$%prefix\\1=\\2$prefix%" -fi -if test -n "$exec_prefix"; then - prsub="$prsub -s%^exec_prefix\\([ ]*\\)=\\([ ]*\\).*$%exec_prefix\\1=\\2$exec_prefix%" -fi -# Quote sed substitution magic chars in DEFS. -cat >conftest.def <<EOF -$DEFS -EOF -escape_ampersand_and_backslash='s%[&\\]%\\&%g' -DEFS=`sed "$escape_ampersand_and_backslash" <conftest.def` -rm -f conftest.def -# Substitute for predefined variables. - -trap 'rm -f config.status; exit 1' 1 3 15 -echo creating config.status -rm -f config.status -cat > config.status <<EOF -#!/bin/sh -# Generated automatically by configure. -# Run this file to recreate the current configuration. -# This directory was configured as follows, -# on host `(hostname || uname -n) 2>/dev/null | sed 1q`: -# -# $0 $configure_args - -for arg -do - case "\$arg" in - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - echo running \${CONFIG_SHELL-/bin/sh} $0 $configure_args - exec \${CONFIG_SHELL-/bin/sh} $0 $configure_args ;; - *) echo "Usage: config.status --recheck" 2>&1; exit 1 ;; - esac -done - -trap 'rm -fr Makefile jconfig.h conftest*; exit 1' 1 3 15 -CC='$CC' -CPP='$CPP' -INSTALL='$INSTALL' -INSTALL_PROGRAM='$INSTALL_PROGRAM' -INSTALL_DATA='$INSTALL_DATA' -RANLIB='$RANLIB' -MEMORYMGR='$MEMORYMGR' -ANSI2KNR='$ANSI2KNR' -ISANSICOM='$ISANSICOM' -ANSI2KNRFLAGS='$ANSI2KNRFLAGS' -LIBS='$LIBS' -srcdir='$srcdir' -prefix='$prefix' -exec_prefix='$exec_prefix' -prsub='$prsub' -extrasub='$extrasub' -EOF -cat >> config.status <<\EOF - -top_srcdir=$srcdir - -CONFIG_FILES=${CONFIG_FILES-"Makefile"} -for file in .. ${CONFIG_FILES}; do if test "x$file" != x..; then - srcdir=$top_srcdir - # Remove last slash and all that follows it. Not all systems have dirname. - dir=`echo $file|sed 's%/[^/][^/]*$%%'` - if test "$dir" != "$file"; then - test "$top_srcdir" != . && srcdir=$top_srcdir/$dir - test ! -d $dir && mkdir $dir - fi - echo creating $file - rm -f $file - echo "# Generated automatically from `echo $file|sed 's|.*/||'`.auto by configure." > $file - sed -e " -$prsub -$extrasub -s%@CC@%$CC%g -s%@CPP@%$CPP%g -s%@INSTALL@%$INSTALL%g -s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g -s%@INSTALL_DATA@%$INSTALL_DATA%g -s%@RANLIB@%$RANLIB%g -s%@MEMORYMGR@%$MEMORYMGR%g -s%@ANSI2KNR@%$ANSI2KNR%g -s%@ISANSICOM@%$ISANSICOM%g -s%@ANSI2KNRFLAGS@%$ANSI2KNRFLAGS%g -s%@LIBS@%$LIBS%g -s%@srcdir@%$srcdir%g -s%@DEFS@%-DHAVE_CONFIG_H%" $top_srcdir/makefile.auto >> $file -fi; done - -CONFIG_HEADERS=${CONFIG_HEADERS-"jconfig.h"} -for file in .. ${CONFIG_HEADERS}; do if test "x$file" != x..; then -echo creating $file - -# These sed commands are put into SEDDEFS when defining a macro. -# They are broken into pieces to make the sed script easier to manage. -# They are passed to sed as "A NAME B NAME C VALUE D", where NAME -# is the cpp macro being defined and VALUE is the value it is being given. -# Each defining turns into a single global substitution command. -# -# SEDd sets the value in "#define NAME VALUE" lines. -SEDdA='s@^\([ ]*\)#\([ ]*define[ ][ ]*\)' -SEDdB='\([ ][ ]*\)[^ ]*@\1#\2' -SEDdC='\3' -SEDdD='@g' -# SEDu turns "#undef NAME" with trailing blanks into "#define NAME VALUE". -SEDuA='s@^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' -SEDuB='\([ ]\)@\1#\2define\3' -SEDuC=' ' -SEDuD='\4@g' -# SEDe turns "#undef NAME" without trailing blanks into "#define NAME VALUE". -SEDeA='s@^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' -SEDeB='$@\1#\2define\3' -SEDeC=' ' -SEDeD='@g' -rm -f conftest.sed -EOF -# Turn off quoting long enough to insert the sed commands. -rm -f conftest.sh -cat > conftest.sh <<EOF -$SEDDEFS -EOF - -# Break up $SEDDEFS (now in conftest.sh) because some shells have a limit -# on the size of here documents. - -# Maximum number of lines to put in a single here document. -maxshlines=9 - -while : -do - # wc gives bogus results for an empty file on some systems. - lines=`grep -c . conftest.sh` - if test -z "$lines" || test "$lines" -eq 0; then break; fi - rm -f conftest.s1 conftest.s2 - sed ${maxshlines}q conftest.sh > conftest.s1 # Like head -20. - sed 1,${maxshlines}d conftest.sh > conftest.s2 # Like tail +21. - # Write a limited-size here document to append to conftest.sed. - echo 'cat >> conftest.sed <<CONFEOF' >> config.status - cat conftest.s1 >> config.status - echo 'CONFEOF' >> config.status - rm -f conftest.s1 conftest.sh - mv conftest.s2 conftest.sh -done -rm -f conftest.sh - -# Now back to your regularly scheduled config.status. -cat >> config.status <<\EOF -# This sed command replaces #undef's with comments. This is necessary, for -# example, in the case of _POSIX_SOURCE, which is predefined and required -# on some systems where configure will not decide to define it in -# jconfig.h. -cat >> conftest.sed <<\CONFEOF -CONFEOF -rm -f conftest.h -# Break up the sed commands because old seds have small limits. -maxsedlines=20 -cp $top_srcdir/jconfig.auto conftest.h1 -while : -do - lines=`grep -c . conftest.sed` - if test -z "$lines" || test "$lines" -eq 0; then break; fi - rm -f conftest.s1 conftest.s2 conftest.h2 - sed ${maxsedlines}q conftest.sed > conftest.s1 # Like head -20. - sed 1,${maxsedlines}d conftest.sed > conftest.s2 # Like tail +21. - sed -f conftest.s1 < conftest.h1 > conftest.h2 - rm -f conftest.s1 conftest.h1 conftest.sed - mv conftest.h2 conftest.h1 - mv conftest.s2 conftest.sed -done -rm -f conftest.sed conftest.h -echo "/* $file. Generated automatically by configure. */" > conftest.h -cat conftest.h1 >> conftest.h -rm -f conftest.h1 -if cmp -s $file conftest.h 2>/dev/null; then - # The file exists and we would not be changing it. - echo "$file is unchanged" - rm -f conftest.h -else - rm -f $file - mv conftest.h $file -fi -fi; done - - - -exit 0 -EOF -chmod +x config.status -${CONFIG_SHELL-/bin/sh} config.status - diff --git a/jpeg/depend b/jpeg/depend deleted file mode 100644 index b9835ccf40..0000000000 --- a/jpeg/depend +++ /dev/null @@ -1,58 +0,0 @@ -cjpeg.o : cjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h \ - cderror.h jversion.h -djpeg.o : djpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h \ - cderror.h jversion.h -jdatasrc.o : jdatasrc.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h -jdatadst.o : jdatadst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h -jcapi.o : jcapi.c jinclude.h jconfig.h jpegint.h jpeglib.h jmorecfg.h jerror.h -jccoefct.o : jccoefct.c jinclude.h jconfig.h jpegint.h jpeglib.h jmorecfg.h \ - jerror.h -jccolor.o : jccolor.c jinclude.h jconfig.h jpegint.h jpeglib.h jmorecfg.h jerror.h -jcdctmgr.o : jcdctmgr.c jinclude.h jconfig.h jpegint.h jpeglib.h jmorecfg.h \ - jerror.h -jchuff.o : jchuff.c jinclude.h jconfig.h jpegint.h jpeglib.h jmorecfg.h jerror.h -jcmainct.o : jcmainct.c jinclude.h jconfig.h jpegint.h jpeglib.h jmorecfg.h \ - jerror.h -jcmarker.o : jcmarker.c jinclude.h jconfig.h jpegint.h jpeglib.h jmorecfg.h \ - jerror.h -jcmaster.o : jcmaster.c jinclude.h jconfig.h jpegint.h jpeglib.h jmorecfg.h \ - jerror.h -jcomapi.o : jcomapi.c jinclude.h jconfig.h jpegint.h jpeglib.h jmorecfg.h jerror.h -jcparam.o : jcparam.c jinclude.h jconfig.h jpegint.h jpeglib.h jmorecfg.h jerror.h -jcprepct.o : jcprepct.c jinclude.h jconfig.h jpegint.h jpeglib.h jmorecfg.h \ - jerror.h -jcsample.o : jcsample.c jinclude.h jconfig.h jpegint.h jpeglib.h jmorecfg.h \ - jerror.h -jdapi.o : jdapi.c jinclude.h jconfig.h jpegint.h jpeglib.h jmorecfg.h jerror.h -jdcoefct.o : jdcoefct.c jinclude.h jconfig.h jpegint.h jpeglib.h jmorecfg.h \ - jerror.h -jdcolor.o : jdcolor.c jinclude.h jconfig.h jpegint.h jpeglib.h jmorecfg.h jerror.h -jddctmgr.o : jddctmgr.c jinclude.h jconfig.h jpegint.h jpeglib.h jmorecfg.h \ - jerror.h -jdhuff.o : jdhuff.c jinclude.h jconfig.h jpegint.h jpeglib.h jmorecfg.h jerror.h -jdmainct.o : jdmainct.c jinclude.h jconfig.h jpegint.h jpeglib.h jmorecfg.h \ - jerror.h -jdmarker.o : jdmarker.c jinclude.h jconfig.h jpegint.h jpeglib.h jmorecfg.h \ - jerror.h -jdmaster.o : jdmaster.c jinclude.h jconfig.h jpegint.h jpeglib.h jmorecfg.h \ - jerror.h -jdpostct.o : jdpostct.c jinclude.h jconfig.h jpegint.h jpeglib.h jmorecfg.h \ - jerror.h -jdsample.o : jdsample.c jinclude.h jconfig.h jpegint.h jpeglib.h jmorecfg.h \ - jerror.h -jerror.o : jerror.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jversion.h jerror.h -jfwddct.o : jfwddct.c jinclude.h jconfig.h jpegint.h jpeglib.h jmorecfg.h jerror.h -jmemmgr.o : jmemmgr.c jinclude.h jconfig.h jpegint.h jpeglib.h jmorecfg.h jerror.h \ - jmemsys.h -jmemnobs.o : jmemnobs.c jinclude.h jconfig.h jpegint.h jpeglib.h jmorecfg.h \ - jerror.h jmemsys.h -jrevdct.o : jrevdct.c jinclude.h jconfig.h jpegint.h jpeglib.h jmorecfg.h jerror.h -jutils.o : jutils.c jinclude.h jconfig.h jpegint.h jpeglib.h jmorecfg.h jerror.h -rdppm.o : rdppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h \ - cderror.h -wrppm.o : wrppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h \ - cderror.h -wrraw.o : wrraw.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h \ - cderror.h -rdraw.o : rdraw.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h \ - cderror.h diff --git a/jpeg/djpeg.1 b/jpeg/djpeg.1 deleted file mode 100644 index 08f80c5c07..0000000000 --- a/jpeg/djpeg.1 +++ /dev/null @@ -1,245 +0,0 @@ -.TH DJPEG 1 "28 August 1994" -.SH NAME -djpeg \- decompress a JPEG file to an image file -.SH SYNOPSIS -.B djpeg -[ -.I options -] -[ -.I filename -] -.LP -.SH DESCRIPTION -.LP -.B djpeg -decompresses the named JPEG file, or the standard input if no file is named, -and produces an image file on the standard output. PBMPLUS (PPM/PGM), BMP, -GIF, Targa, or RLE (Utah Raster Toolkit) output format can be selected. -(RLE is supported only if the URT library is available.) -.SH OPTIONS -All switch names may be abbreviated; for example, -.B \-grayscale -may be written -.B \-gray -or -.BR \-gr . -Most of the "basic" switches can be abbreviated to as little as one letter. -Upper and lower case are equivalent (thus -.B \-GIF -is the same as -.BR \-gif ). -British spellings are also accepted (e.g., -.BR \-greyscale ), -though for brevity these are not mentioned below. -.PP -The basic switches are: -.TP -.BI \-colors " N" -Reduce image to at most N colors. This reduces the number of colors used in -the output image, so that it can be displayed on a colormapped display or -stored in a colormapped file format. For example, if you have an 8-bit -display, you'd need to reduce to 256 or fewer colors. -.TP -.BI \-quantize " N" -Same as -.BR \-colors . -.B \-colors -is the recommended name, -.B \-quantize -is provided only for backwards compatibility. -.TP -.B \-fast -Select recommended processing options for fast, low quality output. (The -default options are chosen for highest quality output.) Currently, this is -equivalent to \fB\-dct fast \-nosmooth \-onepass \-dither ordered\fR. -.TP -.B \-grayscale -Force gray-scale output even if JPEG file is color. Useful for viewing on -monochrome displays; also, -.B djpeg -runs noticeably faster in this mode. -.TP -.BI \-scale " M/N" -Scale the output image by a factor M/N. Currently the scale factor must be -1/1, 1/2, 1/4, or 1/8. Scaling is handy if the image is larger than your -screen; also, -.B djpeg -runs much faster when scaling down the output. -.TP -.B \-bmp -Select BMP output format (Windows flavor). 8-bit colormapped format is -emitted if -.B \-colors -or -.B \-grayscale -is specified, or if the JPEG file is gray-scale; otherwise, 24-bit full-color -format is emitted. -.TP -.B \-gif -Select GIF output format. Since GIF does not support more than 256 colors, -.B \-colors 256 -is assumed (unless you specify a smaller number of colors). -.TP -.B \-os2 -Select BMP output format (OS/2 1.x flavor). 8-bit colormapped format is -emitted if -.B \-colors -or -.B \-grayscale -is specified, or if the JPEG file is gray-scale; otherwise, 24-bit full-color -format is emitted. -.TP -.B \-pnm -Select PBMPLUS (PPM/PGM) output format (this is the default format). -PGM is emitted if the JPEG file is gray-scale or if -.B \-grayscale -is specified; otherwise PPM is emitted. -.TP -.B \-rle -Select RLE output format. (Requires URT library.) -.TP -.B \-targa -Select Targa output format. Gray-scale format is emitted if the JPEG file is -gray-scale or if -.B \-grayscale -is specified; otherwise, colormapped format is emitted if -.B \-colors -is specified; otherwise, 24-bit full-color format is emitted. -.PP -Switches for advanced users: -.TP -.B \-dct int -Use integer DCT method (default). -.TP -.B \-dct fast -Use fast integer DCT (less accurate). -.TP -.B \-dct float -Use floating-point DCT method. -The floating-point method is the most accurate, but will be the slowest unless -your machine has very fast floating-point hardware. Also note that results of -the floating-point method may vary slightly across machines, while the integer -methods should give the same results everywhere. The fast integer method is -much less accurate than the other two. -.TP -.B \-dither fs -Use Floyd-Steinberg dithering in color quantization. -.TP -.B \-dither ordered -Use ordered dithering in color quantization. -.TP -.B \-dither none -Do not use dithering in color quantization. -By default, Floyd-Steinberg dithering is applied when quantizing colors; this -is slow but usually produces the best results. Ordered dither is a compromise -between speed and quality; no dithering is fast but usually looks awful. Note -that these switches have no effect unless color quantization is being done. -Ordered dither is only available in -.B \-onepass -mode. -.TP -.BI \-map " file" -Quantize to the colors used in the specified image file. This is useful for -producing multiple files with identical color maps, or for forcing a -predefined set of colors to be used. The -.I file -must be a GIF or PPM file. This option overrides -.B \-colors -and -.BR \-onepass . -.TP -.B \-nosmooth -Use a faster, lower-quality upsampling routine. -.TP -.B \-onepass -Use one-pass instead of two-pass color quantization. The one-pass method is -faster and needs less memory, but it produces a lower-quality image. -.B \-onepass -is ignored unless you also say -.B \-colors -.IR N . -Also, the one-pass method is always used for gray-scale output (the two-pass -method is no improvement then). -.TP -.BI \-maxmemory " N" -Set limit for amount of memory to use in processing large images. Value is -in thousands of bytes, or millions of bytes if "M" is attached to the -number. For example, -.B \-max 4m -selects 4000000 bytes. If more space is needed, temporary files will be used. -.TP -.BI \-outfile " name" -Send output image to the named file, not to standard output. -.TP -.B \-verbose -Enable debug printout. More -.BR \-v 's -give more output. Also, version information is printed at startup. -.TP -.B \-debug -Same as -.BR \-verbose . -.SH EXAMPLES -.LP -This example decompresses the JPEG file foo.jpg, automatically quantizes to -256 colors, and saves the output in GIF format in foo.gif: -.IP -.B djpeg \-gif -.I foo.jpg -.B > -.I foo.gif -.SH HINTS -To get a quick preview of an image, use the -.B \-grayscale -and/or -.B \-scale -switches. -.B \-grayscale \-scale 1/8 -is the fastest case. -.PP -Several options are available that trade off image quality to gain speed. -.B \-fast -turns on the recommended settings. -.PP -.B \-dct fast -and/or -.B \-nosmooth -gain speed at a small sacrifice in quality. -When producing a color-quantized image, -.B \-onepass \-dither ordered -is fast but much lower quality than the default behavior. -.B \-dither none -may give acceptable results in two-pass mode, but is seldom tolerable in -one-pass mode. -.PP -If you are fortunate enough to have very fast floating point hardware, -.B \-dct float -may be even faster than \fB\-dct fast\fR. -.SH ENVIRONMENT -.TP -.B JPEGMEM -If this environment variable is set, its value is the default memory limit. -The value is specified as described for the -.B \-maxmemory -switch. -.B JPEGMEM -overrides the default value specified when the program was compiled, and -itself is overridden by an explicit -.BR \-maxmemory . -.SH SEE ALSO -.BR cjpeg (1), -.BR rdjpgcom (1), -.BR wrjpgcom (1) -.br -.BR ppm (5), -.BR pgm (5) -.br -Wallace, Gregory K. "The JPEG Still Picture Compression Standard", -Communications of the ACM, April 1991 (vol. 34, no. 4), pp. 30-44. -.SH AUTHOR -Independent JPEG Group -.SH BUGS -Arithmetic coding is not supported for legal reasons. -.PP -Still not as fast as we'd like. diff --git a/jpeg/djpeg.c b/jpeg/djpeg.c deleted file mode 100644 index 0df37552e8..0000000000 --- a/jpeg/djpeg.c +++ /dev/null @@ -1,736 +0,0 @@ -/* - * djpeg.c - * - * Copyright (C) 1991-1994, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains a command-line user interface for the JPEG decompressor. - * It should work on any system with Unix- or MS-DOS-style command lines. - * - * Two different command line styles are permitted, depending on the - * compile-time switch TWO_FILE_COMMANDLINE: - * djpeg [options] inputfile outputfile - * djpeg [options] [inputfile] - * In the second style, output is always to standard output, which you'd - * normally redirect to a file or pipe to some other program. Input is - * either from a named file or from standard input (typically redirected). - * The second style is convenient on Unix but is unhelpful on systems that - * don't support pipes. Also, you MUST use the first style if your system - * doesn't do binary I/O to stdin/stdout. - * To simplify script writing, the "-outfile" switch is provided. The syntax - * djpeg [options] -outfile outputfile inputfile - * works regardless of which command line style is used. - */ - -#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ -#define JMAKE_MSG_TABLE -#include "cderror.h" /* create message string table */ -#include "jversion.h" /* for version message */ - -#include <ctype.h> /* to declare isupper(),tolower(),isprint() */ -#ifdef NEED_SIGNAL_CATCHER -#include <signal.h> /* to declare signal() */ -#endif -#ifdef USE_SETMODE -#include <fcntl.h> /* to declare setmode()'s parameter macros */ -/* If you have setmode() but not <io.h>, just delete this line: */ -#include <io.h> /* to declare setmode() */ -#endif - -#ifdef USE_CCOMMAND /* command-line reader for Macintosh */ -#ifdef __MWERKS__ -#include <SIOUX.h> /* Metrowerks declares it here */ -#endif -#ifdef THINK_C -#include <console.h> /* Think declares it here */ -#endif -#endif - -#ifdef DONT_USE_B_MODE /* define mode parameters for fopen() */ -#define READ_BINARY "r" -#define WRITE_BINARY "w" -#else -#define READ_BINARY "rb" -#define WRITE_BINARY "wb" -#endif - -#ifndef EXIT_FAILURE /* define exit() codes if not provided */ -#define EXIT_FAILURE 1 -#endif -#ifndef EXIT_SUCCESS -#ifdef VMS -#define EXIT_SUCCESS 1 /* VMS is very nonstandard */ -#else -#define EXIT_SUCCESS 0 -#endif -#endif -#ifndef EXIT_WARNING -#ifdef VMS -#define EXIT_WARNING 1 /* VMS is very nonstandard */ -#else -#define EXIT_WARNING 2 -#endif -#endif - - -/* - * This list defines the known output image formats - * (not all of which need be supported by a given version). - * You can change the default output format by defining DEFAULT_FMT; - * indeed, you had better do so if you undefine PPM_SUPPORTED. - */ - -typedef enum { - FMT_BMP, /* BMP format (Windows flavor) */ - FMT_GIF, /* GIF format */ - FMT_OS2, /* BMP format (OS/2 flavor) */ - FMT_PPM, /* PPM/PGM (PBMPLUS formats) */ - FMT_RLE, /* RLE format */ - FMT_TARGA, /* Targa format */ - FMT_TIFF /* TIFF format */ -} IMAGE_FORMATS; - -#ifndef DEFAULT_FMT /* so can override from CFLAGS in Makefile */ -#define DEFAULT_FMT FMT_PPM -#endif - -static IMAGE_FORMATS requested_fmt; - - -/* - * Signal catcher to ensure that temporary files are removed before aborting. - * NB: for Amiga Manx C this is actually a global routine named _abort(); - * we put "#define signal_catcher _abort" in jconfig.h. Talk about bogus... - */ - -#ifdef NEED_SIGNAL_CATCHER - -static j_common_ptr sig_cinfo; - -GLOBAL void -signal_catcher (int signum) -{ - if (sig_cinfo != NULL) { - if (sig_cinfo->err != NULL) /* turn off trace output */ - sig_cinfo->err->trace_level = 0; - jpeg_destroy(sig_cinfo); /* clean up memory allocation & temp files */ - } - exit(EXIT_FAILURE); -} - -#endif - - -/* - * Optional routine to display a percent-done figure on stderr. - */ - -#ifdef PROGRESS_REPORT - -METHODDEF void -progress_monitor (j_common_ptr cinfo) -{ - cd_progress_ptr prog = (cd_progress_ptr) cinfo->progress; - int total_passes = prog->pub.total_passes + prog->total_extra_passes; - int percent_done = (int) (prog->pub.pass_counter*100L/prog->pub.pass_limit); - - if (percent_done != prog->percent_done) { - prog->percent_done = percent_done; - if (total_passes > 1) { - fprintf(stderr, "\rPass %d/%d: %3d%% ", - prog->pub.completed_passes + prog->completed_extra_passes + 1, - total_passes, percent_done); - } else { - fprintf(stderr, "\r %3d%% ", percent_done); - } - fflush(stderr); - } -} - -#endif - - -/* - * Argument-parsing code. - * The switch parser is designed to be useful with DOS-style command line - * syntax, ie, intermixed switches and file names, where only the switches - * to the left of a given file name affect processing of that file. - * The main program in this file doesn't actually use this capability... - */ - - -static const char * progname; /* program name for error messages */ -static char * outfilename; /* for -outfile switch */ - - -LOCAL void -usage (void) -/* complain about bad command line */ -{ - fprintf(stderr, "usage: %s [switches] ", progname); -#ifdef TWO_FILE_COMMANDLINE - fprintf(stderr, "inputfile outputfile\n"); -#else - fprintf(stderr, "[inputfile]\n"); -#endif - - fprintf(stderr, "Switches (names may be abbreviated):\n"); - fprintf(stderr, " -colors N Reduce image to no more than N colors\n"); - fprintf(stderr, " -fast Fast, low-quality processing\n"); - fprintf(stderr, " -grayscale Force grayscale output\n"); -#ifdef IDCT_SCALING_SUPPORTED - fprintf(stderr, " -scale M/N Scale output image by fraction M/N, eg, 1/8\n"); -#endif -#ifdef BMP_SUPPORTED - fprintf(stderr, " -bmp Select BMP output format (Windows style)%s\n", - (DEFAULT_FMT == FMT_BMP ? " (default)" : "")); -#endif -#ifdef GIF_SUPPORTED - fprintf(stderr, " -gif Select GIF output format%s\n", - (DEFAULT_FMT == FMT_GIF ? " (default)" : "")); -#endif -#ifdef BMP_SUPPORTED - fprintf(stderr, " -os2 Select BMP output format (OS/2 style)%s\n", - (DEFAULT_FMT == FMT_OS2 ? " (default)" : "")); -#endif -#ifdef PPM_SUPPORTED - fprintf(stderr, " -pnm Select PBMPLUS (PPM/PGM) output format%s\n", - (DEFAULT_FMT == FMT_PPM ? " (default)" : "")); -#endif -#ifdef RLE_SUPPORTED - fprintf(stderr, " -rle Select Utah RLE output format%s\n", - (DEFAULT_FMT == FMT_RLE ? " (default)" : "")); -#endif -#ifdef TARGA_SUPPORTED - fprintf(stderr, " -targa Select Targa output format%s\n", - (DEFAULT_FMT == FMT_TARGA ? " (default)" : "")); -#endif - fprintf(stderr, "Switches for advanced users:\n"); -#ifdef DCT_ISLOW_SUPPORTED - fprintf(stderr, " -dct int Use integer DCT method%s\n", - (JDCT_DEFAULT == JDCT_ISLOW ? " (default)" : "")); -#endif -#ifdef DCT_IFAST_SUPPORTED - fprintf(stderr, " -dct fast Use fast integer DCT (less accurate)%s\n", - (JDCT_DEFAULT == JDCT_IFAST ? " (default)" : "")); -#endif -#ifdef DCT_FLOAT_SUPPORTED - fprintf(stderr, " -dct float Use floating-point DCT method%s\n", - (JDCT_DEFAULT == JDCT_FLOAT ? " (default)" : "")); -#endif - fprintf(stderr, " -dither fs Use F-S dithering (default)\n"); - fprintf(stderr, " -dither none Don't use dithering in quantization\n"); - fprintf(stderr, " -dither ordered Use ordered dither (medium speed, quality)\n"); -#ifdef QUANT_2PASS_SUPPORTED - fprintf(stderr, " -map FILE Map to colors used in named image file\n"); -#endif - fprintf(stderr, " -nosmooth Don't use high-quality upsampling\n"); -#ifdef QUANT_1PASS_SUPPORTED - fprintf(stderr, " -onepass Use 1-pass quantization (fast, low quality)\n"); -#endif - fprintf(stderr, " -maxmemory N Maximum memory to use (in kbytes)\n"); - fprintf(stderr, " -outfile name Specify name for output file\n"); - fprintf(stderr, " -verbose or -debug Emit debug output\n"); - exit(EXIT_FAILURE); -} - - -LOCAL boolean -keymatch (char * arg, const char * keyword, int minchars) -/* Case-insensitive matching of (possibly abbreviated) keyword switches. */ -/* keyword is the constant keyword (must be lower case already), */ -/* minchars is length of minimum legal abbreviation. */ -{ - register int ca, ck; - register int nmatched = 0; - - while ((ca = *arg++) != '\0') { - if ((ck = *keyword++) == '\0') - return FALSE; /* arg longer than keyword, no good */ - if (isupper(ca)) /* force arg to lcase (assume ck is already) */ - ca = tolower(ca); - if (ca != ck) - return FALSE; /* no good */ - nmatched++; /* count matched characters */ - } - /* reached end of argument; fail if it's too short for unique abbrev */ - if (nmatched < minchars) - return FALSE; - return TRUE; /* A-OK */ -} - - -LOCAL int -parse_switches (j_decompress_ptr cinfo, int argc, char **argv, - int last_file_arg_seen, boolean for_real) -/* Parse optional switches. - * Returns argv[] index of first file-name argument (== argc if none). - * Any file names with indexes <= last_file_arg_seen are ignored; - * they have presumably been processed in a previous iteration. - * (Pass 0 for last_file_arg_seen on the first or only iteration.) - * for_real is FALSE on the first (dummy) pass; we may skip any expensive - * processing. - */ -{ - int argn; - char * arg; - - /* Set up default JPEG parameters. */ - requested_fmt = DEFAULT_FMT; /* set default output file format */ - outfilename = NULL; - cinfo->err->trace_level = 0; - - /* Scan command line options, adjust parameters */ - - for (argn = 1; argn < argc; argn++) { - arg = argv[argn]; - if (*arg != '-') { - /* Not a switch, must be a file name argument */ - if (argn <= last_file_arg_seen) { - outfilename = NULL; /* -outfile applies to just one input file */ - continue; /* ignore this name if previously processed */ - } - break; /* else done parsing switches */ - } - arg++; /* advance past switch marker character */ - - if (keymatch(arg, "bmp", 1)) { - /* BMP output format. */ - requested_fmt = FMT_BMP; - - } else if (keymatch(arg, "colors", 1) || keymatch(arg, "colours", 1) || - keymatch(arg, "quantize", 1) || keymatch(arg, "quantise", 1)) { - /* Do color quantization. */ - int val; - - if (++argn >= argc) /* advance to next argument */ - usage(); - if (sscanf(argv[argn], "%d", &val) != 1) - usage(); - cinfo->desired_number_of_colors = val; - cinfo->quantize_colors = TRUE; - - } else if (keymatch(arg, "dct", 2)) { - /* Select IDCT algorithm. */ - if (++argn >= argc) /* advance to next argument */ - usage(); - if (keymatch(argv[argn], "int", 1)) { - cinfo->dct_method = JDCT_ISLOW; - } else if (keymatch(argv[argn], "fast", 2)) { - cinfo->dct_method = JDCT_IFAST; - } else if (keymatch(argv[argn], "float", 2)) { - cinfo->dct_method = JDCT_FLOAT; - } else - usage(); - - } else if (keymatch(arg, "dither", 2)) { - /* Select dithering algorithm. */ - if (++argn >= argc) /* advance to next argument */ - usage(); - if (keymatch(argv[argn], "fs", 2)) { - cinfo->dither_mode = JDITHER_FS; - } else if (keymatch(argv[argn], "none", 2)) { - cinfo->dither_mode = JDITHER_NONE; - } else if (keymatch(argv[argn], "ordered", 2)) { - cinfo->dither_mode = JDITHER_ORDERED; - } else - usage(); - - } else if (keymatch(arg, "debug", 1) || keymatch(arg, "verbose", 1)) { - /* Enable debug printouts. */ - /* On first -d, print version identification */ - static boolean printed_version = FALSE; - - if (! printed_version) { - fprintf(stderr, "Independent JPEG Group's DJPEG, version %s\n%s\n", - JVERSION, JCOPYRIGHT); - printed_version = TRUE; - } - cinfo->err->trace_level++; - - } else if (keymatch(arg, "fast", 1)) { - /* Select recommended processing options for quick-and-dirty output. */ - cinfo->two_pass_quantize = FALSE; - cinfo->dither_mode = JDITHER_ORDERED; - if (! cinfo->quantize_colors) /* don't override an earlier -colors */ - cinfo->desired_number_of_colors = 216; - cinfo->dct_method = JDCT_FASTEST; - cinfo->do_fancy_upsampling = FALSE; - - } else if (keymatch(arg, "gif", 1)) { - /* GIF output format. */ - requested_fmt = FMT_GIF; - - } else if (keymatch(arg, "grayscale", 2) || keymatch(arg, "greyscale",2)) { - /* Force monochrome output. */ - cinfo->out_color_space = JCS_GRAYSCALE; - - } else if (keymatch(arg, "map", 3)) { - /* Quantize to a color map taken from an input file. */ - if (++argn >= argc) /* advance to next argument */ - usage(); - if (for_real) { /* too expensive to do twice! */ -#ifdef QUANT_2PASS_SUPPORTED /* otherwise can't quantize to supplied map */ - FILE * mapfile; - - if ((mapfile = fopen(argv[argn], READ_BINARY)) == NULL) { - fprintf(stderr, "%s: can't open %s\n", progname, argv[argn]); - exit(EXIT_FAILURE); - } - read_color_map(cinfo, mapfile); - fclose(mapfile); - cinfo->quantize_colors = TRUE; -#else - ERREXIT(cinfo, JERR_NOT_COMPILED); -#endif - } - - } else if (keymatch(arg, "maxmemory", 3)) { - /* Maximum memory in Kb (or Mb with 'm'). */ - long lval; - char ch = 'x'; - - if (++argn >= argc) /* advance to next argument */ - usage(); - if (sscanf(argv[argn], "%ld%c", &lval, &ch) < 1) - usage(); - if (ch == 'm' || ch == 'M') - lval *= 1000L; - cinfo->mem->max_memory_to_use = lval * 1000L; - - } else if (keymatch(arg, "nosmooth", 3)) { - /* Suppress fancy upsampling */ - cinfo->do_fancy_upsampling = FALSE; - - } else if (keymatch(arg, "onepass", 3)) { - /* Use fast one-pass quantization. */ - cinfo->two_pass_quantize = FALSE; - - } else if (keymatch(arg, "os2", 3)) { - /* BMP output format (OS/2 flavor). */ - requested_fmt = FMT_OS2; - - } else if (keymatch(arg, "outfile", 4)) { - /* Set output file name. */ - if (++argn >= argc) /* advance to next argument */ - usage(); - outfilename = argv[argn]; /* save it away for later use */ - - } else if (keymatch(arg, "pnm", 1) || keymatch(arg, "ppm", 1)) { - /* PPM/PGM output format. */ - requested_fmt = FMT_PPM; - - } else if (keymatch(arg, "rle", 1)) { - /* RLE output format. */ - requested_fmt = FMT_RLE; - - } else if (keymatch(arg, "scale", 1)) { - /* Scale the output image by a fraction M/N. */ - if (++argn >= argc) /* advance to next argument */ - usage(); - if (sscanf(argv[argn], "%d/%d", - &cinfo->scale_num, &cinfo->scale_denom) != 2) - usage(); - - } else if (keymatch(arg, "targa", 1)) { - /* Targa output format. */ - requested_fmt = FMT_TARGA; - - } else { - usage(); /* bogus switch */ - } - } - - return argn; /* return index of next arg (file name) */ -} - - -/* - * Marker processor for COM markers. - * This replaces the library's built-in processor, which just skips the marker. - * We want to print out the marker as text, if possible. - * Note this code relies on a non-suspending data source. - */ - -LOCAL unsigned int -jpeg_getc (j_decompress_ptr cinfo) -/* Read next byte */ -{ - struct jpeg_source_mgr * datasrc = cinfo->src; - - if (datasrc->bytes_in_buffer == 0) { - if (! (*datasrc->fill_input_buffer) (cinfo)) - ERREXIT(cinfo, JERR_CANT_SUSPEND); - } - datasrc->bytes_in_buffer--; - return GETJOCTET(*datasrc->next_input_byte++); -} - - -METHODDEF boolean -COM_handler (j_decompress_ptr cinfo) -{ - boolean traceit = (cinfo->err->trace_level >= 1); - INT32 length; - unsigned int ch; - unsigned int lastch = 0; - - length = jpeg_getc(cinfo) << 8; - length += jpeg_getc(cinfo); - length -= 2; /* discount the length word itself */ - - if (traceit) - fprintf(stderr, "Comment, length %ld:\n", (long) length); - - while (--length >= 0) { - ch = jpeg_getc(cinfo); - if (traceit) { - /* Emit the character in a readable form. - * Nonprintables are converted to \nnn form, - * while \ is converted to \\. - * Newlines in CR, CR/LF, or LF form will be printed as one newline. - */ - if (ch == '\r') { - fprintf(stderr, "\n"); - } else if (ch == '\n') { - if (lastch != '\r') - fprintf(stderr, "\n"); - } else if (ch == '\\') { - fprintf(stderr, "\\\\"); - } else if (isprint(ch)) { - putc(ch, stderr); - } else { - fprintf(stderr, "\\%03o", ch); - } - lastch = ch; - } - } - - if (traceit) - fprintf(stderr, "\n"); - - return TRUE; -} - - -/* - * The main program. - */ - -GLOBAL int -main (int argc, char **argv) -{ - struct jpeg_decompress_struct cinfo; - struct jpeg_error_mgr jerr; -#ifdef PROGRESS_REPORT - struct cdjpeg_progress_mgr progress; -#endif - int file_index; - djpeg_dest_ptr dest_mgr = NULL; - FILE * input_file; - FILE * output_file; - JDIMENSION num_scanlines; - - /* On Mac, fetch a command line. */ -#ifdef USE_CCOMMAND - argc = ccommand(&argv); -#endif - - progname = argv[0]; - if (progname == NULL || progname[0] == 0) - progname = "djpeg"; /* in case C library doesn't provide it */ - - /* Initialize the JPEG decompression object with default error handling. */ - cinfo.err = jpeg_std_error(&jerr); - jpeg_create_decompress(&cinfo); - /* Add some application-specific error messages (from cderror.h) */ - jerr.addon_message_table = addon_message_table; - jerr.first_addon_message = JMSG_FIRSTADDONCODE; - jerr.last_addon_message = JMSG_LASTADDONCODE; - /* Insert custom COM marker processor. */ - jpeg_set_marker_processor(&cinfo, JPEG_COM, COM_handler); - - /* Now safe to enable signal catcher. */ -#ifdef NEED_SIGNAL_CATCHER - sig_cinfo = (j_common_ptr) &cinfo; - signal(SIGINT, signal_catcher); -#ifdef SIGTERM /* not all systems have SIGTERM */ - signal(SIGTERM, signal_catcher); -#endif -#endif - - /* Scan command line to find file names. */ - /* It is convenient to use just one switch-parsing routine, but the switch - * values read here are ignored; we will rescan the switches after opening - * the input file. - * (Exception: tracing level set here controls verbosity for COM markers - * found during jpeg_read_header...) - */ - - file_index = parse_switches(&cinfo, argc, argv, 0, FALSE); - -#ifdef TWO_FILE_COMMANDLINE - /* Must have either -outfile switch or explicit output file name */ - if (outfilename == NULL) { - if (file_index != argc-2) { - fprintf(stderr, "%s: must name one input and one output file\n", - progname); - usage(); - } - outfilename = argv[file_index+1]; - } else { - if (file_index != argc-1) { - fprintf(stderr, "%s: must name one input and one output file\n", - progname); - usage(); - } - } -#else - /* Unix style: expect zero or one file name */ - if (file_index < argc-1) { - fprintf(stderr, "%s: only one input file\n", progname); - usage(); - } -#endif /* TWO_FILE_COMMANDLINE */ - - /* Open the input file. */ - if (file_index < argc) { - if ((input_file = fopen(argv[file_index], READ_BINARY)) == NULL) { - fprintf(stderr, "%s: can't open %s\n", progname, argv[file_index]); - exit(EXIT_FAILURE); - } - } else { - /* default input file is stdin */ -#ifdef USE_SETMODE /* need to hack file mode? */ - setmode(fileno(stdin), O_BINARY); -#endif -#ifdef USE_FDOPEN /* need to re-open in binary mode? */ - if ((input_file = fdopen(fileno(stdin), READ_BINARY)) == NULL) { - fprintf(stderr, "%s: can't open stdin\n", progname); - exit(EXIT_FAILURE); - } -#else - input_file = stdin; -#endif - } - - /* Open the output file. */ - if (outfilename != NULL) { - if ((output_file = fopen(outfilename, WRITE_BINARY)) == NULL) { - fprintf(stderr, "%s: can't open %s\n", progname, outfilename); - exit(EXIT_FAILURE); - } - } else { - /* default output file is stdout */ -#ifdef USE_SETMODE /* need to hack file mode? */ - setmode(fileno(stdout), O_BINARY); -#endif -#ifdef USE_FDOPEN /* need to re-open in binary mode? */ - if ((output_file = fdopen(fileno(stdout), WRITE_BINARY)) == NULL) { - fprintf(stderr, "%s: can't open stdout\n", progname); - exit(EXIT_FAILURE); - } -#else - output_file = stdout; -#endif - } - -#ifdef PROGRESS_REPORT - /* Enable progress display, unless trace output is on */ - if (jerr.trace_level == 0) { - progress.pub.progress_monitor = progress_monitor; - progress.completed_extra_passes = 0; - progress.total_extra_passes = 0; - progress.percent_done = -1; - cinfo.progress = &progress.pub; - } -#endif - - /* Specify data source for decompression */ - jpeg_stdio_src(&cinfo, input_file); - - /* Read file header, set default decompression parameters */ - (void) jpeg_read_header(&cinfo, TRUE); - - /* Adjust default decompression parameters by re-parsing the options */ - file_index = parse_switches(&cinfo, argc, argv, 0, TRUE); - - /* Initialize the output module now to let it override any crucial - * option settings (for instance, GIF wants to force color quantization). - */ - switch (requested_fmt) { -#ifdef BMP_SUPPORTED - case FMT_BMP: - dest_mgr = jinit_write_bmp(&cinfo, FALSE); - break; - case FMT_OS2: - dest_mgr = jinit_write_bmp(&cinfo, TRUE); - break; -#endif -#ifdef GIF_SUPPORTED - case FMT_GIF: - dest_mgr = jinit_write_gif(&cinfo); - break; -#endif -#ifdef PPM_SUPPORTED - case FMT_PPM: - dest_mgr = jinit_write_ppm(&cinfo); - break; -#endif -#ifdef RLE_SUPPORTED - case FMT_RLE: - dest_mgr = jinit_write_rle(&cinfo); - break; -#endif -#ifdef TARGA_SUPPORTED - case FMT_TARGA: - dest_mgr = jinit_write_targa(&cinfo); - break; -#endif - default: - ERREXIT(&cinfo, JERR_UNSUPPORTED_FORMAT); - break; - } - dest_mgr->output_file = output_file; - - /* Start decompressor */ - jpeg_start_decompress(&cinfo); - - /* Write output file header */ - (*dest_mgr->start_output) (&cinfo, dest_mgr); - - /* Process data */ - while (cinfo.output_scanline < cinfo.output_height) { - num_scanlines = jpeg_read_scanlines(&cinfo, dest_mgr->buffer, - dest_mgr->buffer_height); - (*dest_mgr->put_pixel_rows) (&cinfo, dest_mgr, num_scanlines); - } - -#ifdef PROGRESS_REPORT - /* Hack: count final pass as done in case finish_output does an extra pass. - * The library won't have updated completed_passes. - */ - progress.pub.completed_passes = progress.pub.total_passes; -#endif - - /* Finish decompression and release memory. - * I must do it in this order because output module has allocated memory - * of lifespan JPOOL_IMAGE; it needs to finish before releasing memory. - */ - (*dest_mgr->finish_output) (&cinfo, dest_mgr); - jpeg_finish_decompress(&cinfo); - jpeg_destroy_decompress(&cinfo); - -#ifdef PROGRESS_REPORT - /* Clear away progress display */ - if (jerr.trace_level == 0) { - fprintf(stderr, "\r \r"); - fflush(stderr); - } -#endif - - /* All done. */ - exit(jerr.num_warnings ? EXIT_WARNING : EXIT_SUCCESS); - return 0; /* suppress no-return-value warnings */ -} diff --git a/jpeg/example.c b/jpeg/example.c deleted file mode 100644 index cb8c64a179..0000000000 --- a/jpeg/example.c +++ /dev/null @@ -1,417 +0,0 @@ -/* - * example.c - * - * This file illustrates how to use the IJG code as a subroutine library - * to read or write JPEG image files. You should look at this code in - * conjunction with the documentation file libjpeg.doc. - * - * This code will not do anything useful as-is, but it may be helpful as a - * skeleton for constructing routines that call the JPEG library. - * - * We present these routines in the same coding style used in the JPEG code - * (ANSI function definitions, etc); but you are of course free to code your - * routines in a different style if you prefer. - */ - -#include <stdio.h> - -/* - * Include file for users of JPEG library. - * You will need to have included system headers that define at least - * the typedefs FILE and size_t before you can include jpeglib.h. - * (stdio.h is sufficient on ANSI-conforming systems.) - * You may also wish to include "jerror.h". - */ - -#include "jpeglib.h" - -/* - * <setjmp.h> is used for the optional error recovery mechanism shown in - * the second part of the example. - */ - -#include <setjmp.h> - - - -/******************** JPEG COMPRESSION SAMPLE INTERFACE *******************/ - -/* This half of the example shows how to feed data into the JPEG compressor. - * We present a minimal version that does not worry about refinements such - * as error recovery (the JPEG code will just exit() if it gets an error). - */ - - -/* - * IMAGE DATA FORMATS: - * - * The standard input image format is a rectangular array of pixels, with - * each pixel having the same number of "component" values (color channels). - * Each pixel row is an array of JSAMPLEs (which typically are unsigned chars). - * If you are working with color data, then the color values for each pixel - * must be adjacent in the row; for example, R,G,B,R,G,B,R,G,B,... for 24-bit - * RGB color. - * - * For this example, we'll assume that this data structure matches the way - * our application has stored the image in memory, so we can just pass a - * pointer to our image buffer. In particular, let's say that the image is - * RGB color and is described by: - */ - -extern JSAMPLE * image_buffer; /* Points to large array of R,G,B-order data */ -extern int image_height; /* Number of rows in image */ -extern int image_width; /* Number of columns in image */ - - -/* - * Sample routine for JPEG compression. We assume that the target file name - * and a compression quality factor are passed in. - */ - -GLOBAL void -write_JPEG_file (char * filename, int quality) -{ - /* This struct contains the JPEG compression parameters and pointers to - * working space (which is allocated as needed by the JPEG library). - * It is possible to have several such structures, representing multiple - * compression/decompression processes, in existence at once. We refer - * to any one struct (and its associated working data) as a "JPEG object". - */ - struct jpeg_compress_struct cinfo; - /* This struct represents a JPEG error handler. It is declared separately - * because applications often want to supply a specialized error handler - * (see the second half of this file for an example). But here we just - * take the easy way out and use the standard error handler, which will - * print a message on stderr and call exit() if compression fails. - */ - struct jpeg_error_mgr jerr; - /* More stuff */ - FILE * outfile; /* target file */ - JSAMPROW row_pointer[1]; /* pointer to JSAMPLE row[s] */ - int row_stride; /* physical row width in image buffer */ - - /* Step 1: allocate and initialize JPEG compression object */ - - /* We have to set up the error handler first, in case the initialization - * step fails. (Unlikely, but it could happen if you are out of memory.) - * This routine fills in the contents of struct jerr, and returns jerr's - * address which we place into the link field in cinfo. - */ - cinfo.err = jpeg_std_error(&jerr); - /* Now we can initialize the JPEG compression object. */ - jpeg_create_compress(&cinfo); - - /* Step 2: specify data destination (eg, a file) */ - /* Note: steps 2 and 3 can be done in either order. */ - - /* Here we use the library-supplied code to send compressed data to a - * stdio stream. You can also write your own code to do something else. - * VERY IMPORTANT: use "b" option to fopen() if you are on a machine that - * requires it in order to write binary files. - */ - if ((outfile = fopen(filename, "wb")) == NULL) { - fprintf(stderr, "can't open %s\n", filename); - exit(1); - } - jpeg_stdio_dest(&cinfo, outfile); - - /* Step 3: set parameters for compression */ - - /* First we supply a description of the input image. - * Four fields of the cinfo struct must be filled in: - */ - cinfo.image_width = image_width; /* image width and height, in pixels */ - cinfo.image_height = image_height; - cinfo.input_components = 3; /* # of color components per pixel */ - cinfo.in_color_space = JCS_RGB; /* colorspace of input image */ - /* Now use the library's routine to set default compression parameters. - * (You must set at least cinfo.in_color_space before calling this, - * since the defaults depend on the source color space.) - */ - jpeg_set_defaults(&cinfo); - /* Now you can set any non-default parameters you wish to. - * Here we just illustrate the use of quality (quantization table) scaling: - */ - jpeg_set_quality(&cinfo, quality, TRUE /* limit to baseline-JPEG values */); - - /* Step 4: Start compressor */ - - /* TRUE ensures that we will write a complete interchange-JPEG file. - * Pass TRUE unless you are very sure of what you're doing. - */ - jpeg_start_compress(&cinfo, TRUE); - - /* Step 5: while (scan lines remain to be written) */ - /* jpeg_write_scanlines(...); */ - - /* Here we use the library's state variable cinfo.next_scanline as the - * loop counter, so that we don't have to keep track ourselves. - * To keep things simple, we pass one scanline per call; you can pass - * more if you wish, though. - */ - row_stride = image_width * 3; /* JSAMPLEs per row in image_buffer */ - - while (cinfo.next_scanline < cinfo.image_height) { - row_pointer[0] = & image_buffer[cinfo.next_scanline * row_stride]; - (void) jpeg_write_scanlines(&cinfo, row_pointer, 1); - } - - /* Step 6: Finish compression */ - - jpeg_finish_compress(&cinfo); - /* After finish_compress, we can close the output file. */ - fclose(outfile); - - /* Step 7: release JPEG compression object */ - - /* This is an important step since it will release a good deal of memory. */ - jpeg_destroy_compress(&cinfo); - - /* And we're done! */ -} - - -/* - * SOME FINE POINTS: - * - * In the above loop, we ignored the return value of jpeg_write_scanlines, - * which is the number of scanlines actually written. We could get away - * with this because we were only relying on the value of cinfo.next_scanline, - * which will be incremented correctly. If you maintain additional loop - * variables then you should be careful to increment them properly. - * Actually, for output to a stdio stream you needn't worry, because - * then jpeg_write_scanlines will write all the lines passed (or else exit - * with a fatal error). Partial writes can only occur if you use a data - * destination module that can demand suspension of the compressor. - * (If you don't know what that's for, you don't need it.) - * - * If the compressor requires full-image buffers (for entropy-coding - * optimization or a noninterleaved JPEG file), it will create temporary - * files for anything that doesn't fit within the maximum-memory setting. - * (Note that temp files are NOT needed if you use the default parameters.) - * On some systems you may need to set up a signal handler to ensure that - * temporary files are deleted if the program is interrupted. See libjpeg.doc. - * - * Scanlines MUST be supplied in top-to-bottom order if you want your JPEG - * files to be compatible with everyone else's. If you cannot readily read - * your data in that order, you'll need an intermediate array to hold the - * image. See rdtarga.c or rdbmp.c for examples of handling bottom-to-top - * source data using the JPEG code's internal virtual-array mechanisms. - */ - - - -/******************** JPEG DECOMPRESSION SAMPLE INTERFACE *******************/ - -/* This half of the example shows how to read data from the JPEG decompressor. - * It's a bit more refined than the above, in that we show: - * (a) how to modify the JPEG library's standard error-reporting behavior; - * (b) how to allocate workspace using the library's memory manager. - * - * Just to make this example a little different from the first one, we'll - * assume that we do not intend to put the whole image into an in-memory - * buffer, but to send it line-by-line someplace else. We need a one- - * scanline-high JSAMPLE array as a work buffer, and we will let the JPEG - * memory manager allocate it for us. This approach is actually quite useful - * because we don't need to remember to deallocate the buffer separately: it - * will go away automatically when the JPEG object is cleaned up. - */ - - -/* - * ERROR HANDLING: - * - * The JPEG library's standard error handler (jerror.c) is divided into - * several "methods" which you can override individually. This lets you - * adjust the behavior without duplicating a lot of code, which you might - * have to update with each future release. - * - * Our example here shows how to override the "error_exit" method so that - * control is returned to the library's caller when a fatal error occurs, - * rather than calling exit() as the standard error_exit method does. - * - * We use C's setjmp/longjmp facility to return control. This means that the - * routine which calls the JPEG library must first execute a setjmp() call to - * establish the return point. We want the replacement error_exit to do a - * longjmp(). But we need to make the setjmp buffer accessible to the - * error_exit routine. To do this, we make a private extension of the - * standard JPEG error handler object. (If we were using C++, we'd say we - * were making a subclass of the regular error handler.) - * - * Here's the extended error handler struct: - */ - -struct my_error_mgr { - struct jpeg_error_mgr pub; /* "public" fields */ - - jmp_buf setjmp_buffer; /* for return to caller */ -}; - -typedef struct my_error_mgr * my_error_ptr; - -/* - * Here's the routine that will replace the standard error_exit method: - */ - -METHODDEF void -my_error_exit (j_common_ptr cinfo) -{ - /* cinfo->err really points to a my_error_mgr struct, so coerce pointer */ - my_error_ptr myerr = (my_error_ptr) cinfo->err; - - /* Always display the message. */ - /* We could postpone this until after returning, if we chose. */ - (*cinfo->err->output_message) (cinfo); - - /* Return control to the setjmp point */ - longjmp(myerr->setjmp_buffer, 1); -} - - -/* - * Sample routine for JPEG decompression. We assume that the source file name - * is passed in. We want to return 1 on success, 0 on error. - */ - - -GLOBAL int -read_JPEG_file (char * filename) -{ - /* This struct contains the JPEG decompression parameters and pointers to - * working space (which is allocated as needed by the JPEG library). - */ - struct jpeg_decompress_struct cinfo; - /* We use our private extension JPEG error handler. */ - struct my_error_mgr jerr; - /* More stuff */ - FILE * infile; /* source file */ - JSAMPARRAY buffer; /* Output row buffer */ - int row_stride; /* physical row width in output buffer */ - - /* In this example we want to open the input file before doing anything else, - * so that the setjmp() error recovery below can assume the file is open. - * VERY IMPORTANT: use "b" option to fopen() if you are on a machine that - * requires it in order to read binary files. - */ - - if ((infile = fopen(filename, "rb")) == NULL) { - fprintf(stderr, "can't open %s\n", filename); - return 0; - } - - /* Step 1: allocate and initialize JPEG decompression object */ - - /* We set up the normal JPEG error routines, then override error_exit. */ - cinfo.err = jpeg_std_error(&jerr.pub); - jerr.pub.error_exit = my_error_exit; - /* Establish the setjmp return context for my_error_exit to use. */ - if (setjmp(jerr.setjmp_buffer)) { - /* If we get here, the JPEG code has signaled an error. - * We need to clean up the JPEG object, close the input file, and return. - */ - jpeg_destroy_decompress(&cinfo); - fclose(infile); - return 0; - } - /* Now we can initialize the JPEG decompression object. */ - jpeg_create_decompress(&cinfo); - - /* Step 2: specify data source (eg, a file) */ - - jpeg_stdio_src(&cinfo, infile); - - /* Step 3: read file parameters with jpeg_read_header() */ - - (void) jpeg_read_header(&cinfo, TRUE); - /* We can ignore the return value from jpeg_read_header since - * (a) suspension is not possible with the stdio data source, and - * (b) we passed TRUE to reject a tables-only JPEG file as an error. - * See libjpeg.doc for more info. - */ - - /* Step 4: set parameters for decompression */ - - /* In this example, we don't need to change any of the defaults set by - * jpeg_read_header(), so we do nothing here. - */ - - /* Step 5: Start decompressor */ - - jpeg_start_decompress(&cinfo); - - /* We may need to do some setup of our own at this point before reading - * the data. After jpeg_start_decompress() we have the correct scaled - * output image dimensions available, as well as the output colormap - * if we asked for color quantization. - * In this example, we need to make an output work buffer of the right size. - */ - /* JSAMPLEs per row in output buffer */ - row_stride = cinfo.output_width * cinfo.output_components; - /* Make a one-row-high sample array that will go away when done with image */ - buffer = (*cinfo.mem->alloc_sarray) - ((j_common_ptr) &cinfo, JPOOL_IMAGE, row_stride, 1); - - /* Step 6: while (scan lines remain to be read) */ - /* jpeg_read_scanlines(...); */ - - /* Here we use the library's state variable cinfo.output_scanline as the - * loop counter, so that we don't have to keep track ourselves. - */ - while (cinfo.output_scanline < cinfo.output_height) { - (void) jpeg_read_scanlines(&cinfo, buffer, 1); - /* Assume put_scanline_someplace wants a pointer and sample count. */ - put_scanline_someplace(buffer[0], row_stride); - } - - /* Step 7: Finish decompression */ - - (void) jpeg_finish_decompress(&cinfo); - /* We can ignore the return value since suspension is not possible - * with the stdio data source. - */ - - /* Step 8: Release JPEG decompression object */ - - /* This is an important step since it will release a good deal of memory. */ - jpeg_destroy_decompress(&cinfo); - - /* After finish_decompress, we can close the input file. - * Here we postpone it until after no more JPEG errors are possible, - * so as to simplify the setjmp error logic above. (Actually, I don't - * think that jpeg_destroy can do an error exit, but why assume anything...) - */ - fclose(infile); - - /* At this point you may want to check to see whether any corrupt-data - * warnings occurred (test whether jerr.pub.num_warnings is nonzero). - */ - - /* And we're done! */ - return 1; -} - - -/* - * SOME FINE POINTS: - * - * In the above code, we ignored the return value of jpeg_read_scanlines, - * which is the number of scanlines actually read. We could get away with - * this because we asked for only one line at a time and we weren't using - * a suspending data source. See libjpeg.doc for more info. - * - * We cheated a bit by calling alloc_sarray() after jpeg_start_decompress(); - * we should have done it beforehand to ensure that the space would be - * counted against the JPEG max_memory setting. In some systems the above - * code would risk an out-of-memory error. However, in general we don't - * know the output image dimensions before jpeg_start_decompress(), unless we - * call jpeg_calc_output_dimensions(). See libjpeg.doc for more about this. - * - * Scanlines are returned in the same order as they appear in the JPEG file, - * which is standardly top-to-bottom. If you must emit data bottom-to-top, - * you can use one of the virtual arrays provided by the JPEG memory manager - * to invert the data. See wrbmp.c for an example. - * - * As with compression, some operating modes may require temporary files. - * On some systems you may need to set up a signal handler to ensure that - * temporary files are deleted if the program is interrupted. See libjpeg.doc. - */ diff --git a/jpeg/filelist.doc b/jpeg/filelist.doc deleted file mode 100644 index 0965b74315..0000000000 --- a/jpeg/filelist.doc +++ /dev/null @@ -1,185 +0,0 @@ -IJG JPEG LIBRARY: FILE LIST - -Copyright (C) 1994, Thomas G. Lane. -This file is part of the Independent JPEG Group's software. -For conditions of distribution and use, see the accompanying README file. - - -Here is a road map to the files in the IJG JPEG distribution. The -distribution includes the JPEG library proper, plus two application -programs ("cjpeg" and "djpeg") which use the library to convert JPEG -files to and from some other popular image formats. There are also -two stand-alone applications, "rdjpgcom" and "wrjpgcom". - - -THE JPEG LIBRARY -================ - -Include files: - -jpeglib.h JPEG library's exported data and function declarations. -jconfig.h Configuration declarations. Note: this file is not present - in the distribution; it is generated during installation. -jmorecfg.h Additional configuration declarations; need not be changed - for a standard installation. -jerror.h Declares JPEG library's error and trace message codes. -jinclude.h Central include file used by library's .c files. -jpegint.h JPEG library's internal data structures. -jdct.h Private declarations for forward & reverse DCT subsystems. -jmemsys.h Private declarations for memory management subsystem. -jversion.h Version information. - -Applications using the library should include jpeglib.h (which in turn -includes jconfig.h and jmorecfg.h). Optionally, jerror.h may be included -if the application needs to reference individual JPEG error codes. The -other include files are intended for internal use and would not normally -be included by an application program. (cjpeg/djpeg do use jinclude.h, -since its function is to improve portability of the whole IJG distribution. -Most other applications will directly include the system include files they -want, and hence won't need jinclude.h.) - - -C source code files: - -These files contain most of the functions intended to be called directly by -an application program: - -jcapi.c Application program interface routines for compression. -jdapi.c Application program interface routines for decompression. -jcomapi.c Application program interface routines common to compression - and decompression. -jcparam.c Compression parameter setting helper routines. - -Compression side of the library: - -jcmaster.c Master control: determines which other modules to use. -jcmainct.c Main buffer controller (preprocessor => JPEG compressor). -jcprepct.c Preprocessor buffer controller. -jccoefct.c Buffer controller for DCT coefficient buffer. -jccolor.c Color space conversion. -jcsample.c Downsampling. -jcdctmgr.c DCT manager (DCT implementation selection & control). -jfdctint.c Forward DCT using slow-but-accurate integer method. -jfdctfst.c Forward DCT using faster, less accurate integer method. -jfdctflt.c Forward DCT using floating-point arithmetic. -jchuff.c Huffman entropy coding. -jcmarker.c JPEG marker writing. -jdatadst.c Data destination manager for stdio output. - -Decompression side of the library: - -jdmaster.c Master control: determines which other modules to use. -jdmainct.c Main buffer controller (JPEG decompressor => postprocessor). -jdcoefct.c Buffer controller for DCT coefficient buffer. -jdpostct.c Postprocessor buffer controller. -jdmarker.c JPEG marker reading. -jdhuff.c Huffman entropy decoding. -jddctmgr.c IDCT manager (IDCT implementation selection & control). -jidctint.c Inverse DCT using slow-but-accurate integer method. -jidctfst.c Inverse DCT using faster, less accurate integer method. -jidctflt.c Inverse DCT using floating-point arithmetic. -jidctred.c Inverse DCTs with reduced-size outputs. -jdsample.c Upsampling. -jdcolor.c Color space conversion. -jdmerge.c Merged upsampling/color conversion (faster, lower quality). -jquant1.c One-pass color quantization using a fixed-spacing colormap. -jquant2.c Two-pass color quantization using a custom-generated colormap. - Also handles one-pass quantization to an externally given map. -jdatasrc.c Data source manager for stdio input. - -Support files for both compression and decompression: - -jerror.c Standard error handling routines (application replaceable). -jmemmgr.c System-independent (more or less) memory management code. -jutils.c Miscellaneous utility routines. - -jmemmgr.c relies on a system-dependent memory management module. The IJG -distribution includes the following implementations of the system-dependent -module: - -jmemnobs.c "No backing store": assumes adequate virtual memory exists. -jmemansi.c Makes temporary files with ANSI-standard routine tmpfile(). -jmemname.c Makes temporary files with program-generated file names. -jmemdos.c Custom implementation for MS-DOS: knows about extended and - expanded memory as well as temporary files. - -Exactly one of the system-dependent modules should be configured into an -installed JPEG library (see install.doc for hints about which one to use). -On unusual systems you may find it worthwhile to make a special -system-dependent memory manager. - - -Non-C source code files: - -jmemdosa.asm 80x86 assembly code support for jmemdos.c; used only in - MS-DOS-specific configurations of the JPEG library. - - -CJPEG/DJPEG -=========== - -Include files: - -cdjpeg.h Declarations shared by cjpeg/djpeg modules. -cderror.h Additional error and trace message codes for cjpeg/djpeg. - -C source code files: - -cjpeg.c Main program for cjpeg. -djpeg.c Main program for djpeg. -rdcolmap.c Code to read a colormap file for djpeg's "-map" option. - -Image file reader modules for cjpeg: - -rdbmp.c BMP file input. -rdgif.c GIF file input. -rdppm.c PPM/PGM file input. -rdrle.c Utah RLE file input. -rdtarga.c Targa file input. - -Image file writer modules for djpeg: - -wrbmp.c BMP file output. -wrgif.c GIF file output. -wrppm.c PPM/PGM file output. -wrrle.c Utah RLE file output. -wrtarga.c Targa file output. - - -RDJPGCOM/WRJPGCOM -================= - -C source code files: - -rdjpgcom.c Stand-alone rdjpgcom application. -wrjpgcom.c Stand-alone wrjpgcom application. - -These programs do not depend on the IJG library. They do use -jconfig.h and jinclude.h, simply to improve portability. - - -ADDITIONAL FILES -================ - -Documentation (see README for a guide to the documentation files): - -README Master documentation file. -*.doc Other documentation files. -*.1 Documentation in Unix man page format. -change.log Version-to-version change highlights. -example.c Sample code for calling JPEG library. - -Configuration/installation files and programs (see install.doc for more info): - -configure Unix shell script to perform automatic configuration. -ckconfig.c Program to generate jconfig.h on non-Unix systems. -jconfig.doc Template for making jconfig.h by hand. -makefile.* Sample makefiles for particular systems. -jconfig.* Sample jconfig.h for particular systems. -ansi2knr.c De-ANSIfier for pre-ANSI C compilers (courtesy of - L. Peter Deutsch and Aladdin Enterprises). - -Test files (see install.doc for test procedure): - -test*.* Source and comparison files for confidence test. - These are binary image files, NOT text files. diff --git a/jpeg/filelist.doc.gz b/jpeg/filelist.doc.gz deleted file mode 100644 index 839b3d52da0303ee4a7055d998cecd615479c743..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2331 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 TJ-;#iQaxk--ZaTGVhjubTO)-= diff --git a/jpeg/install.doc b/jpeg/install.doc deleted file mode 100644 index 289ce24566..0000000000 --- a/jpeg/install.doc +++ /dev/null @@ -1,745 +0,0 @@ -INSTALLATION INSTRUCTIONS for the Independent JPEG Group's JPEG software - -Copyright (C) 1991-1994, Thomas G. Lane. -This file is part of the Independent JPEG Group's software. -For conditions of distribution and use, see the accompanying README file. - - -This file explains how to configure and install the IJG software. We have -tried to make this software extremely portable and flexible, so that it can be -adapted to almost any environment. The downside of this decision is that the -installation process is complicated. We have provided shortcuts to simplify -the task on common systems. But in any case, you will need at least a little -familiarity with C programming and program build procedures for your system. - -If you are only using this software as part of a larger program, the larger -program's installation procedure may take care of configuring the IJG code. -For example, Ghostscript's installation script will configure the IJG code. -You don't need to read this file if you just want to compile Ghostscript. - -If you are on a Unix machine, you may not need to read this file at all. -Try doing - ./configure - make - make test -If that doesn't complain, do - make install -(better do "make -n install" first to see if the makefile will put the files -where you want them). Read further if you run into snags or want to customize -the code for your system. - - -TABLE OF CONTENTS ------------------ - -Before you start -Configuring the software: - using the automatic "configure" script - using one of the supplied jconfig and makefile files - by hand -Building the software -Testing the software -Installing the software -Optional stuff -Optimization -Hints for specific systems - - -BEFORE YOU START -================ - -Before installing the software you must unpack the distributed source code. -Since you are reading this file, you have probably already succeeded in this -task. However, there is a potential for error if you needed to convert the -files to the local standard text file format (for example, if you are on -MS-DOS you may have converted LF end-of-line to CR/LF). You must apply -such conversion to all the files EXCEPT those whose names begin with "test". -The test files contain binary data; if you change them in any way then the -self-test will give bad results. - -Please check the last section of this file to see if there are hints for the -specific machine or compiler you are using. - - -CONFIGURING THE SOFTWARE -======================== - -To configure the IJG code for your system, you need to create two files: - * jconfig.h: contains values for system-dependent #define symbols. - * Makefile: controls the compilation process. -(On a non-Unix machine, you may create "project files" or some other -substitute for a Makefile. jconfig.h is needed in any environment.) - -We provide three different ways to generate these files: - * On a Unix system, you can just run the "configure" script. - * We provide sample jconfig files and makefiles for popular machines; - if your machine matches one of the samples, just copy the right sample - files to jconfig.h and Makefile. - * If all else fails, read the instructions below and make your own files. - - -Configuring the software using the automatic "configure" script ---------------------------------------------------------------- - -If you are on a Unix machine, you can just type - ./configure -and let the configure script construct appropriate configuration files. -If you're using "csh" on an old version of System V, you might need to type - sh configure -instead to prevent csh from trying to execute configure itself. -Expect configure to run for a few minutes, particularly on slower machines; -it works by compiling a series of test programs. - -Configure was created with GNU Autoconf and it follows the usual conventions -for GNU configure scripts. It makes a few assumptions that you may want to -override. You can do this by providing optional switches to configure: - -* Configure will use gcc (GNU C compiler) if it's available, otherwise cc. -To force a particular compiler to be selected, use the CC option, for example - ./configure CC='cc' -The same method can be used to include any unusual compiler switches. -For example, on HP-UX you probably want to say - ./configure CC='cc -Aa' -to get HP's compiler to run in ANSI mode. - -* Configure will set up the makefile so that "make install" will install files -into /usr/local/bin, /usr/local/man, etc. You can specify an installation -prefix other than "/usr/local" by giving configure the option "--prefix=PATH". - -* If you don't have a lot of swap space, you may need to enable the IJG -software's internal virtual memory mechanism. To do this, give the option -"--with-maxmem=N" where N is the default maxmemory limit in megabytes. -This is discussed in more detail under "Selecting a memory manager", below. -You probably don't need to worry about this on reasonably-sized Unix machines, -unless you plan to process very large images. - -Configure has some other features that are useful if you are cross-compiling -or working in a network of multiple machine types; but if you need those -features, you probably already know how to use them. - - -Configuring the software using one of the supplied jconfig and makefile files ------------------------------------------------------------------------------ - -If you have one of these systems, you can just use the provided configuration -files: - -Makefile jconfig file System and/or compiler - -makefile.manx jconfig.manx Amiga, Manx Aztec C -makefile.sas jconfig.sas Amiga, SAS C -mak*jpeg.st jconfig.st Atari ST/STE/TT, Pure C or Turbo C -makefile.bcc jconfig.bcc MS-DOS, Borland C (Turbo C) -makefile.dj jconfig.dj MS-DOS, DJGPP (Delorie's port of GNU C) -makefile.mc6 jconfig.mc6 MS-DOS, Microsoft C version 6.x and up -makefile.mms jconfig.vms Digital VMS, with MMS software -makefile.vms jconfig.vms Digital VMS, without MMS software - -Copy the proper jconfig file to jconfig.h and the makefile to Makefile -(or whatever your system uses as the standard makefile name). For the -Atari, we provide three project files; see the Atari hints below. - - -Configuring the software by hand --------------------------------- - -First, generate a jconfig.h file. If you are moderately familiar with C, -the comments in jconfig.doc should be enough information to do this; just -copy jconfig.doc to jconfig.h and edit it appropriately. Otherwise, you may -prefer to use the ckconfig.c program. You will need to compile and execute -ckconfig.c by hand --- we hope you know at least enough to do that. -ckconfig.c may not compile the first try (in fact, the whole idea is for it -to fail if anything is going to). If you get compile errors, fix them by -editing ckconfig.c according to the directions given in ckconfig.c. Once -you get it to run, it will write a suitable jconfig.h file, and will also -print out some advice about which makefile to use. - -You may also want to look at the canned jconfig files, if there is one for a -system similar to yours. - -Second, select a makefile and copy it to Makefile (or whatever your system -uses as the standard makefile name). The most generic makefiles we provide -are - makefile.ansi: if your C compiler supports function prototypes - makefile.unix: if not. -(You have function prototypes if ckconfig.c put "#define HAVE_PROTOTYPES" -in jconfig.h.) You may want to start from one of the other makefiles if -there is one for a system similar to yours. - -Look over the selected Makefile and adjust options as needed. In particular -you may want to change the CC and CFLAGS definitions. For instance, if you -are using GCC, set CC=gcc. If you had to use any compiler switches to get -ckconfig.c to work, make sure the same switches are in CFLAGS. - -If you are on a system that doesn't use makefiles, you'll need to set up -project files (or whatever you do use) to compile all the source files and -link them into executable files cjpeg, djpeg, rdjpgcom, and wrjpgcom. See -the file lists in any of the makefiles to find out which files go into each -program. Note that the provided makefiles all make a "library" file libjpeg -first, but you don't have to do that if you don't want to; the file lists -identify which source files are actually needed for compression, -decompression, or both. As a last resort, you can make a batch script that -just compiles everything and links it all together; makefile.vms is an -example of this (it's for VMS systems that have no make-like utility). - -Here are comments about some specific configuration decisions you'll -need to make: - -Command line style ------------------- - -cjpeg and djpeg can use a Unix-like command line style which supports -redirection and piping, like this: - cjpeg inputfile >outputfile - cjpeg <inputfile >outputfile - source program | cjpeg >outputfile -The simpler "two file" command line style is just - cjpeg inputfile outputfile -You may prefer the two-file style, particularly if you don't have pipes. - -You MUST use two-file style on any system that doesn't cope well with binary -data fed through stdin/stdout; this is true for some MS-DOS compilers, for -example. If you're not on a Unix system, it's safest to assume you need -two-file style. (But if your compiler provides either the Posix-standard -fdopen() library routine or a Microsoft-compatible setmode() routine, you -can safely use the Unix command line style, by defining USE_FDOPEN or -USE_SETMODE respectively.) - -To use the two-file style, make jconfig.h say "#define TWO_FILE_COMMANDLINE". - -Selecting a memory manager --------------------------- - -The IJG code is capable of working on images that are too big to fit in main -memory; data is swapped out to temporary files as necessary. However, the -code to do this is rather system-dependent. We provide four different -memory managers: - -* jmemansi.c This version uses the ANSI-standard library routine tmpfile(), - which not all non-ANSI systems have. On some systems - tmpfile() may put the temporary file in a non-optimal - location; if you don't like what it does, use jmemname.c. - -* jmemname.c This version creates named temporary files. For anything - except a Unix machine, you'll need to configure the - select_file_name() routine appropriately; see the comments - near the head of jmemname.c. If you use this version, define - NEED_SIGNAL_CATCHER in jconfig.h to make sure the temp files - are removed if the program is aborted. - -* jmemnobs.c (That stands for No Backing Store :-).) This will compile on - almost any system, but it assumes you have enough main memory - or virtual memory to hold the biggest images you work with. - -* jmemdos.c This should be used with most 16-bit MS-DOS compilers. - See the system-specific notes about MS-DOS for more info. - IMPORTANT: if you use this, define USE_MSDOS_MEMMGR in - jconfig.h, and include the assembly file jmemdosa.asm in the - programs. The supplied makefiles and jconfig files for - MS-DOS compilers already do both. - -To use a particular memory manager, change the SYSDEPMEM variable in your -makefile to equal the corresponding object file name (for example, jmemansi.o -or jmemansi.obj for jmemansi.c). - -If you have plenty of (real or virtual) main memory, just use jmemnobs.c. -"Plenty" means about ten bytes for every pixel in the largest images -you plan to process, so a lot of systems don't meet this criterion. -If yours doesn't, try jmemansi.c first. If that doesn't compile, you'll have -to use jmemname.c; be sure to adjust select_file_name() for local conditions. -You may also need to change unlink() to remove() in close_backing_store(). - -Except with jmemnobs.c, you need to adjust the DEFAULT_MAX_MEM setting to a -reasonable value for your system (either by adding a #define for -DEFAULT_MAX_MEM to jconfig.h, or by adding a -D switch to the Makefile). -This value limits the amount of data space the program will attempt to -allocate. Code and static data space isn't counted, so the actual memory -needs for cjpeg or djpeg are typically 100 to 150Kb more than the max-memory -setting. Larger max-memory settings reduce the amount of I/O needed to -process a large image, but too large a value can result in "insufficient -memory" failures. On most Unix machines (and other systems with virtual -memory), just set DEFAULT_MAX_MEM to several million and forget it. At the -other end of the spectrum, for MS-DOS machines you probably can't go much -above 300K to 400K. (On MS-DOS the value refers to conventional memory only. -Extended/expanded memory is handled separately by jmemdos.c.) - - -BUILDING THE SOFTWARE -===================== - -Now you should be able to compile the software. Just say "make" (or -whatever's necessary to start the compilation). Have a cup of coffee. - -Here are some things that could go wrong: - -If your compiler complains about undefined structures, you should be able to -shut it up by putting "#define INCOMPLETE_TYPES_BROKEN" in jconfig.h. - -If you have trouble with missing system include files or inclusion of the -wrong ones, read jinclude.h. This shouldn't happen if you used configure -or ckconfig.c to set up jconfig.h. - -There are a fair number of routines that do not use all of their parameters; -some compilers will issue warnings about this, which you can ignore. There -are also a few configuration checks that may give "unreachable code" warnings. -Any other warning deserves investigation. - -If you don't have a getenv() library routine, define NO_GETENV. - -Also see the system-specific hints, below. - - -TESTING THE SOFTWARE -==================== - -As a quick test of functionality we've included a small sample image in -several forms: - testorig.jpg Starting point for the djpeg tests. - testimg.ppm The output of djpeg testorig.jpg - testimg.gif The output of djpeg -gif testorig.jpg - testimg.jpg The output of cjpeg testimg.ppm -(The two .jpg files aren't identical since JPEG is lossy.) If you can -generate duplicates of the testimg.* files then you probably have working -programs. - -With most of the makefiles, "make test" will perform the necessary -comparisons. - -If you're using a makefile that doesn't provide the test option, run djpeg -and cjpeg by hand to generate testout.ppm, testout.gif, and testout.jpg, -then compare these to testimg.* with whatever binary file comparison tool -you have. The files should be bit-for-bit identical. - -If the programs complain "MAX_ALLOC_CHUNK is wrong, please fix", then you -need to reduce MAX_ALLOC_CHUNK to a value that fits in type size_t. -Try adding "#define MAX_ALLOC_CHUNK 65520L" to jconfig.h. A less likely -configuration error is "ALIGN_TYPE is wrong, please fix": defining ALIGN_TYPE -as long should take care of that one. - -If the cjpeg test run fails with "Missing Huffman code table entry", it's a -good bet that you needed to define RIGHT_SHIFT_IS_UNSIGNED. Go back to the -configuration step and run ckconfig.c. (This is a good plan for any other -test failure, too.) - -If you are using Unix (one-file) command line style on a non-Unix system, -it's a good idea to check that binary I/O through stdin/stdout actually -works. You should get the same results from "djpeg <testorig.jpg >out.ppm" -as from "djpeg -outfile out.ppm testorig.jpg". Note that the makefiles all -use the latter style and therefore do not exercise stdin/stdout! If this -check fails, try recompiling cjpeg.c and djpeg.c with USE_SETMODE or -USE_FDOPEN. If it still doesn't work, better use two-file style. -(rdjpgcom.c and wrjpgcom.c will also need to be recompiled.) - -If you chose a memory manager other than jmemnobs.c, you should test that -temporary-file usage works. Try "djpeg -gif -max 0 testorig.jpg" and make -sure its output matches testimg.gif. If you have any really large images -handy, try compressing them with -optimize and/or decompressing with -gif to -make sure your DEFAULT_MAX_MEM setting is not too large. - -NOTE: this is far from an exhaustive test of the JPEG software; some modules, -such as 1-pass color quantization, are not exercised at all. It's just a -quick test to give you some confidence that you haven't missed something -major. - - -INSTALLING THE SOFTWARE -======================= - -Once you're done with the above steps, you can install the software by -copying the executable files (cjpeg, djpeg, rdjpgcom, and wrjpgcom) to -wherever you normally install programs. On Unix systems, you'll also want -to put the man pages (cjpeg.1, djpeg.1, rdjpgcom.1, wrjpgcom.1) in the -man-page directory. The canned makefiles don't support this step since -there's such a wide variety of installation procedures on different systems. - -If you generated a Makefile with the "configure" script, you can just say - make install -to install the programs and their man pages into the standard places. -(You'll probably need to be root to do this.) We recommend first saying - make -n install -to see where configure thought the files should go. You may need to edit -the Makefile, particularly if your system's conventions for man page -filenames don't match what configure expects. - -If you want to install the library file libjpeg.a and the include files j*.h -(for use in compiling other programs besides cjpeg/djpeg), then say - make install-lib - - -OPTIONAL STUFF -============== - -Progress monitor: - -If you like, you can #define PROGRESS_REPORT (in jconfig.h) to enable display -of percent-done progress reports. The routines provided in cjpeg.c/djpeg.c -merely print percentages to stderr, but you can customize them to do -something fancier. - -Utah RLE file format support: - -We distribute the software with support for RLE image files (Utah Raster -Toolkit format) disabled, because the RLE support won't compile without the -Utah library. If you have URT version 3.1 or later, you can enable RLE -support as follows: - 1. #define RLE_SUPPORTED in jconfig.h. - 2. Add a -I option to CFLAGS in the Makefile for the directory - containing the URT .h files (typically the "include" - subdirectory of the URT distribution). - 3. Add -L... -lrle to LDLIBS in the Makefile, where ... specifies - the directory containing the URT "librle.a" file (typically the - "lib" subdirectory of the URT distribution). - -Removing code: - -If you need to make a smaller version of the JPEG software, some optional -functions can be removed at compile time. See the xxx_SUPPORTED #defines in -jconfig.h and jmorecfg.h. If at all possible, we recommend that you leave in -decoder support for all valid JPEG files, to ensure that you can read anyone's -output. Taking out support for image file formats that you don't use is the -most painless way to make the programs smaller. Another possibility is to -remove some of the DCT methods: in particular, the "IFAST" method may not be -enough faster than the others to be worth keeping on your machine. (If you -do remove ISLOW or IFAST, be sure to redefine JDCT_DEFAULT or JDCT_FASTEST -to a supported method, by adding a #define in jconfig.h.) - - -OPTIMIZATION -============ - -Unless you own a Cray, you'll probably be interested in making the JPEG -software go as fast as possible. This section covers some machine-dependent -optimizations you may want to try. We suggest that before trying any of -this, you first get the basic installation to pass the self-test step. -Repeat the self-test after any optimization to make sure that you haven't -broken anything. - -The integer DCT routines perform a lot of multiplications. These -multiplications must yield 32-bit results, but none of their input values -are more than 16 bits wide. On many machines, notably the 680x0 and 80x86 -CPUs, a 16x16=>32 bit multiply instruction is faster than a full 32x32=>32 -bit multiply. Unfortunately there is no portable way to specify such a -multiplication in C, but some compilers can generate one when you use the -right combination of casts. See the MULTIPLYxxx macro definitions in -jdct.h. If your compiler makes "int" be 32 bits and "short" be 16 bits, -defining SHORTxSHORT_32 is fairly likely to work. When experimenting with -alternate definitions, be sure to test not only whether the code still works -(use the self-test), but also whether it is actually faster --- on some -compilers, alternate definitions may compute the right answer, yet be slower -than the default. Timing cjpeg on a large PPM input file is the best way to -check this, as the DCT will be the largest fraction of the runtime in that -mode. (Note: some of the distributed compiler-specific jconfig files -already contain #define switches to select appropriate MULTIPLYxxx -definitions.) - -If your machine has sufficiently fast floating point hardware, you may find -that the float DCT method is faster than the integer DCT methods, even -after tweaking the integer multiply macros. In that case you may want to -make the float DCT be the default method. (The only objection to this is -that float DCT results may vary slightly across machines.) To do that, add -"#define JDCT_DEFAULT JDCT_FLOAT" to jconfig.h. Even if you don't change -the default, you should redefine JDCT_FASTEST, which is the method selected -by djpeg's -fast switch. Don't forget to update the documentation files -(usage.doc and/or cjpeg.1, djpeg.1) to agree with what you've done. - -If access to "short" arrays is slow on your machine, it may be a win to -define type JCOEF as int rather than short. This will cost a good deal of -memory though, particularly in some multi-pass modes, so don't do it unless -you have memory to burn and short is REALLY slow. - -If your compiler can compile function calls in-line, make sure the INLINE -macro in jmorecfg.h is defined as the keyword that marks a function -inline-able. Some compilers have a switch that tells the compiler to inline -any function it thinks is profitable (e.g., -finline-functions for gcc). -Enabling such a switch is likely to make the compiled code bigger but faster. - -In general, it's worth trying the maximum optimization level of your compiler, -and experimenting with any optional optimizations such as loop unrolling. -(Unfortunately, far too many compilers have optimizer bugs ... be prepared to -back off if the code fails self-test.) If you do any experimentation along -these lines, please report the optimal settings to jpeg-info@uunet.uu.net so -we can mention them in future releases. Be sure to specify your machine and -compiler version. - - -HINTS FOR SPECIFIC SYSTEMS -========================== - -We welcome reports on changes needed for systems not mentioned here. Submit -'em to jpeg-info@uunet.uu.net. Also, if configure or ckconfig.c is wrong -about how to configure the JPEG software for your system, please let us know. - - -Acorn RISC OS: - -(Thanks to Simon Middleton for these hints on compiling with Desktop C.) -After renaming the files according to Acorn conventions, take a copy of -makefile.ansi, change all occurrences of 'libjpeg.a' to 'libjpeg.o' and -change these definitions as indicated: - -CFLAGS= -throwback -IC: -Wn -LDLIBS=C:o.Stubs -SYSDEPMEM=jmemansi.o -LN=Link -AR=LibFile -c -o - -Also add a new line '.c.o:; $(cc) $< $(cflags) -c -o $@'. Remove the -lines '$(RM) libjpeg.o' and '$(AR2) libjpeg.o' and the 'jconfig.h' -dependency section. - -Copy jconfig.doc to jconfig.h. Edit jconfig.h to define TWO_FILE_COMMANDLINE -and CHAR_IS_UNSIGNED. - -Run the makefile using !AMU not !Make. If you want to use the 'clean' and -'test' makefile entries then you will have to fiddle with the syntax a bit -and rename the test files. - - -Amiga: - -SAS C 6.50 reportedly is too buggy to compile the IJG code properly. -A patch to update to 6.51 is available from SAS or AmiNet FTP sites. - - -Atari ST/STE/TT: - -Copy the project files makcjpeg.st, makdjpeg.st, and makljpeg.st to cjpeg.prj, -djpeg.prj, and libjpeg.prj respectively. The project files should work as-is -with Pure C. For Turbo C, change library filenames "PC..." to "TC..." in -cjpeg.prj and djpeg.prj. Note that libjpeg.prj selects jmemansi.c as the -recommended memory manager. You'll probably want to adjust the -DEFAULT_MAX_MEM setting --- you want it to be a couple hundred K less than -your normal free memory. Put "#define DEFAULT_MAX_MEM nnnn" into jconfig.h -to do this. - -To use the 68881/68882 coprocessor for the floating point DCT, add the -compiler option "-8" to the project files and replace PCFLTLIB.LIB with -PC881LIB.LIB in cjpeg.prj and djpeg.prj. Or if you don't have a -coprocessor, you may prefer to remove the float DCT code by undefining -DCT_FLOAT_SUPPORTED in jmorecfg.h (since without a coprocessor, the float -code will be too slow to be useful). In that case, you can delete -PCFLTLIB.LIB from the project files. - -Note that you must make libjpeg.lib before making cjpeg.ttp or djpeg.ttp. -You'll have to perform the self-test by hand. - -We haven't bothered to include project files for rdjpgcom and wrjpgcom. -Those source files should just be compiled by themselves; they don't -depend on the JPEG library. - -There is a bug in some older versions of the Turbo C library which causes the -space used by temporary files created with "tmpfile()" not to be freed after -an abnormal program exit. If you check your disk afterwards, you will find -cluster chains that are allocated but not used by a file. This should not -happen in cjpeg or djpeg, since we enable a signal catcher to explicitly close -temp files before exiting. But if you use the JPEG library with your own -code, be sure to supply a signal catcher, or else use a different -system-dependent memory manager. - - -Cray: - -Should you be so fortunate as to be running JPEG on a Cray YMP, there is a -compiler bug in old versions of Cray's Standard C (prior to 3.1). If you -still have an old compiler, you'll need to insert a line reading -"#pragma novector" just before the loop - for (i = 1; i <= (int) htbl->bits[l]; i++) - huffsize[p++] = (char) l; -in fix_huff_tbl (in V5beta1, line 204 of jchuff.c and line 176 of jdhuff.c). -[This bug may or may not still occur with the current IJG code, but it's -probably a dead issue anyway...] - - -HP-UX: - -If you have HP-UX 7.05 or later with the "software development" C compiler, -you should run the compiler in ANSI mode. If using the configure script, -say - ./configure CC='cc -Aa' -(or -Ae if you prefer). If configuring by hand, use makefile.ansi and add -"-Aa" to the CFLAGS line in the makefile. - -If you have a pre-7.05 system, or if you are using the non-ANSI C compiler -delivered with a minimum HP-UX system, then you must use makefile.unix -(and do NOT add -Aa); or just run configure without the CC option. - -On HP 9000 series 800 machines, the HP C compiler is buggy in revisions prior -to A.08.07. If you get complaints about "not a typedef name", you'll have to -use makefile.unix, or run configure without the CC option. - - -Macintosh, MPW: - -We don't directly support MPW in the current release, but Larry Rosenstein -ported an earlier version of the IJG code without very much trouble. There's -useful notes and conversion scripts in his kit for porting PBMPLUS to MPW. -You can obtain the kit by FTP to ftp.apple.com, files /pub/lsr/pbmplus-port*. - - -Macintosh, Metrowerks CodeWarrior: - -Metrowerks release DR2 has problems with the IJG code; don't use it. Release -DR3.5 or later should be OK. - -The command-line-style interface can be used by defining USE_CCOMMAND and -TWO_FILE_COMMANDLINE (see next entry for more details). - -On 680x0 Macs, Metrowerks defines type "double" as a 10-byte IEEE extended -float. jmemmgr.c won't like this: it wants sizeof(ALIGN_TYPE) to be a power -of 2. Add "#define ALIGN_TYPE long" to jconfig.h to eliminate the complaint. - - -Macintosh, Think C: - -The supplied user-interface files (cjpeg.c and djpeg.c) are set up to provide -a Unix-style command line interface. You can use this interface on the Mac -by means of Think's ccommand() library routine. However, a much better -Mac-style user interface has been prepared by Jim Brunner. You can obtain -the additional source code needed for that user interface by FTP to -sumex-aim.stanford.edu, file /info-mac/dev/src/jpeg-convert-c.hqx. Jim's -documentation also includes more detailed build instructions for Think C. -(Jim is working on updating this code to work with v5 of the IJG library, -but it wasn't ready as of v5 release time. Should be out before too long.) - -If you want to build the minimal command line version, proceed as follows. -You'll have to prepare project files for the programs; we don't include any -in the distribution since they are not text files. Use the file lists in -any of the supplied makefiles as a guide. Also add the ANSI and Unix C -libraries in a separate segment. You may need to divide the JPEG files into -more than one segment; we recommend dividing compression and decompression -modules. Define USE_CCOMMAND in jconfig.h so that the ccommand() routine is -called. You must also define TWO_FILE_COMMANDLINE because stdin/stdout -don't handle binary data correctly. - -On 680x0 Macs, Think C defines type "double" as a 12-byte IEEE extended float. -jmemmgr.c won't like this: it wants sizeof(ALIGN_TYPE) to be a power of 2. -Add "#define ALIGN_TYPE long" to jconfig.h to eliminate the complaint. - - -MIPS R3000: - -MIPS's cc version 1.31 has a rather nasty optimization bug. Don't use -O -if you have that compiler version. (Use "cc -V" to check the version.) -Note that the R3000 chip is found in workstations from DEC and others. - - -MS-DOS, generic comments for 16-bit compilers: - -The IJG code is designed to be compiled in 80x86 "small" or "medium" memory -models (i.e., data pointers are 16 bits unless explicitly declared "far"; -code pointers can be either size). You may be able to use small model to -compile cjpeg or djpeg by itself, but you will probably have to use medium -model for any larger application. This won't make much difference in -performance. You *will* take a noticeable performance hit if you use a -large-data memory model, and you should avoid "huge" model if at all -possible. Be sure that NEED_FAR_POINTERS is defined in jconfig.h if you use -a small-data memory model; be sure it is NOT defined if you use a large-data -model. (The supplied makefiles and jconfig files for Borland and Microsoft C -compile in medium model and define NEED_FAR_POINTERS.) - -The DOS-specific memory manager, jmemdos.c, should be used if possible. -It needs some assembly-code routines which are in jmemdosa.asm; make sure -your makefile assembles that file and includes it in the library. If you -don't have a suitable assembler, you can get pre-assembled object files for -jmemdosa by FTP from ftp.uu.net: graphics/jpeg/jdosaobj.zip. - -When using jmemdos.c, jconfig.h must define USE_MSDOS_MEMMGR and must set -MAX_ALLOC_CHUNK to less than 64K (65520L is a typical value). If your -C library's far-heap malloc() can't allocate blocks that large, reduce -MAX_ALLOC_CHUNK to whatever it can handle. - -If you can't use jmemdos.c for some reason --- for example, because you -don't have an assembler to assemble jmemdosa.asm --- you'll have to fall -back to jmemansi.c or jmemname.c. You'll probably still need to set -MAX_ALLOC_CHUNK in jconfig.h, because most DOS C libraries won't malloc() -more than 64K at a time. IMPORTANT: if you use jmemansi.c or jmemname.c, -you will have to compile in a large-data memory model in order to get the -right stdio library. Too bad. - -wrjpgcom needs to be compiled in large model, because it malloc()s a 64KB -work area to hold the comment text. If your C library's malloc can't -handle that, reduce MAX_COM_LENGTH as necessary in wrjpgcom.c. - -Most MS-DOS compilers treat stdin/stdout as text files, so you must use -two-file command line style. But if your compiler has either fdopen() or -setmode(), you can use one-file style if you like. To do this, define -USE_SETMODE or USE_FDOPEN so that stdin/stdout will be set to binary mode. -(USE_SETMODE seems to work with more DOS compilers than USE_FDOPEN.) You -should test that I/O through stdin/stdout produces the same results as I/O -to explicitly named files... the "make test" procedures in the supplied -makefiles do NOT use stdin/stdout. - - -MS-DOS, generic comments for 32-bit compilers: - -None of the above comments about memory models apply if you are using a -32-bit flat-memory-space environment, such as DJGPP or Watcom C. (And you -should use one if you have it, as performance will be much better than -8086-compatible code!) For flat-memory-space compilers, do NOT define -NEED_FAR_POINTERS, and do NOT use jmemdos.c. Use jmemnobs.c if the -environment supplies adequate virtual memory, otherwise use jmemansi.c or -jmemname.c. - -You'll still need to be careful about binary I/O through stdin/stdout. -See the last paragraph of the previous section. - - -MS-DOS, Borland C: - -If you want one-file command line style, just undefine TWO_FILE_COMMANDLINE. -jconfig.bcc includes #define USE_SETMODE. (fdopen does not work correctly.) - -Be sure to convert all the source files to DOS text format (CR/LF newlines). -Although Borland C will often work OK with unmodified Unix (LF newlines) -source files, sometimes it will give bogus compile errors. -"Illegal character '#'" is the most common such error. - - -MS-DOS, DJGPP: - -Use a recent version of DJGPP (1.11 or better). If you prefer two-file -command line style, change the supplied jconfig.dj to define -TWO_FILE_COMMANDLINE. makefile.dj is set up to generate only COFF files -(cjpeg, djpeg, etc) when you say make. After testing, say "make exe" to -make executables with stub.exe, or "make standalone" if you want executables -that include go32. You will probably need to tweak the makefile's pointer to -go32.exe to do "make standalone". - - -MS-DOS, Microsoft C: - -If you want one-file command line style, just undefine TWO_FILE_COMMANDLINE. -jconfig.mc6 includes #define USE_SETMODE. (fdopen does not work correctly.) - -Old versions of MS C fail with an "out of macro expansion space" error -because they can't cope with the macro TRACEMS8 (defined in jerror.h). -If this happens to you, the easiest solution is to change TRACEMS8 to -expand to nothing. You'll lose the ability to dump out JPEG coefficient -tables with djpeg -debug -debug, but at least you can compile. - -Original MS C 6.0 is very buggy; it compiles incorrect code unless you turn -off optimization entirely (remove -O from CFLAGS). 6.00A is better, but it -still generates bad code if you enable loop optimizations (-Ol or -Ox). - -MS C 8.0 reportedly fails to compile jquant1.c if optimization is turned off -(yes, off). - - -SGI: - -Set "AR2= ar -ts" rather than "AR2= ranlib" in the Makefile. If you are -using configure, you should say - ./configure RANLIB='ar -ts' - - -VMS: - -On an Alpha/VMS system with MMS, be sure to use the "/Marco=Alpha=1" -qualifier with MMS when building the JPEG package. - -VAX/VMS v5.5-1 may have problems with the test step of the build procedure -reporting differences when it compares the original and test GIF and JPG -images. If the error points to the last block of the files, it is most -likely bogus and may be safely ignored. It seems to be because the files -are Stream_LF and Backup/Compare has difficulty with the (presumably) null -padded files. This problem was not observed on VAX/VMS v6.1 or AXP/VMS v6.1. diff --git a/jpeg/install.doc.gz b/jpeg/install.doc.gz deleted file mode 100644 index 7ad57754b4979041f309e2c2af9b747615adc54f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1325 zcmb2|=HQ4FTdc>xoS9c#l9-dDmy(~%&>MCzPug5y?`LhcR|okNR(nkJel_`l#X6?r zoJr~)fnOX7HFe*{7I_yfeRKc$*@AN2?*U(wywxmgK0n(lnfLCU{I%`dU$>uKZhh;) z@#*Ws|NNa-rWmwNH@7C$x|@Ig%fruKOYiDj`2Jkb&xwch<V&}B#kS^k<i)33?XPlO ze}7+XZDYT=chw5#)xvkzya=n_9mK!YdrNVz>YukIXGF^W*Iq6;>9v<#L%8PYCT_cr z2Tv`Pxx4Lo{e*9#Ur*|3Mrtc=HC*_1i~OAXm#4q}y1V~+(N{0ctsgh3M%{g|c;hU7 zIo;CUV_pmN+L~7jGzaC*ZkyD(?zF{X<Ck{ID|3WjE(?q_V%oC)-rof#OLA^+5iwCO z?D=*t?8+<k(*l#$*elJRdz*X35(_u(EmvCC<(H_)|2dj@LG+^d!yE07Cxz!K@=pl5 zU&@%m<dwU4Z;11Y^9;MMv7a_L<yxzAWCnxFZN}C6m?WRimQA#8Oc6Md@^RU*+{Jy& zva#!4F5}a@&&}?AGn%!YP2rl?v`_~-<{2M;dxuus_2yE4e&Xj8#~IU-dTWfB(vlA? zU+$%)H&@!+U+8Cn@`dpA0SD|EAHA6Hs3kFf@6k%VnJ=;pH|<^}E@PMd+|u;!LY3H( z8!Nfii=RLAd#O{YL$=hd+>99?*zagRT$T}P5E9w8Uzdr&%F}Y^-g4`9C+Ev^J-!Hu zmox7?^CQh7sES)uxaZ;8jhc<mr!F~SdfAt&I4pO?oxBNO?E7w6`Yx1osaoM76S^rW zbMwYI54m(sPJPrRv?U{}wtW9WZ7rVYoR_xyw)-&L-)ywnVPpQ9Lw`LCWEw4Y-k)bv z<#gnFkSGJ2<%%V883%X8iCo+rIq8@JXM|%IXWdC|nP1)S9-hz7Pk8(Lb^H4H+<TS& zF)$v=m1Q#B$@h03TltOW&SJ|ZRxmeh-(c{Um-h~<nIiWxi%T=7JI%_y_j1b7dxs8P zWBPW`>2{Oh(%AbBb92sl{<+k6L~YllxmWyGD@*@euy}K2f^XlpBaIpn&+oO&D^iMI z@uI(A3wzqE<o0DjC$DVNjZ~lgxg=Ly*X#6ziiI5$Y|pZAJgDWk`d&xljZba&y2ieX z*=_T4Z5Fh=5nmu$TX>=@tap8#>y^m1hOL&X6F#fQ1uM7u==DmxkV$=VZN~iH(W`l5 z@-AzK6!9+PT3sw%aMGc(s$amYB<7mLt^X4jrnB$-aYxSmd8)wah9&Hw3t28+de(K! zDSP=l1GeC*?VFc9xtF04uf}uCCEw^*{Gw*>zT_g$?s;zOvy3v_54>|R$;xTCaR1Cg z?>k>_)K>9-5B<+)bdLSRkB#ivGxS6aRv$n2PB1rAy#2tvnY&GvFTD8Hcsj4C2){w= z@=KQc|1I>*+rhen<!%H&BO8b0T)FV*d0I~Azvm16`TchJ*WG82e?9v(h{@~vSGQTu zej8n#d}c4p9`9QhCQ45$nPsG9@UhFHzeg};!{@kLt4dC)bh>3btzlrYPS4eK-Pn43 zrme=a$@PY+ktaCq^0g|2T$b!KI{*0l(-aHI!(O}ozo}Uub798ArfJqYcoZe4E&g@t zh^a@6o6D=Y8L@MJIm)REm38L|E#CI5(@n7VS*upyTJDzJ8w}f4xLgqB57#{M!lO)q zTa5ke<%-V4%e|X}-O4t(8cmiHIbZ+VU;pNuD5KV8dx~}}Yus*cZ~Eb1qPU&$O78Bg yq{6^B`R?ibe4M6xP1WM{SHAT<JDF3k^e`9OTF2g*zTZOZ8GYvW6j^gIFaQ8~e1KvA diff --git a/jpeg/jconfig.auto b/jpeg/jconfig.auto deleted file mode 100644 index eb565eac20..0000000000 --- a/jpeg/jconfig.auto +++ /dev/null @@ -1,44 +0,0 @@ -/* jconfig.auto --- source file edited by configure script */ -/* see jconfig.doc for explanations */ - -#undef HAVE_PROTOTYPES -#undef HAVE_UNSIGNED_CHAR -#undef HAVE_UNSIGNED_SHORT -#undef void -#undef const -#undef CHAR_IS_UNSIGNED -#undef HAVE_STDDEF_H -#undef HAVE_STDLIB_H -#undef NEED_BSD_STRINGS -#undef NEED_SYS_TYPES_H -#undef NEED_FAR_POINTERS -#undef NEED_SHORT_EXTERNAL_NAMES -/* Define this if you get warnings about undefined structures. */ -#undef INCOMPLETE_TYPES_BROKEN - -#ifdef JPEG_INTERNALS - -#undef RIGHT_SHIFT_IS_UNSIGNED -#undef INLINE -/* These are for configuring the JPEG memory manager. */ -#undef DEFAULT_MAX_MEM -#undef NO_MKTEMP - -#endif /* JPEG_INTERNALS */ - -#ifdef JPEG_CJPEG_DJPEG - -#define BMP_SUPPORTED /* BMP image file format */ -#define GIF_SUPPORTED /* GIF image file format */ -#define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */ -#undef RLE_SUPPORTED /* Utah RLE image file format */ -#define TARGA_SUPPORTED /* Targa image file format */ - -#undef TWO_FILE_COMMANDLINE -#undef NEED_SIGNAL_CATCHER -#undef DONT_USE_B_MODE - -/* Define this if you want percent-done progress reports from cjpeg/djpeg. */ -#undef PROGRESS_REPORT - -#endif /* JPEG_CJPEG_DJPEG */ diff --git a/jpeg/jconfig.bcc b/jpeg/jconfig.bcc deleted file mode 100644 index 3271ee6b3a..0000000000 --- a/jpeg/jconfig.bcc +++ /dev/null @@ -1,44 +0,0 @@ -/* jconfig.bcc --- jconfig.h for Borland C (Turbo C) on MS-DOS. */ -/* see jconfig.doc for explanations */ - -#define HAVE_PROTOTYPES -#define HAVE_UNSIGNED_CHAR -#define HAVE_UNSIGNED_SHORT -/* #define void char */ -/* #define const */ -#undef CHAR_IS_UNSIGNED -#define HAVE_STDDEF_H -#define HAVE_STDLIB_H -#undef NEED_BSD_STRINGS -#undef NEED_SYS_TYPES_H -#define NEED_FAR_POINTERS /* for small or medium memory model */ -#undef NEED_SHORT_EXTERNAL_NAMES -#define INCOMPLETE_TYPES_BROKEN /* suppress undefined-structure warnings */ - -#ifdef JPEG_INTERNALS - -#undef RIGHT_SHIFT_IS_UNSIGNED - -#define USE_MSDOS_MEMMGR /* Define this if you use jmemdos.c */ - -#define MAX_ALLOC_CHUNK 65520L /* Maximum request to malloc() */ - -#define USE_FMEM /* Borland has _fmemcpy() and _fmemset() */ - -#endif /* JPEG_INTERNALS */ - -#ifdef JPEG_CJPEG_DJPEG - -#define BMP_SUPPORTED /* BMP image file format */ -#define GIF_SUPPORTED /* GIF image file format */ -#define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */ -#undef RLE_SUPPORTED /* Utah RLE image file format */ -#define TARGA_SUPPORTED /* Targa image file format */ - -#define TWO_FILE_COMMANDLINE -#define USE_SETMODE /* Borland has setmode() */ -#define NEED_SIGNAL_CATCHER /* Define this if you use jmemdos.c */ -#undef DONT_USE_B_MODE -#undef PROGRESS_REPORT /* optional */ - -#endif /* JPEG_CJPEG_DJPEG */ diff --git a/jpeg/jconfig.dj b/jpeg/jconfig.dj deleted file mode 100644 index f759a9dbd6..0000000000 --- a/jpeg/jconfig.dj +++ /dev/null @@ -1,38 +0,0 @@ -/* jconfig.dj --- jconfig.h for DJGPP (Delorie's GNU C port) on MS-DOS. */ -/* see jconfig.doc for explanations */ - -#define HAVE_PROTOTYPES -#define HAVE_UNSIGNED_CHAR -#define HAVE_UNSIGNED_SHORT -/* #define void char */ -/* #define const */ -#undef CHAR_IS_UNSIGNED -#define HAVE_STDDEF_H -#define HAVE_STDLIB_H -#undef NEED_BSD_STRINGS -#undef NEED_SYS_TYPES_H -#undef NEED_FAR_POINTERS /* DJGPP uses flat 32-bit addressing */ -#undef NEED_SHORT_EXTERNAL_NAMES -#undef INCOMPLETE_TYPES_BROKEN - -#ifdef JPEG_INTERNALS - -#undef RIGHT_SHIFT_IS_UNSIGNED - -#endif /* JPEG_INTERNALS */ - -#ifdef JPEG_CJPEG_DJPEG - -#define BMP_SUPPORTED /* BMP image file format */ -#define GIF_SUPPORTED /* GIF image file format */ -#define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */ -#undef RLE_SUPPORTED /* Utah RLE image file format */ -#define TARGA_SUPPORTED /* Targa image file format */ - -#undef TWO_FILE_COMMANDLINE /* optional */ -#define USE_SETMODE /* Needed to make one-file style work in DJGPP */ -#undef NEED_SIGNAL_CATCHER /* Define this if you use jmemname.c */ -#undef DONT_USE_B_MODE -#undef PROGRESS_REPORT /* optional */ - -#endif /* JPEG_CJPEG_DJPEG */ diff --git a/jpeg/jconfig.doc b/jpeg/jconfig.doc deleted file mode 100644 index c18d1c064b..0000000000 --- a/jpeg/jconfig.doc +++ /dev/null @@ -1,155 +0,0 @@ -/* - * jconfig.doc - * - * Copyright (C) 1991-1994, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file documents the configuration options that are required to - * customize the JPEG software for a particular system. - * - * The actual configuration options for a particular installation are stored - * in jconfig.h. On many machines, jconfig.h can be generated automatically - * or copied from one of the "canned" jconfig files that we supply. But if - * you need to generate a jconfig.h file by hand, this file tells you how. - * - * DO NOT EDIT THIS FILE --- IT WON'T ACCOMPLISH ANYTHING. - * EDIT A COPY NAMED JCONFIG.H. - */ - - -/* - * These symbols indicate the properties of your machine or compiler. - * #define the symbol if yes, #undef it if no. - */ - -/* Does your compiler support function prototypes? - * (If not, you also need to use ansi2knr, see install.doc) - */ -#define HAVE_PROTOTYPES - -/* Does your compiler support the declaration "unsigned char" ? - * How about "unsigned short" ? - */ -#define HAVE_UNSIGNED_CHAR -#define HAVE_UNSIGNED_SHORT - -/* Define "void" as "char" if your compiler doesn't know about type void. - * NOTE: be sure to define void such that "void *" represents the most general - * pointer type, e.g., that returned by malloc(). - */ -/* #define void char */ - -/* Define "const" as empty if your compiler doesn't know the "const" keyword. - */ -/* #define const */ - -/* Define this if an ordinary "char" type is unsigned. - * If you're not sure, leaving it undefined will work at some cost in speed. - * If you defined HAVE_UNSIGNED_CHAR then the speed difference is minimal. - */ -#undef CHAR_IS_UNSIGNED - -/* Define this if your system has an ANSI-conforming <stddef.h> file. - */ -#define HAVE_STDDEF_H - -/* Define this if your system has an ANSI-conforming <stdlib.h> file. - */ -#define HAVE_STDLIB_H - -/* Define this if your system does not have an ANSI/SysV <string.h>, - * but does have a BSD-style <strings.h>. - */ -#undef NEED_BSD_STRINGS - -/* Define this if your system does not provide typedef size_t in any of the - * ANSI-standard places (stddef.h, stdlib.h, or stdio.h), but places it in - * <sys/types.h> instead. - */ -#undef NEED_SYS_TYPES_H - -/* For 80x86 machines, you need to define NEED_FAR_POINTERS, - * unless you are using a large-data memory model or 80386 flat-memory mode. - * On less brain-damaged CPUs this symbol must not be defined. - * (Defining this symbol causes large data structures to be referenced through - * "far" pointers and to be allocated with a special version of malloc.) - */ -#undef NEED_FAR_POINTERS - -/* Define this if your linker needs global names to be unique in less - * than the first 15 characters. - */ -#undef NEED_SHORT_EXTERNAL_NAMES - -/* Although a real ANSI C compiler can deal perfectly well with pointers to - * unspecified structures (see "incomplete types" in the spec), a few pre-ANSI - * and pseudo-ANSI compilers get confused. To keep one of these bozos happy, - * define INCOMPLETE_TYPES_BROKEN. This is not recommended unless you - * actually get "missing structure definition" warnings or errors while - * compiling the JPEG code. - */ -#undef INCOMPLETE_TYPES_BROKEN - - -/* - * The following options affect code selection within the JPEG library, - * but they don't need to be visible to applications using the library. - * To minimize application namespace pollution, the symbols won't be - * defined unless JPEG_INTERNALS has been defined. - */ - -#ifdef JPEG_INTERNALS - -/* Define this if your compiler implements ">>" on signed values as a logical - * (unsigned) shift; leave it undefined if ">>" is a signed (arithmetic) shift, - * which is the normal and rational definition. - */ -#undef RIGHT_SHIFT_IS_UNSIGNED - - -#endif /* JPEG_INTERNALS */ - - -/* - * The remaining options do not affect the JPEG library proper, - * but only the sample applications cjpeg/djpeg (see cjpeg.c, djpeg.c). - * Other applications can ignore these. - */ - -#ifdef JPEG_CJPEG_DJPEG - -/* These defines indicate which image (non-JPEG) file formats are allowed. */ - -#define BMP_SUPPORTED /* BMP image file format */ -#define GIF_SUPPORTED /* GIF image file format */ -#define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */ -#undef RLE_SUPPORTED /* Utah RLE image file format */ -#define TARGA_SUPPORTED /* Targa image file format */ - -/* Define this if you want to name both input and output files on the command - * line, rather than using stdout and optionally stdin. You MUST do this if - * your system can't cope with binary I/O to stdin/stdout. See comments at - * head of cjpeg.c or djpeg.c. - */ -#undef TWO_FILE_COMMANDLINE - -/* Define this if your system needs explicit cleanup of temporary files. - * This is crucial under MS-DOS, where the temporary "files" may be areas - * of extended memory; on most other systems it's not as important. - */ -#undef NEED_SIGNAL_CATCHER - -/* By default, we open image files with fopen(...,"rb") or fopen(...,"wb"). - * This is necessary on systems that distinguish text files from binary files, - * and is harmless on most systems that don't. If you have one of the rare - * systems that complains about the "b" spec, define this symbol. - */ -#undef DONT_USE_B_MODE - -/* Define this if you want percent-done progress reports from cjpeg/djpeg. - */ -#undef PROGRESS_REPORT - - -#endif /* JPEG_CJPEG_DJPEG */ diff --git a/jpeg/jconfig.doc.gz b/jpeg/jconfig.doc.gz deleted file mode 100644 index 256513f10985f719552130ea650259285a09660f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2381 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 M(-O7#b0Q230I=+MYybcN diff --git a/jpeg/jconfig.manx b/jpeg/jconfig.manx deleted file mode 100644 index 6dd0d008ea..0000000000 --- a/jpeg/jconfig.manx +++ /dev/null @@ -1,43 +0,0 @@ -/* jconfig.manx --- jconfig.h for Amiga systems using Manx Aztec C ver 5.x. */ -/* see jconfig.doc for explanations */ - -#define HAVE_PROTOTYPES -#define HAVE_UNSIGNED_CHAR -#define HAVE_UNSIGNED_SHORT -/* #define void char */ -/* #define const */ -#undef CHAR_IS_UNSIGNED -#define HAVE_STDDEF_H -#define HAVE_STDLIB_H -#undef NEED_BSD_STRINGS -#undef NEED_SYS_TYPES_H -#undef NEED_FAR_POINTERS -#undef NEED_SHORT_EXTERNAL_NAMES -#undef INCOMPLETE_TYPES_BROKEN - -#ifdef JPEG_INTERNALS - -#undef RIGHT_SHIFT_IS_UNSIGNED - -#define TEMP_DIRECTORY "JPEGTMP:" /* recommended setting for Amiga */ - -#define SHORTxSHORT_32 /* produces better DCT code with Aztec C */ - -#endif /* JPEG_INTERNALS */ - -#ifdef JPEG_CJPEG_DJPEG - -#define BMP_SUPPORTED /* BMP image file format */ -#define GIF_SUPPORTED /* GIF image file format */ -#define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */ -#undef RLE_SUPPORTED /* Utah RLE image file format */ -#define TARGA_SUPPORTED /* Targa image file format */ - -#define TWO_FILE_COMMANDLINE -#define NEED_SIGNAL_CATCHER -#undef DONT_USE_B_MODE -#undef PROGRESS_REPORT /* optional */ - -#define signal_catcher _abort /* hack for Aztec C naming requirements */ - -#endif /* JPEG_CJPEG_DJPEG */ diff --git a/jpeg/jconfig.mc6 b/jpeg/jconfig.mc6 deleted file mode 100644 index c55082df43..0000000000 --- a/jpeg/jconfig.mc6 +++ /dev/null @@ -1,52 +0,0 @@ -/* jconfig.mc6 --- jconfig.h for Microsoft C on MS-DOS, version 6.00A & up. */ -/* see jconfig.doc for explanations */ - -#define HAVE_PROTOTYPES -#define HAVE_UNSIGNED_CHAR -#define HAVE_UNSIGNED_SHORT -/* #define void char */ -/* #define const */ -#undef CHAR_IS_UNSIGNED -#define HAVE_STDDEF_H -#define HAVE_STDLIB_H -#undef NEED_BSD_STRINGS -#undef NEED_SYS_TYPES_H -#define NEED_FAR_POINTERS /* for small or medium memory model */ -#undef NEED_SHORT_EXTERNAL_NAMES -#undef INCOMPLETE_TYPES_BROKEN - -#ifdef JPEG_INTERNALS - -#undef RIGHT_SHIFT_IS_UNSIGNED - -#define USE_MSDOS_MEMMGR /* Define this if you use jmemdos.c */ - -#define MAX_ALLOC_CHUNK 65520L /* Maximum request to malloc() */ - -#define USE_FMEM /* Microsoft has _fmemcpy() and _fmemset() */ - -#define NEED_FHEAPMIN /* far heap management routines are broken */ - -#define SHORTxLCONST_32 /* enable compiler-specific DCT optimization */ -/* Note: the above define is known to improve the code with Microsoft C 6.00A. - * I do not know whether it is good for later compiler versions. - * Please report any info on this point to jpeg-info@uunet.uu.net. - */ - -#endif /* JPEG_INTERNALS */ - -#ifdef JPEG_CJPEG_DJPEG - -#define BMP_SUPPORTED /* BMP image file format */ -#define GIF_SUPPORTED /* GIF image file format */ -#define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */ -#undef RLE_SUPPORTED /* Utah RLE image file format */ -#define TARGA_SUPPORTED /* Targa image file format */ - -#define TWO_FILE_COMMANDLINE -#define USE_SETMODE /* Microsoft has setmode() */ -#define NEED_SIGNAL_CATCHER /* Define this if you use jmemdos.c */ -#undef DONT_USE_B_MODE -#undef PROGRESS_REPORT /* optional */ - -#endif /* JPEG_CJPEG_DJPEG */ diff --git a/jpeg/jconfig.sas b/jpeg/jconfig.sas deleted file mode 100644 index efdac22294..0000000000 --- a/jpeg/jconfig.sas +++ /dev/null @@ -1,43 +0,0 @@ -/* jconfig.sas --- jconfig.h for Amiga systems using SAS C 6.0 and up. */ -/* see jconfig.doc for explanations */ - -#define HAVE_PROTOTYPES -#define HAVE_UNSIGNED_CHAR -#define HAVE_UNSIGNED_SHORT -/* #define void char */ -/* #define const */ -#undef CHAR_IS_UNSIGNED -#define HAVE_STDDEF_H -#define HAVE_STDLIB_H -#undef NEED_BSD_STRINGS -#undef NEED_SYS_TYPES_H -#undef NEED_FAR_POINTERS -#undef NEED_SHORT_EXTERNAL_NAMES -#undef INCOMPLETE_TYPES_BROKEN - -#ifdef JPEG_INTERNALS - -#undef RIGHT_SHIFT_IS_UNSIGNED - -#define TEMP_DIRECTORY "JPEGTMP:" /* recommended setting for Amiga */ - -#define NO_MKTEMP /* SAS C doesn't have mktemp() */ - -#define SHORTxSHORT_32 /* produces better DCT code with SAS C */ - -#endif /* JPEG_INTERNALS */ - -#ifdef JPEG_CJPEG_DJPEG - -#define BMP_SUPPORTED /* BMP image file format */ -#define GIF_SUPPORTED /* GIF image file format */ -#define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */ -#undef RLE_SUPPORTED /* Utah RLE image file format */ -#define TARGA_SUPPORTED /* Targa image file format */ - -#define TWO_FILE_COMMANDLINE -#define NEED_SIGNAL_CATCHER -#undef DONT_USE_B_MODE -#undef PROGRESS_REPORT /* optional */ - -#endif /* JPEG_CJPEG_DJPEG */ diff --git a/jpeg/jconfig.st b/jpeg/jconfig.st deleted file mode 100644 index ab3b5b4d6c..0000000000 --- a/jpeg/jconfig.st +++ /dev/null @@ -1,39 +0,0 @@ -/* jconfig.st --- jconfig.h for Atari ST/STE/TT using Pure C or Turbo C. */ -/* see jconfig.doc for explanations */ - -#define HAVE_PROTOTYPES -#define HAVE_UNSIGNED_CHAR -#define HAVE_UNSIGNED_SHORT -/* #define void char */ -/* #define const */ -#undef CHAR_IS_UNSIGNED -#define HAVE_STDDEF_H -#define HAVE_STDLIB_H -#undef NEED_BSD_STRINGS -#undef NEED_SYS_TYPES_H -#undef NEED_FAR_POINTERS -#undef NEED_SHORT_EXTERNAL_NAMES -#define INCOMPLETE_TYPES_BROKEN /* suppress undefined-structure warnings */ - -#ifdef JPEG_INTERNALS - -#undef RIGHT_SHIFT_IS_UNSIGNED - -#define ALIGN_TYPE long /* apparently double is a weird size? */ - -#endif /* JPEG_INTERNALS */ - -#ifdef JPEG_CJPEG_DJPEG - -#define BMP_SUPPORTED /* BMP image file format */ -#define GIF_SUPPORTED /* GIF image file format */ -#define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */ -#undef RLE_SUPPORTED /* Utah RLE image file format */ -#define TARGA_SUPPORTED /* Targa image file format */ - -#define TWO_FILE_COMMANDLINE /* optional -- undef if you like Unix style */ -#define NEED_SIGNAL_CATCHER /* needed if you use jmemname.c */ -#undef DONT_USE_B_MODE -#undef PROGRESS_REPORT /* optional */ - -#endif /* JPEG_CJPEG_DJPEG */ diff --git a/jpeg/jconfig.vms b/jpeg/jconfig.vms deleted file mode 100644 index 55a6ffba5c..0000000000 --- a/jpeg/jconfig.vms +++ /dev/null @@ -1,37 +0,0 @@ -/* jconfig.vms --- jconfig.h for use on Digital VMS. */ -/* see jconfig.doc for explanations */ - -#define HAVE_PROTOTYPES -#define HAVE_UNSIGNED_CHAR -#define HAVE_UNSIGNED_SHORT -/* #define void char */ -/* #define const */ -#undef CHAR_IS_UNSIGNED -#define HAVE_STDDEF_H -#define HAVE_STDLIB_H -#undef NEED_BSD_STRINGS -#undef NEED_SYS_TYPES_H -#undef NEED_FAR_POINTERS -#undef NEED_SHORT_EXTERNAL_NAMES -#undef INCOMPLETE_TYPES_BROKEN - -#ifdef JPEG_INTERNALS - -#undef RIGHT_SHIFT_IS_UNSIGNED - -#endif /* JPEG_INTERNALS */ - -#ifdef JPEG_CJPEG_DJPEG - -#define BMP_SUPPORTED /* BMP image file format */ -#define GIF_SUPPORTED /* GIF image file format */ -#define PPM_SUPPORTED /* PBMPLUS PPM/PGM image file format */ -#undef RLE_SUPPORTED /* Utah RLE image file format */ -#define TARGA_SUPPORTED /* Targa image file format */ - -#define TWO_FILE_COMMANDLINE /* Needed on VMS */ -#undef NEED_SIGNAL_CATCHER -#undef DONT_USE_B_MODE -#undef PROGRESS_REPORT /* optional */ - -#endif /* JPEG_CJPEG_DJPEG */ diff --git a/jpeg/jmemansi.c b/jpeg/jmemansi.c deleted file mode 100644 index 70010f96de..0000000000 --- a/jpeg/jmemansi.c +++ /dev/null @@ -1,167 +0,0 @@ -/* - * jmemansi.c - * - * Copyright (C) 1992-1994, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file provides a simple generic implementation of the system- - * dependent portion of the JPEG memory manager. This implementation - * assumes that you have the ANSI-standard library routine tmpfile(). - * Also, the problem of determining the amount of memory available - * is shoved onto the user. - */ - -#define JPEG_INTERNALS -#include "jinclude.h" -#include "jpeglib.h" -#include "jmemsys.h" /* import the system-dependent declarations */ - -#ifndef HAVE_STDLIB_H /* <stdlib.h> should declare malloc(),free() */ -extern void * malloc JPP((size_t size)); -extern void free JPP((void *ptr)); -#endif - -#ifndef SEEK_SET /* pre-ANSI systems may not define this; */ -#define SEEK_SET 0 /* if not, assume 0 is correct */ -#endif - - -/* - * Memory allocation and freeing are controlled by the regular library - * routines malloc() and free(). - */ - -GLOBAL void * -jpeg_get_small (j_common_ptr cinfo, size_t sizeofobject) -{ - return (void *) malloc(sizeofobject); -} - -GLOBAL void -jpeg_free_small (j_common_ptr cinfo, void * object, size_t sizeofobject) -{ - free(object); -} - - -/* - * "Large" objects are treated the same as "small" ones. - * NB: although we include FAR keywords in the routine declarations, - * this file won't actually work in 80x86 small/medium model; at least, - * you probably won't be able to process useful-size images in only 64KB. - */ - -GLOBAL void FAR * -jpeg_get_large (j_common_ptr cinfo, size_t sizeofobject) -{ - return (void FAR *) malloc(sizeofobject); -} - -GLOBAL void -jpeg_free_large (j_common_ptr cinfo, void FAR * object, size_t sizeofobject) -{ - free(object); -} - - -/* - * This routine computes the total memory space available for allocation. - * It's impossible to do this in a portable way; our current solution is - * to make the user tell us (with a default value set at compile time). - * If you can actually get the available space, it's a good idea to subtract - * a slop factor of 5% or so. - */ - -#ifndef DEFAULT_MAX_MEM /* so can override from makefile */ -#define DEFAULT_MAX_MEM 1000000L /* default: one megabyte */ -#endif - -GLOBAL long -jpeg_mem_available (j_common_ptr cinfo, long min_bytes_needed, - long max_bytes_needed, long already_allocated) -{ - return cinfo->mem->max_memory_to_use - already_allocated; -} - - -/* - * Backing store (temporary file) management. - * Backing store objects are only used when the value returned by - * jpeg_mem_available is less than the total space needed. You can dispense - * with these routines if you have plenty of virtual memory; see jmemnobs.c. - */ - - -METHODDEF void -read_backing_store (j_common_ptr cinfo, backing_store_ptr info, - void FAR * buffer_address, - long file_offset, long byte_count) -{ - if (fseek(info->temp_file, file_offset, SEEK_SET)) - ERREXIT(cinfo, JERR_TFILE_SEEK); - if (JFREAD(info->temp_file, buffer_address, byte_count) - != (size_t) byte_count) - ERREXIT(cinfo, JERR_TFILE_READ); -} - - -METHODDEF void -write_backing_store (j_common_ptr cinfo, backing_store_ptr info, - void FAR * buffer_address, - long file_offset, long byte_count) -{ - if (fseek(info->temp_file, file_offset, SEEK_SET)) - ERREXIT(cinfo, JERR_TFILE_SEEK); - if (JFWRITE(info->temp_file, buffer_address, byte_count) - != (size_t) byte_count) - ERREXIT(cinfo, JERR_TFILE_WRITE); -} - - -METHODDEF void -close_backing_store (j_common_ptr cinfo, backing_store_ptr info) -{ - fclose(info->temp_file); - /* Since this implementation uses tmpfile() to create the file, - * no explicit file deletion is needed. - */ -} - - -/* - * Initial opening of a backing-store object. - * - * This version uses tmpfile(), which constructs a suitable file name - * behind the scenes. We don't have to use info->temp_name[] at all; - * indeed, we can't even find out the actual name of the temp file. - */ - -GLOBAL void -jpeg_open_backing_store (j_common_ptr cinfo, backing_store_ptr info, - long total_bytes_needed) -{ - if ((info->temp_file = tmpfile()) == NULL) - ERREXITS(cinfo, JERR_TFILE_CREATE, ""); - info->read_backing_store = read_backing_store; - info->write_backing_store = write_backing_store; - info->close_backing_store = close_backing_store; -} - - -/* - * These routines take care of any system-dependent initialization and - * cleanup required. - */ - -GLOBAL long -jpeg_mem_init (j_common_ptr cinfo) -{ - return DEFAULT_MAX_MEM; /* default for max_memory_to_use */ -} - -GLOBAL void -jpeg_mem_term (j_common_ptr cinfo) -{ - /* no work */ -} diff --git a/jpeg/jmemdos.c b/jpeg/jmemdos.c deleted file mode 100644 index 4db8ec574a..0000000000 --- a/jpeg/jmemdos.c +++ /dev/null @@ -1,634 +0,0 @@ -/* - * jmemdos.c - * - * Copyright (C) 1992-1994, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file provides an MS-DOS-compatible implementation of the system- - * dependent portion of the JPEG memory manager. Temporary data can be - * stored in extended or expanded memory as well as in regular DOS files. - * - * If you use this file, you must be sure that NEED_FAR_POINTERS is defined - * if you compile in a small-data memory model; it should NOT be defined if - * you use a large-data memory model. This file is not recommended if you - * are using a flat-memory-space 386 environment such as DJGCC or Watcom C. - * Also, this code will NOT work if struct fields are aligned on greater than - * 2-byte boundaries. - * - * Based on code contributed by Ge' Weijers. - */ - -/* - * If you have both extended and expanded memory, you may want to change the - * order in which they are tried in jopen_backing_store. On a 286 machine - * expanded memory is usually faster, since extended memory access involves - * an expensive protected-mode-and-back switch. On 386 and better, extended - * memory is usually faster. As distributed, the code tries extended memory - * first (what? not everyone has a 386? :-). - * - * You can disable use of extended/expanded memory entirely by altering these - * definitions or overriding them from the Makefile (eg, -DEMS_SUPPORTED=0). - */ - -#ifndef XMS_SUPPORTED -#define XMS_SUPPORTED 1 -#endif -#ifndef EMS_SUPPORTED -#define EMS_SUPPORTED 1 -#endif - - -#define JPEG_INTERNALS -#include "jinclude.h" -#include "jpeglib.h" -#include "jmemsys.h" /* import the system-dependent declarations */ - -#ifndef HAVE_STDLIB_H /* <stdlib.h> should declare these */ -extern void * malloc JPP((size_t size)); -extern void free JPP((void *ptr)); -extern char * getenv JPP((const char * name)); -#endif - -#ifdef NEED_FAR_POINTERS - -#ifdef __TURBOC__ -/* These definitions work for Borland C (Turbo C) */ -#include <alloc.h> /* need farmalloc(), farfree() */ -#define far_malloc(x) farmalloc(x) -#define far_free(x) farfree(x) -#else -/* These definitions work for Microsoft C and compatible compilers */ -#include <malloc.h> /* need _fmalloc(), _ffree() */ -#define far_malloc(x) _fmalloc(x) -#define far_free(x) _ffree(x) -#endif - -#else /* not NEED_FAR_POINTERS */ - -#define far_malloc(x) malloc(x) -#define far_free(x) free(x) - -#endif /* NEED_FAR_POINTERS */ - -#ifdef DONT_USE_B_MODE /* define mode parameters for fopen() */ -#define READ_BINARY "r" -#else -#define READ_BINARY "rb" -#endif - -#if MAX_ALLOC_CHUNK >= 65535L /* make sure jconfig.h got this right */ - MAX_ALLOC_CHUNK should be less than 64K. /* deliberate syntax error */ -#endif - - -/* - * Declarations for assembly-language support routines (see jmemdosa.asm). - * - * The functions are declared "far" as are all pointer arguments; - * this ensures the assembly source code will work regardless of the - * compiler memory model. We assume "short" is 16 bits, "long" is 32. - */ - -typedef void far * XMSDRIVER; /* actually a pointer to code */ -typedef struct { /* registers for calling XMS driver */ - unsigned short ax, dx, bx; - void far * ds_si; - } XMScontext; -typedef struct { /* registers for calling EMS driver */ - unsigned short ax, dx, bx; - void far * ds_si; - } EMScontext; - -EXTERN short far jdos_open JPP((short far * handle, char far * filename)); -EXTERN short far jdos_close JPP((short handle)); -EXTERN short far jdos_seek JPP((short handle, long offset)); -EXTERN short far jdos_read JPP((short handle, void far * buffer, - unsigned short count)); -EXTERN short far jdos_write JPP((short handle, void far * buffer, - unsigned short count)); -EXTERN void far jxms_getdriver JPP((XMSDRIVER far *)); -EXTERN void far jxms_calldriver JPP((XMSDRIVER, XMScontext far *)); -EXTERN short far jems_available JPP((void)); -EXTERN void far jems_calldriver JPP((EMScontext far *)); - - -/* - * Selection of a file name for a temporary file. - * This is highly system-dependent, and you may want to customize it. - */ - -static int next_file_num; /* to distinguish among several temp files */ - -LOCAL void -select_file_name (char * fname) -{ - const char * env; - char * ptr; - FILE * tfile; - - /* Keep generating file names till we find one that's not in use */ - for (;;) { - /* Get temp directory name from environment TMP or TEMP variable; - * if none, use "." - */ - if ((env = (const char *) getenv("TMP")) == NULL) - if ((env = (const char *) getenv("TEMP")) == NULL) - env = "."; - if (*env == '\0') /* null string means "." */ - env = "."; - ptr = fname; /* copy name to fname */ - while (*env != '\0') - *ptr++ = *env++; - if (ptr[-1] != '\\' && ptr[-1] != '/') - *ptr++ = '\\'; /* append backslash if not in env variable */ - /* Append a suitable file name */ - next_file_num++; /* advance counter */ - sprintf(ptr, "JPG%03d.TMP", next_file_num); - /* Probe to see if file name is already in use */ - if ((tfile = fopen(fname, READ_BINARY)) == NULL) - break; - fclose(tfile); /* oops, it's there; close tfile & try again */ - } -} - - -/* - * Near-memory allocation and freeing are controlled by the regular library - * routines malloc() and free(). - */ - -GLOBAL void * -jpeg_get_small (j_common_ptr cinfo, size_t sizeofobject) -{ - return (void *) malloc(sizeofobject); -} - -GLOBAL void -jpeg_free_small (j_common_ptr cinfo, void * object, size_t sizeofobject) -{ - free(object); -} - - -/* - * "Large" objects are allocated in far memory, if possible - */ - -GLOBAL void FAR * -jpeg_get_large (j_common_ptr cinfo, size_t sizeofobject) -{ - return (void FAR *) far_malloc(sizeofobject); -} - -GLOBAL void -jpeg_free_large (j_common_ptr cinfo, void FAR * object, size_t sizeofobject) -{ - far_free(object); -} - - -/* - * This routine computes the total memory space available for allocation. - * It's impossible to do this in a portable way; our current solution is - * to make the user tell us (with a default value set at compile time). - * If you can actually get the available space, it's a good idea to subtract - * a slop factor of 5% or so. - */ - -#ifndef DEFAULT_MAX_MEM /* so can override from makefile */ -#define DEFAULT_MAX_MEM 300000L /* for total usage about 450K */ -#endif - -GLOBAL long -jpeg_mem_available (j_common_ptr cinfo, long min_bytes_needed, - long max_bytes_needed, long already_allocated) -{ - return cinfo->mem->max_memory_to_use - already_allocated; -} - - -/* - * Backing store (temporary file) management. - * Backing store objects are only used when the value returned by - * jpeg_mem_available is less than the total space needed. You can dispense - * with these routines if you have plenty of virtual memory; see jmemnobs.c. - */ - -/* - * For MS-DOS we support three types of backing storage: - * 1. Conventional DOS files. We access these by direct DOS calls rather - * than via the stdio package. This provides a bit better performance, - * but the real reason is that the buffers to be read or written are FAR. - * The stdio library for small-data memory models can't cope with that. - * 2. Extended memory, accessed per the XMS V2.0 specification. - * 3. Expanded memory, accessed per the LIM/EMS 4.0 specification. - * You'll need copies of those specs to make sense of the related code. - * The specs are available by Internet FTP from the SIMTEL archives - * (oak.oakland.edu and its various mirror sites). See files - * pub/msdos/microsoft/xms20.arc and pub/msdos/info/limems41.zip. - */ - - -/* - * Access methods for a DOS file. - */ - - -METHODDEF void -read_file_store (j_common_ptr cinfo, backing_store_ptr info, - void FAR * buffer_address, - long file_offset, long byte_count) -{ - if (jdos_seek(info->handle.file_handle, file_offset)) - ERREXIT(cinfo, JERR_TFILE_SEEK); - /* Since MAX_ALLOC_CHUNK is less than 64K, byte_count will be too. */ - if (byte_count > 65535L) /* safety check */ - ERREXIT(cinfo, JERR_BAD_ALLOC_CHUNK); - if (jdos_read(info->handle.file_handle, buffer_address, - (unsigned short) byte_count)) - ERREXIT(cinfo, JERR_TFILE_READ); -} - - -METHODDEF void -write_file_store (j_common_ptr cinfo, backing_store_ptr info, - void FAR * buffer_address, - long file_offset, long byte_count) -{ - if (jdos_seek(info->handle.file_handle, file_offset)) - ERREXIT(cinfo, JERR_TFILE_SEEK); - /* Since MAX_ALLOC_CHUNK is less than 64K, byte_count will be too. */ - if (byte_count > 65535L) /* safety check */ - ERREXIT(cinfo, JERR_BAD_ALLOC_CHUNK); - if (jdos_write(info->handle.file_handle, buffer_address, - (unsigned short) byte_count)) - ERREXIT(cinfo, JERR_TFILE_WRITE); -} - - -METHODDEF void -close_file_store (j_common_ptr cinfo, backing_store_ptr info) -{ - jdos_close(info->handle.file_handle); /* close the file */ - remove(info->temp_name); /* delete the file */ -/* If your system doesn't have remove(), try unlink() instead. - * remove() is the ANSI-standard name for this function, but - * unlink() was more common in pre-ANSI systems. - */ - TRACEMSS(cinfo, 1, JTRC_TFILE_CLOSE, info->temp_name); -} - - -LOCAL boolean -open_file_store (j_common_ptr cinfo, backing_store_ptr info, - long total_bytes_needed) -{ - short handle; - - select_file_name(info->temp_name); - if (jdos_open((short far *) & handle, (char far *) info->temp_name)) { - /* might as well exit since jpeg_open_backing_store will fail anyway */ - ERREXITS(cinfo, JERR_TFILE_CREATE, info->temp_name); - return FALSE; - } - info->handle.file_handle = handle; - info->read_backing_store = read_file_store; - info->write_backing_store = write_file_store; - info->close_backing_store = close_file_store; - TRACEMSS(cinfo, 1, JTRC_TFILE_OPEN, info->temp_name); - return TRUE; /* succeeded */ -} - - -/* - * Access methods for extended memory. - */ - -#if XMS_SUPPORTED - -static XMSDRIVER xms_driver; /* saved address of XMS driver */ - -typedef union { /* either long offset or real-mode pointer */ - long offset; - void far * ptr; - } XMSPTR; - -typedef struct { /* XMS move specification structure */ - long length; - XMSH src_handle; - XMSPTR src; - XMSH dst_handle; - XMSPTR dst; - } XMSspec; - -#define ODD(X) (((X) & 1L) != 0) - - -METHODDEF void -read_xms_store (j_common_ptr cinfo, backing_store_ptr info, - void FAR * buffer_address, - long file_offset, long byte_count) -{ - XMScontext ctx; - XMSspec spec; - char endbuffer[2]; - - /* The XMS driver can't cope with an odd length, so handle the last byte - * specially if byte_count is odd. We don't expect this to be common. - */ - - spec.length = byte_count & (~ 1L); - spec.src_handle = info->handle.xms_handle; - spec.src.offset = file_offset; - spec.dst_handle = 0; - spec.dst.ptr = buffer_address; - - ctx.ds_si = (void far *) & spec; - ctx.ax = 0x0b00; /* EMB move */ - jxms_calldriver(xms_driver, (XMScontext far *) & ctx); - if (ctx.ax != 1) - ERREXIT(cinfo, JERR_XMS_READ); - - if (ODD(byte_count)) { - read_xms_store(cinfo, info, (void FAR *) endbuffer, - file_offset + byte_count - 1L, 2L); - ((char FAR *) buffer_address)[byte_count - 1L] = endbuffer[0]; - } -} - - -METHODDEF void -write_xms_store (j_common_ptr cinfo, backing_store_ptr info, - void FAR * buffer_address, - long file_offset, long byte_count) -{ - XMScontext ctx; - XMSspec spec; - char endbuffer[2]; - - /* The XMS driver can't cope with an odd length, so handle the last byte - * specially if byte_count is odd. We don't expect this to be common. - */ - - spec.length = byte_count & (~ 1L); - spec.src_handle = 0; - spec.src.ptr = buffer_address; - spec.dst_handle = info->handle.xms_handle; - spec.dst.offset = file_offset; - - ctx.ds_si = (void far *) & spec; - ctx.ax = 0x0b00; /* EMB move */ - jxms_calldriver(xms_driver, (XMScontext far *) & ctx); - if (ctx.ax != 1) - ERREXIT(cinfo, JERR_XMS_WRITE); - - if (ODD(byte_count)) { - read_xms_store(cinfo, info, (void FAR *) endbuffer, - file_offset + byte_count - 1L, 2L); - endbuffer[0] = ((char FAR *) buffer_address)[byte_count - 1L]; - write_xms_store(cinfo, info, (void FAR *) endbuffer, - file_offset + byte_count - 1L, 2L); - } -} - - -METHODDEF void -close_xms_store (j_common_ptr cinfo, backing_store_ptr info) -{ - XMScontext ctx; - - ctx.dx = info->handle.xms_handle; - ctx.ax = 0x0a00; - jxms_calldriver(xms_driver, (XMScontext far *) & ctx); - TRACEMS1(cinfo, 1, JTRC_XMS_CLOSE, info->handle.xms_handle); - /* we ignore any error return from the driver */ -} - - -LOCAL boolean -open_xms_store (j_common_ptr cinfo, backing_store_ptr info, - long total_bytes_needed) -{ - XMScontext ctx; - - /* Get address of XMS driver */ - jxms_getdriver((XMSDRIVER far *) & xms_driver); - if (xms_driver == NULL) - return FALSE; /* no driver to be had */ - - /* Get version number, must be >= 2.00 */ - ctx.ax = 0x0000; - jxms_calldriver(xms_driver, (XMScontext far *) & ctx); - if (ctx.ax < (unsigned short) 0x0200) - return FALSE; - - /* Try to get space (expressed in kilobytes) */ - ctx.dx = (unsigned short) ((total_bytes_needed + 1023L) >> 10); - ctx.ax = 0x0900; - jxms_calldriver(xms_driver, (XMScontext far *) & ctx); - if (ctx.ax != 1) - return FALSE; - - /* Succeeded, save the handle and away we go */ - info->handle.xms_handle = ctx.dx; - info->read_backing_store = read_xms_store; - info->write_backing_store = write_xms_store; - info->close_backing_store = close_xms_store; - TRACEMS1(cinfo, 1, JTRC_XMS_OPEN, ctx.dx); - return TRUE; /* succeeded */ -} - -#endif /* XMS_SUPPORTED */ - - -/* - * Access methods for expanded memory. - */ - -#if EMS_SUPPORTED - -/* The EMS move specification structure requires word and long fields aligned - * at odd byte boundaries. Some compilers will align struct fields at even - * byte boundaries. While it's usually possible to force byte alignment, - * that causes an overall performance penalty and may pose problems in merging - * JPEG into a larger application. Instead we accept some rather dirty code - * here. Note this code would fail if the hardware did not allow odd-byte - * word & long accesses, but all 80x86 CPUs do. - */ - -typedef void far * EMSPTR; - -typedef union { /* EMS move specification structure */ - long length; /* It's easy to access first 4 bytes */ - char bytes[18]; /* Misaligned fields in here! */ - } EMSspec; - -/* Macros for accessing misaligned fields */ -#define FIELD_AT(spec,offset,type) (*((type *) &(spec.bytes[offset]))) -#define SRC_TYPE(spec) FIELD_AT(spec,4,char) -#define SRC_HANDLE(spec) FIELD_AT(spec,5,EMSH) -#define SRC_OFFSET(spec) FIELD_AT(spec,7,unsigned short) -#define SRC_PAGE(spec) FIELD_AT(spec,9,unsigned short) -#define SRC_PTR(spec) FIELD_AT(spec,7,EMSPTR) -#define DST_TYPE(spec) FIELD_AT(spec,11,char) -#define DST_HANDLE(spec) FIELD_AT(spec,12,EMSH) -#define DST_OFFSET(spec) FIELD_AT(spec,14,unsigned short) -#define DST_PAGE(spec) FIELD_AT(spec,16,unsigned short) -#define DST_PTR(spec) FIELD_AT(spec,14,EMSPTR) - -#define EMSPAGESIZE 16384L /* gospel, see the EMS specs */ - -#define HIBYTE(W) (((W) >> 8) & 0xFF) -#define LOBYTE(W) ((W) & 0xFF) - - -METHODDEF void -read_ems_store (j_common_ptr cinfo, backing_store_ptr info, - void FAR * buffer_address, - long file_offset, long byte_count) -{ - EMScontext ctx; - EMSspec spec; - - spec.length = byte_count; - SRC_TYPE(spec) = 1; - SRC_HANDLE(spec) = info->handle.ems_handle; - SRC_PAGE(spec) = (unsigned short) (file_offset / EMSPAGESIZE); - SRC_OFFSET(spec) = (unsigned short) (file_offset % EMSPAGESIZE); - DST_TYPE(spec) = 0; - DST_HANDLE(spec) = 0; - DST_PTR(spec) = buffer_address; - - ctx.ds_si = (void far *) & spec; - ctx.ax = 0x5700; /* move memory region */ - jems_calldriver((EMScontext far *) & ctx); - if (HIBYTE(ctx.ax) != 0) - ERREXIT(cinfo, JERR_EMS_READ); -} - - -METHODDEF void -write_ems_store (j_common_ptr cinfo, backing_store_ptr info, - void FAR * buffer_address, - long file_offset, long byte_count) -{ - EMScontext ctx; - EMSspec spec; - - spec.length = byte_count; - SRC_TYPE(spec) = 0; - SRC_HANDLE(spec) = 0; - SRC_PTR(spec) = buffer_address; - DST_TYPE(spec) = 1; - DST_HANDLE(spec) = info->handle.ems_handle; - DST_PAGE(spec) = (unsigned short) (file_offset / EMSPAGESIZE); - DST_OFFSET(spec) = (unsigned short) (file_offset % EMSPAGESIZE); - - ctx.ds_si = (void far *) & spec; - ctx.ax = 0x5700; /* move memory region */ - jems_calldriver((EMScontext far *) & ctx); - if (HIBYTE(ctx.ax) != 0) - ERREXIT(cinfo, JERR_EMS_WRITE); -} - - -METHODDEF void -close_ems_store (j_common_ptr cinfo, backing_store_ptr info) -{ - EMScontext ctx; - - ctx.ax = 0x4500; - ctx.dx = info->handle.ems_handle; - jems_calldriver((EMScontext far *) & ctx); - TRACEMS1(cinfo, 1, JTRC_EMS_CLOSE, info->handle.ems_handle); - /* we ignore any error return from the driver */ -} - - -LOCAL boolean -open_ems_store (j_common_ptr cinfo, backing_store_ptr info, - long total_bytes_needed) -{ - EMScontext ctx; - - /* Is EMS driver there? */ - if (! jems_available()) - return FALSE; - - /* Get status, make sure EMS is OK */ - ctx.ax = 0x4000; - jems_calldriver((EMScontext far *) & ctx); - if (HIBYTE(ctx.ax) != 0) - return FALSE; - - /* Get version, must be >= 4.0 */ - ctx.ax = 0x4600; - jems_calldriver((EMScontext far *) & ctx); - if (HIBYTE(ctx.ax) != 0 || LOBYTE(ctx.ax) < 0x40) - return FALSE; - - /* Try to allocate requested space */ - ctx.ax = 0x4300; - ctx.bx = (unsigned short) ((total_bytes_needed + EMSPAGESIZE-1L) / EMSPAGESIZE); - jems_calldriver((EMScontext far *) & ctx); - if (HIBYTE(ctx.ax) != 0) - return FALSE; - - /* Succeeded, save the handle and away we go */ - info->handle.ems_handle = ctx.dx; - info->read_backing_store = read_ems_store; - info->write_backing_store = write_ems_store; - info->close_backing_store = close_ems_store; - TRACEMS1(cinfo, 1, JTRC_EMS_OPEN, ctx.dx); - return TRUE; /* succeeded */ -} - -#endif /* EMS_SUPPORTED */ - - -/* - * Initial opening of a backing-store object. - */ - -GLOBAL void -jpeg_open_backing_store (j_common_ptr cinfo, backing_store_ptr info, - long total_bytes_needed) -{ - /* Try extended memory, then expanded memory, then regular file. */ -#if XMS_SUPPORTED - if (open_xms_store(cinfo, info, total_bytes_needed)) - return; -#endif -#if EMS_SUPPORTED - if (open_ems_store(cinfo, info, total_bytes_needed)) - return; -#endif - if (open_file_store(cinfo, info, total_bytes_needed)) - return; - ERREXITS(cinfo, JERR_TFILE_CREATE, ""); -} - - -/* - * These routines take care of any system-dependent initialization and - * cleanup required. - */ - -GLOBAL long -jpeg_mem_init (j_common_ptr cinfo) -{ - next_file_num = 0; /* initialize temp file name generator */ - return DEFAULT_MAX_MEM; /* default for max_memory_to_use */ -} - -GLOBAL void -jpeg_mem_term (j_common_ptr cinfo) -{ - /* Microsoft C, at least in v6.00A, will not successfully reclaim freed - * blocks of size > 32Kbytes unless we give it a kick in the rear, like so: - */ -#ifdef NEED_FHEAPMIN - _fheapmin(); -#endif -} diff --git a/jpeg/jmemdosa.asm b/jpeg/jmemdosa.asm deleted file mode 100644 index ecd43729fe..0000000000 --- a/jpeg/jmemdosa.asm +++ /dev/null @@ -1,379 +0,0 @@ -; -; jmemdosa.asm -; -; Copyright (C) 1992, Thomas G. Lane. -; This file is part of the Independent JPEG Group's software. -; For conditions of distribution and use, see the accompanying README file. -; -; This file contains low-level interface routines to support the MS-DOS -; backing store manager (jmemdos.c). Routines are provided to access disk -; files through direct DOS calls, and to access XMS and EMS drivers. -; -; This file should assemble with Microsoft's MASM or any compatible -; assembler (including Borland's Turbo Assembler). If you haven't got -; a compatible assembler, better fall back to jmemansi.c or jmemname.c. -; -; To minimize dependence on the C compiler's register usage conventions, -; we save and restore all 8086 registers, even though most compilers only -; require SI,DI,DS to be preserved. Also, we use only 16-bit-wide return -; values, which everybody returns in AX. -; -; Based on code contributed by Ge' Weijers. -; - -JMEMDOSA_TXT segment byte public 'CODE' - - assume cs:JMEMDOSA_TXT - - public _jdos_open - public _jdos_close - public _jdos_seek - public _jdos_read - public _jdos_write - public _jxms_getdriver - public _jxms_calldriver - public _jems_available - public _jems_calldriver - -; -; short far jdos_open (short far * handle, char far * filename) -; -; Create and open a temporary file -; -_jdos_open proc far - push bp ; linkage - mov bp,sp - push si ; save all registers for safety - push di - push bx - push cx - push dx - push es - push ds - mov cx,0 ; normal file attributes - lds dx,dword ptr [bp+10] ; get filename pointer - mov ah,3ch ; create file - int 21h - jc open_err ; if failed, return error code - lds bx,dword ptr [bp+6] ; get handle pointer - mov word ptr [bx],ax ; save the handle - xor ax,ax ; return zero for OK -open_err: pop ds ; restore registers and exit - pop es - pop dx - pop cx - pop bx - pop di - pop si - pop bp - ret -_jdos_open endp - - -; -; short far jdos_close (short handle) -; -; Close the file handle -; -_jdos_close proc far - push bp ; linkage - mov bp,sp - push si ; save all registers for safety - push di - push bx - push cx - push dx - push es - push ds - mov bx,word ptr [bp+6] ; file handle - mov ah,3eh ; close file - int 21h - jc close_err ; if failed, return error code - xor ax,ax ; return zero for OK -close_err: pop ds ; restore registers and exit - pop es - pop dx - pop cx - pop bx - pop di - pop si - pop bp - ret -_jdos_close endp - - -; -; short far jdos_seek (short handle, long offset) -; -; Set file position -; -_jdos_seek proc far - push bp ; linkage - mov bp,sp - push si ; save all registers for safety - push di - push bx - push cx - push dx - push es - push ds - mov bx,word ptr [bp+6] ; file handle - mov dx,word ptr [bp+8] ; LS offset - mov cx,word ptr [bp+10] ; MS offset - mov ax,4200h ; absolute seek - int 21h - jc seek_err ; if failed, return error code - xor ax,ax ; return zero for OK -seek_err: pop ds ; restore registers and exit - pop es - pop dx - pop cx - pop bx - pop di - pop si - pop bp - ret -_jdos_seek endp - - -; -; short far jdos_read (short handle, void far * buffer, unsigned short count) -; -; Read from file -; -_jdos_read proc far - push bp ; linkage - mov bp,sp - push si ; save all registers for safety - push di - push bx - push cx - push dx - push es - push ds - mov bx,word ptr [bp+6] ; file handle - lds dx,dword ptr [bp+8] ; buffer address - mov cx,word ptr [bp+12] ; number of bytes - mov ah,3fh ; read file - int 21h - jc read_err ; if failed, return error code - cmp ax,word ptr [bp+12] ; make sure all bytes were read - je read_ok - mov ax,1 ; else return 1 for not OK - jmp short read_err -read_ok: xor ax,ax ; return zero for OK -read_err: pop ds ; restore registers and exit - pop es - pop dx - pop cx - pop bx - pop di - pop si - pop bp - ret -_jdos_read endp - - -; -; short far jdos_write (short handle, void far * buffer, unsigned short count) -; -; Write to file -; -_jdos_write proc far - push bp ; linkage - mov bp,sp - push si ; save all registers for safety - push di - push bx - push cx - push dx - push es - push ds - mov bx,word ptr [bp+6] ; file handle - lds dx,dword ptr [bp+8] ; buffer address - mov cx,word ptr [bp+12] ; number of bytes - mov ah,40h ; write file - int 21h - jc write_err ; if failed, return error code - cmp ax,word ptr [bp+12] ; make sure all bytes written - je write_ok - mov ax,1 ; else return 1 for not OK - jmp short write_err -write_ok: xor ax,ax ; return zero for OK -write_err: pop ds ; restore registers and exit - pop es - pop dx - pop cx - pop bx - pop di - pop si - pop bp - ret -_jdos_write endp - - -; -; void far jxms_getdriver (XMSDRIVER far *) -; -; Get the address of the XMS driver, or NULL if not available -; -_jxms_getdriver proc far - push bp ; linkage - mov bp,sp - push si ; save all registers for safety - push di - push bx - push cx - push dx - push es - push ds - mov ax,4300h ; call multiplex interrupt with - int 2fh ; a magic cookie, hex 4300 - cmp al,80h ; AL should contain hex 80 - je xmsavail - xor dx,dx ; no XMS driver available - xor ax,ax ; return a nil pointer - jmp short xmsavail_done -xmsavail: mov ax,4310h ; fetch driver address with - int 2fh ; another magic cookie - mov dx,es ; copy address to dx:ax - mov ax,bx -xmsavail_done: les bx,dword ptr [bp+6] ; get pointer to return value - mov word ptr es:[bx],ax - mov word ptr es:[bx+2],dx - pop ds ; restore registers and exit - pop es - pop dx - pop cx - pop bx - pop di - pop si - pop bp - ret -_jxms_getdriver endp - - -; -; void far jxms_calldriver (XMSDRIVER, XMScontext far *) -; -; The XMScontext structure contains values for the AX,DX,BX,SI,DS registers. -; These are loaded, the XMS call is performed, and the new values of the -; AX,DX,BX registers are written back to the context structure. -; -_jxms_calldriver proc far - push bp ; linkage - mov bp,sp - push si ; save all registers for safety - push di - push bx - push cx - push dx - push es - push ds - les bx,dword ptr [bp+10] ; get XMScontext pointer - mov ax,word ptr es:[bx] ; load registers - mov dx,word ptr es:[bx+2] - mov si,word ptr es:[bx+6] - mov ds,word ptr es:[bx+8] - mov bx,word ptr es:[bx+4] - call dword ptr [bp+6] ; call the driver - mov cx,bx ; save returned BX for a sec - les bx,dword ptr [bp+10] ; get XMScontext pointer - mov word ptr es:[bx],ax ; put back ax,dx,bx - mov word ptr es:[bx+2],dx - mov word ptr es:[bx+4],cx - pop ds ; restore registers and exit - pop es - pop dx - pop cx - pop bx - pop di - pop si - pop bp - ret -_jxms_calldriver endp - - -; -; short far jems_available (void) -; -; Have we got an EMS driver? (this comes straight from the EMS 4.0 specs) -; -_jems_available proc far - push si ; save all registers for safety - push di - push bx - push cx - push dx - push es - push ds - mov ax,3567h ; get interrupt vector 67h - int 21h - push cs - pop ds - mov di,000ah ; check offs 10 in returned seg - lea si,ASCII_device_name ; against literal string - mov cx,8 - cld - repe cmpsb - jne no_ems - mov ax,1 ; match, it's there - jmp short avail_done -no_ems: xor ax,ax ; it's not there -avail_done: pop ds ; restore registers and exit - pop es - pop dx - pop cx - pop bx - pop di - pop si - ret - -ASCII_device_name db "EMMXXXX0" - -_jems_available endp - - -; -; void far jems_calldriver (EMScontext far *) -; -; The EMScontext structure contains values for the AX,DX,BX,SI,DS registers. -; These are loaded, the EMS trap is performed, and the new values of the -; AX,DX,BX registers are written back to the context structure. -; -_jems_calldriver proc far - push bp ; linkage - mov bp,sp - push si ; save all registers for safety - push di - push bx - push cx - push dx - push es - push ds - les bx,dword ptr [bp+6] ; get EMScontext pointer - mov ax,word ptr es:[bx] ; load registers - mov dx,word ptr es:[bx+2] - mov si,word ptr es:[bx+6] - mov ds,word ptr es:[bx+8] - mov bx,word ptr es:[bx+4] - int 67h ; call the EMS driver - mov cx,bx ; save returned BX for a sec - les bx,dword ptr [bp+6] ; get EMScontext pointer - mov word ptr es:[bx],ax ; put back ax,dx,bx - mov word ptr es:[bx+2],dx - mov word ptr es:[bx+4],cx - pop ds ; restore registers and exit - pop es - pop dx - pop cx - pop bx - pop di - pop si - pop bp - ret -_jems_calldriver endp - -JMEMDOSA_TXT ends - - end diff --git a/jpeg/jmemname.c b/jpeg/jmemname.c deleted file mode 100644 index f6c9562461..0000000000 --- a/jpeg/jmemname.c +++ /dev/null @@ -1,248 +0,0 @@ -/* - * jmemname.c - * - * Copyright (C) 1992-1994, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file provides a generic implementation of the system-dependent - * portion of the JPEG memory manager. This implementation assumes that - * you must explicitly construct a name for each temp file. - * Also, the problem of determining the amount of memory available - * is shoved onto the user. - */ - -#define JPEG_INTERNALS -#include "jinclude.h" -#include "jpeglib.h" -#include "jmemsys.h" /* import the system-dependent declarations */ - -#ifndef HAVE_STDLIB_H /* <stdlib.h> should declare malloc(),free() */ -extern void * malloc JPP((size_t size)); -extern void free JPP((void *ptr)); -#endif - -#ifndef SEEK_SET /* pre-ANSI systems may not define this; */ -#define SEEK_SET 0 /* if not, assume 0 is correct */ -#endif - -#ifdef DONT_USE_B_MODE /* define mode parameters for fopen() */ -#define READ_BINARY "r" -#define RW_BINARY "w+" -#else -#define READ_BINARY "rb" -#define RW_BINARY "w+b" -#endif - - -/* - * Selection of a file name for a temporary file. - * This is system-dependent! - * - * The code as given is suitable for most Unix systems, and it is easily - * modified for most non-Unix systems. Some notes: - * 1. The temp file is created in the directory named by TEMP_DIRECTORY. - * The default value is /usr/tmp, which is the conventional place for - * creating large temp files on Unix. On other systems you'll probably - * want to change the file location. You can do this by editing the - * #define, or (preferred) by defining TEMP_DIRECTORY in jconfig.h. - * - * 2. If you need to change the file name as well as its location, - * you can override the TEMP_FILE_NAME macro. (Note that this is - * actually a printf format string; it must contain %s and %d.) - * Few people should need to do this. - * - * 3. mktemp() is used to ensure that multiple processes running - * simultaneously won't select the same file names. If your system - * doesn't have mktemp(), define NO_MKTEMP to do it the hard way. - * - * 4. You probably want to define NEED_SIGNAL_CATCHER so that cjpeg.c/djpeg.c - * will cause the temp files to be removed if you stop the program early. - */ - -#ifndef TEMP_DIRECTORY /* can override from jconfig.h or Makefile */ -#define TEMP_DIRECTORY "/usr/tmp/" /* recommended setting for Unix */ -#endif - -static int next_file_num; /* to distinguish among several temp files */ - -#ifdef NO_MKTEMP - -#ifndef TEMP_FILE_NAME /* can override from jconfig.h or Makefile */ -#define TEMP_FILE_NAME "%sJPG%03d.TMP" -#endif - -LOCAL void -select_file_name (char * fname) -{ - FILE * tfile; - - /* Keep generating file names till we find one that's not in use */ - for (;;) { - next_file_num++; /* advance counter */ - sprintf(fname, TEMP_FILE_NAME, TEMP_DIRECTORY, next_file_num); - if ((tfile = fopen(fname, READ_BINARY)) == NULL) - break; - fclose(tfile); /* oops, it's there; close tfile & try again */ - } -} - -#else /* ! NO_MKTEMP */ - -/* Note that mktemp() requires the initial filename to end in six X's */ -#ifndef TEMP_FILE_NAME /* can override from jconfig.h or Makefile */ -#define TEMP_FILE_NAME "%sJPG%dXXXXXX" -#endif - -LOCAL void -select_file_name (char * fname) -{ - next_file_num++; /* advance counter */ - sprintf(fname, TEMP_FILE_NAME, TEMP_DIRECTORY, next_file_num); - mktemp(fname); /* make sure file name is unique */ - /* mktemp replaces the trailing XXXXXX with a unique string of characters */ -} - -#endif /* NO_MKTEMP */ - - -/* - * Memory allocation and freeing are controlled by the regular library - * routines malloc() and free(). - */ - -GLOBAL void * -jpeg_get_small (j_common_ptr cinfo, size_t sizeofobject) -{ - return (void *) malloc(sizeofobject); -} - -GLOBAL void -jpeg_free_small (j_common_ptr cinfo, void * object, size_t sizeofobject) -{ - free(object); -} - - -/* - * "Large" objects are treated the same as "small" ones. - * NB: although we include FAR keywords in the routine declarations, - * this file won't actually work in 80x86 small/medium model; at least, - * you probably won't be able to process useful-size images in only 64KB. - */ - -GLOBAL void FAR * -jpeg_get_large (j_common_ptr cinfo, size_t sizeofobject) -{ - return (void FAR *) malloc(sizeofobject); -} - -GLOBAL void -jpeg_free_large (j_common_ptr cinfo, void FAR * object, size_t sizeofobject) -{ - free(object); -} - - -/* - * This routine computes the total memory space available for allocation. - * It's impossible to do this in a portable way; our current solution is - * to make the user tell us (with a default value set at compile time). - * If you can actually get the available space, it's a good idea to subtract - * a slop factor of 5% or so. - */ - -#ifndef DEFAULT_MAX_MEM /* so can override from makefile */ -#define DEFAULT_MAX_MEM 1000000L /* default: one megabyte */ -#endif - -GLOBAL long -jpeg_mem_available (j_common_ptr cinfo, long min_bytes_needed, - long max_bytes_needed, long already_allocated) -{ - return cinfo->mem->max_memory_to_use - already_allocated; -} - - -/* - * Backing store (temporary file) management. - * Backing store objects are only used when the value returned by - * jpeg_mem_available is less than the total space needed. You can dispense - * with these routines if you have plenty of virtual memory; see jmemnobs.c. - */ - - -METHODDEF void -read_backing_store (j_common_ptr cinfo, backing_store_ptr info, - void FAR * buffer_address, - long file_offset, long byte_count) -{ - if (fseek(info->temp_file, file_offset, SEEK_SET)) - ERREXIT(cinfo, JERR_TFILE_SEEK); - if (JFREAD(info->temp_file, buffer_address, byte_count) - != (size_t) byte_count) - ERREXIT(cinfo, JERR_TFILE_READ); -} - - -METHODDEF void -write_backing_store (j_common_ptr cinfo, backing_store_ptr info, - void FAR * buffer_address, - long file_offset, long byte_count) -{ - if (fseek(info->temp_file, file_offset, SEEK_SET)) - ERREXIT(cinfo, JERR_TFILE_SEEK); - if (JFWRITE(info->temp_file, buffer_address, byte_count) - != (size_t) byte_count) - ERREXIT(cinfo, JERR_TFILE_WRITE); -} - - -METHODDEF void -close_backing_store (j_common_ptr cinfo, backing_store_ptr info) -{ - fclose(info->temp_file); /* close the file */ - unlink(info->temp_name); /* delete the file */ -/* If your system doesn't have unlink(), use remove() instead. - * remove() is the ANSI-standard name for this function, but if - * your system was ANSI you'd be using jmemansi.c, right? - */ - TRACEMSS(cinfo, 1, JTRC_TFILE_CLOSE, info->temp_name); -} - - -/* - * Initial opening of a backing-store object. - */ - -GLOBAL void -jpeg_open_backing_store (j_common_ptr cinfo, backing_store_ptr info, - long total_bytes_needed) -{ - select_file_name(info->temp_name); - if ((info->temp_file = fopen(info->temp_name, RW_BINARY)) == NULL) - ERREXITS(cinfo, JERR_TFILE_CREATE, info->temp_name); - info->read_backing_store = read_backing_store; - info->write_backing_store = write_backing_store; - info->close_backing_store = close_backing_store; - TRACEMSS(cinfo, 1, JTRC_TFILE_OPEN, info->temp_name); -} - - -/* - * These routines take care of any system-dependent initialization and - * cleanup required. - */ - -GLOBAL long -jpeg_mem_init (j_common_ptr cinfo) -{ - next_file_num = 0; /* initialize temp file name generator */ - return DEFAULT_MAX_MEM; /* default for max_memory_to_use */ -} - -GLOBAL void -jpeg_mem_term (j_common_ptr cinfo) -{ - /* no work */ -} diff --git a/jpeg/jmorecfg.h b/jpeg/jmorecfg.h index d609d90e28..e7a1a0d2bf 100644 --- a/jpeg/jmorecfg.h +++ b/jpeg/jmorecfg.h @@ -207,14 +207,16 @@ typedef unsigned int JDIMENSION; * Defining HAVE_BOOLEAN before including jpeglib.h should make it work. */ -#ifndef WIN32 +//#ifndef WIN32 //geuz #ifndef HAVE_BOOLEAN typedef int boolean; #endif -#endif +//#endif //geuz + #ifndef FALSE /* in case these macros already exist */ #define FALSE 0 /* values of boolean */ #endif + #ifndef TRUE #define TRUE 1 #endif diff --git a/jpeg/libjpeg.doc b/jpeg/libjpeg.doc deleted file mode 100644 index 83067d1e89..0000000000 --- a/jpeg/libjpeg.doc +++ /dev/null @@ -1,2144 +0,0 @@ -USING THE IJG JPEG LIBRARY - -Copyright (C) 1994, Thomas G. Lane. -This file is part of the Independent JPEG Group's software. -For conditions of distribution and use, see the accompanying README file. - - -This file describes how to use the IJG JPEG library within an application -program. Read it if you want to write a program that uses the library. - -The file example.c provides heavily commented skeleton code for calling the -JPEG library. Also see jpeglib.h (the include file to be used by application -programs) for full details about data structures and function parameter lists. -The library source code, of course, is the ultimate reference. - -Note that there have been *major* changes from the application interface -presented by IJG version 4 and earlier versions. The old design had several -inherent limitations, and it had accumulated a lot of cruft as we added -features while trying to minimize application-interface changes. We have -sacrificed backward compatibility in the version 5 rewrite, but we think the -improvements justify this. - - -TABLE OF CONTENTS ------------------ - -Overview: - Functions provided by the library - Outline of typical usage -Basic library usage: - Data formats - Compression details - Decompression details - Mechanics of usage: include files, linking, etc -Advanced features: - Compression parameter selection - Decompression parameter selection - Special color spaces - Error handling - Compressed data handling (source and destination managers) - I/O suspension - Abbreviated datastreams and multiple images - Special markers - Raw (downsampled) image data - Progress monitoring - Memory management - Library compile-time options - Portability considerations - Notes for MS-DOS implementors - -You should read at least the overview and basic usage sections before trying -to program with the library. The sections on advanced features can be read -if and when you need them. - - -OVERVIEW -======== - -Functions provided by the library ---------------------------------- - -The IJG JPEG library provides C code to read and write JPEG-compressed image -files. The surrounding application program receives or supplies image data a -scanline at a time, using a straightforward uncompressed image format. All -details of color conversion and other preprocessing/postprocessing can be -handled by the library. - -The library includes a substantial amount of code that is not covered by the -JPEG standard but is necessary for typical applications of JPEG. These -functions preprocess the image before JPEG compression or postprocess it after -decompression. They include colorspace conversion, downsampling/upsampling, -and color quantization. The application indirectly selects use of this code -by specifying the format in which it wishes to supply or receive image data. -For example, if colormapped output is requested, then the decompression -library automatically invokes color quantization. - -A wide range of quality vs. speed tradeoffs are possible in JPEG processing, -and even more so in decompression postprocessing. The decompression library -provides multiple implementations that cover most of the useful tradeoffs, -ranging from very-high-quality down to fast-preview operation. On the -compression side we have generally not provided low-quality choices, since -compression is normally less time-critical. It should be understood that the -low-quality modes may not meet the JPEG standard's accuracy requirements; -nonetheless, they are useful for viewers. - -A word about functions *not* provided by the library. We handle a subset of -the ISO JPEG standard; most baseline and extended-sequential JPEG processes -are supported. (Our subset includes all features now in common use.) -Unsupported ISO options include: - * Progressive storage (may be supported in future versions) - * Hierarchical storage - * Lossless JPEG - * Arithmetic entropy coding (unsupported for legal reasons) - * DNL marker - * Nonintegral subsampling ratios -We support both 8- and 12-bit data precision, but this is a compile-time -choice rather than a run-time choice; hence it is difficult to use both -precisions in a single application. - -By itself, the library handles only interchange JPEG datastreams --- in -particular the widely used JFIF file format. The library can be used by -surrounding code to process interchange or abbreviated JPEG datastreams that -are embedded in more complex file formats. (For example, we anticipate that -Sam Leffler's LIBTIFF library will use this code to support the revised TIFF -JPEG format.) - - -Outline of typical usage ------------------------- - -The rough outline of a JPEG compression operation is: - - Allocate and initialize a JPEG compression object - Specify the destination for the compressed data (eg, a file) - Set parameters for compression, including image size & colorspace - jpeg_start_compress(...); - while (scan lines remain to be written) - jpeg_write_scanlines(...); - jpeg_finish_compress(...); - Release the JPEG compression object - -A JPEG compression object holds parameters and working state for the JPEG -library. We make creation/destruction of the object separate from starting -or finishing compression of an image; the same object can be re-used for a -series of image compression operations. This makes it easy to re-use the -same parameter settings for a sequence of images. Re-use of a JPEG object -also has important implications for processing abbreviated JPEG datastreams, -as discussed later. - -The image data to be compressed is supplied to jpeg_write_scanlines() from -in-memory buffers. If the application is doing file-to-file compression, -reading image data from the source file is the application's responsibility. -The library emits compressed data by calling a "data destination manager", -which typically will write the data into a file; but the application can -provide its own destination manager to do something else. - -Similarly, the rough outline of a JPEG decompression operation is: - - Allocate and initialize a JPEG decompression object - Specify the source of the compressed data (eg, a file) - Call jpeg_read_header() to obtain image info - Set parameters for decompression - jpeg_start_decompress(...); - while (scan lines remain to be read) - jpeg_read_scanlines(...); - jpeg_finish_decompress(...); - Release the JPEG decompression object - -This is comparable to the compression outline except that reading the -datastream header is a separate step. This is helpful because information -about the image's size, colorspace, etc is available when the application -selects decompression parameters. For example, the application can choose an -output scaling ratio that will fit the image into the available screen size. - -The decompression library obtains compressed data by calling a data source -manager, which typically will read the data from a file; but other behaviors -can be obtained with a custom source manager. Decompressed data is delivered -into in-memory buffers passed to jpeg_read_scanlines(). - -It is possible to abort an incomplete compression or decompression operation -by calling jpeg_abort(); or, if you do not need to retain the JPEG object, -simply release it by calling jpeg_destroy(). - -JPEG compression and decompression objects are two separate struct types. -However, they share some common fields, and certain routines such as -jpeg_destroy() can work on either type of object. - -The JPEG library has no static variables: all state is in the compression -or decompression object. Therefore it is possible to process multiple -compression and decompression operations concurrently, using multiple JPEG -objects. - -Both compression and decompression can be done in an incremental memory-to- -memory fashion, if suitable source/destination managers are used. However, -there are some restrictions on the processing that can be done in this mode. -See the section on "I/O suspension" for more details. - - -BASIC LIBRARY USAGE -=================== - -Data formats ------------- - -Before diving into procedural details, it is helpful to understand the -image data format that the JPEG library expects or returns. - -The standard input image format is a rectangular array of pixels, with each -pixel having the same number of "component" values (color channels). You -must specify how many components there are and the colorspace interpretation -of the components. Most applications will use RGB data (three components -per pixel) or grayscale data (one component per pixel). - -Note that there is no provision for colormapped input. You can feed in a -colormapped image by expanding it to full-color format. However JPEG often -doesn't work very well with colormapped source data, because of dithering -noise. This is discussed in more detail in the JPEG FAQ and the other -references mentioned in the README file. - -Pixels are stored by scanlines, with each scanline running from left to -right. The component values for each pixel are adjacent in the row; for -example, R,G,B,R,G,B,R,G,B,... for 24-bit RGB color. Each scanline is an -array of data type JSAMPLE --- which is typically "unsigned char", unless -you've changed jmorecfg.h. (You can also change the RGB pixel layout, say -to B,G,R order, by modifying jmorecfg.h. But see the restrictions listed in -that file before doing so.) - -A 2-D array of pixels is formed by making a list of pointers to the starts of -scanlines; so the scanlines need not be physically adjacent in memory. Even -if you process just one scanline at a time, you must make a one-element -pointer array to serve this purpose. Pointers to JSAMPLE rows are of type -JSAMPROW, and the pointer to the pointer array is of type JSAMPARRAY. - -The library accepts or supplies one or more complete scanlines per call. -It is not possible to process part of a row at a time. Scanlines are always -processed top-to-bottom. You can process an entire image in one call if you -have it all in memory, but usually it's simplest to process one scanline at -a time. - -For best results, source data values should have the precision specified by -BITS_IN_JSAMPLE (normally 8 bits). For instance, if you choose to compress -data that's only 6 bits/channel, you should left-justify each value in a -byte before passing it to the compressor. If you need to compress data -that has more than 8 bits/channel, compile with BITS_IN_JSAMPLE = 12. -(See "Library compile-time options", later.) - -The data format returned by the decompressor is the same in all details, -except that colormapped data is supported. If you request colormapped -output then the returned data array contains a single JSAMPLE per pixel; -its value is an index into a color map. The color map is represented as -a 2-D JSAMPARRAY in which each row holds the values of one color component, -that is, colormap[i][j] is the value of the i'th color component for pixel -value (map index) j. Note that since the colormap indexes are stored in -JSAMPLEs, the maximum number of colors is limited by the size of JSAMPLE -(ie, at most 256 colors for an 8-bit JPEG library). - - -Compression details -------------------- - -Here we revisit the JPEG compression outline given in the overview. - -1. Allocate and initialize a JPEG compression object. - -A JPEG compression object is a "struct jpeg_compress_struct" (plus a bunch of -subsidiary structures which are allocated via malloc(), but the application -doesn't control those directly). This struct can be just a local variable in -the calling routine, if a single routine is going to execute the whole JPEG -compression sequence. Otherwise it can be static or allocated from malloc(). - -You will also need a structure representing a JPEG error handler. The part -of this that the library cares about is a "struct jpeg_error_mgr". If you -are providing your own error handler, you'll typically want to embed the -jpeg_error_mgr struct in a larger structure; this is discussed later under -"Error handling". For now we'll assume you are just using the default error -handler. The default error handler will print JPEG error/warning messages -on stderr, and it will call exit() if a fatal error occurs. - -You must initialize the error handler structure, store a pointer to it into -the JPEG object's "err" field, and then call jpeg_create_compress() to -initialize the rest of the JPEG object. - -Typical code for this step, if you are using the default error handler, is - - struct jpeg_compress_struct cinfo; - struct jpeg_error_mgr jerr; - ... - cinfo.err = jpeg_std_error(&jerr); - jpeg_create_compress(&cinfo); - -jpeg_create_compress allocates a small amount of memory, so it could fail -if you are out of memory. In that case it will exit via the error handler; -that's why the error handler must be initialized first. - - -2. Specify the destination for the compressed data (eg, a file). - -As previously mentioned, the JPEG library delivers compressed data to a -"data destination" module. The library includes one data destination -module which knows how to write to a stdio stream. You can use your own -destination module if you want to do something else, as discussed later. - -If you use the standard destination module, you must open the target stdio -stream beforehand. Typical code for this step looks like: - - FILE * outfile; - ... - if ((outfile = fopen(filename, "wb")) == NULL) { - fprintf(stderr, "can't open %s\n", filename); - exit(1); - } - jpeg_stdio_dest(&cinfo, outfile); - -where the last line invokes the standard destination module. - -WARNING: it is critical that the binary compressed data be delivered to the -output file unchanged. On non-Unix systems the stdio library may perform -newline translation or otherwise corrupt binary data. To suppress this -behavior, you may need to use a "b" option to fopen (as shown above), or use -setmode() or another routine to put the stdio stream in binary mode. See -cjpeg.c and djpeg.c for code that has been found to work on many systems. - -You can select the data destination after setting other parameters (step 3), -if that's more convenient. You may not change the destination between -calling jpeg_start_compress() and jpeg_finish_compress(). - - -3. Set parameters for compression, including image size & colorspace. - -You must supply information about the source image by setting the following -fields in the JPEG object (cinfo structure): - - image_width Width of image, in pixels - image_height Height of image, in pixels - input_components Number of color channels (samples per pixel) - in_color_space Color space of source image - -The image dimensions are, hopefully, obvious. JPEG supports image dimensions -of 1 to 64K pixels in either direction. The input color space is typically -RGB or grayscale, and input_components is 3 or 1 accordingly. (See "Special -color spaces", later, for more info.) The in_color_space field must be -assigned one of the J_COLOR_SPACE enum constants, typically JCS_RGB or -JCS_GRAYSCALE. - -JPEG has a large number of compression parameters that determine how the -image is encoded. Most applications don't need or want to know about all -these parameters. You can set all the parameters to reasonable defaults by -calling jpeg_set_defaults(); then, if there are particular values you want -to change, you can do so after that. The "Compression parameter selection" -section tells about all the parameters. - -You must set in_color_space correctly before calling jpeg_set_defaults(), -because the defaults depend on the source image colorspace. However the -other three source image parameters need not be valid until you call -jpeg_start_compress(). There's no harm in calling jpeg_set_defaults() more -than once, if that happens to be convenient. - -Typical code for a 24-bit RGB source image is - - cinfo.image_width = Width; /* image width and height, in pixels */ - cinfo.image_height = Height; - cinfo.input_components = 3; /* # of color components per pixel */ - cinfo.in_color_space = JCS_RGB; /* colorspace of input image */ - - jpeg_set_defaults(&cinfo); - /* Make optional parameter settings here */ - - -4. jpeg_start_compress(...); - -After you have established the data destination and set all the necessary -source image info and other parameters, call jpeg_start_compress() to begin -a compression cycle. This will initialize internal state, allocate working -storage, and emit the first few bytes of the JPEG datastream header. - -Typical code: - - jpeg_start_compress(&cinfo, TRUE); - -The "TRUE" parameter ensures that a complete JPEG interchange datastream -will be written. This is appropriate in most cases. If you think you might -want to use an abbreviated datastream, read the section on abbreviated -datastreams, below. - -Once you have called jpeg_start_compress(), you may not alter any JPEG -parameters or other fields of the JPEG object until you have completed -the compression cycle. - - -5. while (scan lines remain to be written) - jpeg_write_scanlines(...); - -Now write all the required image data by calling jpeg_write_scanlines() -one or more times. You can pass one or more scanlines in each call, up -to the total image height. In most applications it is convenient to pass -just one or a few scanlines at a time. The expected format for the passed -data is discussed under "Data formats", above. - -Image data should be written in top-to-bottom scanline order. The JPEG spec -contains some weasel wording about how top and bottom are application-defined -terms (a curious interpretation of the English language...) but if you want -your files to be compatible with everyone else's, you WILL use top-to-bottom -order. If the source data must be read in bottom-to-top order, you can use -the JPEG library's virtual array mechanism to invert the data efficiently. -Examples of this can be found in the sample application cjpeg. - -The library maintains a count of the number of scanlines written so far -in the next_scanline field of the JPEG object. Usually you can just use -this variable as the loop counter, so that the loop test looks like -"while (cinfo.next_scanline < cinfo.image_height)". - -Code for this step depends heavily on the way that you store the source data. -example.c shows the following code for the case of a full-size 2-D source -array containing 3-byte RGB pixels: - - JSAMPROW row_pointer[1]; /* pointer to a single row */ - int row_stride; /* physical row width in buffer */ - - row_stride = image_width * 3; /* JSAMPLEs per row in image_buffer */ - - while (cinfo.next_scanline < cinfo.image_height) { - row_pointer[0] = & image_buffer[cinfo.next_scanline * row_stride]; - jpeg_write_scanlines(&cinfo, row_pointer, 1); - } - -jpeg_write_scanlines() returns the number of scanlines actually written. -This will normally be equal to the number passed in, so you can usually -ignore the return value. It is different in just two cases: - * If you try to write more scanlines than the declared image height, - the additional scanlines are ignored. - * If you use a suspending data destination manager, output buffer overrun - will cause the compressor to return before accepting all the passed lines. - This feature is discussed under "I/O suspension", below. The normal - stdio destination manager will NOT cause this to happen. -In any case, the return value is the same as the change in the value of -next_scanline. - - -6. jpeg_finish_compress(...); - -After all the image data has been written, call jpeg_finish_compress() to -complete the compression cycle. This step is ESSENTIAL to ensure that the -last bufferload of data is written to the data destination. -jpeg_finish_compress() also releases working memory associated with the JPEG -object. - -Typical code: - - jpeg_finish_compress(&cinfo); - -If using the stdio destination manager, don't forget to close the output -stdio stream if necessary. - -If you have requested a multi-pass operating mode, such as Huffman code -optimization, jpeg_finish_compress() will perform the additional passes using -data buffered by the first pass. In this case jpeg_finish_compress() may take -quite a while to complete. With the default compression parameters, this will -not happen. - -It is an error to call jpeg_finish_compress() before writing the necessary -total number of scanlines. If you wish to abort compression, call -jpeg_abort() as discussed below. - -After completing a compression cycle, you may dispose of the JPEG object -as discussed next, or you may use it to compress another image. In that case -return to step 2, 3, or 4 as appropriate. If you do not change the -destination manager, the new datastream will be written to the same target. -If you do not change any JPEG parameters, the new datastream will be written -with the same parameters as before. Note that you can change the input image -dimensions freely between cycles, but if you change the input colorspace, you -should call jpeg_set_defaults() to adjust for the new colorspace; and then -you'll need to repeat all of step 3. - - -7. Release the JPEG compression object. - -When you are done with a JPEG compression object, destroy it by calling -jpeg_destroy_compress(). This will free all subsidiary memory. Or you can -call jpeg_destroy() which works for either compression or decompression -objects --- this may be more convenient if you are sharing code between -compression and decompression cases. (Actually, these routines are equivalent -except for the declared type of the passed pointer. To avoid gripes from -ANSI C compilers, pass a j_common_ptr to jpeg_destroy().) - -If you allocated the jpeg_compress_struct structure from malloc(), freeing -it is your responsibility --- jpeg_destroy() won't. Ditto for the error -handler structure. - -Typical code: - - jpeg_destroy_compress(&cinfo); - - -8. Aborting. - -If you decide to abort a compression cycle before finishing, you can clean up -in either of two ways: - -* If you don't need the JPEG object any more, just call - jpeg_destroy_compress() or jpeg_destroy() to release memory. This is - legitimate at any point after calling jpeg_create_compress() --- in fact, - it's safe even if jpeg_create_compress() fails. - -* If you want to re-use the JPEG object, call jpeg_abort_compress(), or - jpeg_abort() which works on both compression and decompression objects. - This will return the object to an idle state, releasing any working memory. - jpeg_abort() is allowed at any time after successful object creation. - -Note that cleaning up the data destination, if required, is your -responsibility. - - -Decompression details ---------------------- - -Here we revisit the JPEG decompression outline given in the overview. - -1. Allocate and initialize a JPEG decompression object. - -This is just like initialization for compression, as discussed above, -except that the object is a "struct jpeg_decompress_struct" and you -call jpeg_create_decompress(). Error handling is exactly the same. - -Typical code: - - struct jpeg_decompress_struct cinfo; - struct jpeg_error_mgr jerr; - ... - cinfo.err = jpeg_std_error(&jerr); - jpeg_create_decompress(&cinfo); - -(Both here and in the IJG code, we usually use variable name "cinfo" for -both compression and decompression objects.) - - -2. Specify the source of the compressed data (eg, a file). - -As previously mentioned, the JPEG library reads compressed data from a "data -source" module. The library includes one data source module which knows how -to read from a stdio stream. You can use your own source module if you want -to do something else, as discussed later. - -If you use the standard source module, you must open the source stdio stream -beforehand. Typical code for this step looks like: - - FILE * infile; - ... - if ((infile = fopen(filename, "rb")) == NULL) { - fprintf(stderr, "can't open %s\n", filename); - exit(1); - } - jpeg_stdio_src(&cinfo, infile); - -where the last line invokes the standard source module. - -WARNING: it is critical that the binary compressed data be read unchanged. -On non-Unix systems the stdio library may perform newline translation or -otherwise corrupt binary data. To suppress this behavior, you may need to use -a "b" option to fopen (as shown above), or use setmode() or another routine to -put the stdio stream in binary mode. See cjpeg.c and djpeg.c for code that -has been found to work on many systems. - -You may not change the data source between calling jpeg_read_header() and -jpeg_finish_decompress(). If you wish to read a series of JPEG images from -a single source file, you should repeat the jpeg_read_header() to -jpeg_finish_decompress() sequence without reinitializing either the JPEG -object or the data source module; this prevents buffered input data from -being discarded. - - -3. Call jpeg_read_header() to obtain image info. - -Typical code for this step is just - - jpeg_read_header(&cinfo, TRUE); - -This will read the source datastream header markers, up to the beginning -of the compressed data proper. On return, the image dimensions and other -info have been stored in the JPEG object. The application may wish to -consult this information before selecting decompression parameters. - -More complex code is necessary if - * A suspending data source is used --- in that case jpeg_read_header() - may return before it has read all the header data. See "I/O suspension", - below. The normal stdio source manager will NOT cause this to happen. - * Abbreviated JPEG files are to be processed --- see the section on - abbreviated datastreams. Standard applications that deal only in - interchange JPEG files need not be concerned with this case either. - -It is permissible to stop at this point if you just wanted to find out the -image dimensions and other header info for a JPEG file. In that case, -call jpeg_destroy() when you are done with the JPEG object, or call -jpeg_abort() to return it to an idle state before selecting a new data -source and reading another header. - - -4. Set parameters for decompression. - -jpeg_read_header() sets appropriate default decompression parameters based on -the properties of the image (in particular, its colorspace). However, you -may well want to alter these defaults before beginning the decompression. -For example, the default is to produce full color output from a color file. -If you want colormapped output you must ask for it. Other options allow the -returned image to be scaled and allow various speed/quality tradeoffs to be -selected. "Decompression parameter selection", below, gives details. - -If the defaults are appropriate, nothing need be done at this step. - -Note that all default values are set by each call to jpeg_read_header(). -If you reuse a decompression object, you cannot expect your parameter -settings to be preserved across cycles, as you can for compression. -You must adjust parameter values each time. - - -5. jpeg_start_decompress(...); - -Once the parameter values are satisfactory, call jpeg_start_decompress() to -begin decompression. This will initialize internal state, allocate working -memory, and prepare for returning data. - -Typical code is just - - jpeg_start_decompress(&cinfo); - -If you have requested a multi-pass operating mode, such as 2-pass color -quantization, jpeg_start_decompress() will do everything needed before data -output can begin. In this case jpeg_start_decompress() may take quite a while -to complete. With a single-scan (fully interleaved) JPEG file and default -decompression parameters, this will not happen; jpeg_start_decompress() will -return quickly. - -After this call, the final output image dimensions, including any requested -scaling, are available in the JPEG object; so is the selected colormap, if -colormapped output has been requested. Useful fields include - - output_width image width and height, as scaled - output_height - out_color_components # of color components in out_color_space - output_components # of color components returned per pixel - colormap the selected colormap, if any - actual_number_of_colors number of entries in colormap - -output_components is 1 (a colormap index) when quantizing colors; otherwise it -equals out_color_components. It is the number of JSAMPLE values that will be -emitted per pixel in the output arrays. - -Typically you will need to allocate data buffers to hold the incoming image. -You will need output_width * output_components JSAMPLEs per scanline in your -output buffer, and a total of output_height scanlines will be returned. - -Note: if you are using the JPEG library's internal memory manager to allocate -data buffers (as djpeg does), then the manager's protocol requires that you -request large buffers *before* calling jpeg_start_decompress(). This is a -little tricky since the output_XXX fields are not normally valid then. You -can make them valid by calling jpeg_calc_output_dimensions() after setting the -relevant parameters (scaling, output color space, and quantization flag). - - -6. while (scan lines remain to be read) - jpeg_read_scanlines(...); - -Now you can read the decompressed image data by calling jpeg_read_scanlines() -one or more times. At each call, you pass in the maximum number of scanlines -to be read (ie, the height of your working buffer); jpeg_read_scanlines() -will return up to that many lines. The return value is the number of lines -actually read. The format of the returned data is discussed under "Data -formats", above. - -Image data is returned in top-to-bottom scanline order. If you must write -out the image in bottom-to-top order, you can use the JPEG library's virtual -array mechanism to invert the data efficiently. Examples of this can be -found in the sample application djpeg. - -The library maintains a count of the number of scanlines returned so far -in the output_scanline field of the JPEG object. Usually you can just use -this variable as the loop counter, so that the loop test looks like -"while (cinfo.output_scanline < cinfo.output_height)". (Note that the test -should NOT be against image_height, unless you never use scaling. The -image_height field is the height of the original unscaled image.) - -If you don't use a suspending data source, it is safe to assume that -jpeg_read_scanlines() reads at least one scanline per call, until the -bottom of the image has been reached. If you use a buffer larger than one -scanline, it is NOT safe to assume that jpeg_read_scanlines() fills it. -In any case, the return value is the same as the change in the value of -output_scanline. - - -7. jpeg_finish_decompress(...); - -After all the image data has been read, call jpeg_finish_decompress() to -complete the decompression cycle. This causes working memory associated -with the JPEG object to be released. - -Typical code: - - jpeg_finish_decompress(&cinfo); - -If using the stdio source manager, don't forget to close the source stdio -stream if necessary. - -It is an error to call jpeg_finish_decompress() before reading the correct -total number of scanlines. If you wish to abort compression, call -jpeg_abort() as discussed below. - -After completing a decompression cycle, you may dispose of the JPEG object as -discussed next, or you may use it to decompress another image. In that case -return to step 2 or 3 as appropriate. If you do not change the source -manager, the next image will be read from the same source. - - -8. Release the JPEG decompression object. - -When you are done with a JPEG decompression object, destroy it by calling -jpeg_destroy_decompress() or jpeg_destroy(). The previous discussion of -destroying compression objects applies here too. - -Typical code: - - jpeg_destroy_decompress(&cinfo); - - -9. Aborting. - -You can abort a decompression cycle by calling jpeg_destroy_decompress() or -jpeg_destroy() if you don't need the JPEG object any more, or -jpeg_abort_decompress() or jpeg_abort() if you want to reuse the object. -The previous discussion of aborting compression cycles applies here too. - - -Mechanics of usage: include files, linking, etc ------------------------------------------------ - -Applications using the JPEG library should include the header file jpeglib.h -to obtain declarations of data types and routines. Before including -jpeglib.h, include system headers that define at least the typedefs FILE and -size_t. On ANSI-conforming systems, including <stdio.h> is sufficient; on -older Unix systems, you may need <sys/types.h> to define size_t. - -If the application needs to refer to individual JPEG library error codes, also -include jerror.h to define those symbols. - -jpeglib.h indirectly includes the files jconfig.h and jmorecfg.h. If you are -installing the JPEG header files in a system directory, you will want to -install all four files: jpeglib.h, jerror.h, jconfig.h, jmorecfg.h. - -The most convenient way to include the JPEG code into your executable program -is to prepare a library file ("libjpeg.a", or a corresponding name on non-Unix -machines) and reference it at your link step. If you use only half of the -library (only compression or only decompression), only that much code will be -included from the library, unless your linker is hopelessly brain-damaged. -The supplied makefiles build libjpeg.a automatically (see install.doc). - -On some systems your application may need to set up a signal handler to ensure -that temporary files are deleted if the program is interrupted. This is most -critical if you are on MS-DOS and use the jmemdos.c memory manager back end; -it will try to grab extended memory for temp files, and that space will NOT be -freed automatically. See cjpeg.c or djpeg.c for an example signal handler. - -It may be worth pointing out that the core JPEG library does not actually -require the stdio library: only the default source/destination managers and -error handler need it. You can use the library in a stdio-less environment -if you replace those modules and use jmemnobs.c (or another memory manager of -your own devising). More info about the minimum system library requirements -may be found in jinclude.h. - - -ADVANCED FEATURES -================= - -Compression parameter selection -------------------------------- - -This section describes all the optional parameters you can set for JPEG -compression, as well as the "helper" routines provided to assist in this -task. Proper setting of some parameters requires detailed understanding -of the JPEG standard; if you don't know what a parameter is for, it's best -not to mess with it! See REFERENCES in the README file for pointers to -more info about JPEG. - -It's a good idea to call jpeg_set_defaults() first, even if you plan to set -all the parameters; that way your code is more likely to work with future JPEG -libraries that have additional parameters. For the same reason, we recommend -you use a helper routine where one is provided, in preference to twiddling -cinfo fields directly. - -The helper routines are: - -jpeg_set_defaults (j_compress_ptr cinfo) - This routine sets all JPEG parameters to reasonable defaults, using - only the input image's color space (field in_color_space, which must - already be set in cinfo). Many applications will only need to use - this routine and perhaps jpeg_set_quality(). - -jpeg_set_colorspace (j_compress_ptr cinfo, J_COLOR_SPACE colorspace) - Sets the JPEG file's colorspace (field jpeg_color_space) as specified, - and sets other color-space-dependent parameters appropriately. See - "Special color spaces", below, before using this. A large number of - parameters, including all per-component parameters, are set by this - routine; if you want to twiddle individual parameters you should call - jpeg_set_colorspace() before rather than after. - -jpeg_default_colorspace (j_compress_ptr cinfo) - Selects an appropriate JPEG colorspace based on cinfo->in_color_space, - and calls jpeg_set_colorspace(). This is actually a subroutine of - jpeg_set_defaults(). It's broken out in case you want to change - just the colorspace-dependent JPEG parameters. - -jpeg_set_quality (j_compress_ptr cinfo, int quality, boolean force_baseline) - Constructs JPEG quantization tables appropriate for the indicated - quality setting. The quality value is expressed on the 0..100 scale - recommended by IJG (cjpeg's "-quality" switch uses this routine). - Note that the exact mapping from quality values to tables may change - in future IJG releases as more is learned about DCT quantization. - If the force_baseline parameter is TRUE, then the quantization table - entries are constrained to the range 1..255 for full JPEG baseline - compatibility. In the current implementation, this only makes a - difference for quality settings below 25, and it effectively prevents - very small/low quality files from being generated. The IJG decoder - is capable of reading the non-baseline files generated at low quality - settings when force_baseline is FALSE, but other decoders may not be. - -jpeg_set_linear_quality (j_compress_ptr cinfo, int scale_factor, - boolean force_baseline) - Same as jpeg_set_quality() except that the generated tables are the - sample tables given in the JPEC spec section K.1, multiplied by the - specified scale factor (which is expressed as a percentage; thus - scale_factor = 100 reproduces the spec's tables). Note that larger - scale factors give lower quality. This entry point is useful for - conforming to the Adobe PostScript DCT conventions, but we do not - recommend linear scaling as a user-visible quality scale otherwise. - force_baseline again constrains the computed table entries to 1..255. - -int jpeg_quality_scaling (int quality) - Converts a value on the IJG-recommended quality scale to a linear - scaling percentage. Note that this routine may change or go away - in future releases --- IJG may choose to adopt a scaling method that - can't be expressed as a simple scalar multiplier, in which case the - premise of this routine collapses. Caveat user. - -jpeg_add_quant_table (j_compress_ptr cinfo, int which_tbl, - const unsigned int *basic_table, - int scale_factor, boolean force_baseline)); - Allows an arbitrary quantization table to be created. which_tbl - indicates which table slot to fill. basic_table points to an array - of 64 unsigned ints given in JPEG zigzag order. These values are - multiplied by scale_factor/100 and then clamped to the range 1..65535 - (or to 1..255 if force_baseline is TRUE). - - -Compression parameters (cinfo fields) include: - -boolean optimize_coding - TRUE causes the compressor to compute optimal Huffman coding tables - for the image. This requires an extra pass over the data and - therefore costs a good deal of space and time. The default is - FALSE, which tells the compressor to use the supplied or default - Huffman tables. In most cases optimal tables save only a few percent - of file size compared to the default tables. Note that when this is - TRUE, you need not supply Huffman tables at all, and any you do - supply will be overwritten. - -int smoothing_factor - If non-zero, the input image is smoothed; the value should be 1 for - minimal smoothing to 100 for maximum smoothing. Consult jcsample.c - for details of the smoothing algorithm. The default is zero. - -J_DCT_METHOD dct_method - Selects the algorithm used for the DCT step. Choices are: - JDCT_ISLOW: slow but accurate integer algorithm - JDCT_IFAST: faster, less accurate integer method - JDCT_FLOAT: floating-point method - JDCT_DEFAULT: default method (normally JDCT_ISLOW) - JDCT_FASTEST: fastest method (normally JDCT_IFAST) - The floating-point method is the most accurate, but may give slightly - different results on different machines due to varying roundoff - behavior. The integer methods should give the same results on all - machines. On machines with sufficiently fast FP hardware, the - floating-point method may also be the fastest. The IFAST method is - considerably less accurate than the other two; its use is not - recommended if high quality is a concern. JDCT_DEFAULT and - JDCT_FASTEST are macros configurable by each installation. - -unsigned int restart_interval -int restart_in_rows - To emit restart markers in the JPEG file, set one of these nonzero. - Set restart_interval to specify the exact interval in MCU blocks. - Set restart_in_rows to specify the interval in MCU rows. (If - restart_in_rows is not 0, then restart_interval is set after the - image width in MCUs is computed.) Defaults are zero (no restarts). - -J_COLOR_SPACE jpeg_color_space -int num_components - The JPEG color space and corresponding number of components; see - "Special color spaces", below, for more info. We recommend using - jpeg_set_color_space() if you want to change these. - -boolean write_JFIF_header - If TRUE, a JFIF APP0 marker is emitted. jpeg_set_defaults() and - jpeg_set_colorspace() set this TRUE if a JFIF-legal JPEG color space - (ie, YCbCr or grayscale) is selected, otherwise FALSE. - -UINT8 density_unit -UINT16 X_density -UINT16 Y_density - The resolution information to be written into the JFIF marker; - not used otherwise. density_unit may be 0 for unknown, - 1 for dots/inch, or 2 for dots/cm. The default values are 0,1,1 - indicating square pixels of unknown size. - -boolean write_Adobe_marker - If TRUE, an Adobe APP14 marker is emitted. jpeg_set_defaults() and - jpeg_set_colorspace() set this TRUE if JPEG color space RGB, CMYK, - or YCCK is selected, otherwise FALSE. It is generally a bad idea - to set both write_JFIF_header and write_Adobe_marker. In fact, - you probably shouldn't change the default settings at all --- the - default behavior ensures that the JPEG file's color space can be - recognized by the decoder. - -JQUANT_TBL * quant_tbl_ptrs[NUM_QUANT_TBLS] - Pointers to coefficient quantization tables, one per table slot, - or NULL if no table is defined for a slot. Usually these should - be set via one of the above helper routines; jpeg_add_quant_table() - is general enough to define any quantization table. The other - routines will set up table slot 0 for luminance quality and table - slot 1 for chrominance. - -JHUFF_TBL * dc_huff_tbl_ptrs[NUM_HUFF_TBLS] -JHUFF_TBL * ac_huff_tbl_ptrs[NUM_HUFF_TBLS] - Pointers to Huffman coding tables, one per table slot, or NULL if - no table is defined for a slot. Slots 0 and 1 are filled with the - JPEG sample tables by jpeg_set_defaults(). If you need to allocate - more table structures, jpeg_alloc_huff_table() may be used. - Note that optimal Huffman tables can be computed for an image - by setting optimize_coding, as discussed above; there's seldom - any need to mess with providing your own Huffman tables. - -There are some additional cinfo fields which are not documented here -because you currently can't change them; for example, you can't set -arith_code TRUE because arithmetic coding is unsupported. - - -Per-component parameters are stored in the struct cinfo.comp_info[i] for -component number i. Note that components here refer to components of the -JPEG color space, *not* the source image color space. A suitably large -comp_info[] array is allocated by jpeg_set_defaults(); if you choose not -to use that routine, it's up to you to allocate the array. - -int component_id - The one-byte identifier code to be recorded in the JPEG file for - this component. For the standard color spaces, we recommend you - leave the default values alone. - -int h_samp_factor -int v_samp_factor - Horizontal and vertical sampling factors for the component; must - be 1..4 according to the JPEG standard. Note that larger sampling - factors indicate a higher-resolution component; many people find - this behavior quite unintuitive. The default values are 2,2 for - luminance components and 1,1 for chrominance components, except - for grayscale where 1,1 is used. - -int quant_tbl_no - Quantization table number for component. The default value is - 0 for luminance components and 1 for chrominance components. - -int dc_tbl_no -int ac_tbl_no - DC and AC entropy coding table numbers. The default values are - 0 for luminance components and 1 for chrominance components. - -int component_index - Must equal the component's index in comp_info[]. - - -Decompression parameter selection ---------------------------------- - -Decompression parameter selection is somewhat simpler than compression -parameter selection, since all of the JPEG internal parameters are -recorded in the source file and need not be supplied by the application. -(Unless you are working with abbreviated files, in which case see -"Abbreviated datastreams", below.) Decompression parameters control -the postprocessing done on the image to deliver it in a format suitable -for the application's use. Many of the parameters control speed/quality -tradeoffs, in which faster decompression may be obtained at the price of -a poorer-quality image. The defaults select the highest quality (slowest) -processing. - -The following fields in the JPEG object are set by jpeg_read_header() and -may be useful to the application in choosing decompression parameters: - -JDIMENSION image_width Width and height of image -JDIMENSION image_height -int num_components Number of color components -J_COLOR_SPACE jpeg_color_space Colorspace of image -boolean saw_JFIF_marker TRUE if a JFIF APP0 marker was seen - UINT8 density_unit Resolution data from JFIF marker - UINT16 X_density - UINT16 Y_density -boolean saw_Adobe_marker TRUE if an Adobe APP14 marker was seen - UINT8 Adobe_transform Color transform code from Adobe marker - -The JPEG color space, unfortunately, is something of a guess since the JPEG -standard proper does not provide a way to record it. In practice most files -adhere to the JFIF or Adobe conventions, and the decoder will recognize these -correctly. See "Special color spaces", below, for more info. - - -The decompression parameters that determine the basic properties of the -returned image are: - -J_COLOR_SPACE out_color_space - Output color space. jpeg_read_header() sets an appropriate default - based on jpeg_color_space; typically it will be RGB or grayscale. - The application can change this field to request output in a different - colorspace. For example, set it to JCS_GRAYSCALE to get grayscale - output from a color file. (This is useful for previewing: grayscale - output is faster than full color since the color components need not - be processed.) Note that not all possible color space transforms are - currently implemented; you may need to extend jdcolor.c if you want an - unusual conversion. - -unsigned int scale_num, scale_denom - Scale the image by the fraction scale_num/scale_denom. Default is - 1/1, or no scaling. Currently, the only supported scaling ratios - are 1/1, 1/2, 1/4, and 1/8. (The library design allows for arbitrary - scaling ratios but this is not likely to be implemented any time soon.) - Smaller scaling ratios permit significantly faster decoding since - fewer pixels need be processed and a simpler IDCT method can be used. - -boolean quantize_colors - If set TRUE, colormapped output will be delivered. Default is FALSE, - meaning that full-color output will be delivered. - -The next three parameters are relevant only if quantize_colors is TRUE. - -int desired_number_of_colors - Maximum number of colors to use in generating a library-supplied color - map (the actual number of colors is returned in a different field). - Default 256. Ignored when the application supplies its own color map. - -boolean two_pass_quantize - If TRUE, an extra pass over the image is made to select a custom color - map for the image. This usually looks a lot better than the one-size- - fits-all colormap that is used otherwise. Default is TRUE. Ignored - when the application supplies its own color map. - -J_DITHER_MODE dither_mode - Selects color dithering method. Supported values are: - JDITHER_NONE no dithering: fast, very low quality - JDITHER_ORDERED ordered dither: moderate speed and quality - JDITHER_FS Floyd-Steinberg dither: slow, high quality - Default is JDITHER_FS. (At present, ordered dither is implemented - only in the single-pass, standard-colormap case. If you ask for - ordered dither when two_pass_quantize is TRUE or when you supply - an external color map, you'll get F-S dithering.) - -When quantize_colors is TRUE, the target color map is described by the next -two fields. colormap is set to NULL by jpeg_read_header(). The application -can supply a color map by setting colormap non-NULL and setting -actual_number_of_colors to the map size. Otherwise, jpeg_start_decompress() -selects a suitable color map and sets these two fields itself. -[Implementation restriction: at present, an externally supplied colormap is -only accepted for 3-component output color spaces.] - -JSAMPARRAY colormap - The color map, represented as a 2-D pixel array of out_color_components - rows and actual_number_of_colors columns. Ignored if not quantizing. - -int actual_number_of_colors - The number of colors in the color map. - -Additional decompression parameters that the application may set include: - -J_DCT_METHOD dct_method - Selects the algorithm used for the DCT step. Choices are the same - as described above for compression. - -boolean do_fancy_upsampling - If TRUE, do careful upsampling of chroma components. If FALSE, - a faster but sloppier method is used. Default is TRUE. The visual - impact of the sloppier method is often very small. - - -The output image dimensions are given by the following fields. These are -computed from the source image dimensions and the decompression parameters -by jpeg_start_decompress(). You can also call jpeg_calc_output_dimensions() -to obtain the values that will result from the current parameter settings. -This can be useful if you are trying to pick a scaling ratio that will get -close to a desired target size. It's also important if you are using the -JPEG library's memory manager to allocate output buffer space, because you -are supposed to request such buffers *before* jpeg_start_decompress(). - -JDIMENSION output_width Actual dimensions of output image. -JDIMENSION output_height -int out_color_components Number of color components in out_color_space. -int output_components Number of color components returned. -int rec_outbuf_height Recommended height of scanline buffer. - -When quantizing colors, output_components is 1, indicating a single color map -index per pixel. Otherwise it equals out_color_components. The output arrays -are required to be output_width * output_components JSAMPLEs wide. - -rec_outbuf_height is the recommended minimum height (in scanlines) of the -buffer passed to jpeg_read_scanlines(). If the buffer is smaller, the -library will still work, but time will be wasted due to unnecessary data -copying. In high-quality modes, rec_outbuf_height is always 1, but some -faster, lower-quality modes set it to larger values (typically 2 to 4). -If you are going to ask for a high-speed processing mode, you may as well -go to the trouble of honoring rec_outbuf_height so as to avoid data copying. - - -Special color spaces --------------------- - -The JPEG standard itself is "color blind" and doesn't specify any particular -color space. It is customary to convert color data to a luminance/chrominance -color space before compressing, since this permits greater compression. The -existing de-facto JPEG file format standards specify YCbCr or grayscale data -(JFIF), or grayscale, RGB, YCbCr, CMYK, or YCCK (Adobe). For special -applications such as multispectral images, other color spaces can be used, -but it must be understood that such files will be unportable. - -The JPEG library can handle the most common colorspace conversions (namely -RGB <=> YCbCr and CMYK <=> YCCK). It can also deal with data of an unknown -color space, passing it through without conversion. If you deal extensively -with an unusual color space, you can easily extend the library to understand -additional color spaces and perform appropriate conversions. - -For compression, the source data's color space is specified by field -in_color_space. This is transformed to the JPEG file's color space given -by jpeg_color_space. jpeg_set_defaults() chooses a reasonable JPEG color -space depending on in_color_space, but you can override this by calling -jpeg_set_colorspace(). Of course you must select a supported transformation. -jccolor.c currently supports the following transformations: - RGB => YCbCr - RGB => GRAYSCALE - YCbCr => GRAYSCALE - CMYK => YCCK -plus the null transforms: GRAYSCALE => GRAYSCALE, RGB => RGB, -YCbCr => YCbCr, CMYK => CMYK, YCCK => YCCK, and UNKNOWN => UNKNOWN. - -The de-facto file format standards (JFIF and Adobe) specify APPn markers that -indicate the color space of the JPEG file. It is important to ensure that -these are written correctly, or omitted if the JPEG file's color space is not -one of the ones supported by the de-facto standards. jpeg_set_colorspace() -will set the compression parameters to include or omit the APPn markers -properly, so long as it is told the truth about the JPEG color space. -For example, if you are writing some random 3-component color space without -conversion, don't try to fake out the library by setting in_color_space and -jpeg_color_space to JCS_YCbCr; use JCS_UNKNOWN. You may want to write an -APPn marker of your own devising to identify the colorspace --- see "Special -markers", below. - -When told that the color space is UNKNOWN, the library will default to using -luminance-quality compression parameters for all color components. You may -well want to change these parameters. See the source code for -jpeg_set_colorspace(), in jcparam.c, for details. - -For decompression, the JPEG file's color space is given in jpeg_color_space, -and this is transformed to the output color space out_color_space. -jpeg_read_header's setting of jpeg_color_space can be relied on if the file -conforms to JFIF or Adobe conventions, but otherwise it is no better than a -guess. If you know the JPEG file's color space for certain, you can override -jpeg_read_header's guess by setting jpeg_color_space. jpeg_read_header also -selects a default output color space based on (its guess of) jpeg_color_space; -set out_color_space to override this. Again, you must select a supported -transformation. jdcolor.c currently supports - YCbCr => GRAYSCALE - YCbCr => RGB - YCCK => CMYK -as well as the null transforms. - -The two-pass color quantizer, jquant2.c, is specialized to handle RGB data -(it weights distances appropriately for RGB colors). You'll need to modify -the code if you want to use it for non-RGB output color spaces. Note that -jquant2.c is used to map to an application-supplied colormap as well as for -the normal two-pass colormap selection process. - -CAUTION: it appears that Adobe Photoshop writes inverted data in CMYK JPEG -files: 0 represents 100% ink coverage, rather than 0% ink as you'd expect. -This is arguably a bug in Photoshop, but if you need to work with Photoshop -CMYK files, you will have to deal with it in your application. We cannot -"fix" this in the library by inverting the data during the CMYK<=>YCCK -transform, because that would break other applications, notably Ghostscript. -Photoshop versions prior to 3.0 write EPS files containing JPEG-encoded CMYK -data in the same inverted-YCCK representation used in bare JPEG files, but -the surrounding PostScript code performs an inversion using the PS image -operator. I am told that Photoshop 3.0 will write uninverted YCCK in -EPS/JPEG files, and will omit the PS-level inversion. (But the data -polarity used in bare JPEG files will not change in 3.0.) In either case, -the JPEG library must not invert the data itself, or else Ghostscript would -read these EPS files incorrectly. - - -Error handling --------------- - -When the default error handler is used, any error detected inside the JPEG -routines will cause a message to be printed on stderr, followed by exit(). -You can supply your own error handling routines to override this behavior -and to control the treatment of nonfatal warnings and trace/debug messages. -The file example.c illustrates the most common case, which is to have the -application regain control after an error rather than exiting. - -The JPEG library never writes any message directly; it always goes through -the error handling routines. Three classes of messages are recognized: - * Fatal errors: the library cannot continue. - * Warnings: the library can continue, but the data is corrupt, and a - damaged output image is likely to result. - * Trace/informational messages. These come with a trace level indicating - the importance of the message; you can control the verbosity of the - program by adjusting the maximum trace level that will be displayed. - -You may, if you wish, simply replace the entire JPEG error handling module -(jerror.c) with your own code. However, you can avoid code duplication by -only replacing some of the routines depending on the behavior you need. -This is accomplished by calling jpeg_std_error() as usual, but then overriding -some of the method pointers in the jpeg_error_mgr struct, as illustrated by -example.c. - -All of the error handling routines will receive a pointer to the JPEG object -(a j_common_ptr which points to either a jpeg_compress_struct or a -jpeg_decompress_struct; if you need to tell which, test the is_decompressor -field). This struct includes a pointer to the error manager struct in its -"err" field. Frequently, custom error handler routines will need to access -additional data which is not known to the JPEG library or the standard error -handler. The most convenient way to do this is to embed either the JPEG -object or the jpeg_error_mgr struct in a larger structure that contains -additional fields; then casting the passed pointer provides access to the -additional fields. Again, see example.c for one way to do it. - -The individual methods that you might wish to override are: - -error_exit (j_common_ptr cinfo) - Receives control for a fatal error. Information sufficient to - generate the error message has been stored in cinfo->err; call - output_message to display it. Control must NOT return to the caller; - generally this routine will exit() or longjmp() somewhere. - Typically you would override this routine to get rid of the exit() - default behavior. Note that if you continue processing, you should - clean up the JPEG object with jpeg_abort() or jpeg_destroy(). - -output_message (j_common_ptr cinfo) - Actual output of any JPEG message. Override this to send messages - somewhere other than stderr. Note that this method does not know - how to generate a message, only where to send it. - -format_message (j_common_ptr cinfo, char * buffer) - Constructs a readable error message string based on the error info - stored in cinfo->err. This method is called by output_message. Few - applications should need to override this method. One possible - reason for doing so is to implement dynamic switching of error message - language. - -emit_message (j_common_ptr cinfo, int msg_level) - Decide whether or not to emit a warning or trace message; if so, - calls output_message. The main reason for overriding this method - would be to abort on warnings. msg_level is -1 for warnings, - 0 and up for trace messages. - -Only error_exit() and emit_message() are called from the rest of the JPEG -library; the other two are internal to the error handler. - -The actual message texts are stored in an array of strings which is pointed to -by the field err->jpeg_message_table. The messages are numbered from 0 to -err->last_jpeg_message, and it is these code numbers that are used in the -JPEG library code. You could replace the message texts (for instance, with -messages in French or German) by changing the message table pointer. See -jerror.h for the default texts. CAUTION: this table will almost certainly -change or grow from one library version to the next. - -It may be useful for an application to add its own message texts that are -handled by the same mechanism. The error handler supports a second "add-on" -message table for this purpose. To define an addon table, set the pointer -err->addon_message_table and the message numbers err->first_addon_message and -err->last_addon_message. If you number the addon messages beginning at 1000 -or so, you won't have to worry about conflicts with the library's built-in -messages. See the sample applications cjpeg/djpeg for an example of using -addon messages (the addon messages are defined in cderror.h). - -Actual invocation of the error handler is done via macros defined in jerror.h: - ERREXITn(...) for fatal errors - WARNMSn(...) for corrupt-data warnings - TRACEMSn(...) for trace and informational messages. -These macros store the message code and any additional parameters into the -error handler struct, then invoke the error_exit() or emit_message() method. -The variants of each macro are for varying numbers of additional parameters. -The additional parameters are inserted into the generated message using -standard printf() format codes. - -See jerror.h and jerror.c for further details. - - -Compressed data handling (source and destination managers) ----------------------------------------------------------- - -The JPEG compression library sends its compressed data to a "destination -manager" module. The default destination manager just writes the data to a -stdio stream, but you can provide your own manager to do something else. -Similarly, the decompression library calls a "source manager" to obtain the -compressed data; you can provide your own source manager if you want the data -to come from somewhere other than a stdio stream. - -In both cases, compressed data is processed a bufferload at a time: the -destination or source manager provides a work buffer, and the library invokes -the manager only when the buffer is filled or emptied. (You could define a -one-character buffer to force the manager to be invoked for each byte, but -that would be rather inefficient.) The buffer's size and location are -controlled by the manager, not by the library. For example, if you desired to -decompress a JPEG datastream that was all in memory, you could just make the -buffer pointer and length point to the original data in memory. Then the -buffer-reload procedure would be invoked only if the decompressor ran off the -end of the datastream, which would indicate an erroneous datastream. - -The work buffer is defined as an array of datatype JOCTET, which is generally -"char" or "unsigned char". On a machine where char is not exactly 8 bits -wide, you must define JOCTET as a wider data type and then modify the data -source and destination modules to transcribe the work arrays into 8-bit units -on external storage. - -A data destination manager struct contains a pointer and count defining the -next byte to write in the work buffer and the remaining free space: - - JOCTET * next_output_byte; /* => next byte to write in buffer */ - size_t free_in_buffer; /* # of byte spaces remaining in buffer */ - -The library increments the pointer and decrements the count until the buffer -is filled. The manager's empty_output_buffer method must reset the pointer -and count. The manager is expected to remember the buffer's starting address -and total size in private fields not visible to the library. - -A data destination manager provides three methods: - -init_destination (j_compress_ptr cinfo) - Initialize destination. This is called by jpeg_start_compress() - before any data is actually written. It must initialize - next_output_byte and free_in_buffer. free_in_buffer must be - initialized to a positive value. - -empty_output_buffer (j_compress_ptr cinfo) - This is called whenever the buffer has filled (free_in_buffer - reaches zero). In typical applications, it should write out the - *entire* buffer (use the saved start address and buffer length; - ignore the current state of next_output_byte and free_in_buffer). - Then reset the pointer & count to the start of the buffer, and - return TRUE indicating that the buffer has been dumped. - free_in_buffer must be set to a positive value when TRUE is - returned. A FALSE return should only be used when I/O suspension is - desired (this operating mode is discussed in the next section). - -term_destination (j_compress_ptr cinfo) - Terminate destination --- called by jpeg_finish_compress() after all - data has been written. In most applications, this must flush any - data remaining in the buffer. Use either next_output_byte or - free_in_buffer to determine how much data is in the buffer. - -term_destination() is NOT called by jpeg_abort() or jpeg_destroy(). If you -want the destination manager to be cleaned up during an abort, you must do it -yourself. - -You will also need code to create a jpeg_destination_mgr struct, fill in its -method pointers, and insert a pointer to the struct into the "dest" field of -the JPEG compression object. This can be done in-line in your setup code if -you like, but it's probably cleaner to provide a separate routine similar to -the jpeg_stdio_dest() routine of the supplied destination manager. - -Decompression source managers follow a parallel design, but with some -additional frammishes. The source manager struct contains a pointer and count -defining the next byte to read from the work buffer and the number of bytes -remaining: - - const JOCTET * next_input_byte; /* => next byte to read from buffer */ - size_t bytes_in_buffer; /* # of bytes remaining in buffer */ - -The library increments the pointer and decrements the count until the buffer -is emptied. The manager's fill_input_buffer method must reset the pointer and -count. In most applications, the manager must remember the buffer's starting -address and total size in private fields not visible to the library. - -A data source manager provides five methods: - -init_source (j_decompress_ptr cinfo) - Initialize source. This is called by jpeg_read_header() before any - data is actually read. Unlike init_destination(), it may leave - bytes_in_buffer set to 0 (in which case a fill_input_buffer() call - will occur immediately). - -fill_input_buffer (j_decompress_ptr cinfo) - This is called whenever bytes_in_buffer has reached zero and more - data is wanted. In typical applications, it should read fresh data - into the buffer (ignoring the current state of next_input_byte and - bytes_in_buffer), reset the pointer & count to the start of the - buffer, and return TRUE indicating that the buffer has been reloaded. - It is not necessary to fill the buffer entirely, only to obtain at - least one more byte. bytes_in_buffer MUST be set to a positive value - if TRUE is returned. A FALSE return should only be used when I/O - suspension is desired (this mode is discussed in the next section). - -skip_input_data (j_decompress_ptr cinfo, long num_bytes) - Skip num_bytes worth of data. The buffer pointer and count should - be advanced over num_bytes input bytes, refilling the buffer as - needed. This is used to skip over a potentially large amount of - uninteresting data (such as an APPn marker). In some applications - it may be possible to optimize away the reading of the skipped data, - but it's not clear that being smart is worth much trouble; large - skips are uncommon. bytes_in_buffer may be zero on return. - A zero or negative skip count should be treated as a no-op. - -resync_to_restart (j_decompress_ptr cinfo) - This routine is called only when the decompressor has failed to find - a restart (RSTn) marker where one is expected. Its mission is to - find a suitable point for resuming decompression. For most - applications, we recommend that you just use the default resync - procedure, jpeg_resync_to_restart(). However, if you are able to back - up in the input data stream, or if you have a-priori knowledge about - the likely location of restart markers, you may be able to do better. - Read the read_restart_marker() and jpeg_resync_to_restart() routines - in jdmarker.c if you think you'd like to implement your own resync - procedure. - -term_source (j_decompress_ptr cinfo) - Terminate source --- called by jpeg_finish_decompress() after all - data has been read. Often a no-op. - -For both fill_input_buffer() and skip_input_data(), there is no such thing -as an EOF return. If the end of the file has been reached, the routine has -a choice of exiting via ERREXIT() or inserting fake data into the buffer. -In most cases, generating a warning message and inserting a fake EOI marker -is the best course of action --- this will allow the decompressor to output -however much of the image is there. In pathological cases, the decompressor -may swallow the EOI and again demand data ... just keep feeding it fake EOIs. -jdatasrc.c illustrates the recommended error recovery behavior. - -term_source() is NOT called by jpeg_abort() or jpeg_destroy(). If you want -the source manager to be cleaned up during an abort, you must do it yourself. - -You will also need code to create a jpeg_source_mgr struct, fill in its method -pointers, and insert a pointer to the struct into the "src" field of the JPEG -decompression object. This can be done in-line in your setup code if you -like, but it's probably cleaner to provide a separate routine similar to the -jpeg_stdio_src() routine of the supplied source manager. - -For more information, consult the stdio source and destination managers -in jdatasrc.c and jdatadst.c. - - -I/O suspension --------------- - -Some applications need to use the JPEG library as an incremental memory-to- -memory filter: when the compressed data buffer is filled or emptied, they want -control to return to the outer loop, rather than expecting that the buffer can -be flushed or reloaded within the data source/destination manager subroutine. -The library supports this need by providing an "I/O suspension" mode, which we -describe in this section. - -The I/O suspension mode is a limited solution: it works only in the simplest -operating modes (namely single-pass processing of single-scan JPEG files), and -it has several other restrictions which are documented below. Furthermore, -nothing is guaranteed about the maximum amount of time spent in any one call -to the library, so a single-threaded application may still have response-time -problems. If you need multi-pass processing or guaranteed response time, we -suggest you "bite the bullet" and implement a real multi-tasking capability. - -To use I/O suspension, cooperation is needed between the calling application -and the data source or destination manager; you will always need a custom -source/destination manager. (Please read the previous section if you haven't -already.) The basic idea is that the empty_output_buffer() or -fill_input_buffer() routine is a no-op, merely returning FALSE to indicate -that it has done nothing. Upon seeing this, the JPEG library suspends -operation and returns to its caller. The surrounding application is -responsible for emptying or refilling the work buffer before calling the JPEG -library again. - -Compression suspension: - -For compression suspension, use an empty_output_buffer() routine that -returns FALSE; typically it will not do anything else. This will cause the -compressor to return to the caller of jpeg_write_scanlines(), with the -return value indicating that not all the supplied scanlines have been -accepted. The application must make more room in the output buffer, adjust -the buffer pointer/count appropriately, and then call jpeg_write_scanlines() -again, pointing to the first unconsumed scanline. - -When forced to suspend, the compressor will backtrack to a convenient stopping -point (usually the start of the current MCU); it will regenerate some output -data when restarted. Therefore, although empty_output_buffer() is only called -when the buffer is filled, you should NOT dump out the entire buffer, only the -data up to the current position of next_output_byte/free_in_buffer. The data -beyond that point will be regenerated after resumption. - -Because of the backtracking behavior, a good-size output buffer is essential -for efficiency; you don't want the compressor to suspend often. (In fact, an -overly small buffer could lead to infinite looping, if a single MCU required -more data than would fit in the buffer.) We recommend a buffer of at least -several Kbytes. You may want to insert explicit code to ensure that you don't -call jpeg_write_scanlines() unless there is a reasonable amount of space in -the output buffer; in other words, flush the buffer before trying to compress -more data. - -The JPEG compressor does not support suspension while it is trying to write -JPEG markers at the beginning and end of the file. This means that - * At the beginning of a compression operation, there must be enough free - space in the output buffer to hold the header markers (typically 600 or - so bytes). The recommended buffer size is bigger than this anyway, so - this is not a problem as long as you start with an empty buffer. However, - this restriction might catch you if you insert large special markers, such - as a JFIF thumbnail image. - * When you call jpeg_finish_compress(), there must be enough space in the - output buffer to emit any buffered data and the final EOI marker. In the - current implementation, half a dozen bytes should suffice for this, but - for safety's sake we recommend ensuring that at least 100 bytes are free - before calling jpeg_finish_compress(). -Furthermore, since jpeg_finish_compress() cannot suspend, you cannot request -multi-pass operating modes such as Huffman code optimization or multiple-scan -output. That would imply that a large amount of data would be written inside -jpeg_finish_compress(), which would certainly trigger a buffer overrun. - -Decompression suspension: - -For decompression suspension, use a fill_input_buffer() routine that simply -returns FALSE (except perhaps during error recovery, as discussed below). -This will cause the decompressor to return to its caller with an indication -that suspension has occurred. This can happen at three places: - * jpeg_read_header(): will return JPEG_SUSPENDED. - * jpeg_read_scanlines(): will return the number of scanlines already - completed (possibly 0). - * jpeg_finish_decompress(): will return FALSE, rather than its usual TRUE. -The surrounding application must recognize these cases, load more data into -the input buffer, and repeat the call. In the case of jpeg_read_scanlines(), -adjust the passed pointers to reflect any scanlines successfully read. - -Just as with compression, the decompressor will typically backtrack to a -convenient restart point before suspending. The data beyond the current -position of next_input_byte/bytes_in_buffer must NOT be discarded; it will -be re-read upon resumption. In most implementations, you'll need to shift -this data down to the start of your work buffer and then load more data -after it. Again, this behavior means that a several-Kbyte work buffer is -essential for decent performance; furthermore, you should load a reasonable -amount of new data before resuming decompression. (If you loaded, say, -only one new byte each time around, you could waste a LOT of cycles.) - -The skip_input_data() source manager routine requires special care in a -suspension scenario. This routine is NOT granted the ability to suspend the -decompressor; it can decrement bytes_in_buffer to zero, but no more. If the -requested skip distance exceeds the amount of data currently in the input -buffer, then skip_input_data() must set bytes_in_buffer to zero and record the -additional skip distance somewhere else. The decompressor will immediately -call fill_input_buffer(), which will return FALSE, which will cause a -suspension return. The surrounding application must then arrange to discard -the right number of bytes before it resumes loading the input buffer. (Yes, -this design is rather baroque, but it avoids complexity in the far more common -case where a non-suspending source manager is used.) - -If the input data has been exhausted, we recommend that you emit a warning -and insert dummy EOI markers just as a non-suspending data source manager -would do. This can be handled either in the surrounding application logic or -within fill_input_buffer(); the latter is probably more efficient. If -fill_input_buffer() knows that no more data is available, it can set the -pointer/count to point to a dummy EOI marker and then return TRUE just as -though it had read more data in a non-suspending situation. - -The decompressor does not support suspension within jpeg_start_decompress(). -This means that you cannot use suspension with any multi-pass processing mode -(eg, two-pass color quantization or multiple-scan JPEG files). In single-pass -modes, jpeg_start_decompress() reads no data and thus need never suspend. - -The decompressor does not attempt to suspend within any JPEG marker; it will -backtrack to the start of the marker. Hence the input buffer must be large -enough to hold the longest marker in the file. We recommend at least a 2K -buffer. The buffer would need to be 64K to allow for arbitrary COM or APPn -markers, but the decompressor does not actually try to read these; it just -skips them by calling skip_input_data(). If you provide a special marker -handling routine that does look at such markers, coping with buffer overflow -is your problem. Ordinary JPEG markers should normally not exceed a few -hundred bytes each (DHT tables are typically the longest). For robustness -against damaged marker length counts, you may wish to insert a test in your -application for the case that the input buffer is completely full and yet the -decoder has suspended without consuming any data --- otherwise, if this -situation did occur, it would lead to an endless loop. - - -Abbreviated datastreams and multiple images -------------------------------------------- - -A JPEG compression or decompression object can be reused to process multiple -images. This saves a small amount of time per image by eliminating the -"create" and "destroy" operations, but that isn't the real purpose of the -feature. Rather, reuse of an object provides support for abbreviated JPEG -datastreams. Object reuse can also simplify processing a series of images in -a single input or output file. This section explains these features. - -A JPEG file normally contains several hundred bytes worth of quantization -and Huffman tables. In a situation where many images will be stored or -transmitted with identical tables, this may represent an annoying overhead. -The JPEG standard therefore permits tables to be omitted. The standard -defines three classes of JPEG datastreams: - * "Interchange" datastreams contain an image and all tables needed to decode - the image. These are the usual kind of JPEG file. - * "Abbreviated image" datastreams contain an image, but are missing some or - all of the tables needed to decode that image. - * "Abbreviated table specification" (henceforth "tables-only") datastreams - contain only table specifications. -To decode an abbreviated image, it is necessary to load the missing table(s) -into the decoder beforehand. This can be accomplished by reading a separate -tables-only file. A variant scheme uses a series of images in which the first -image is an interchange (complete) datastream, while subsequent ones are -abbreviated and rely on the tables loaded by the first image. It is assumed -that once the decoder has read a table, it will remember that table until a -new definition for the same table number is encountered. - -It is the application designer's responsibility to figure out how to associate -the correct tables with an abbreviated image. While abbreviated datastreams -can be useful in a closed environment, their use is strongly discouraged in -any situation where data exchange with other applications might be needed. -Caveat designer. - -The JPEG library provides support for reading and writing any combination of -tables-only datastreams and abbreviated images. In both compression and -decompression objects, a quantization or Huffman table will be retained for -the lifetime of the object, unless it is overwritten by a new table definition. - - -To create abbreviated image datastreams, it is only necessary to tell the -compressor not to emit some or all of the tables it is using. Each -quantization and Huffman table struct contains a boolean field "sent_table", -which normally is initialized to FALSE. For each table used by the image, the -header-writing process emits the table and sets sent_table = TRUE unless it is -already TRUE. (In normal usage, this prevents outputting the same table -definition multiple times, as would otherwise occur because the chroma -components typically share tables.) Thus, setting this field to TRUE before -calling jpeg_start_compress() will prevent the table from being written at -all. - -If you want to create a "pure" abbreviated image file containing no tables, -just call "jpeg_suppress_tables(&cinfo, TRUE)" after constructing all the -tables. If you want to emit some but not all tables, you'll need to set the -individual sent_table fields directly. - -To create an abbreviated image, you must also call jpeg_start_compress() -with a second parameter of FALSE, not TRUE. Otherwise jpeg_start_compress() -will force all the sent_table fields to FALSE. (This is a safety feature to -prevent abbreviated images from being created accidentally.) - -To create a tables-only file, perform the same parameter setup that you -normally would, but instead of calling jpeg_start_compress() and so on, call -jpeg_write_tables(&cinfo). This will write an abbreviated datastream -containing only SOI, DQT and/or DHT markers, and EOI. All the quantization -and Huffman tables that are currently defined in the compression object will -be emitted unless their sent_tables flag is already TRUE, and then all the -sent_tables flags will be set TRUE. - -A sure-fire way to create matching tables-only and abbreviated image files -is to proceed as follows: - - create JPEG compression object - set JPEG parameters - set destination to tables-only file - jpeg_write_tables(&cinfo); - set destination to image file - jpeg_start_compress(&cinfo, FALSE); - write data... - jpeg_finish_compress(&cinfo); - -Since the JPEG parameters are not altered between writing the table file and -the abbreviated image file, the same tables are sure to be used. Of course, -you can repeat the jpeg_start_compress() ... jpeg_finish_compress() sequence -many times to produce many abbreviated image files matching the table file. - -You cannot suppress output of the computed Huffman tables when Huffman -optimization is selected. (If you could, there'd be no way to decode the -image...) Generally, you don't want to set optimize_coding = TRUE when -you are trying to produce abbreviated files. - -In some cases you might want to compress an image using tables which are -not stored in the application, but are defined in an interchange or -tables-only file readable by the application. This can be done by setting up -a JPEG decompression object to read the specification file, then copying the -tables into your compression object. - - -To read abbreviated image files, you simply need to load the proper tables -into the decompression object before trying to read the abbreviated image. -If the proper tables are stored in the application program, you can just -allocate the table structs and fill in their contents directly. More commonly -you'd want to read the tables from a tables-only file. The jpeg_read_header() -call is sufficient to read a tables-only file. You must pass a second -parameter of FALSE to indicate that you do not require an image to be present. -Thus, the typical scenario is - - create JPEG decompression object - set source to tables-only file - jpeg_read_header(&cinfo, FALSE); - set source to abbreviated image file - jpeg_read_header(&cinfo, TRUE); - set decompression parameters - jpeg_start_decompress(&cinfo); - read data... - jpeg_finish_decompress(&cinfo); - -In some cases, you may want to read a file without knowing whether it contains -an image or just tables. In that case, pass FALSE and check the return value -from jpeg_read_header(): it will be JPEG_HEADER_OK if an image was found, -JPEG_HEADER_TABLES_ONLY if only tables were found. (A third return value, -JPEG_SUSPENDED, is possible when using a suspending data source manager.) -Note that jpeg_read_header() will not complain if you read an abbreviated -image for which you haven't loaded the missing tables; the missing-table check -occurs in jpeg_start_decompress(). - - -It is possible to read a series of images from a single source file by -repeating the jpeg_read_header() ... jpeg_finish_decompress() sequence, -without releasing/recreating the JPEG object or the data source module. -(If you did reinitialize, any partial bufferload left in the data source -buffer at the end of one image would be discarded, causing you to lose the -start of the next image.) When you use this method, stored tables are -automatically carried forward, so some of the images can be abbreviated images -that depend on tables from earlier images. - -If you intend to write a series of images into a single destination file, -you might want to make a specialized data destination module that doesn't -flush the output buffer at term_destination() time. This would speed things -up by some trifling amount. Of course, you'd need to remember to flush the -buffer after the last image. You can make the later images be abbreviated -ones by passing FALSE to jpeg_start_compress(). - - -Special markers ---------------- - -Some applications may need to insert or extract special data in the JPEG -datastream. The JPEG standard provides marker types "COM" (comment) and -"APP0" through "APP15" (application) to hold application-specific data. -Unfortunately, the use of these markers is not specified by the standard. -COM markers are fairly widely used to hold user-supplied text. The JFIF file -format spec uses APP0 markers with specified initial strings to hold certain -data. Adobe applications use APP14 markers beginning with the string "Adobe" -for miscellaneous data. Other APPn markers are rarely seen, but might -contain almost anything. - -If you wish to store user-supplied text, we recommend you use COM markers -and place readable 7-bit ASCII text in them. Newline conventions are not -standardized --- expect to find LF (Unix style), CR/LF (DOS style), or CR -(Mac style). A robust COM reader should be able to cope with random binary -garbage, including nulls, since some applications generate COM markers -containing non-ASCII junk. (But yours should not be one of them.) - -For program-supplied data, use an APPn marker, and be sure to begin it with an -identifying string so that you can tell whether the marker is actually yours. -It's probably best to avoid using APP0 or APP14 for any private markers. - -Keep in mind that at most 65533 bytes can be put into one marker, but you -can have as many markers as you like. - -By default, the JPEG compression library will write a JFIF APP0 marker if the -selected JPEG colorspace is grayscale or YCbCr, or an Adobe APP14 marker if -the selected colorspace is RGB, CMYK, or YCCK. You can disable this, but -we don't recommend it. The decompression library will recognize JFIF and -Adobe markers and will set the JPEG colorspace properly when one is found. - -You can write special markers immediately following the datastream header by -calling jpeg_write_marker() after jpeg_start_compress() and before the first -call to jpeg_write_scanlines(). When you do this, the markers appear after -the SOI and the JFIF APP0 and Adobe APP14 markers (if written), but before -all else. Write the marker type parameter as "JPEG_COM" for COM or -"JPEG_APP0 + n" for APPn. (Actually, jpeg_write_marker will let you write -any marker type, but we don't recommend writing any other kinds of marker.) -For example, to write a user comment string pointed to by comment_text: - jpeg_write_marker(cinfo, JPEG_COM, comment_text, strlen(comment_text)); -Or if you prefer to synthesize the marker byte sequence yourself, you can -just cram it straight into the data destination module. - -For decompression, you can supply your own routine to process COM or APPn -markers by calling jpeg_set_marker_processor(). Usually you'd call this -after creating a decompression object and before calling jpeg_read_header(), -because the markers of interest will normally be scanned by jpeg_read_header. -Once you've supplied a routine, it will be used for the life of that -decompression object. A separate routine may be registered for COM and for -each APPn marker code. - -A marker processor routine must have the signature - boolean jpeg_marker_parser_method (j_decompress_ptr cinfo) -Although the marker code is not explicitly passed, the routine can find it -in cinfo->unread_marker. At the time of call, the marker proper has been -read from the data source module. The processor routine is responsible for -reading the marker length word and the remaining parameter bytes, if any. -Return TRUE to indicate success. (FALSE should be returned only if you are -using a suspending data source and it tells you to suspend. See the standard -marker processors in jdmarker.c for appropriate coding methods if you need to -use a suspending data source.) - -If you override the default APP0 or APP14 processors, it is up to you to -recognize JFIF and Adobe markers if you want colorspace recognition to occur -properly. We recommend copying and extending the default processors if you -want to do that. - -A simple example of an external COM processor can be found in djpeg.c. - - -Raw (downsampled) image data ----------------------------- - -Some applications need to supply already-downsampled image data to the JPEG -compressor, or to receive raw downsampled data from the decompressor. The -library supports this requirement by allowing the application to write or -read raw data, bypassing the normal preprocessing or postprocessing steps. -The interface is different from the standard one and is somewhat harder to -use. If your interest is merely in bypassing color conversion, we recommend -that you use the standard interface and simply set jpeg_color_space = -in_color_space (or jpeg_color_space = out_color_space for decompression). -The mechanism described in this section is necessary only to supply or -receive downsampled image data, in which not all components have the same -dimensions. - - -To compress raw data, you must supply the data in the colorspace to be used -in the JPEG file (please read the earlier section on Special color spaces) -and downsampled to the sampling factors specified in the JPEG parameters. -You must supply the data in the format used internally by the JPEG library, -namely a JSAMPIMAGE array. This is an array of pointers to two-dimensional -arrays, each of type JSAMPARRAY. Each 2-D array holds the values for one -color component. This structure is necessary since the components are of -different sizes. If the image dimensions are not a multiple of the MCU size, -you must also pad the data correctly (usually, this is done by replicating -the last column and/or row). The data must be padded to a multiple of a DCT -block in each component: that is, each downsampled row must contain a -multiple of 8 valid samples, and there must be a multiple of 8 sample rows -for each component. (For applications such as conversion of digital TV -images, the standard image size is usually a multiple of the DCT block size, -so that no padding need actually be done.) - -The procedure for compression of raw data is basically the same as normal -compression, except that you call jpeg_write_raw_data() in place of -jpeg_write_scanlines(). Before calling jpeg_start_compress(), you must do -the following: - * Set cinfo->raw_data_in to TRUE. (It is set FALSE by jpeg_set_defaults().) - This notifies the library that you will be supplying raw data. - * Ensure jpeg_color_space is correct --- an explicit jpeg_set_colorspace() - call is a good idea. Note that since color conversion is bypassed, - in_color_space is ignored, except that jpeg_set_defaults() uses it to - choose the default jpeg_color_space setting. - * Ensure the sampling factors, cinfo->comp_info[i].h_samp_factor and - cinfo->comp_info[i].v_samp_factor, are correct. Since these indicate the - dimensions of the data you are supplying, it's wise to set them - explicitly, rather than assuming the library's defaults are what you want. - -To pass raw data to the library, call jpeg_write_raw_data() in place of -jpeg_write_scanlines(). The two routines work similarly except that -jpeg_write_raw_data takes a JSAMPIMAGE data array rather than JSAMPARRAY. -The scanlines count passed to and returned from jpeg_write_raw_data is -measured in terms of the component with the largest v_samp_factor. - -jpeg_write_raw_data() processes one MCU row per call, which is to say -v_samp_factor*DCTSIZE sample rows of each component. The passed num_lines -value must be at least max_v_samp_factor*DCTSIZE, and the return value will -be exactly that amount (or possibly some multiple of that amount, in future -library versions). This is true even on the last call at the bottom of the -image; don't forget to pad your data as necessary. - -The required dimensions of the supplied data can be computed for each -component as - cinfo->comp_info[i].width_in_blocks*DCTSIZE samples per row - cinfo->comp_info[i].height_in_blocks*DCTSIZE rows in image -after jpeg_start_compress() has initialized those fields. If the valid data -is smaller than this, it must be padded appropriately. For some sampling -factors and image sizes, additional dummy DCT blocks are inserted to make -the image a multiple of the MCU dimensions. The library creates such dummy -blocks itself; it does not read them from your supplied data. Therefore you -need never pad by more than DCTSIZE samples. An example may help here. -Assume 2h2v downsampling of YCbCr data, that is - cinfo->comp_info[0].h_samp_factor = 2 for Y - cinfo->comp_info[0].v_samp_factor = 2 - cinfo->comp_info[1].h_samp_factor = 1 for Cb - cinfo->comp_info[1].v_samp_factor = 1 - cinfo->comp_info[2].h_samp_factor = 1 for Cr - cinfo->comp_info[2].v_samp_factor = 1 -and suppose that the nominal image dimensions (cinfo->image_width and -cinfo->image_height) are 101x101 pixels. Then jpeg_start_compress() will -compute downsampled_width = 101 and width_in_blocks = 13 for Y, -downsampled_width = 51 and width_in_blocks = 7 for Cb and Cr (and the same -for the height fields). You must pad the Y data to at least 13*8 = 104 -columns and rows, the Cb/Cr data to at least 7*8 = 56 columns and rows. The -MCU height is max_v_samp_factor = 2 DCT rows so you must pass at least 16 -scanlines on each call to jpeg_write_raw_data(), which is to say 16 actual -sample rows of Y and 8 each of Cb and Cr. A total of 7 MCU rows are needed, -so you must pass a total of 7*16 = 112 "scanlines". The last DCT block row -of Y data is dummy, so it doesn't matter what you pass for it in the data -arrays, but the scanlines count must total up to 112 so that all of the Cb -and Cr data gets passed. - -Currently, output suspension is not supported with raw data output: an error -will result if the data destination module tries to suspend. - - -Decompression with raw data output implies bypassing all postprocessing: -you cannot ask for color quantization, for instance. More seriously, you must -deal with the color space and sampling factors present in the incoming file. -If your application only handles, say, 2h1v YCbCr data, you must check for -and fail on other color spaces or other sampling factors. - -To obtain raw data output, set cinfo->raw_data_out = TRUE before -jpeg_start_decompress() (it is set FALSE by jpeg_read_header()). Be sure to -verify that the color space and sampling factors are ones you can handle. -Then call jpeg_read_raw_data() in place of jpeg_read_scanlines(). The -decompression process is otherwise the same as usual. - -jpeg_read_raw_data() returns one MCU row per call, and thus you must pass a -buffer of at least max_v_samp_factor*DCTSIZE scanlines (scanline counting is -the same as for raw-data compression). The buffer you pass must be large -enough to hold the actual data plus padding to DCT-block boundaries. As with -compression, any entirely dummy DCT blocks are not processed so you need not -allocate space for them, but the total scanline count includes them. The -above example of computing buffer dimensions for raw-data compression is -equally valid for decompression. - -Input suspension is supported with raw-data decompression: if the data source -module suspends, jpeg_read_raw_data() will return 0. - - -Progress monitoring -------------------- - -Some applications may need to regain control from the JPEG library every so -often. The typical use of this feature is to produce a percent-done bar or -other progress display. (For a simple example, see cjpeg.c or djpeg.c.) -Although you do get control back frequently during the data-transferring pass -(the jpeg_read_scanlines or jpeg_write_scanlines loop), any additional passes -will occur inside jpeg_finish_compress or jpeg_start_decompress; those -routines may take a long time to execute, and you don't get control back -until they are done. - -You can define a progress-monitor routine which will be called periodically -by the library. No guarantees are made about how often this call will occur, -so we don't recommend you use it for mouse tracking or anything like that. -At present, a call will occur once per MCU row, scanline, or sample row -group, whichever unit is convenient for the current processing mode; so the -wider the image, the longer the time between calls. (During the data -transferring pass, only one call occurs per call of jpeg_read_scanlines or -jpeg_write_scanlines, so don't pass a large number of scanlines at once if -you want fine resolution in the progress count.) - -To establish a progress-monitor callback, create a struct jpeg_progress_mgr, -fill in its progress_monitor field with a pointer to your callback routine, -and set cinfo->progress to point to the struct. The callback will be called -whenever cinfo->progress is non-NULL. (This pointer is set to NULL by -jpeg_create_compress or jpeg_create_decompress; the library will not change -it thereafter. So if you allocate dynamic storage for the progress struct, -make sure it will live as long as the JPEG object does. Allocating from the -JPEG memory manager with lifetime JPOOL_PERMANENT will work nicely.) You -can use the same callback routine for both compression and decompression. - -The jpeg_progress_mgr struct contains four fields which are set by the library: - long pass_counter; /* work units completed in this pass */ - long pass_limit; /* total number of work units in this pass */ - int completed_passes; /* passes completed so far */ - int total_passes; /* total number of passes expected */ -During any one pass, pass_counter increases from 0 up to (not including) -pass_limit; the step size is not necessarily 1. Both the step size and the -limit may differ from one pass to another. The expected total number of -passes is in total_passes, and the number of passes already completed is in -completed_passes. Thus the fraction of work completed may be estimated as - completed_passes + (pass_counter/pass_limit) - -------------------------------------------- - total_passes -ignoring the fact that the passes may not be equal amounts of work. - -When decompressing, the total_passes value is not trustworthy, because it -depends on the number of scans in the JPEG file, which isn't always known in -advance. In the current implementation, completed_passes may jump by more -than one when dealing with a multiple-scan input file. About all that is -really safe to assume is that when completed_passes = total_passes - 1, the -current pass will be the last one. - -If you really need to use the callback mechanism for time-critical tasks -like mouse tracking, you could insert additional calls inside some of the -library's inner loops. - - -Memory management ------------------ - -This section covers some key facts about the JPEG library's built-in memory -manager. For more info, please read structure.doc's section about the memory -manager, and consult the source code if necessary. - -All memory and temporary file allocation within the library is done via the -memory manager. If necessary, you can replace the "back end" of the memory -manager to control allocation yourself (for example, if you don't want the -library to use malloc() and free() for some reason). - -Some data is allocated "permanently" and will not be freed until the JPEG -object is destroyed. Most data is allocated "per image" and is freed by -jpeg_finish_compress, jpeg_finish_decompress, or jpeg_abort. You can call the -memory manager yourself to allocate structures that will automatically be -freed at these times. Typical code for this is - ptr = (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, size); -Use JPOOL_PERMANENT to get storage that lasts as long as the JPEG object. -Use alloc_large instead of alloc_small for anything bigger than a few Kbytes. -There are also alloc_sarray and alloc_barray routines that automatically -build 2-D sample or block arrays. - -The library's minimum space requirements to process an image depend on the -image's width, but not on its height, because the library ordinarily works -with "strip" buffers that are as wide as the image but just a few rows high. -Some operating modes (eg, two-pass color quantization) require full-image -buffers. Such buffers are treated as "virtual arrays": only the current strip -need be in memory, and the rest can be swapped out to a temporary file. - -If you use the simplest memory manager back end (jmemnobs.c), then no -temporary files are used; virtual arrays are simply malloc()'d. Images bigger -than memory can be processed only if your system supports virtual memory. -The other memory manager back ends support temporary files of various flavors -and thus work in machines without virtual memory. They may also be useful on -Unix machines if you need to process images that exceed available swap space. - -When using temporary files, the library will make the in-memory buffers for -its virtual arrays just big enough to stay within a "maximum memory" setting. -Your application can set this limit by setting cinfo->mem->max_memory_to_use -after creating the JPEG object. (Of course, there is still a minimum size for -the buffers, so the max-memory setting is effective only if it is bigger than -the minimum space needed.) If you allocate any large structures yourself, you -must allocate them before jpeg_start_compress() or jpeg_start_decompress() in -order to have them counted against the max memory limit. Also keep in mind -that space allocated with alloc_small() is ignored, on the assumption that -it's too small to be worth worrying about. - -If you use the jmemname.c or jmemdos.c memory manager back end, it is -important to clean up the JPEG object properly to ensure that the temporary -files get deleted. (This is especially crucial with jmemdos.c, where the -"temporary files" may be extended-memory segments; if they are not freed, -DOS will require a reboot to recover the memory.) Thus, with these memory -managers, it's a good idea to provide a signal handler that will trap any -early exit from your program. The handler should call either jpeg_abort() -or jpeg_destroy() for any active JPEG objects. A handler is not needed with -jmemnobs.c, and shouldn't be necessary with jmemansi.c either, since the C -library is supposed to take care of deleting files made with tmpfile(). - - -Library compile-time options ----------------------------- - -A number of compile-time options are available by modifying jmorecfg.h. - -The JPEG standard provides for both the baseline 8-bit DCT process and -a 12-bit DCT process. 12-bit lossy JPEG is supported if you define -BITS_IN_JSAMPLE as 12 rather than 8. Note that this causes JSAMPLE to be -larger than a char, so it affects the surrounding application's image data. -At present, a 12-bit library can handle *only* 12-bit images, not both -precisions. (If you need to include both 8- and 12-bit libraries in a -single application, you could probably do it by defining -NEED_SHORT_EXTERNAL_NAMES for just one of the copies. You'd have to access -the 8-bit and 12-bit copies from separate application source files. This is -untested ... if you try it, we'd like to hear whether it works!) - -The maximum number of components (color channels) in the image is determined -by MAX_COMPONENTS. The JPEG standard allows up to 255 components, but we -expect that few applications will need more than four or so. - -On machines with unusual data type sizes, you may be able to improve -performance or reduce memory space by tweaking the various typedefs in -jmorecfg.h. In particular, on some RISC CPUs, access to arrays of "short"s -is quite slow; consider trading memory for speed by making JCOEF, INT16, and -UINT16 be "int" or "unsigned int". UINT8 is also a candidate to become int. -You probably don't want to make JSAMPLE be int unless you have lots of memory -to burn. - -You can reduce the size of the library by compiling out various optional -functions. To do this, undefine xxx_SUPPORTED symbols as necessary. - - -Portability considerations --------------------------- - -The JPEG library has been written to be extremely portable; the sample -applications cjpeg and djpeg are slightly less so. This section summarizes -the design goals in this area. (If you encounter any bugs that cause the -library to be less portable than is claimed here, we'd appreciate hearing -about them.) - -The code works fine on both ANSI and pre-ANSI C compilers, using any of the -popular system include file setups, and some not-so-popular ones too. See -install.doc for configuration procedures. - -The code is not dependent on the exact sizes of the C data types. As -distributed, we make the assumptions that - char is at least 8 bits wide - short is at least 16 bits wide - int is at least 16 bits wide - long is at least 32 bits wide -(These are the minimum requirements of the ANSI C standard.) Wider types will -work fine, although memory may be used inefficiently if char is much larger -than 8 bits or short is much bigger than 16 bits. The code should work -equally well with 16- or 32-bit ints. - -In a system where these assumptions are not met, you may be able to make the -code work by modifying the typedefs in jmorecfg.h. However, you will probably -have difficulty if int is less than 16 bits wide, since references to plain -int abound in the code. - -char can be either signed or unsigned, although the code runs faster if an -unsigned char type is available. If char is wider than 8 bits, you will need -to redefine JOCTET and/or provide custom data source/destination managers so -that JOCTET represents exactly 8 bits of data on external storage. - -The JPEG library proper does not assume ASCII representation of characters. -But some of the image file I/O modules in cjpeg/djpeg do have ASCII -dependencies in file-header manipulation; so does cjpeg's select_file_type() -routine. - -The JPEG library does not rely heavily on the C library. In particular, C -stdio is used only by the data source/destination modules and the error -handler, all of which are application-replaceable. (cjpeg/djpeg are more -heavily dependent on stdio.) malloc and free are called only from the memory -manager "back end" module, so you can use a different memory allocator by -replacing that one file. - -The code generally assumes that C names must be unique in the first 15 -characters. However, global function names can be made unique in the -first 6 characters by defining NEED_SHORT_EXTERNAL_NAMES. - -More info about porting the code may be gleaned by reading jconfig.doc, -jmorecfg.h, and jinclude.h. - - -Notes for MS-DOS implementors ------------------------------ - -The IJG code is designed to work efficiently in 80x86 "small" or "medium" -memory models (i.e., data pointers are 16 bits unless explicitly declared -"far"; code pointers can be either size). You may be able to use small -model to compile cjpeg or djpeg by itself, but you will probably have to use -medium model for any larger application. This won't make much difference in -performance. You *will* take a noticeable performance hit if you use a -large-data memory model (perhaps 10%-25%), and you should avoid "huge" model -if at all possible. - -The JPEG library typically needs 2Kb-3Kb of stack space. It will also -malloc about 20K-30K of near heap space while executing (and lots of far -heap, but that doesn't count in this calculation). This figure will vary -depending on selected operating mode, and to a lesser extent on image size. -Thus you have perhaps 25K available for static data and other modules' near -heap space before you need to go to a larger memory model. The C library's -static data will account for several K of this, but that still leaves a good -deal for your needs. (If you are tight on space, you could reduce the sizes -of the I/O buffers allocated by jdatasrc.c and jdatadst.c, say from 4K to -1K.) - -About 2K of the near heap space is "permanent" memory that will not be -released until you destroy the JPEG object. This is only an issue if you -save a JPEG object between compression or decompression operations. - -Far data space may also be a tight resource when you are dealing with large -images. The most memory-intensive case is decompression with two-pass color -quantization, or single-pass quantization to an externally supplied color -map. This requires a 128Kb color lookup table plus strip buffers amounting -to about 50 bytes per column for typical sampling ratios (eg, about 32000 -bytes for a 640-pixel-wide image). You may not be able to process wide -images if you have large data structures of your own. - -Of course, all of these concerns vanish if you use a 32-bit flat-memory-model -compiler, such as DJGPP or Watcom C. We highly recommend flat model if you -can use it; the JPEG library is significantly faster in flat model. diff --git a/jpeg/libjpeg.doc.gz b/jpeg/libjpeg.doc.gz deleted file mode 100644 index fb579a0126e25a9f081c3ba95459ecf11adc9ae7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3775 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 diff --git a/jpeg/makcjpeg.st b/jpeg/makcjpeg.st deleted file mode 100644 index f524a8f7ab..0000000000 --- a/jpeg/makcjpeg.st +++ /dev/null @@ -1,35 +0,0 @@ -; Project file for Independent JPEG Group's software -; -; This project file is for Atari ST/STE/TT systems using Pure C or Turbo C. -; Thanks to Frank Moehle (Frank.Moehle@arbi.informatik.uni-oldenburg.de) -; and to Dr. B. Setzepfandt (bernd@gina.uni-muenster.de). -; -; To use this file, rename it to CJPEG.PRJ. -; If you are using Turbo C, change filenames beginning with "PC..." to "TC..." -; Read installation instructions before trying to make the program! -; -; -; * * * Output file * * * -cjpeg.ttp -; -; * * * COMPILER OPTIONS * * * -.C[-P] ; absolute calls -.C[-M] ; and no string merging, folks -.C[-w-cln] ; no "constant is long" warnings -.C[-w-par] ; no "parameter xxxx unused" -.C[-w-rch] ; no "unreachable code" -.C[-wsig] ; warn if significant digits may be lost -= -; * * * * List of modules * * * * -PCSTART.O -cjpeg.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h,jversion.h) -rdppm.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h) -rdgif.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h) -rdtarga.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h) -rdbmp.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h) -rdrle.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h) -LIBJPEG.LIB ; built by LIBJPEG.PRJ -PCFLTLIB.LIB ; floating point library -; the float library can be omitted if you've turned off DCT_FLOAT_SUPPORTED -PCSTDLIB.LIB ; standard library -PCEXTLIB.LIB ; extended library diff --git a/jpeg/makdjpeg.st b/jpeg/makdjpeg.st deleted file mode 100644 index 201415382e..0000000000 --- a/jpeg/makdjpeg.st +++ /dev/null @@ -1,36 +0,0 @@ -; Project file for Independent JPEG Group's software -; -; This project file is for Atari ST/STE/TT systems using Pure C or Turbo C. -; Thanks to Frank Moehle (Frank.Moehle@arbi.informatik.uni-oldenburg.de) -; and to Dr. B. Setzepfandt (bernd@gina.uni-muenster.de). -; -; To use this file, rename it to DJPEG.PRJ. -; If you are using Turbo C, change filenames beginning with "PC..." to "TC..." -; Read installation instructions before trying to make the program! -; -; -; * * * Output file * * * -djpeg.ttp -; -; * * * COMPILER OPTIONS * * * -.C[-P] ; absolute calls -.C[-M] ; and no string merging, folks -.C[-w-cln] ; no "constant is long" warnings -.C[-w-par] ; no "parameter xxxx unused" -.C[-w-rch] ; no "unreachable code" -.C[-wsig] ; warn if significant digits may be lost -= -; * * * * List of modules * * * * -PCSTART.O -djpeg.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h,jversion.h) -rdcolmap.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h) -wrppm.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h) -wrgif.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h) -wrtarga.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h) -wrbmp.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h) -wrrle.c (cdjpeg.h,jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h,cderror.h) -LIBJPEG.LIB ; built by LIBJPEG.PRJ -PCFLTLIB.LIB ; floating point library -; the float library can be omitted if you've turned off DCT_FLOAT_SUPPORTED -PCSTDLIB.LIB ; standard library -PCEXTLIB.LIB ; extended library diff --git a/jpeg/makefile.ansi b/jpeg/makefile.ansi deleted file mode 100644 index b69aca2266..0000000000 --- a/jpeg/makefile.ansi +++ /dev/null @@ -1,178 +0,0 @@ -# Makefile for Independent JPEG Group's software - -# This makefile is suitable for Unix-like systems with ANSI-capable compilers. -# If you have a non-ANSI compiler, makefile.unix is a better starting point. - -# Read installation instructions before saying "make" !! - -# The name of your C compiler: -CC= cc - -# You may need to adjust these cc options: -CFLAGS= -O -# Generally, we recommend defining any configuration symbols in jconfig.h, -# NOT via -D switches here. - -# Link-time cc options: -LDFLAGS= - -# To link any special libraries, add the necessary -l commands here. -LDLIBS= - -# Put here the object file name for the correct system-dependent memory -# manager file. For Unix this is usually jmemnobs.o, but you may want -# to use jmemansi.o or jmemname.o if you have limited swap space. -SYSDEPMEM= jmemnobs.o - -# miscellaneous OS-dependent stuff -# linker -LN= $(CC) -# file deletion command -RM= rm -f -# library (.a) file creation command -AR= ar rc -# second step in .a creation (use "touch" if not needed) -AR2= ranlib - -# End of configurable options. - - -# source files: JPEG library proper -LIBSOURCES= jcapi.c jccoefct.c jccolor.c jcdctmgr.c jchuff.c jcmainct.c \ - jcmarker.c jcmaster.c jcomapi.c jcparam.c jcprepct.c jcsample.c \ - jdapi.c jdatasrc.c jdatadst.c jdcoefct.c jdcolor.c jddctmgr.c \ - jdhuff.c jdmainct.c jdmarker.c jdmaster.c jdpostct.c jdsample.c \ - jerror.c jutils.c jfdctfst.c jfdctflt.c jfdctint.c jidctfst.c \ - jidctflt.c jidctint.c jidctred.c jquant1.c jquant2.c jdmerge.c \ - jmemmgr.c jmemansi.c jmemname.c jmemnobs.c jmemdos.c -# source files: cjpeg/djpeg applications, also rdjpgcom/wrjpgcom -APPSOURCES= cjpeg.c djpeg.c rdcolmap.c rdppm.c wrppm.c rdgif.c wrgif.c \ - rdtarga.c wrtarga.c rdbmp.c wrbmp.c rdrle.c wrrle.c rdjpgcom.c \ - wrjpgcom.c -SOURCES= $(LIBSOURCES) $(APPSOURCES) -# files included by source files -INCLUDES= jdct.h jerror.h jinclude.h jmemsys.h jmorecfg.h jpegint.h \ - jpeglib.h jversion.h cdjpeg.h cderror.h -# documentation, test, and support files -DOCS= README install.doc usage.doc cjpeg.1 djpeg.1 rdjpgcom.1 wrjpgcom.1 \ - example.c libjpeg.doc structure.doc coderules.doc filelist.doc \ - change.log -MKFILES= configure makefile.auto makefile.ansi makefile.unix makefile.manx \ - makefile.sas makcjpeg.st makdjpeg.st makljpeg.st makefile.bcc \ - makefile.mc6 makefile.dj makefile.mms makefile.vms makvms.opt -CONFIGFILES= jconfig.auto jconfig.manx jconfig.sas jconfig.st jconfig.bcc \ - jconfig.mc6 jconfig.dj jconfig.vms -OTHERFILES= jconfig.doc ckconfig.c ansi2knr.c ansi2knr.1 jmemdosa.asm -TESTFILES= testorig.jpg testimg.ppm testimg.gif testimg.jpg -DISTFILES= $(DOCS) $(MKFILES) $(CONFIGFILES) $(SOURCES) $(INCLUDES) \ - $(OTHERFILES) $(TESTFILES) -# library object files common to compression and decompression -COMOBJECTS= jcomapi.o jutils.o jerror.o jmemmgr.o $(SYSDEPMEM) -# compression library object files -CLIBOBJECTS= jcapi.o jcparam.o jdatadst.o jcmaster.o jcmarker.o jcmainct.o \ - jcprepct.o jccoefct.o jccolor.o jcsample.o jchuff.o jcdctmgr.o \ - jfdctfst.o jfdctflt.o jfdctint.o -# decompression library object files -DLIBOBJECTS= jdapi.o jdatasrc.o jdmaster.o jdmarker.o jdmainct.o jdcoefct.o \ - jdpostct.o jddctmgr.o jidctfst.o jidctflt.o jidctint.o jidctred.o \ - jdhuff.o jdsample.o jdcolor.o jquant1.o jquant2.o jdmerge.o -# These objectfiles are included in libjpeg.a -LIBOBJECTS= $(CLIBOBJECTS) $(DLIBOBJECTS) $(COMOBJECTS) -# object files for cjpeg and djpeg applications (excluding library files) -COBJECTS= cjpeg.o rdppm.o rdgif.o rdtarga.o rdrle.o rdbmp.o -DOBJECTS= djpeg.o wrppm.o wrgif.o wrtarga.o wrrle.o wrbmp.o rdcolmap.o - - -all: libjpeg.a cjpeg djpeg rdjpgcom wrjpgcom - -libjpeg.a: $(LIBOBJECTS) - $(RM) libjpeg.a - $(AR) libjpeg.a $(LIBOBJECTS) - $(AR2) libjpeg.a - -cjpeg: $(COBJECTS) libjpeg.a - $(LN) $(LDFLAGS) -o cjpeg $(COBJECTS) libjpeg.a $(LDLIBS) - -djpeg: $(DOBJECTS) libjpeg.a - $(LN) $(LDFLAGS) -o djpeg $(DOBJECTS) libjpeg.a $(LDLIBS) - -rdjpgcom: rdjpgcom.o - $(LN) $(LDFLAGS) -o rdjpgcom rdjpgcom.o $(LDLIBS) - -wrjpgcom: wrjpgcom.o - $(LN) $(LDFLAGS) -o wrjpgcom wrjpgcom.o $(LDLIBS) - -jconfig.h: jconfig.doc - echo You must prepare a system-dependent jconfig.h file. - echo Please read the installation directions in install.doc. - exit 1 - -clean: - $(RM) *.o cjpeg djpeg libjpeg.a rdjpgcom wrjpgcom core testout.* - -test: cjpeg djpeg - $(RM) testout.ppm testout.gif testout.jpg - ./djpeg -dct int -ppm -outfile testout.ppm testorig.jpg - ./djpeg -dct int -gif -outfile testout.gif testorig.jpg - ./cjpeg -dct int -outfile testout.jpg testimg.ppm - cmp testimg.ppm testout.ppm - cmp testimg.gif testout.gif - cmp testimg.jpg testout.jpg - - -jcapi.o : jcapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jccoefct.o : jccoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jccolor.o : jccolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcdctmgr.o : jcdctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jchuff.o : jchuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcmainct.o : jcmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcmarker.o : jcmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcmaster.o : jcmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcomapi.o : jcomapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcparam.o : jcparam.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcprepct.o : jcprepct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcsample.o : jcsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdapi.o : jdapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdatasrc.o : jdatasrc.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h -jdatadst.o : jdatadst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h -jdcoefct.o : jdcoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdcolor.o : jdcolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jddctmgr.o : jddctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jdhuff.o : jdhuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmainct.o : jdmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmarker.o : jdmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmaster.o : jdmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdpostct.o : jdpostct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdsample.o : jdsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jerror.o : jerror.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jversion.h jerror.h -jutils.o : jutils.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jfdctfst.o : jfdctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jfdctflt.o : jfdctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jfdctint.o : jfdctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctfst.o : jidctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctflt.o : jidctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctint.o : jidctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctred.o : jidctred.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jquant1.o : jquant1.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jquant2.o : jquant2.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmerge.o : jdmerge.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jmemmgr.o : jmemmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemansi.o : jmemansi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemname.o : jmemname.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemnobs.o : jmemnobs.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemdos.o : jmemdos.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -cjpeg.o : cjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h -djpeg.o : djpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h -rdcolmap.o : rdcolmap.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdppm.o : rdppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrppm.o : wrppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdgif.o : rdgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrgif.o : wrgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdtarga.o : rdtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrtarga.o : wrtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdbmp.o : rdbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrbmp.o : wrbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdrle.o : rdrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrrle.o : wrrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdjpgcom.o : rdjpgcom.c jinclude.h jconfig.h -wrjpgcom.o : wrjpgcom.c jinclude.h jconfig.h diff --git a/jpeg/makefile.auto b/jpeg/makefile.auto deleted file mode 100644 index 20a81b75a2..0000000000 --- a/jpeg/makefile.auto +++ /dev/null @@ -1,238 +0,0 @@ -# Makefile for Independent JPEG Group's software - -# makefile.auto is edited by configure to produce a custom Makefile. - -# Read installation instructions before saying "make" !! - -# For compiling with source and object files in different directories. -srcdir = @srcdir@ -VPATH = @srcdir@ - -# Where to install the programs and man pages. -prefix = /usr/local -exec_prefix = $(prefix) -bindir = $(exec_prefix)/bin -libdir = $(exec_prefix)/lib -includedir = $(prefix)/include -mandir = $(prefix)/man/man1 -binprefix = -manprefix = -manext = 1 - -# The name of your C compiler: -CC= @CC@ - -# You may need to adjust these cc options: -CFLAGS= -O -I$(srcdir) -# Generally, we recommend defining any configuration symbols in jconfig.h, -# NOT via -D switches here. -# However, any special defines for ansi2knr.c may be included here: -ANSI2KNRFLAGS= @ANSI2KNRFLAGS@ - -# Link-time cc options: -LDFLAGS= - -# To link any special libraries, add the necessary -l commands here. -LDLIBS= - -# Put here the object file name for the correct system-dependent memory -# manager file. For Unix this is usually jmemnobs.o, but you may want -# to use jmemansi.o or jmemname.o if you have limited swap space. -SYSDEPMEM= @MEMORYMGR@ - -# miscellaneous OS-dependent stuff -SHELL= /bin/sh -# linker -LN= $(CC) -# file deletion command -RM= rm -f -# file rename command -MV= mv -# library (.a) file creation command -AR= ar rc -# second step in .a creation (use "touch" if not needed) -AR2= @RANLIB@ -# installation program -INSTALL= @INSTALL@ -INSTALL_PROGRAM= @INSTALL_PROGRAM@ -INSTALL_DATA= @INSTALL_DATA@ - -# End of configurable options. - - -# source files: JPEG library proper -LIBSOURCES= jcapi.c jccoefct.c jccolor.c jcdctmgr.c jchuff.c jcmainct.c \ - jcmarker.c jcmaster.c jcomapi.c jcparam.c jcprepct.c jcsample.c \ - jdapi.c jdatasrc.c jdatadst.c jdcoefct.c jdcolor.c jddctmgr.c \ - jdhuff.c jdmainct.c jdmarker.c jdmaster.c jdpostct.c jdsample.c \ - jerror.c jutils.c jfdctfst.c jfdctflt.c jfdctint.c jidctfst.c \ - jidctflt.c jidctint.c jidctred.c jquant1.c jquant2.c jdmerge.c \ - jmemmgr.c jmemansi.c jmemname.c jmemnobs.c jmemdos.c -# source files: cjpeg/djpeg applications, also rdjpgcom/wrjpgcom -APPSOURCES= cjpeg.c djpeg.c rdcolmap.c rdppm.c wrppm.c rdgif.c wrgif.c \ - rdtarga.c wrtarga.c rdbmp.c wrbmp.c rdrle.c wrrle.c rdjpgcom.c \ - wrjpgcom.c -SOURCES= $(LIBSOURCES) $(APPSOURCES) -# files included by source files -INCLUDES= jdct.h jerror.h jinclude.h jmemsys.h jmorecfg.h jpegint.h \ - jpeglib.h jversion.h cdjpeg.h cderror.h -# documentation, test, and support files -DOCS= README install.doc usage.doc cjpeg.1 djpeg.1 rdjpgcom.1 wrjpgcom.1 \ - example.c libjpeg.doc structure.doc coderules.doc filelist.doc \ - change.log -MKFILES= configure makefile.auto makefile.ansi makefile.unix makefile.manx \ - makefile.sas makcjpeg.st makdjpeg.st makljpeg.st makefile.bcc \ - makefile.mc6 makefile.dj makefile.mms makefile.vms makvms.opt -CONFIGFILES= jconfig.auto jconfig.manx jconfig.sas jconfig.st jconfig.bcc \ - jconfig.mc6 jconfig.dj jconfig.vms -OTHERFILES= jconfig.doc ckconfig.c ansi2knr.c ansi2knr.1 jmemdosa.asm -TESTFILES= testorig.jpg testimg.ppm testimg.gif testimg.jpg -DISTFILES= $(DOCS) $(MKFILES) $(CONFIGFILES) $(SOURCES) $(INCLUDES) \ - $(OTHERFILES) $(TESTFILES) -# library object files common to compression and decompression -COMOBJECTS= jcomapi.o jutils.o jerror.o jmemmgr.o $(SYSDEPMEM) -# compression library object files -CLIBOBJECTS= jcapi.o jcparam.o jdatadst.o jcmaster.o jcmarker.o jcmainct.o \ - jcprepct.o jccoefct.o jccolor.o jcsample.o jchuff.o jcdctmgr.o \ - jfdctfst.o jfdctflt.o jfdctint.o -# decompression library object files -DLIBOBJECTS= jdapi.o jdatasrc.o jdmaster.o jdmarker.o jdmainct.o jdcoefct.o \ - jdpostct.o jddctmgr.o jidctfst.o jidctflt.o jidctint.o jidctred.o \ - jdhuff.o jdsample.o jdcolor.o jquant1.o jquant2.o jdmerge.o -# These objectfiles are included in libjpeg.a -LIBOBJECTS= $(CLIBOBJECTS) $(DLIBOBJECTS) $(COMOBJECTS) -# object files for cjpeg and djpeg applications (excluding library files) -COBJECTS= cjpeg.o rdppm.o rdgif.o rdtarga.o rdrle.o rdbmp.o -DOBJECTS= djpeg.o wrppm.o wrgif.o wrtarga.o wrrle.o wrbmp.o rdcolmap.o - - -all: @ANSI2KNR@ libjpeg.a cjpeg djpeg rdjpgcom wrjpgcom - -# This rule causes ansi2knr to be invoked. -@ISANSICOM@.c.o: -@ISANSICOM@ ./ansi2knr $(srcdir)/$*.c T$*.c -@ISANSICOM@ $(CC) $(CFLAGS) -c T$*.c -@ISANSICOM@ $(RM) T$*.c $*.o -@ISANSICOM@ $(MV) T$*.o $*.o - -ansi2knr: ansi2knr.c - $(CC) $(CFLAGS) $(ANSI2KNRFLAGS) -o ansi2knr ansi2knr.c - -libjpeg.a: @ANSI2KNR@ $(LIBOBJECTS) - $(RM) libjpeg.a - $(AR) libjpeg.a $(LIBOBJECTS) - $(AR2) libjpeg.a - -cjpeg: $(COBJECTS) libjpeg.a - $(LN) $(LDFLAGS) -o cjpeg $(COBJECTS) libjpeg.a $(LDLIBS) - -djpeg: $(DOBJECTS) libjpeg.a - $(LN) $(LDFLAGS) -o djpeg $(DOBJECTS) libjpeg.a $(LDLIBS) - -rdjpgcom: rdjpgcom.o - $(LN) $(LDFLAGS) -o rdjpgcom rdjpgcom.o $(LDLIBS) - -wrjpgcom: wrjpgcom.o - $(LN) $(LDFLAGS) -o wrjpgcom wrjpgcom.o $(LDLIBS) - -jconfig.h: jconfig.doc - echo You must prepare a system-dependent jconfig.h file. - echo Please read the installation directions in install.doc. - exit 1 - -install: cjpeg djpeg rdjpgcom wrjpgcom - $(INSTALL_PROGRAM) cjpeg $(bindir)/$(binprefix)cjpeg - $(INSTALL_PROGRAM) djpeg $(bindir)/$(binprefix)djpeg - $(INSTALL_PROGRAM) rdjpgcom $(bindir)/$(binprefix)rdjpgcom - $(INSTALL_PROGRAM) wrjpgcom $(bindir)/$(binprefix)wrjpgcom - $(INSTALL_DATA) $(srcdir)/cjpeg.1 $(mandir)/$(manprefix)cjpeg.$(manext) - $(INSTALL_DATA) $(srcdir)/djpeg.1 $(mandir)/$(manprefix)djpeg.$(manext) - $(INSTALL_DATA) $(srcdir)/rdjpgcom.1 $(mandir)/$(manprefix)rdjpgcom.$(manext) - $(INSTALL_DATA) $(srcdir)/wrjpgcom.1 $(mandir)/$(manprefix)wrjpgcom.$(manext) - -install-lib: libjpeg.a jconfig.h - $(INSTALL_DATA) libjpeg.a $(libdir)/$(binprefix)libjpeg.a - $(INSTALL_DATA) jconfig.h $(includedir)/jconfig.h - $(INSTALL_DATA) $(srcdir)/jpeglib.h $(includedir)/jpeglib.h - $(INSTALL_DATA) $(srcdir)/jmorecfg.h $(includedir)/jmorecfg.h - $(INSTALL_DATA) $(srcdir)/jerror.h $(includedir)/jerror.h - -clean: - $(RM) *.o cjpeg djpeg libjpeg.a rdjpgcom wrjpgcom ansi2knr core testout.* - -distribute: - $(RM) jpegsrc.tar* - tar cvf jpegsrc.tar $(DISTFILES) - compress -v jpegsrc.tar - -test: cjpeg djpeg - $(RM) testout.ppm testout.gif testout.jpg - ./djpeg -dct int -ppm -outfile testout.ppm testorig.jpg - ./djpeg -dct int -gif -outfile testout.gif testorig.jpg - ./cjpeg -dct int -outfile testout.jpg testimg.ppm - cmp testimg.ppm testout.ppm - cmp testimg.gif testout.gif - cmp testimg.jpg testout.jpg - -check: test - -# GNU Make likes to know which target names are not really files to be made: -.PHONY: all install install-lib clean distribute test check - - -jcapi.o : jcapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jccoefct.o : jccoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jccolor.o : jccolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcdctmgr.o : jcdctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jchuff.o : jchuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcmainct.o : jcmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcmarker.o : jcmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcmaster.o : jcmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcomapi.o : jcomapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcparam.o : jcparam.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcprepct.o : jcprepct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcsample.o : jcsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdapi.o : jdapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdatasrc.o : jdatasrc.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h -jdatadst.o : jdatadst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h -jdcoefct.o : jdcoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdcolor.o : jdcolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jddctmgr.o : jddctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jdhuff.o : jdhuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmainct.o : jdmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmarker.o : jdmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmaster.o : jdmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdpostct.o : jdpostct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdsample.o : jdsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jerror.o : jerror.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jversion.h jerror.h -jutils.o : jutils.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jfdctfst.o : jfdctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jfdctflt.o : jfdctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jfdctint.o : jfdctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctfst.o : jidctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctflt.o : jidctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctint.o : jidctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctred.o : jidctred.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jquant1.o : jquant1.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jquant2.o : jquant2.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmerge.o : jdmerge.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jmemmgr.o : jmemmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemansi.o : jmemansi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemname.o : jmemname.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemnobs.o : jmemnobs.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemdos.o : jmemdos.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -cjpeg.o : cjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h -djpeg.o : djpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h -rdcolmap.o : rdcolmap.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdppm.o : rdppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrppm.o : wrppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdgif.o : rdgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrgif.o : wrgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdtarga.o : rdtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrtarga.o : wrtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdbmp.o : rdbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrbmp.o : wrbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdrle.o : rdrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrrle.o : wrrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdjpgcom.o : rdjpgcom.c jinclude.h jconfig.h -wrjpgcom.o : wrjpgcom.c jinclude.h jconfig.h diff --git a/jpeg/makefile.bcc b/jpeg/makefile.bcc deleted file mode 100644 index d76b229e08..0000000000 --- a/jpeg/makefile.bcc +++ /dev/null @@ -1,207 +0,0 @@ -# Makefile for Independent JPEG Group's software - -# This makefile is suitable for Borland C (Turbo C) on MS-DOS. -# It is set up for Borland C++, revision 3.0 or later. -# For older versions (pre-3.0), replace "-O2" with "-O -G -Z" in CFLAGS. -# If you have an even older version of Turbo C, you may be able to make it -# work by saying "CC= tcc" below. (Very early versions of Turbo C++, -# like 1.01, are so buggy that you may as well forget it.) -# Thanks to Tom Wright and Ge' Weijers for this file. - -# Read installation instructions before saying "make" !! - -# The name of your C compiler: -CC= bcc - -# You may need to adjust these cc options: -CFLAGS= -mm -w-par -O2 -# -mm selects medium memory model (near data, far code pointers) -# -w-par suppresses warnings about unused function parameters -# -O2 enables full code optimization (for pre-3.0 Borland C++, use -O -G -Z) -# Generally, we recommend defining any configuration symbols in jconfig.h, -# NOT via -D switches here. - -# Link-time cc options: -LDFLAGS= -mm -# memory model option here must match CFLAGS! - -# Put here the object file name for the correct system-dependent memory -# manager file. For DOS, we recommend jmemdos.c and jmemdosa.asm. -# If you change this, you'll need to modify the linker response file -# name list, below, by hand! -SYSDEPMEM= jmemdos.obj jmemdosa.obj - -# End of configurable options. - - -# source files: JPEG library proper -LIBSOURCES= jcapi.c jccoefct.c jccolor.c jcdctmgr.c jchuff.c jcmainct.c \ - jcmarker.c jcmaster.c jcomapi.c jcparam.c jcprepct.c jcsample.c \ - jdapi.c jdatasrc.c jdatadst.c jdcoefct.c jdcolor.c jddctmgr.c \ - jdhuff.c jdmainct.c jdmarker.c jdmaster.c jdpostct.c jdsample.c \ - jerror.c jutils.c jfdctfst.c jfdctflt.c jfdctint.c jidctfst.c \ - jidctflt.c jidctint.c jidctred.c jquant1.c jquant2.c jdmerge.c \ - jmemmgr.c jmemansi.c jmemname.c jmemnobs.c jmemdos.c -# source files: cjpeg/djpeg applications, also rdjpgcom/wrjpgcom -APPSOURCES= cjpeg.c djpeg.c rdcolmap.c rdppm.c wrppm.c rdgif.c wrgif.c \ - rdtarga.c wrtarga.c rdbmp.c wrbmp.c rdrle.c wrrle.c rdjpgcom.c \ - wrjpgcom.c -SOURCES= $(LIBSOURCES) $(APPSOURCES) -# files included by source files -INCLUDES= jdct.h jerror.h jinclude.h jmemsys.h jmorecfg.h jpegint.h \ - jpeglib.h jversion.h cdjpeg.h cderror.h -# documentation, test, and support files -DOCS= README install.doc usage.doc cjpeg.1 djpeg.1 rdjpgcom.1 wrjpgcom.1 \ - example.c libjpeg.doc structure.doc coderules.doc filelist.doc \ - change.log -MKFILES= configure makefile.auto makefile.ansi makefile.unix makefile.manx \ - makefile.sas makcjpeg.st makdjpeg.st makljpeg.st makefile.bcc \ - makefile.mc6 makefile.dj makefile.mms makefile.vms makvms.opt -CONFIGFILES= jconfig.auto jconfig.manx jconfig.sas jconfig.st jconfig.bcc \ - jconfig.mc6 jconfig.dj jconfig.vms -OTHERFILES= jconfig.doc ckconfig.c ansi2knr.c ansi2knr.1 jmemdosa.asm -TESTFILES= testorig.jpg testimg.ppm testimg.gif testimg.jpg -DISTFILES= $(DOCS) $(MKFILES) $(CONFIGFILES) $(SOURCES) $(INCLUDES) \ - $(OTHERFILES) $(TESTFILES) -# library object files common to compression and decompression -COMOBJECTS= jcomapi.obj jutils.obj jerror.obj jmemmgr.obj $(SYSDEPMEM) -# compression library object files -CLIBOBJECTS= jcapi.obj jcparam.obj jdatadst.obj jcmaster.obj jcmarker.obj \ - jcmainct.obj jcprepct.obj jccoefct.obj jccolor.obj jcsample.obj \ - jchuff.obj jcdctmgr.obj jfdctfst.obj jfdctflt.obj jfdctint.obj -# decompression library object files -DLIBOBJECTS= jdapi.obj jdatasrc.obj jdmaster.obj jdmarker.obj jdmainct.obj \ - jdcoefct.obj jdpostct.obj jddctmgr.obj jidctfst.obj jidctflt.obj \ - jidctint.obj jidctred.obj jdhuff.obj jdsample.obj jdcolor.obj \ - jquant1.obj jquant2.obj jdmerge.obj -# These objectfiles are included in libjpeg.lib -LIBOBJECTS= $(CLIBOBJECTS) $(DLIBOBJECTS) $(COMOBJECTS) -# object files for cjpeg and djpeg applications (excluding library files) -COBJECTS= cjpeg.obj rdppm.obj rdgif.obj rdtarga.obj rdrle.obj rdbmp.obj -DOBJECTS= djpeg.obj wrppm.obj wrgif.obj wrtarga.obj wrrle.obj wrbmp.obj \ - rdcolmap.obj - -# need linker response file because file list > 128 chars -RFILE= libjpeg.ans - - -all: libjpeg.lib cjpeg.exe djpeg.exe rdjpgcom.exe wrjpgcom.exe - -libjpeg.lib: $(LIBOBJECTS) $(RFILE) - del libjpeg.lib - tlib @$(RFILE) - -# linker response file for building libjpeg.lib -$(RFILE) : Makefile - del $(RFILE) - echo libjpeg.lib & >$(RFILE) - echo +jcapi.obj +jcparam.obj +jdatadst.obj +jcmaster.obj & >>$(RFILE) - echo +jcmarker.obj +jcmainct.obj +jcprepct.obj & >>$(RFILE) - echo +jccoefct.obj +jccolor.obj +jcsample.obj +jchuff.obj & >>$(RFILE) - echo +jcdctmgr.obj +jfdctfst.obj +jfdctflt.obj & >>$(RFILE) - echo +jfdctint.obj +jdapi.obj +jdatasrc.obj +jdmaster.obj & >>$(RFILE) - echo +jdmarker.obj +jdmainct.obj +jdcoefct.obj & >>$(RFILE) - echo +jdpostct.obj +jddctmgr.obj +jidctfst.obj & >>$(RFILE) - echo +jidctflt.obj +jidctint.obj +jidctred.obj +jdhuff.obj & >>$(RFILE) - echo +jdsample.obj +jdcolor.obj +jquant1.obj +jquant2.obj & >>$(RFILE) - echo +jdmerge.obj +jcomapi.obj +jutils.obj +jerror.obj & >>$(RFILE) - echo +jmemmgr.obj +jmemdos.obj +jmemdosa.obj >>$(RFILE) - -cjpeg.exe: $(COBJECTS) libjpeg.lib - $(CC) $(LDFLAGS) -ecjpeg.exe $(COBJECTS) libjpeg.lib - -djpeg.exe: $(DOBJECTS) libjpeg.lib - $(CC) $(LDFLAGS) -edjpeg.exe $(DOBJECTS) libjpeg.lib - -rdjpgcom.exe: rdjpgcom.c - $(CC) -ms -O rdjpgcom.c - -# wrjpgcom needs large model so it can malloc a 64K chunk -wrjpgcom.exe: wrjpgcom.c - $(CC) -ml -O wrjpgcom.c - -.c.obj: - $(CC) $(CFLAGS) -c $< - -jconfig.h: jconfig.doc - echo You must prepare a system-dependent jconfig.h file. - echo Please read the installation directions in install.doc. - exit 1 - -clean: - del *.obj - del libjpeg.lib - del cjpeg.exe - del djpeg.exe - del rdjpgcom.exe - del wrjpgcom.exe - del testout.* - -test: cjpeg.exe djpeg.exe - del testout.* - djpeg -dct int -ppm -outfile testout.ppm testorig.jpg - djpeg -dct int -gif -outfile testout.gif testorig.jpg - cjpeg -dct int -outfile testout.jpg testimg.ppm - fc /b testimg.ppm testout.ppm - fc /b testimg.gif testout.gif - fc /b testimg.jpg testout.jpg - - -jcapi.obj : jcapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jccoefct.obj : jccoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jccolor.obj : jccolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcdctmgr.obj : jcdctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jchuff.obj : jchuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcmainct.obj : jcmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcmarker.obj : jcmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcmaster.obj : jcmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcomapi.obj : jcomapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcparam.obj : jcparam.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcprepct.obj : jcprepct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcsample.obj : jcsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdapi.obj : jdapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdatasrc.obj : jdatasrc.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h -jdatadst.obj : jdatadst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h -jdcoefct.obj : jdcoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdcolor.obj : jdcolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jddctmgr.obj : jddctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jdhuff.obj : jdhuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmainct.obj : jdmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmarker.obj : jdmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmaster.obj : jdmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdpostct.obj : jdpostct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdsample.obj : jdsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jerror.obj : jerror.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jversion.h jerror.h -jutils.obj : jutils.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jfdctfst.obj : jfdctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jfdctflt.obj : jfdctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jfdctint.obj : jfdctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctfst.obj : jidctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctflt.obj : jidctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctint.obj : jidctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctred.obj : jidctred.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jquant1.obj : jquant1.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jquant2.obj : jquant2.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmerge.obj : jdmerge.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jmemmgr.obj : jmemmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemansi.obj : jmemansi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemname.obj : jmemname.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemnobs.obj : jmemnobs.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemdos.obj : jmemdos.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -cjpeg.obj : cjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h -djpeg.obj : djpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h -rdcolmap.obj : rdcolmap.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdppm.obj : rdppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrppm.obj : wrppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdgif.obj : rdgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrgif.obj : wrgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdtarga.obj : rdtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrtarga.obj : wrtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdbmp.obj : rdbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrbmp.obj : wrbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdrle.obj : rdrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrrle.obj : wrrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdjpgcom.obj : rdjpgcom.c jinclude.h jconfig.h -wrjpgcom.obj : wrjpgcom.c jinclude.h jconfig.h -jmemdosa.obj : jmemdosa.asm - tasm /mx jmemdosa.asm diff --git a/jpeg/makefile.dj b/jpeg/makefile.dj deleted file mode 100644 index 3988f80f57..0000000000 --- a/jpeg/makefile.dj +++ /dev/null @@ -1,200 +0,0 @@ -# Makefile for Independent JPEG Group's software - -# This makefile is for DJGPP (Delorie's GNU C port) on MS-DOS. -# Say "make exe" to get stub-style .exe's, or -# "make standalone" to get standalone .exe's. - -# Read installation instructions before saying "make" !! - -# To do "make standalone", you'll need to be sure this points to go32.exe: -GO32= d:/djgpp/bin/go32.exe - -# The name of your C compiler: -CC= gcc - -# You may need to adjust these cc options: -CFLAGS= -O2 -Wall -# Generally, we recommend defining any configuration symbols in jconfig.h, -# NOT via -D switches here. - -# Link-time cc options: -LDFLAGS= - -# To link any special libraries, add the necessary -l commands here. -LDLIBS= - -# Put here the object file name for the correct system-dependent memory -# manager file. For DJGPP this is usually jmemnobs.o, but you could -# use jmemname.o if you want to use named temp files instead of swap space. -SYSDEPMEM= jmemnobs.o - -# miscellaneous OS-dependent stuff -# linker -LN= $(CC) -# file deletion command -RM= del -# library (.a) file creation command -AR= ar rc -# second step in .a creation (use "touch" if not needed) -AR2= ranlib - -# End of configurable options. - - -# source files: JPEG library proper -LIBSOURCES= jcapi.c jccoefct.c jccolor.c jcdctmgr.c jchuff.c jcmainct.c \ - jcmarker.c jcmaster.c jcomapi.c jcparam.c jcprepct.c jcsample.c \ - jdapi.c jdatasrc.c jdatadst.c jdcoefct.c jdcolor.c jddctmgr.c \ - jdhuff.c jdmainct.c jdmarker.c jdmaster.c jdpostct.c jdsample.c \ - jerror.c jutils.c jfdctfst.c jfdctflt.c jfdctint.c jidctfst.c \ - jidctflt.c jidctint.c jidctred.c jquant1.c jquant2.c jdmerge.c \ - jmemmgr.c jmemansi.c jmemname.c jmemnobs.c jmemdos.c -# source files: cjpeg/djpeg applications, also rdjpgcom/wrjpgcom -APPSOURCES= cjpeg.c djpeg.c rdcolmap.c rdppm.c wrppm.c rdgif.c wrgif.c \ - rdtarga.c wrtarga.c rdbmp.c wrbmp.c rdrle.c wrrle.c rdjpgcom.c \ - wrjpgcom.c -SOURCES= $(LIBSOURCES) $(APPSOURCES) -# files included by source files -INCLUDES= jdct.h jerror.h jinclude.h jmemsys.h jmorecfg.h jpegint.h \ - jpeglib.h jversion.h cdjpeg.h cderror.h -# documentation, test, and support files -DOCS= README install.doc usage.doc cjpeg.1 djpeg.1 rdjpgcom.1 wrjpgcom.1 \ - example.c libjpeg.doc structure.doc coderules.doc filelist.doc \ - change.log -MKFILES= configure makefile.auto makefile.ansi makefile.unix makefile.manx \ - makefile.sas makcjpeg.st makdjpeg.st makljpeg.st makefile.bcc \ - makefile.mc6 makefile.dj makefile.mms makefile.vms makvms.opt -CONFIGFILES= jconfig.auto jconfig.manx jconfig.sas jconfig.st jconfig.bcc \ - jconfig.mc6 jconfig.dj jconfig.vms -OTHERFILES= jconfig.doc ckconfig.c ansi2knr.c ansi2knr.1 jmemdosa.asm -TESTFILES= testorig.jpg testimg.ppm testimg.gif testimg.jpg -DISTFILES= $(DOCS) $(MKFILES) $(CONFIGFILES) $(SOURCES) $(INCLUDES) \ - $(OTHERFILES) $(TESTFILES) -# library object files common to compression and decompression -COMOBJECTS= jcomapi.o jutils.o jerror.o jmemmgr.o $(SYSDEPMEM) -# compression library object files -CLIBOBJECTS= jcapi.o jcparam.o jdatadst.o jcmaster.o jcmarker.o jcmainct.o \ - jcprepct.o jccoefct.o jccolor.o jcsample.o jchuff.o jcdctmgr.o \ - jfdctfst.o jfdctflt.o jfdctint.o -# decompression library object files -DLIBOBJECTS= jdapi.o jdatasrc.o jdmaster.o jdmarker.o jdmainct.o jdcoefct.o \ - jdpostct.o jddctmgr.o jidctfst.o jidctflt.o jidctint.o jidctred.o \ - jdhuff.o jdsample.o jdcolor.o jquant1.o jquant2.o jdmerge.o -# These objectfiles are included in libjpeg.a -LIBOBJECTS= $(CLIBOBJECTS) $(DLIBOBJECTS) $(COMOBJECTS) -# object files for cjpeg and djpeg applications (excluding library files) -COBJECTS= cjpeg.o rdppm.o rdgif.o rdtarga.o rdrle.o rdbmp.o -DOBJECTS= djpeg.o wrppm.o wrgif.o wrtarga.o wrrle.o wrbmp.o rdcolmap.o - - -all: libjpeg.a cjpeg djpeg rdjpgcom wrjpgcom - -libjpeg.a: $(LIBOBJECTS) - $(RM) libjpeg.a - $(AR) libjpeg.a $(LIBOBJECTS) - $(AR2) libjpeg.a - -cjpeg: $(COBJECTS) libjpeg.a - $(LN) $(LDFLAGS) -o cjpeg $(COBJECTS) libjpeg.a $(LDLIBS) - -djpeg: $(DOBJECTS) libjpeg.a - $(LN) $(LDFLAGS) -o djpeg $(DOBJECTS) libjpeg.a $(LDLIBS) - -rdjpgcom: rdjpgcom.o - $(LN) $(LDFLAGS) -o rdjpgcom rdjpgcom.o $(LDLIBS) - -wrjpgcom: wrjpgcom.o - $(LN) $(LDFLAGS) -o wrjpgcom wrjpgcom.o $(LDLIBS) - -exe: cjpeg djpeg rdjpgcom wrjpgcom - coff2exe cjpeg - coff2exe djpeg - coff2exe rdjpgcom - coff2exe wrjpgcom - -standalone: cjpeg djpeg rdjpgcom wrjpgcom - coff2exe -s $(GO32) cjpeg - coff2exe -s $(GO32) djpeg - coff2exe -s $(GO32) rdjpgcom - coff2exe -s $(GO32) wrjpgcom - -jconfig.h: jconfig.doc - echo You must prepare a system-dependent jconfig.h file. - echo Please read the installation directions in install.doc. - exit 1 - -clean: - $(RM) *.o - $(RM) cjpeg - $(RM) djpeg - $(RM) rdjpgcom - $(RM) wrjpgcom - $(RM) libjpeg.a - $(RM) testout.* - -test: cjpeg djpeg - $(RM) testout.* - go32 djpeg -dct int -ppm -outfile testout.ppm testorig.jpg - go32 djpeg -dct int -gif -outfile testout.gif testorig.jpg - go32 cjpeg -dct int -outfile testout.jpg testimg.ppm - fc /b testimg.ppm testout.ppm - fc /b testimg.gif testout.gif - fc /b testimg.jpg testout.jpg - - -jcapi.o : jcapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jccoefct.o : jccoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jccolor.o : jccolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcdctmgr.o : jcdctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jchuff.o : jchuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcmainct.o : jcmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcmarker.o : jcmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcmaster.o : jcmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcomapi.o : jcomapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcparam.o : jcparam.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcprepct.o : jcprepct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcsample.o : jcsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdapi.o : jdapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdatasrc.o : jdatasrc.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h -jdatadst.o : jdatadst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h -jdcoefct.o : jdcoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdcolor.o : jdcolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jddctmgr.o : jddctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jdhuff.o : jdhuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmainct.o : jdmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmarker.o : jdmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmaster.o : jdmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdpostct.o : jdpostct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdsample.o : jdsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jerror.o : jerror.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jversion.h jerror.h -jutils.o : jutils.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jfdctfst.o : jfdctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jfdctflt.o : jfdctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jfdctint.o : jfdctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctfst.o : jidctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctflt.o : jidctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctint.o : jidctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctred.o : jidctred.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jquant1.o : jquant1.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jquant2.o : jquant2.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmerge.o : jdmerge.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jmemmgr.o : jmemmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemansi.o : jmemansi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemname.o : jmemname.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemnobs.o : jmemnobs.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemdos.o : jmemdos.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -cjpeg.o : cjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h -djpeg.o : djpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h -rdcolmap.o : rdcolmap.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdppm.o : rdppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrppm.o : wrppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdgif.o : rdgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrgif.o : wrgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdtarga.o : rdtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrtarga.o : wrtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdbmp.o : rdbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrbmp.o : wrbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdrle.o : rdrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrrle.o : wrrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdjpgcom.o : rdjpgcom.c jinclude.h jconfig.h -wrjpgcom.o : wrjpgcom.c jinclude.h jconfig.h diff --git a/jpeg/makefile.manx b/jpeg/makefile.manx deleted file mode 100644 index 28773b3871..0000000000 --- a/jpeg/makefile.manx +++ /dev/null @@ -1,178 +0,0 @@ -# Makefile for Independent JPEG Group's software - -# This makefile is for Amiga systems using Manx Aztec C ver 5.x. -# Thanks to D.J. James (djjames@cup.portal.com) for this version. - -# Read installation instructions before saying "make" !! - -# The name of your C compiler: -CC= cc - -# You may need to adjust these cc options: -# Uncomment for generic 68000 code (will work on any Amiga) -ARCHFLAGS= -sn - -# Uncomment for 68020/68030 code (faster, but won't run on 68000 CPU) -#ARCHFLAGS= -c2 - -CFLAGS= -MC -MD $(ARCHFLAGS) -spfam -r4 - -# Link-time cc options: -LDFLAGS= -g - -# To link any special libraries, add the necessary -l commands here. -LDLIBS= -lml -lcl - -# Put here the object file name for the correct system-dependent memory -# manager file. For Amiga we recommend jmemname.o. -SYSDEPMEM= jmemname.o - -# miscellaneous OS-dependent stuff -# linker -LN= ln -# file deletion command -RM= delete quiet -# library (.lib) file creation command -AR= lb - -# End of configurable options. - - -# source files: JPEG library proper -LIBSOURCES= jcapi.c jccoefct.c jccolor.c jcdctmgr.c jchuff.c jcmainct.c \ - jcmarker.c jcmaster.c jcomapi.c jcparam.c jcprepct.c jcsample.c \ - jdapi.c jdatasrc.c jdatadst.c jdcoefct.c jdcolor.c jddctmgr.c \ - jdhuff.c jdmainct.c jdmarker.c jdmaster.c jdpostct.c jdsample.c \ - jerror.c jutils.c jfdctfst.c jfdctflt.c jfdctint.c jidctfst.c \ - jidctflt.c jidctint.c jidctred.c jquant1.c jquant2.c jdmerge.c \ - jmemmgr.c jmemansi.c jmemname.c jmemnobs.c jmemdos.c -# source files: cjpeg/djpeg applications, also rdjpgcom/wrjpgcom -APPSOURCES= cjpeg.c djpeg.c rdcolmap.c rdppm.c wrppm.c rdgif.c wrgif.c \ - rdtarga.c wrtarga.c rdbmp.c wrbmp.c rdrle.c wrrle.c rdjpgcom.c \ - wrjpgcom.c -SOURCES= $(LIBSOURCES) $(APPSOURCES) -# files included by source files -INCLUDES= jdct.h jerror.h jinclude.h jmemsys.h jmorecfg.h jpegint.h \ - jpeglib.h jversion.h cdjpeg.h cderror.h -# documentation, test, and support files -DOCS= README install.doc usage.doc cjpeg.1 djpeg.1 rdjpgcom.1 wrjpgcom.1 \ - example.c libjpeg.doc structure.doc coderules.doc filelist.doc \ - change.log -MKFILES= configure makefile.auto makefile.ansi makefile.unix makefile.manx \ - makefile.sas makcjpeg.st makdjpeg.st makljpeg.st makefile.bcc \ - makefile.mc6 makefile.dj makefile.mms makefile.vms makvms.opt -CONFIGFILES= jconfig.auto jconfig.manx jconfig.sas jconfig.st jconfig.bcc \ - jconfig.mc6 jconfig.dj jconfig.vms -OTHERFILES= jconfig.doc ckconfig.c ansi2knr.c ansi2knr.1 jmemdosa.asm -TESTFILES= testorig.jpg testimg.ppm testimg.gif testimg.jpg -DISTFILES= $(DOCS) $(MKFILES) $(CONFIGFILES) $(SOURCES) $(INCLUDES) \ - $(OTHERFILES) $(TESTFILES) -# library object files common to compression and decompression -COMOBJECTS= jcomapi.o jutils.o jerror.o jmemmgr.o $(SYSDEPMEM) -# compression library object files -CLIBOBJECTS= jcapi.o jcparam.o jdatadst.o jcmaster.o jcmarker.o jcmainct.o \ - jcprepct.o jccoefct.o jccolor.o jcsample.o jchuff.o jcdctmgr.o \ - jfdctfst.o jfdctflt.o jfdctint.o -# decompression library object files -DLIBOBJECTS= jdapi.o jdatasrc.o jdmaster.o jdmarker.o jdmainct.o jdcoefct.o \ - jdpostct.o jddctmgr.o jidctfst.o jidctflt.o jidctint.o jidctred.o \ - jdhuff.o jdsample.o jdcolor.o jquant1.o jquant2.o jdmerge.o -# These objectfiles are included in libjpeg.lib -LIBOBJECTS= $(CLIBOBJECTS) $(DLIBOBJECTS) $(COMOBJECTS) -# object files for cjpeg and djpeg applications (excluding library files) -COBJECTS= cjpeg.o rdppm.o rdgif.o rdtarga.o rdrle.o rdbmp.o -DOBJECTS= djpeg.o wrppm.o wrgif.o wrtarga.o wrrle.o wrbmp.o rdcolmap.o - - -all: libjpeg.lib cjpeg djpeg rdjpgcom wrjpgcom - -libjpeg.lib: $(LIBOBJECTS) - -$(RM) libjpeg.lib - $(AR) libjpeg.lib $(LIBOBJECTS) - -cjpeg: $(COBJECTS) libjpeg.lib - $(LN) $(LDFLAGS) -o cjpeg $(COBJECTS) libjpeg.lib $(LDLIBS) - -djpeg: $(DOBJECTS) libjpeg.lib - $(LN) $(LDFLAGS) -o djpeg $(DOBJECTS) libjpeg.lib $(LDLIBS) - -rdjpgcom: rdjpgcom.o - $(LN) $(LDFLAGS) -o rdjpgcom rdjpgcom.o $(LDLIBS) - -wrjpgcom: wrjpgcom.o - $(LN) $(LDFLAGS) -o wrjpgcom wrjpgcom.o $(LDLIBS) - -jconfig.h: jconfig.doc - echo You must prepare a system-dependent jconfig.h file. - echo Please read the installation directions in install.doc. - exit 1 - -clean: - -$(RM) *.o cjpeg djpeg libjpeg.lib rdjpgcom wrjpgcom core testout.* - -test: cjpeg djpeg - -$(RM) testout.ppm testout.gif testout.jpg - djpeg -dct int -ppm -outfile testout.ppm testorig.jpg - djpeg -dct int -gif -outfile testout.gif testorig.jpg - cjpeg -dct int -outfile testout.jpg testimg.ppm - cmp testimg.ppm testout.ppm - cmp testimg.gif testout.gif - cmp testimg.jpg testout.jpg - - -jcapi.o : jcapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jccoefct.o : jccoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jccolor.o : jccolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcdctmgr.o : jcdctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jchuff.o : jchuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcmainct.o : jcmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcmarker.o : jcmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcmaster.o : jcmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcomapi.o : jcomapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcparam.o : jcparam.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcprepct.o : jcprepct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcsample.o : jcsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdapi.o : jdapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdatasrc.o : jdatasrc.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h -jdatadst.o : jdatadst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h -jdcoefct.o : jdcoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdcolor.o : jdcolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jddctmgr.o : jddctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jdhuff.o : jdhuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmainct.o : jdmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmarker.o : jdmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmaster.o : jdmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdpostct.o : jdpostct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdsample.o : jdsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jerror.o : jerror.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jversion.h jerror.h -jutils.o : jutils.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jfdctfst.o : jfdctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jfdctflt.o : jfdctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jfdctint.o : jfdctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctfst.o : jidctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctflt.o : jidctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctint.o : jidctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctred.o : jidctred.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jquant1.o : jquant1.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jquant2.o : jquant2.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmerge.o : jdmerge.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jmemmgr.o : jmemmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemansi.o : jmemansi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemname.o : jmemname.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemnobs.o : jmemnobs.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemdos.o : jmemdos.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -cjpeg.o : cjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h -djpeg.o : djpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h -rdcolmap.o : rdcolmap.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdppm.o : rdppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrppm.o : wrppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdgif.o : rdgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrgif.o : wrgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdtarga.o : rdtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrtarga.o : wrtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdbmp.o : rdbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrbmp.o : wrbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdrle.o : rdrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrrle.o : wrrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdjpgcom.o : rdjpgcom.c jinclude.h jconfig.h -wrjpgcom.o : wrjpgcom.c jinclude.h jconfig.h diff --git a/jpeg/makefile.mc6 b/jpeg/makefile.mc6 deleted file mode 100644 index 8b800b789b..0000000000 --- a/jpeg/makefile.mc6 +++ /dev/null @@ -1,196 +0,0 @@ -# Makefile for Independent JPEG Group's software - -# This makefile is for Microsoft C for MS-DOS, version 6.00A and up. -# Use NMAKE, not Microsoft's brain-damaged MAKE. -# Thanks to Alan Wright and Chris Turner of Olivetti Research Ltd. - -# Read installation instructions before saying "nmake" !! - -# You may need to adjust these compiler options: -CFLAGS = -AM -Oecigt -Gs -W3 -# -AM medium memory model (or use -AS for small model, if you remove features) -# -Oecigt -Gs maximum safe optimisation (-Ol has bugs in MSC 6.00A) -# -W3 warning level 3 -# You might also want to add -G2 if you have an 80286, etc. -# Generally, we recommend defining any configuration symbols in jconfig.h, -# NOT via -D switches here. - -# Put here the object file name for the correct system-dependent memory -# manager file. For DOS, we recommend jmemdos.c and jmemdosa.asm. -# If you change this, you'll need to modify the linker response file -# name list, below, by hand! -SYSDEPMEM= jmemdos.obj jmemdosa.obj - -# End of configurable options. - - -# source files: JPEG library proper -LIBSOURCES= jcapi.c jccoefct.c jccolor.c jcdctmgr.c jchuff.c jcmainct.c \ - jcmarker.c jcmaster.c jcomapi.c jcparam.c jcprepct.c jcsample.c \ - jdapi.c jdatasrc.c jdatadst.c jdcoefct.c jdcolor.c jddctmgr.c \ - jdhuff.c jdmainct.c jdmarker.c jdmaster.c jdpostct.c jdsample.c \ - jerror.c jutils.c jfdctfst.c jfdctflt.c jfdctint.c jidctfst.c \ - jidctflt.c jidctint.c jidctred.c jquant1.c jquant2.c jdmerge.c \ - jmemmgr.c jmemansi.c jmemname.c jmemnobs.c jmemdos.c -# source files: cjpeg/djpeg applications, also rdjpgcom/wrjpgcom -APPSOURCES= cjpeg.c djpeg.c rdcolmap.c rdppm.c wrppm.c rdgif.c wrgif.c \ - rdtarga.c wrtarga.c rdbmp.c wrbmp.c rdrle.c wrrle.c rdjpgcom.c \ - wrjpgcom.c -SOURCES= $(LIBSOURCES) $(APPSOURCES) -# files included by source files -INCLUDES= jdct.h jerror.h jinclude.h jmemsys.h jmorecfg.h jpegint.h \ - jpeglib.h jversion.h cdjpeg.h cderror.h -# documentation, test, and support files -DOCS= README install.doc usage.doc cjpeg.1 djpeg.1 rdjpgcom.1 wrjpgcom.1 \ - example.c libjpeg.doc structure.doc coderules.doc filelist.doc \ - change.log -MKFILES= configure makefile.auto makefile.ansi makefile.unix makefile.manx \ - makefile.sas makcjpeg.st makdjpeg.st makljpeg.st makefile.bcc \ - makefile.mc6 makefile.dj makefile.mms makefile.vms makvms.opt -CONFIGFILES= jconfig.auto jconfig.manx jconfig.sas jconfig.st jconfig.bcc \ - jconfig.mc6 jconfig.dj jconfig.vms -OTHERFILES= jconfig.doc ckconfig.c ansi2knr.c ansi2knr.1 jmemdosa.asm -TESTFILES= testorig.jpg testimg.ppm testimg.gif testimg.jpg -DISTFILES= $(DOCS) $(MKFILES) $(CONFIGFILES) $(SOURCES) $(INCLUDES) \ - $(OTHERFILES) $(TESTFILES) -# library object files common to compression and decompression -COMOBJECTS= jcomapi.obj jutils.obj jerror.obj jmemmgr.obj $(SYSDEPMEM) -# compression library object files -CLIBOBJECTS= jcapi.obj jcparam.obj jdatadst.obj jcmaster.obj jcmarker.obj \ - jcmainct.obj jcprepct.obj jccoefct.obj jccolor.obj jcsample.obj \ - jchuff.obj jcdctmgr.obj jfdctfst.obj jfdctflt.obj jfdctint.obj -# decompression library object files -DLIBOBJECTS= jdapi.obj jdatasrc.obj jdmaster.obj jdmarker.obj jdmainct.obj \ - jdcoefct.obj jdpostct.obj jddctmgr.obj jidctfst.obj jidctflt.obj \ - jidctint.obj jidctred.obj jdhuff.obj jdsample.obj jdcolor.obj \ - jquant1.obj jquant2.obj jdmerge.obj -# These objectfiles are included in libjpeg.lib -LIBOBJECTS= $(CLIBOBJECTS) $(DLIBOBJECTS) $(COMOBJECTS) -# object files for cjpeg and djpeg applications (excluding library files) -COBJECTS= cjpeg.obj rdppm.obj rdgif.obj rdtarga.obj rdrle.obj rdbmp.obj -DOBJECTS= djpeg.obj wrppm.obj wrgif.obj wrtarga.obj wrrle.obj wrbmp.obj \ - rdcolmap.obj - -# need linker response file because file list > 128 chars -RFILE = libjpeg.ans - - -all: libjpeg.lib cjpeg.exe djpeg.exe rdjpgcom.exe wrjpgcom.exe - -libjpeg.lib: $(LIBOBJECTS) $(RFILE) - del libjpeg.lib - lib @$(RFILE) ; - -# linker response file for building libjpeg.lib -$(RFILE) : Makefile - del $(RFILE) - echo libjpeg.lib >$(RFILE) -# silly want-to-create-it prompt: - echo y >>$(RFILE) - echo +jcapi.obj +jcparam.obj +jdatadst.obj +jcmaster.obj & >>$(RFILE) - echo +jcmarker.obj +jcmainct.obj +jcprepct.obj & >>$(RFILE) - echo +jccoefct.obj +jccolor.obj +jcsample.obj +jchuff.obj & >>$(RFILE) - echo +jcdctmgr.obj +jfdctfst.obj +jfdctflt.obj & >>$(RFILE) - echo +jfdctint.obj +jdapi.obj +jdatasrc.obj +jdmaster.obj & >>$(RFILE) - echo +jdmarker.obj +jdmainct.obj +jdcoefct.obj & >>$(RFILE) - echo +jdpostct.obj +jddctmgr.obj +jidctfst.obj & >>$(RFILE) - echo +jidctflt.obj +jidctint.obj +jidctred.obj +jdhuff.obj & >>$(RFILE) - echo +jdsample.obj +jdcolor.obj +jquant1.obj +jquant2.obj & >>$(RFILE) - echo +jdmerge.obj +jcomapi.obj +jutils.obj +jerror.obj & >>$(RFILE) - echo +jmemmgr.obj +jmemdos.obj +jmemdosa.obj >>$(RFILE) - -cjpeg.exe: $(COBJECTS) libjpeg.lib - link /STACK:4096 /EXEPACK $(COBJECTS), cjpeg.exe, , libjpeg.lib, ; - -djpeg.exe: $(DOBJECTS) libjpeg.lib - link /STACK:4096 /EXEPACK $(DOBJECTS), djpeg.exe, , libjpeg.lib, ; - -rdjpgcom.exe: rdjpgcom.c - $(CC) -AS -O -W3 rdjpgcom.c - -# wrjpgcom needs large model so it can malloc a 64K chunk -wrjpgcom.exe: wrjpgcom.c - $(CC) -AL -O -W3 wrjpgcom.c - -jconfig.h: jconfig.doc - echo You must prepare a system-dependent jconfig.h file. - echo Please read the installation directions in install.doc. - exit 1 - -clean: - del *.obj - del libjpeg.lib - del cjpeg.exe - del djpeg.exe - del rdjpgcom.exe - del wrjpgcom.exe - del testout.* - -test: cjpeg.exe djpeg.exe - del testout.* - djpeg -dct int -ppm -outfile testout.ppm testorig.jpg - djpeg -dct int -gif -outfile testout.gif testorig.jpg - cjpeg -dct int -outfile testout.jpg testimg.ppm - fc /b testimg.ppm testout.ppm - fc /b testimg.gif testout.gif - fc /b testimg.jpg testout.jpg - - -jcapi.obj : jcapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jccoefct.obj : jccoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jccolor.obj : jccolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcdctmgr.obj : jcdctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jchuff.obj : jchuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcmainct.obj : jcmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcmarker.obj : jcmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcmaster.obj : jcmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcomapi.obj : jcomapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcparam.obj : jcparam.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcprepct.obj : jcprepct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcsample.obj : jcsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdapi.obj : jdapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdatasrc.obj : jdatasrc.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h -jdatadst.obj : jdatadst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h -jdcoefct.obj : jdcoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdcolor.obj : jdcolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jddctmgr.obj : jddctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jdhuff.obj : jdhuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmainct.obj : jdmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmarker.obj : jdmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmaster.obj : jdmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdpostct.obj : jdpostct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdsample.obj : jdsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jerror.obj : jerror.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jversion.h jerror.h -jutils.obj : jutils.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jfdctfst.obj : jfdctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jfdctflt.obj : jfdctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jfdctint.obj : jfdctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctfst.obj : jidctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctflt.obj : jidctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctint.obj : jidctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctred.obj : jidctred.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jquant1.obj : jquant1.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jquant2.obj : jquant2.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmerge.obj : jdmerge.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jmemmgr.obj : jmemmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemansi.obj : jmemansi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemname.obj : jmemname.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemnobs.obj : jmemnobs.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemdos.obj : jmemdos.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -cjpeg.obj : cjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h -djpeg.obj : djpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h -rdcolmap.obj : rdcolmap.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdppm.obj : rdppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrppm.obj : wrppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdgif.obj : rdgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrgif.obj : wrgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdtarga.obj : rdtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrtarga.obj : wrtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdbmp.obj : rdbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrbmp.obj : wrbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdrle.obj : rdrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrrle.obj : wrrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdjpgcom.obj : rdjpgcom.c jinclude.h jconfig.h -wrjpgcom.obj : wrjpgcom.c jinclude.h jconfig.h -jmemdosa.obj : jmemdosa.asm - masm /mx $*; diff --git a/jpeg/makefile.mms b/jpeg/makefile.mms deleted file mode 100644 index 0866c607ab..0000000000 --- a/jpeg/makefile.mms +++ /dev/null @@ -1,181 +0,0 @@ -# Makefile for Independent JPEG Group's software - -# This makefile is for use with MMS on Digital VMS systems. -# Thanks to Rick Dyson (dyson@iowasp.physics.uiowa.edu) -# and Tim Bell (tbell@netcom.com) for their help. - -# Read installation instructions before saying "MMS" !! - -# You may need to adjust these cc options: -CFLAGS= $(CFLAGS) /NoDebug /Optimize -# Generally, we recommend defining any configuration symbols in jconfig.h, -# NOT via /Define switches here. -.ifdef ALPHA -OPT= -.else -OPT= ,Sys$Disk:[]MAKVMS.OPT/Option -.endif - -# Put here the object file name for the correct system-dependent memory -# manager file. For Unix this is usually jmemnobs.o, but you may want -# to use jmemansi.o or jmemname.o if you have limited swap space. -SYSDEPMEM= jmemnobs.obj - -# End of configurable options. - - -# source files: JPEG library proper -LIBSOURCES= jcapi.c jccoefct.c jccolor.c jcdctmgr.c jchuff.c jcmainct.c \ - jcmarker.c jcmaster.c jcomapi.c jcparam.c jcprepct.c jcsample.c \ - jdapi.c jdatasrc.c jdatadst.c jdcoefct.c jdcolor.c jddctmgr.c \ - jdhuff.c jdmainct.c jdmarker.c jdmaster.c jdpostct.c jdsample.c \ - jerror.c jutils.c jfdctfst.c jfdctflt.c jfdctint.c jidctfst.c \ - jidctflt.c jidctint.c jidctred.c jquant1.c jquant2.c jdmerge.c \ - jmemmgr.c jmemansi.c jmemname.c jmemnobs.c jmemdos.c -# source files: cjpeg/djpeg applications, also rdjpgcom/wrjpgcom -APPSOURCES= cjpeg.c djpeg.c rdcolmap.c rdppm.c wrppm.c rdgif.c wrgif.c \ - rdtarga.c wrtarga.c rdbmp.c wrbmp.c rdrle.c wrrle.c rdjpgcom.c \ - wrjpgcom.c -SOURCES= $(LIBSOURCES) $(APPSOURCES) -# files included by source files -INCLUDES= jdct.h jerror.h jinclude.h jmemsys.h jmorecfg.h jpegint.h \ - jpeglib.h jversion.h cdjpeg.h cderror.h -# documentation, test, and support files -DOCS= README install.doc usage.doc cjpeg.1 djpeg.1 rdjpgcom.1 wrjpgcom.1 \ - example.c libjpeg.doc structure.doc coderules.doc filelist.doc \ - change.log -MKFILES= configure makefile.auto makefile.ansi makefile.unix makefile.manx \ - makefile.sas makcjpeg.st makdjpeg.st makljpeg.st makefile.bcc \ - makefile.mc6 makefile.dj makefile.mms makefile.vms makvms.opt -CONFIGFILES= jconfig.auto jconfig.manx jconfig.sas jconfig.st jconfig.bcc \ - jconfig.mc6 jconfig.dj jconfig.vms -OTHERFILES= jconfig.doc ckconfig.c ansi2knr.c ansi2knr.1 jmemdosa.asm -TESTFILES= testorig.jpg testimg.ppm testimg.gif testimg.jpg -DISTFILES= $(DOCS) $(MKFILES) $(CONFIGFILES) $(SOURCES) $(INCLUDES) \ - $(OTHERFILES) $(TESTFILES) -# library object files common to compression and decompression -COMOBJECTS= jcomapi.obj jutils.obj jerror.obj jmemmgr.obj $(SYSDEPMEM) -# compression library object files -CLIBOBJECTS= jcapi.obj jcparam.obj jdatadst.obj jcmaster.obj jcmarker.obj \ - jcmainct.obj jcprepct.obj jccoefct.obj jccolor.obj jcsample.obj \ - jchuff.obj jcdctmgr.obj jfdctfst.obj jfdctflt.obj jfdctint.obj -# decompression library object files -DLIBOBJECTS= jdapi.obj jdatasrc.obj jdmaster.obj jdmarker.obj jdmainct.obj \ - jdcoefct.obj jdpostct.obj jddctmgr.obj jidctfst.obj jidctflt.obj \ - jidctint.obj jidctred.obj jdhuff.obj jdsample.obj jdcolor.obj \ - jquant1.obj jquant2.obj jdmerge.obj -# These objectfiles are included in libjpeg.olb -LIBOBJECTS= $(CLIBOBJECTS) $(DLIBOBJECTS) $(COMOBJECTS) -# object files for cjpeg and djpeg applications (excluding library files) -COBJECTS= cjpeg.obj rdppm.obj rdgif.obj rdtarga.obj rdrle.obj rdbmp.obj -DOBJECTS= djpeg.obj wrppm.obj wrgif.obj wrtarga.obj wrrle.obj wrbmp.obj \ - rdcolmap.obj -# objectfile lists with commas --- what a crock -COBJLIST= cjpeg.obj,rdppm.obj,rdgif.obj,rdtarga.obj,rdrle.obj,rdbmp.obj -DOBJLIST= djpeg.obj,wrppm.obj,wrgif.obj,wrtarga.obj,wrrle.obj,wrbmp.obj,\ - rdcolmap.obj -LIBOBJLIST= jcapi.obj,jcparam.obj,jdatadst.obj,jcmaster.obj,jcmarker.obj,\ - jcmainct.obj,jcprepct.obj,jccoefct.obj,jccolor.obj,jcsample.obj,\ - jchuff.obj,jcdctmgr.obj,jfdctfst.obj,jfdctflt.obj,jfdctint.obj,\ - jdapi.obj,jdatasrc.obj,jdmaster.obj,jdmarker.obj,jdmainct.obj,\ - jdcoefct.obj,jdpostct.obj,jddctmgr.obj,jidctfst.obj,jidctflt.obj,\ - jidctint.obj,jidctred.obj,jdhuff.obj,jdsample.obj,jdcolor.obj,\ - jquant1.obj,jquant2.obj,jdmerge.obj,jcomapi.obj,jutils.obj,\ - jerror.obj,jmemmgr.obj,$(SYSDEPMEM) - - -.first - @- Define /NoLog Sys Sys$Library - -ALL : libjpeg.olb cjpeg.exe djpeg.exe rdjpgcom.exe wrjpgcom.exe - @ Continue - -libjpeg.olb : $(LIBOBJECTS) - Library /Create libjpeg.olb $(LIBOBJLIST) - -cjpeg.exe : $(COBJECTS) libjpeg.olb - $(LINK) $(LFLAGS) /Executable = cjpeg.exe $(COBJLIST),libjpeg.olb/Library$(OPT) - -djpeg.exe : $(DOBJECTS) libjpeg.olb - $(LINK) $(LFLAGS) /Executable = djpeg.exe $(DOBJLIST),libjpeg.olb/Library$(OPT) - -rdjpgcom.exe : rdjpgcom.obj - $(LINK) $(LFLAGS) /Executable = rdjpgcom.exe rdjpgcom.obj$(OPT) - -wrjpgcom.exe : wrjpgcom.obj - $(LINK) $(LFLAGS) /Executable = wrjpgcom.exe wrjpgcom.obj$(OPT) - -jconfig.h : jconfig.vms - @- Copy jconfig.vms jconfig.h - -clean : - @- Set Protection = Owner:RWED *.*;-1 - @- Set Protection = Owner:RWED *.OBJ - - Purge /NoLog /NoConfirm *.* - - Delete /NoLog /NoConfirm *.OBJ; - -test : cjpeg.exe djpeg.exe - mcr sys$disk:[]djpeg -dct int -ppm -outfile testout.ppm testorig.jpg - mcr sys$disk:[]djpeg -dct int -gif -outfile testout.gif testorig.jpg - mcr sys$disk:[]cjpeg -dct int -outfile testout.jpg testimg.ppm - - Backup /Compare/Log testimg.ppm testout.ppm - - Backup /Compare/Log testimg.gif testout.gif - - Backup /Compare/Log testimg.jpg testout.jpg - - -jcapi.obj : jcapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jccoefct.obj : jccoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jccolor.obj : jccolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcdctmgr.obj : jcdctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jchuff.obj : jchuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcmainct.obj : jcmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcmarker.obj : jcmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcmaster.obj : jcmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcomapi.obj : jcomapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcparam.obj : jcparam.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcprepct.obj : jcprepct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcsample.obj : jcsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdapi.obj : jdapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdatasrc.obj : jdatasrc.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h -jdatadst.obj : jdatadst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h -jdcoefct.obj : jdcoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdcolor.obj : jdcolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jddctmgr.obj : jddctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jdhuff.obj : jdhuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmainct.obj : jdmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmarker.obj : jdmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmaster.obj : jdmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdpostct.obj : jdpostct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdsample.obj : jdsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jerror.obj : jerror.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jversion.h jerror.h -jutils.obj : jutils.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jfdctfst.obj : jfdctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jfdctflt.obj : jfdctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jfdctint.obj : jfdctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctfst.obj : jidctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctflt.obj : jidctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctint.obj : jidctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctred.obj : jidctred.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jquant1.obj : jquant1.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jquant2.obj : jquant2.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmerge.obj : jdmerge.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jmemmgr.obj : jmemmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemansi.obj : jmemansi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemname.obj : jmemname.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemnobs.obj : jmemnobs.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemdos.obj : jmemdos.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -cjpeg.obj : cjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h -djpeg.obj : djpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h -rdcolmap.obj : rdcolmap.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdppm.obj : rdppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrppm.obj : wrppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdgif.obj : rdgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrgif.obj : wrgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdtarga.obj : rdtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrtarga.obj : wrtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdbmp.obj : rdbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrbmp.obj : wrbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdrle.obj : rdrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrrle.obj : wrrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdjpgcom.obj : rdjpgcom.c jinclude.h jconfig.h -wrjpgcom.obj : wrjpgcom.c jinclude.h jconfig.h diff --git a/jpeg/makefile.sas b/jpeg/makefile.sas deleted file mode 100644 index f9b852c4e6..0000000000 --- a/jpeg/makefile.sas +++ /dev/null @@ -1,207 +0,0 @@ -# Makefile for Independent JPEG Group's software - -# This makefile is for Amiga systems using SAS C 6.0 and up. -# Thanks to Ed Hanway, Mark Rinfret, and Jim Zepeda. - -# Read installation instructions before saying "make" !! - -# The name of your C compiler: -CC= sc - -# You may need to adjust these cc options: -# Uncomment the following lines for generic 680x0 version -ARCHFLAGS= cpu=any -SUFFIX= - -# Uncomment the following lines for 68030-only version -#ARCHFLAGS= cpu=68030 -#SUFFIX=.030 - -CFLAGS= nostackcheck data=near parms=register optimize $(ARCHFLAGS) \ - ignore=104 ignore=304 ignore=306 -# ignore=104 disables warnings for mismatched const qualifiers -# ignore=304 disables warnings for variables being optimized out -# ignore=306 disables warnings for the inlining of functions -# Generally, we recommend defining any configuration symbols in jconfig.h, -# NOT via define switches here. - -# Link-time cc options: -LDFLAGS= SC SD ND BATCH - -# To link any special libraries, add the necessary commands here. -LDLIBS= LIB:scm.lib LIB:sc.lib - -# Put here the object file name for the correct system-dependent memory -# manager file. For Amiga we recommend jmemname.o. -SYSDEPMEM= jmemname.o - -# miscellaneous OS-dependent stuff -# linker -LN= slink -# file deletion command -RM= delete quiet -# library (.lib) file creation command -AR= oml - -# End of configurable options. - - -# source files: JPEG library proper -LIBSOURCES= jcapi.c jccoefct.c jccolor.c jcdctmgr.c jchuff.c jcmainct.c \ - jcmarker.c jcmaster.c jcomapi.c jcparam.c jcprepct.c jcsample.c \ - jdapi.c jdatasrc.c jdatadst.c jdcoefct.c jdcolor.c jddctmgr.c \ - jdhuff.c jdmainct.c jdmarker.c jdmaster.c jdpostct.c jdsample.c \ - jerror.c jutils.c jfdctfst.c jfdctflt.c jfdctint.c jidctfst.c \ - jidctflt.c jidctint.c jidctred.c jquant1.c jquant2.c jdmerge.c \ - jmemmgr.c jmemansi.c jmemname.c jmemnobs.c jmemdos.c -# source files: cjpeg/djpeg applications, also rdjpgcom/wrjpgcom -APPSOURCES= cjpeg.c djpeg.c rdcolmap.c rdppm.c wrppm.c rdgif.c wrgif.c \ - rdtarga.c wrtarga.c rdbmp.c wrbmp.c rdrle.c wrrle.c rdjpgcom.c \ - wrjpgcom.c -SOURCES= $(LIBSOURCES) $(APPSOURCES) -# files included by source files -INCLUDES= jdct.h jerror.h jinclude.h jmemsys.h jmorecfg.h jpegint.h \ - jpeglib.h jversion.h cdjpeg.h cderror.h -# documentation, test, and support files -DOCS= README install.doc usage.doc cjpeg.1 djpeg.1 rdjpgcom.1 wrjpgcom.1 \ - example.c libjpeg.doc structure.doc coderules.doc filelist.doc \ - change.log -MKFILES= configure makefile.auto makefile.ansi makefile.unix makefile.manx \ - makefile.sas makcjpeg.st makdjpeg.st makljpeg.st makefile.bcc \ - makefile.mc6 makefile.dj makefile.mms makefile.vms makvms.opt -CONFIGFILES= jconfig.auto jconfig.manx jconfig.sas jconfig.st jconfig.bcc \ - jconfig.mc6 jconfig.dj jconfig.vms -OTHERFILES= jconfig.doc ckconfig.c ansi2knr.c ansi2knr.1 jmemdosa.asm -TESTFILES= testorig.jpg testimg.ppm testimg.gif testimg.jpg -DISTFILES= $(DOCS) $(MKFILES) $(CONFIGFILES) $(SOURCES) $(INCLUDES) \ - $(OTHERFILES) $(TESTFILES) -# library object files common to compression and decompression -COMOBJECTS= jcomapi.o jutils.o jerror.o jmemmgr.o $(SYSDEPMEM) -# compression library object files -CLIBOBJECTS= jcapi.o jcparam.o jdatadst.o jcmaster.o jcmarker.o jcmainct.o \ - jcprepct.o jccoefct.o jccolor.o jcsample.o jchuff.o jcdctmgr.o \ - jfdctfst.o jfdctflt.o jfdctint.o -# decompression library object files -DLIBOBJECTS= jdapi.o jdatasrc.o jdmaster.o jdmarker.o jdmainct.o jdcoefct.o \ - jdpostct.o jddctmgr.o jidctfst.o jidctflt.o jidctint.o jidctred.o \ - jdhuff.o jdsample.o jdcolor.o jquant1.o jquant2.o jdmerge.o -# These objectfiles are included in libjpeg.lib -LIBOBJECTS= $(CLIBOBJECTS) $(DLIBOBJECTS) $(COMOBJECTS) -# object files for cjpeg and djpeg applications (excluding library files) -COBJECTS= cjpeg.o rdppm.o rdgif.o rdtarga.o rdrle.o rdbmp.o -DOBJECTS= djpeg.o wrppm.o wrgif.o wrtarga.o wrrle.o wrbmp.o rdcolmap.o - - -all: libjpeg.lib cjpeg$(SUFFIX) djpeg$(SUFFIX) rdjpgcom$(SUFFIX) wrjpgcom$(SUFFIX) - -libjpeg.lib: $(LIBOBJECTS) - -$(RM) libjpeg.lib - $(AR) libjpeg.lib r $(LIBOBJECTS) - -cjpeg$(SUFFIX): $(COBJECTS) libjpeg.lib - $(LN) <WITH < -$(LDFLAGS) -TO cjpeg$(SUFFIX) -FROM LIB:c.o $(COBJECTS) -LIB libjpeg.lib $(LDLIBS) -< - -djpeg$(SUFFIX): $(DOBJECTS) libjpeg.lib - $(LN) <WITH < -$(LDFLAGS) -TO djpeg$(SUFFIX) -FROM LIB:c.o $(DOBJECTS) -LIB libjpeg.lib $(LDLIBS) -< - -rdjpgcom$(SUFFIX): rdjpgcom.o - $(LN) <WITH < -$(LDFLAGS) -TO rdjpgcom$(SUFFIX) -FROM LIB:c.o rdjpgcom.o -LIB $(LDLIBS) -< - -wrjpgcom$(SUFFIX): wrjpgcom.o - $(LN) <WITH < -$(LDFLAGS) -TO wrjpgcom$(SUFFIX) -FROM LIB:c.o wrjpgcom.o -LIB $(LDLIBS) -< - -jconfig.h: jconfig.doc - echo You must prepare a system-dependent jconfig.h file. - echo Please read the installation directions in install.doc. - exit 1 - -clean: - -$(RM) *.o cjpeg djpeg cjpeg.030 djpeg.030 libjpeg.lib core testout.* - -$(RM) rdjpgcom wrjpgcom rdjpgcom.030 wrjpgcom.030 - -test: cjpeg djpeg - -$(RM) testout.ppm testout.gif testout.jpg - djpeg -dct int -ppm -outfile testout.ppm testorig.jpg - djpeg -dct int -gif -outfile testout.gif testorig.jpg - cjpeg -dct int -outfile testout.jpg testimg.ppm - cmp testimg.ppm testout.ppm - cmp testimg.gif testout.gif - cmp testimg.jpg testout.jpg - - -jcapi.o : jcapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jccoefct.o : jccoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jccolor.o : jccolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcdctmgr.o : jcdctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jchuff.o : jchuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcmainct.o : jcmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcmarker.o : jcmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcmaster.o : jcmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcomapi.o : jcomapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcparam.o : jcparam.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcprepct.o : jcprepct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcsample.o : jcsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdapi.o : jdapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdatasrc.o : jdatasrc.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h -jdatadst.o : jdatadst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h -jdcoefct.o : jdcoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdcolor.o : jdcolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jddctmgr.o : jddctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jdhuff.o : jdhuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmainct.o : jdmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmarker.o : jdmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmaster.o : jdmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdpostct.o : jdpostct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdsample.o : jdsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jerror.o : jerror.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jversion.h jerror.h -jutils.o : jutils.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jfdctfst.o : jfdctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jfdctflt.o : jfdctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jfdctint.o : jfdctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctfst.o : jidctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctflt.o : jidctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctint.o : jidctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctred.o : jidctred.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jquant1.o : jquant1.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jquant2.o : jquant2.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmerge.o : jdmerge.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jmemmgr.o : jmemmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemansi.o : jmemansi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemname.o : jmemname.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemnobs.o : jmemnobs.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemdos.o : jmemdos.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -cjpeg.o : cjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h -djpeg.o : djpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h -rdcolmap.o : rdcolmap.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdppm.o : rdppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrppm.o : wrppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdgif.o : rdgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrgif.o : wrgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdtarga.o : rdtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrtarga.o : wrtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdbmp.o : rdbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrbmp.o : wrbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdrle.o : rdrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrrle.o : wrrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdjpgcom.o : rdjpgcom.c jinclude.h jconfig.h -wrjpgcom.o : wrjpgcom.c jinclude.h jconfig.h diff --git a/jpeg/makefile.test b/jpeg/makefile.test deleted file mode 100644 index d220cbf125..0000000000 --- a/jpeg/makefile.test +++ /dev/null @@ -1,185 +0,0 @@ -# Makefile for Independent JPEG Group's software - -# Temporary makefile for working on prototype V5 code. - -# Check and edit these settings: - -# The name of your C compiler: -CC= cc -# If your compiler does not handle ANSI function prototypes, -# also uncomment the .c.o rule below. - -# You may need to adjust these cc options: -CFLAGS= -g -# In particular: -# Please turn on any extra-warning switches you have. -# For example, I normally use "-Wall" with gcc. -# Add -DBSD if on a pure BSD system (see jinclude.h). -# Add -DMEM_STATS to enable gathering of memory usage statistics. - -# Link-time cc options: -LDFLAGS= -g - -# To link any special libraries, add the necessary -l commands here. -LDLIBS= - -# miscellaneous OS-dependent stuff -# linker -LN= $(CC) -# file deletion command -RM= rm -f -# library (.a) file creation command -AR= ar rc -# second step in .a creation (use "touch" if not needed) -AR2= ranlib - -# End of settings. - - -# Put here the object file name for the correct system-dependent memory -# manager file. For Unix this is usually jmemnobs.o, but you may need -# to use jmemansi.o or jmemname.o if you have limited swap space. -# (For now, just use jmemnobs.o, 'cause the other options ain't ready.) -SYSDEPMEM= jmemnobs.o - - -# source files (independently compilable files) -SOURCES= cjpeg.c djpeg.c jdatasrc.c jdatadst.c \ - jcapi.c jccoefct.c jccolor.c jcdctmgr.c \ - jchuff.c jcmainct.c jcmarker.c jcmaster.c jcomapi.c jcparam.c \ - jcprepct.c jcsample.c jdapi.c jdcoefct.c jdcolor.c jddctmgr.c \ - jdhuff.c jdmainct.c jdmarker.c jdmaster.c \ - jdpostct.c jdsample.c jerror.c jfwddct.c jmemmgr.c jmemnobs.c \ - jrevdct.c jutils.c rdppm.c wrppm.c -# files included by source files -INCLUDES= cdjpeg.h jerror.h jinclude.h jmemsys.h jmorecfg.h cderror.h \ - jpegint.h jpeglib.h jversion.h -# documentation, test, and support files -DOCS= README install.doc usage.doc cjpeg.1 djpeg.1 example.c \ - libjpeg.doc structure.doc coderules.doc filelist.doc change.log -MAKEFILES= makefile.test -OTHERFILES= jconfig.doc ansi2knr.c ansi2knr.1 -TESTFILES= testorig.jpg testimg.ppm testimg.jpg -DISTFILES= $(DOCS) $(MAKEFILES) $(SOURCES) $(INCLUDES) \ - $(OTHERFILES) $(TESTFILES) -# objectfiles common to compression and decompression -COMOBJECTS= jcomapi.o jutils.o jerror.o jmemmgr.o $(SYSDEPMEM) -# compression objectfiles -CLIBOBJECTS= jcapi.o jcparam.o jdatadst.o jcmaster.o jcmarker.o \ - jcmainct.o jcprepct.o jccoefct.o \ - jccolor.o jcsample.o jchuff.o jcdctmgr.o jfwddct.o -# COBJECTS= cjpeg.o rdgif.o rdppm.o rdrle.o rdtarga.o -COBJECTS= cjpeg.o rdppm.o \ - $(CLIBOBJECTS) $(COMOBJECTS) -# decompression objectfiles -DLIBOBJECTS= jdapi.o jdatasrc.o jdmaster.o jdmarker.o \ - jdmainct.o jdcoefct.o jdpostct.o \ - jddctmgr.o jrevdct.o jdhuff.o jdsample.o jdcolor.o -# DOBJECTS= djpeg.o wrgif.o wrppm.o wrrle.o wrtarga.o -DOBJECTS= djpeg.o wrppm.o \ - $(DLIBOBJECTS) $(COMOBJECTS) -# These objectfiles are included in libjpeg.a -LIBOBJECTS= $(CLIBOBJECTS) $(DLIBOBJECTS) $(COMOBJECTS) - - -all: cjpeg djpeg -# By default, libjpeg.a is not built unless you explicitly request it. -# You can add libjpeg.a to the line above if you want it built by default. - - -# Remove the # marks to enable use of ansi2knr: - -#.c.o: -# ./ansi2knr $*.c tmpansi.c -# $(CC) $(CFLAGS) -c tmpansi.c -# mv tmpansi.o $*.o -# $(RM) tmpansi.c - -ansi2knr: ansi2knr.c - $(CC) $(CFLAGS) -o ansi2knr ansi2knr.c - - - -cjpeg: $(COBJECTS) - $(LN) $(LDFLAGS) -o cjpeg $(COBJECTS) $(LDLIBS) - -djpeg: $(DOBJECTS) - $(LN) $(LDFLAGS) -o djpeg $(DOBJECTS) $(LDLIBS) - - -# libjpeg.a is useful if you are including the JPEG software in a larger -# program; you'd include it in your link, rather than the individual modules. -libjpeg.a: $(LIBOBJECTS) - $(RM) libjpeg.a - $(AR) libjpeg.a $(LIBOBJECTS) - $(AR2) libjpeg.a - -clean: - $(RM) *.o cjpeg djpeg libjpeg.a ansi2knr core tmpansi.* testout.* - -test: cjpeg djpeg - $(RM) testout.ppm testout.jpg - ./djpeg testorig.jpg >testout.ppm - ./cjpeg testimg.ppm >testout.jpg - cmp testimg.ppm testout.ppm - cmp testimg.jpg testout.jpg - -depend: - gcc -MM $(SOURCES) >depend - -# Rest is from file 'depend' - -cjpeg.o : cjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h \ - cderror.h jversion.h -djpeg.o : djpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h \ - cderror.h jversion.h -jdatasrc.o : jdatasrc.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h -jdatadst.o : jdatadst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h -jcapi.o : jcapi.c jinclude.h jconfig.h jpegint.h jpeglib.h jmorecfg.h jerror.h -jccoefct.o : jccoefct.c jinclude.h jconfig.h jpegint.h jpeglib.h jmorecfg.h \ - jerror.h -jccolor.o : jccolor.c jinclude.h jconfig.h jpegint.h jpeglib.h jmorecfg.h jerror.h -jcdctmgr.o : jcdctmgr.c jinclude.h jconfig.h jpegint.h jpeglib.h jmorecfg.h \ - jerror.h -jchuff.o : jchuff.c jinclude.h jconfig.h jpegint.h jpeglib.h jmorecfg.h jerror.h -jcmainct.o : jcmainct.c jinclude.h jconfig.h jpegint.h jpeglib.h jmorecfg.h \ - jerror.h -jcmarker.o : jcmarker.c jinclude.h jconfig.h jpegint.h jpeglib.h jmorecfg.h \ - jerror.h -jcmaster.o : jcmaster.c jinclude.h jconfig.h jpegint.h jpeglib.h jmorecfg.h \ - jerror.h -jcomapi.o : jcomapi.c jinclude.h jconfig.h jpegint.h jpeglib.h jmorecfg.h jerror.h -jcparam.o : jcparam.c jinclude.h jconfig.h jpegint.h jpeglib.h jmorecfg.h jerror.h -jcprepct.o : jcprepct.c jinclude.h jconfig.h jpegint.h jpeglib.h jmorecfg.h \ - jerror.h -jcsample.o : jcsample.c jinclude.h jconfig.h jpegint.h jpeglib.h jmorecfg.h \ - jerror.h -jdapi.o : jdapi.c jinclude.h jconfig.h jpegint.h jpeglib.h jmorecfg.h jerror.h -jdcoefct.o : jdcoefct.c jinclude.h jconfig.h jpegint.h jpeglib.h jmorecfg.h \ - jerror.h -jdcolor.o : jdcolor.c jinclude.h jconfig.h jpegint.h jpeglib.h jmorecfg.h jerror.h -jddctmgr.o : jddctmgr.c jinclude.h jconfig.h jpegint.h jpeglib.h jmorecfg.h \ - jerror.h -jdhuff.o : jdhuff.c jinclude.h jconfig.h jpegint.h jpeglib.h jmorecfg.h jerror.h -jdmainct.o : jdmainct.c jinclude.h jconfig.h jpegint.h jpeglib.h jmorecfg.h \ - jerror.h -jdmarker.o : jdmarker.c jinclude.h jconfig.h jpegint.h jpeglib.h jmorecfg.h \ - jerror.h -jdmaster.o : jdmaster.c jinclude.h jconfig.h jpegint.h jpeglib.h jmorecfg.h \ - jerror.h -jdpostct.o : jdpostct.c jinclude.h jconfig.h jpegint.h jpeglib.h jmorecfg.h \ - jerror.h -jdsample.o : jdsample.c jinclude.h jconfig.h jpegint.h jpeglib.h jmorecfg.h \ - jerror.h -jerror.o : jerror.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jversion.h jerror.h -jfwddct.o : jfwddct.c jinclude.h jconfig.h jpegint.h jpeglib.h jmorecfg.h jerror.h -jmemmgr.o : jmemmgr.c jinclude.h jconfig.h jpegint.h jpeglib.h jmorecfg.h jerror.h \ - jmemsys.h -jmemnobs.o : jmemnobs.c jinclude.h jconfig.h jpegint.h jpeglib.h jmorecfg.h \ - jerror.h jmemsys.h -jrevdct.o : jrevdct.c jinclude.h jconfig.h jpegint.h jpeglib.h jmorecfg.h jerror.h -jutils.o : jutils.c jinclude.h jconfig.h jpegint.h jpeglib.h jmorecfg.h jerror.h -rdppm.o : rdppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h \ - cderror.h -wrppm.o : wrppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h \ - cderror.h diff --git a/jpeg/makefile.unix b/jpeg/makefile.unix deleted file mode 100644 index a2bfd554d7..0000000000 --- a/jpeg/makefile.unix +++ /dev/null @@ -1,192 +0,0 @@ -# Makefile for Independent JPEG Group's software - -# This makefile is suitable for Unix-like systems with non-ANSI compilers. -# If you have an ANSI compiler, makefile.ansi is a better starting point. - -# Read installation instructions before saying "make" !! - -# The name of your C compiler: -CC= cc - -# You may need to adjust these cc options: -CFLAGS= -O -# Generally, we recommend defining any configuration symbols in jconfig.h, -# NOT via -D switches here. -# However, any special defines for ansi2knr.c may be included here: -ANSI2KNRFLAGS= - -# Link-time cc options: -LDFLAGS= - -# To link any special libraries, add the necessary -l commands here. -LDLIBS= - -# Put here the object file name for the correct system-dependent memory -# manager file. For Unix this is usually jmemnobs.o, but you may want -# to use jmemansi.o or jmemname.o if you have limited swap space. -SYSDEPMEM= jmemnobs.o - -# miscellaneous OS-dependent stuff -# linker -LN= $(CC) -# file deletion command -RM= rm -f -# file rename command -MV= mv -# library (.a) file creation command -AR= ar rc -# second step in .a creation (use "touch" if not needed) -AR2= ranlib - -# End of configurable options. - - -# source files: JPEG library proper -LIBSOURCES= jcapi.c jccoefct.c jccolor.c jcdctmgr.c jchuff.c jcmainct.c \ - jcmarker.c jcmaster.c jcomapi.c jcparam.c jcprepct.c jcsample.c \ - jdapi.c jdatasrc.c jdatadst.c jdcoefct.c jdcolor.c jddctmgr.c \ - jdhuff.c jdmainct.c jdmarker.c jdmaster.c jdpostct.c jdsample.c \ - jerror.c jutils.c jfdctfst.c jfdctflt.c jfdctint.c jidctfst.c \ - jidctflt.c jidctint.c jidctred.c jquant1.c jquant2.c jdmerge.c \ - jmemmgr.c jmemansi.c jmemname.c jmemnobs.c jmemdos.c -# source files: cjpeg/djpeg applications, also rdjpgcom/wrjpgcom -APPSOURCES= cjpeg.c djpeg.c rdcolmap.c rdppm.c wrppm.c rdgif.c wrgif.c \ - rdtarga.c wrtarga.c rdbmp.c wrbmp.c rdrle.c wrrle.c rdjpgcom.c \ - wrjpgcom.c -SOURCES= $(LIBSOURCES) $(APPSOURCES) -# files included by source files -INCLUDES= jdct.h jerror.h jinclude.h jmemsys.h jmorecfg.h jpegint.h \ - jpeglib.h jversion.h cdjpeg.h cderror.h -# documentation, test, and support files -DOCS= README install.doc usage.doc cjpeg.1 djpeg.1 rdjpgcom.1 wrjpgcom.1 \ - example.c libjpeg.doc structure.doc coderules.doc filelist.doc \ - change.log -MKFILES= configure makefile.auto makefile.ansi makefile.unix makefile.manx \ - makefile.sas makcjpeg.st makdjpeg.st makljpeg.st makefile.bcc \ - makefile.mc6 makefile.dj makefile.mms makefile.vms makvms.opt -CONFIGFILES= jconfig.auto jconfig.manx jconfig.sas jconfig.st jconfig.bcc \ - jconfig.mc6 jconfig.dj jconfig.vms -OTHERFILES= jconfig.doc ckconfig.c ansi2knr.c ansi2knr.1 jmemdosa.asm -TESTFILES= testorig.jpg testimg.ppm testimg.gif testimg.jpg -DISTFILES= $(DOCS) $(MKFILES) $(CONFIGFILES) $(SOURCES) $(INCLUDES) \ - $(OTHERFILES) $(TESTFILES) -# library object files common to compression and decompression -COMOBJECTS= jcomapi.o jutils.o jerror.o jmemmgr.o $(SYSDEPMEM) -# compression library object files -CLIBOBJECTS= jcapi.o jcparam.o jdatadst.o jcmaster.o jcmarker.o jcmainct.o \ - jcprepct.o jccoefct.o jccolor.o jcsample.o jchuff.o jcdctmgr.o \ - jfdctfst.o jfdctflt.o jfdctint.o -# decompression library object files -DLIBOBJECTS= jdapi.o jdatasrc.o jdmaster.o jdmarker.o jdmainct.o jdcoefct.o \ - jdpostct.o jddctmgr.o jidctfst.o jidctflt.o jidctint.o jidctred.o \ - jdhuff.o jdsample.o jdcolor.o jquant1.o jquant2.o jdmerge.o -# These objectfiles are included in libjpeg.a -LIBOBJECTS= $(CLIBOBJECTS) $(DLIBOBJECTS) $(COMOBJECTS) -# object files for cjpeg and djpeg applications (excluding library files) -COBJECTS= cjpeg.o rdppm.o rdgif.o rdtarga.o rdrle.o rdbmp.o -DOBJECTS= djpeg.o wrppm.o wrgif.o wrtarga.o wrrle.o wrbmp.o rdcolmap.o - - -all: ansi2knr libjpeg.a cjpeg djpeg rdjpgcom wrjpgcom - -# This rule causes ansi2knr to be invoked. -.c.o: - ./ansi2knr $*.c T$*.c - $(CC) $(CFLAGS) -c T$*.c - $(RM) T$*.c $*.o - $(MV) T$*.o $*.o - -ansi2knr: ansi2knr.c - $(CC) $(CFLAGS) $(ANSI2KNRFLAGS) -o ansi2knr ansi2knr.c - -libjpeg.a: ansi2knr $(LIBOBJECTS) - $(RM) libjpeg.a - $(AR) libjpeg.a $(LIBOBJECTS) - $(AR2) libjpeg.a - -cjpeg: ansi2knr $(COBJECTS) libjpeg.a - $(LN) $(LDFLAGS) -o cjpeg $(COBJECTS) libjpeg.a $(LDLIBS) - -djpeg: ansi2knr $(DOBJECTS) libjpeg.a - $(LN) $(LDFLAGS) -o djpeg $(DOBJECTS) libjpeg.a $(LDLIBS) - -rdjpgcom: rdjpgcom.o - $(LN) $(LDFLAGS) -o rdjpgcom rdjpgcom.o $(LDLIBS) - -wrjpgcom: wrjpgcom.o - $(LN) $(LDFLAGS) -o wrjpgcom wrjpgcom.o $(LDLIBS) - -jconfig.h: jconfig.doc - echo You must prepare a system-dependent jconfig.h file. - echo Please read the installation directions in install.doc. - exit 1 - -clean: - $(RM) *.o cjpeg djpeg libjpeg.a rdjpgcom wrjpgcom ansi2knr core testout.* - -test: cjpeg djpeg - $(RM) testout.ppm testout.gif testout.jpg - ./djpeg -dct int -ppm -outfile testout.ppm testorig.jpg - ./djpeg -dct int -gif -outfile testout.gif testorig.jpg - ./cjpeg -dct int -outfile testout.jpg testimg.ppm - cmp testimg.ppm testout.ppm - cmp testimg.gif testout.gif - cmp testimg.jpg testout.jpg - - -jcapi.o : jcapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jccoefct.o : jccoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jccolor.o : jccolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcdctmgr.o : jcdctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jchuff.o : jchuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcmainct.o : jcmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcmarker.o : jcmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcmaster.o : jcmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcomapi.o : jcomapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcparam.o : jcparam.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcprepct.o : jcprepct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jcsample.o : jcsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdapi.o : jdapi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdatasrc.o : jdatasrc.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h -jdatadst.o : jdatadst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h -jdcoefct.o : jdcoefct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdcolor.o : jdcolor.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jddctmgr.o : jddctmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jdhuff.o : jdhuff.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmainct.o : jdmainct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmarker.o : jdmarker.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmaster.o : jdmaster.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdpostct.o : jdpostct.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdsample.o : jdsample.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jerror.o : jerror.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jversion.h jerror.h -jutils.o : jutils.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jfdctfst.o : jfdctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jfdctflt.o : jfdctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jfdctint.o : jfdctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctfst.o : jidctfst.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctflt.o : jidctflt.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctint.o : jidctint.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jidctred.o : jidctred.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jdct.h -jquant1.o : jquant1.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jquant2.o : jquant2.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jdmerge.o : jdmerge.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h -jmemmgr.o : jmemmgr.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemansi.o : jmemansi.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemname.o : jmemname.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemnobs.o : jmemnobs.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -jmemdos.o : jmemdos.c jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h jmemsys.h -cjpeg.o : cjpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h -djpeg.o : djpeg.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h jversion.h -rdcolmap.o : rdcolmap.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdppm.o : rdppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrppm.o : wrppm.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdgif.o : rdgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrgif.o : wrgif.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdtarga.o : rdtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrtarga.o : wrtarga.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdbmp.o : rdbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrbmp.o : wrbmp.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdrle.o : rdrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -wrrle.o : wrrle.c cdjpeg.h jinclude.h jconfig.h jpeglib.h jmorecfg.h jerror.h cderror.h -rdjpgcom.o : rdjpgcom.c jinclude.h jconfig.h -wrjpgcom.o : wrjpgcom.c jinclude.h jconfig.h diff --git a/jpeg/makefile.vms b/jpeg/makefile.vms deleted file mode 100644 index e654999593..0000000000 --- a/jpeg/makefile.vms +++ /dev/null @@ -1,104 +0,0 @@ -$! Makefile for Independent JPEG Group's software -$! -$! This is a command procedure for Digital VMS systems that do not have MMS. -$! It builds the JPEG software by brute force, recompiling everything whether -$! or not it is necessary. It then runs the basic self-test. -$! Thanks to Rick Dyson (dyson@iowasp.physics.uiowa.edu) -$! and Tim Bell (tbell@netcom.com) for their help. -$! -$! Read installation instructions before running this!! -$! -$ If F$GetSyi ("HW_MODEL") .gt. 1023 -$ Then -$ OPT = "" -$ Else -$ OPT = ",Sys$Disk:[]makvms.opt/Option" -$ EndIf -$ -$ DoCompile := CC /NoDebug /Optimize -$! -$ DoCompile jcapi.c -$ DoCompile jcparam.c -$ DoCompile jdatadst.c -$ DoCompile jcmaster.c -$ DoCompile jcmarker.c -$ DoCompile jcmainct.c -$ DoCompile jcprepct.c -$ DoCompile jccoefct.c -$ DoCompile jccolor.c -$ DoCompile jcsample.c -$ DoCompile jchuff.c -$ DoCompile jcdctmgr.c -$ DoCompile jfdctfst.c -$ DoCompile jfdctflt.c -$ DoCompile jfdctint.c -$ DoCompile jdapi.c -$ DoCompile jdatasrc.c -$ DoCompile jdmaster.c -$ DoCompile jdmarker.c -$ DoCompile jdmainct.c -$ DoCompile jdcoefct.c -$ DoCompile jdpostct.c -$ DoCompile jddctmgr.c -$ DoCompile jidctfst.c -$ DoCompile jidctflt.c -$ DoCompile jidctint.c -$ DoCompile jidctred.c -$ DoCompile jdhuff.c -$ DoCompile jdsample.c -$ DoCompile jdcolor.c -$ DoCompile jquant1.c -$ DoCompile jquant2.c -$ DoCompile jdmerge.c -$ DoCompile jcomapi.c -$ DoCompile jutils.c -$ DoCompile jerror.c -$ DoCompile jmemmgr.c -$ DoCompile jmemnobs.c -$! -$ Library /Create libjpeg.olb jcapi.obj,jcparam.obj,jdatadst.obj, - - jcmaster.obj,jcmarker.obj,jcmainct.obj,jcprepct.obj,jccoefct.obj, - - jccolor.obj,jcsample.obj,jchuff.obj,jcdctmgr.obj,jfdctfst.obj, - - jfdctflt.obj,jfdctint.obj,jdapi.obj,jdatasrc.obj,jdmaster.obj, - - jdmarker.obj,jdmainct.obj,jdcoefct.obj,jdpostct.obj,jddctmgr.obj, - - jidctfst.obj,jidctflt.obj,jidctint.obj,jidctred.obj,jdhuff.obj, - - jdsample.obj,jdcolor.obj,jquant1.obj,jquant2.obj,jdmerge.obj, - - jcomapi.obj,jutils.obj,jerror.obj,jmemmgr.obj,jmemnobs.obj -$! -$ DoCompile cjpeg.c -$ DoCompile rdppm.c -$ DoCompile rdgif.c -$ DoCompile rdtarga.c -$ DoCompile rdrle.c -$ DoCompile rdbmp.c -$! -$ Link /Executable = cjpeg.exe cjpeg.obj,rdppm.obj,rdgif.obj,rdtarga.obj, - - rdrle.obj,rdbmp.obj,libjpeg.olb/Library'OPT' -$! -$ DoCompile djpeg.c -$ DoCompile wrppm.c -$ DoCompile wrgif.c -$ DoCompile wrtarga.c -$ DoCompile wrrle.c -$ DoCompile wrbmp.c -$ DoCompile rdcolmap.c -$! -$ Link /Executable = djpeg.exe djpeg.obj,wrppm.obj,wrgif.obj,wrtarga.obj, - - wrrle.obj,wrbmp.obj,rdcolmap.obj,libjpeg.olb/Library'OPT' -$! -$ DoCompile rdjpgcom.c -$ Link /Executable = rdjpgcom.exe rdjpgcom.obj'OPT' -$! -$ DoCompile wrjpgcom.c -$ Link /Executable = wrjpgcom.exe wrjpgcom.obj'OPT' -$! -$! Run the self-test -$! -$ mcr sys$disk:[]djpeg -dct int -ppm -outfile testout.ppm testorig.jpg -$ mcr sys$disk:[]djpeg -dct int -gif -outfile testout.gif testorig.jpg -$ mcr sys$disk:[]cjpeg -dct int -outfile testout.jpg testimg.ppm -$ Backup /Compare/Log testimg.ppm testout.ppm -$ Backup /Compare/Log testimg.gif testout.gif -$ Backup /Compare/Log testimg.jpg testout.jpg -$! -$ Exit diff --git a/jpeg/makljpeg.st b/jpeg/makljpeg.st deleted file mode 100644 index a8dc41ae3d..0000000000 --- a/jpeg/makljpeg.st +++ /dev/null @@ -1,61 +0,0 @@ -; Project file for Independent JPEG Group's software -; -; This project file is for Atari ST/STE/TT systems using Pure C or Turbo C. -; Thanks to Frank Moehle (Frank.Moehle@arbi.informatik.uni-oldenburg.de) -; and to Dr. B. Setzepfandt (bernd@gina.uni-muenster.de). -; -; To use this file, rename it to LIBJPEG.PRJ. -; Read installation instructions before trying to make the program! -; -; -; * * * Output file * * * -libjpeg.lib -; -; * * * COMPILER OPTIONS * * * -.C[-P] ; absolute calls -.C[-M] ; and no string merging, folks -.C[-w-cln] ; no "constant is long" warnings -.C[-w-par] ; no "parameter xxxx unused" -.C[-w-rch] ; no "unreachable code" -.C[-wsig] ; warn if significant digits may be lost -.L[-J] ; link new Obj-format (so we get a library) -= -; * * * * List of modules * * * * -jcapi.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) -jccoefct.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) -jccolor.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) -jcdctmgr.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h,jdct.h) -jchuff.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) -jcmainct.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) -jcmarker.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) -jcmaster.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) -jcomapi.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) -jcparam.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) -jcprepct.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) -jcsample.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) -jdapi.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) -jdatasrc.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h) -jdatadst.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jerror.h) -jdcoefct.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) -jdcolor.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) -jddctmgr.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h,jdct.h) -jdhuff.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) -jdmainct.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) -jdmarker.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) -jdmaster.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) -jdpostct.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) -jdsample.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) -jerror.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jversion.h,jerror.h) -jutils.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) -jfdctfst.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h,jdct.h) -jfdctflt.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h,jdct.h) -jfdctint.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h,jdct.h) -jidctfst.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h,jdct.h) -jidctflt.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h,jdct.h) -jidctint.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h,jdct.h) -jidctred.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h,jdct.h) -jquant1.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) -jquant2.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) -jdmerge.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h) -jmemmgr.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h,jmemsys.h) -jmemansi.c (jinclude.h,jconfig.h,jpeglib.h,jmorecfg.h,jpegint.h,jerror.h,jmemsys.h) diff --git a/jpeg/makvms.opt b/jpeg/makvms.opt deleted file mode 100644 index 675e8fe98a..0000000000 --- a/jpeg/makvms.opt +++ /dev/null @@ -1,4 +0,0 @@ -! A pointer to the VAX/VMS C Run-Time Shareable Library. -! This file is needed by makefile.mms and makefile.vms, -! but only for the older VAX C compiler. DEC C does not need it. -Sys$Library:VAXCRTL.EXE /Share diff --git a/jpeg/rdbmp.c b/jpeg/rdbmp.c deleted file mode 100644 index f91849efc8..0000000000 --- a/jpeg/rdbmp.c +++ /dev/null @@ -1,421 +0,0 @@ -/* - * rdbmp.c - * - * Copyright (C) 1994, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains routines to read input images in Microsoft "BMP" - * format (MS Windows 3.x, OS/2 1.x, and OS/2 2.x flavors). - * Currently, only 8-bit and 24-bit images are supported, not 1-bit or - * 4-bit (feeding such low-depth images into JPEG would be silly anyway). - * Also, we don't support RLE-compressed files. - * - * These routines may need modification for non-Unix environments or - * specialized applications. As they stand, they assume input from - * an ordinary stdio stream. They further assume that reading begins - * at the start of the file; start_input may need work if the - * user interface has already read some data (e.g., to determine that - * the file is indeed BMP format). - * - * This code contributed by James Arthur Boucher. - */ - -#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ - -#ifdef BMP_SUPPORTED - - -/* Macros to deal with unsigned chars as efficiently as compiler allows */ - -#ifdef HAVE_UNSIGNED_CHAR -typedef unsigned char U_CHAR; -#define UCH(x) ((int) (x)) -#else /* !HAVE_UNSIGNED_CHAR */ -#ifdef CHAR_IS_UNSIGNED -typedef char U_CHAR; -#define UCH(x) ((int) (x)) -#else -typedef char U_CHAR; -#define UCH(x) ((int) (x) & 0xFF) -#endif -#endif /* HAVE_UNSIGNED_CHAR */ - - -#define ReadOK(file,buffer,len) (JFREAD(file,buffer,len) == ((size_t) (len))) - - -/* Private version of data source object */ - -typedef struct _bmp_source_struct * bmp_source_ptr; - -typedef struct _bmp_source_struct { - struct cjpeg_source_struct pub; /* public fields */ - - j_compress_ptr cinfo; /* back link saves passing separate parm */ - - JSAMPARRAY colormap; /* BMP colormap (converted to my format) */ - - jvirt_sarray_ptr whole_image; /* Needed to reverse row order */ - JDIMENSION source_row; /* Current source row number */ - JDIMENSION row_width; /* Physical width of scanlines in file */ - - int bits_per_pixel; /* remembers 8- or 24-bit format */ -} bmp_source_struct; - - -LOCAL int -read_byte (bmp_source_ptr sinfo) -/* Read next byte from BMP file */ -{ - register FILE *infile = sinfo->pub.input_file; - register int c; - - if ((c = getc(infile)) == EOF) - ERREXIT(sinfo->cinfo, JERR_INPUT_EOF); - return c; -} - - -LOCAL void -read_colormap (bmp_source_ptr sinfo, int cmaplen, int mapentrysize) -/* Read the colormap from a BMP file */ -{ - int i; - - switch (mapentrysize) { - case 3: - /* BGR format (occurs in OS/2 files) */ - for (i = 0; i < cmaplen; i++) { - sinfo->colormap[2][i] = (JSAMPLE) read_byte(sinfo); - sinfo->colormap[1][i] = (JSAMPLE) read_byte(sinfo); - sinfo->colormap[0][i] = (JSAMPLE) read_byte(sinfo); - } - break; - case 4: - /* BGR0 format (occurs in MS Windows files) */ - for (i = 0; i < cmaplen; i++) { - sinfo->colormap[2][i] = (JSAMPLE) read_byte(sinfo); - sinfo->colormap[1][i] = (JSAMPLE) read_byte(sinfo); - sinfo->colormap[0][i] = (JSAMPLE) read_byte(sinfo); - (void) read_byte(sinfo); - } - break; - default: - ERREXIT(sinfo->cinfo, JERR_BMP_BADCMAP); - break; - } -} - - -/* - * Read one row of pixels. - * The image has been read into the whole_image array, but is otherwise - * unprocessed. We must read it out in top-to-bottom row order, and if - * it is an 8-bit image, we must expand colormapped pixels to 24bit format. - */ - -METHODDEF JDIMENSION -get_8bit_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -/* This version is for reading 8-bit colormap indexes */ -{ - bmp_source_ptr source = (bmp_source_ptr) sinfo; - register JSAMPARRAY colormap = source->colormap; - JSAMPARRAY image_ptr; - register int t; - register JSAMPROW inptr, outptr; - register JDIMENSION col; - - /* Fetch next row from virtual array */ - source->source_row--; - image_ptr = (*cinfo->mem->access_virt_sarray) - ((j_common_ptr) cinfo, source->whole_image, source->source_row, FALSE); - - /* Expand the colormap indexes to real data */ - inptr = image_ptr[0]; - outptr = source->pub.buffer[0]; - for (col = cinfo->image_width; col > 0; col--) { - t = GETJSAMPLE(*inptr++); - *outptr++ = colormap[0][t]; /* can omit GETJSAMPLE() safely */ - *outptr++ = colormap[1][t]; - *outptr++ = colormap[2][t]; - } - - return 1; -} - - -METHODDEF JDIMENSION -get_24bit_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -/* This version is for reading 24-bit pixels */ -{ - bmp_source_ptr source = (bmp_source_ptr) sinfo; - JSAMPARRAY image_ptr; - register JSAMPROW inptr, outptr; - register JDIMENSION col; - - /* Fetch next row from virtual array */ - source->source_row--; - image_ptr = (*cinfo->mem->access_virt_sarray) - ((j_common_ptr) cinfo, source->whole_image, source->source_row, FALSE); - - /* Transfer data. Note source values are in BGR order - * (even though Microsoft's own documents say the opposite). - */ - inptr = image_ptr[0]; - outptr = source->pub.buffer[0]; - for (col = cinfo->image_width; col > 0; col--) { - outptr[2] = *inptr++; /* can omit GETJSAMPLE() safely */ - outptr[1] = *inptr++; - outptr[0] = *inptr++; - outptr += 3; - } - - return 1; -} - - -/* - * This method loads the image into whole_image during the first call on - * get_pixel_rows. The get_pixel_rows pointer is then adjusted to call - * get_8bit_row or get_24bit_row on subsequent calls. - */ - -METHODDEF JDIMENSION -preload_image (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -{ - bmp_source_ptr source = (bmp_source_ptr) sinfo; - register FILE *infile = source->pub.input_file; - register int c; - register JSAMPROW out_ptr; - JSAMPARRAY image_ptr; - JDIMENSION row, col; - cd_progress_ptr progress = (cd_progress_ptr) cinfo->progress; - - /* Read the data into a virtual array in input-file row order. */ - for (row = 0; row < cinfo->image_height; row++) { - if (progress != NULL) { - progress->pub.pass_counter = (long) row; - progress->pub.pass_limit = (long) cinfo->image_height; - (*progress->pub.progress_monitor) ((j_common_ptr) cinfo); - } - image_ptr = (*cinfo->mem->access_virt_sarray) - ((j_common_ptr) cinfo, source->whole_image, row, TRUE); - out_ptr = image_ptr[0]; - for (col = source->row_width; col > 0; col--) { - /* inline copy of read_byte() for speed */ - if ((c = getc(infile)) == EOF) - ERREXIT(cinfo, JERR_INPUT_EOF); - *out_ptr++ = (JSAMPLE) c; - } - } - if (progress != NULL) - progress->completed_extra_passes++; - - /* Set up to read from the virtual array in top-to-bottom order */ - switch (source->bits_per_pixel) { - case 8: - source->pub.get_pixel_rows = get_8bit_row; - break; - case 24: - source->pub.get_pixel_rows = get_24bit_row; - break; - default: - ERREXIT(cinfo, JERR_BMP_BADDEPTH); - } - source->source_row = cinfo->image_height; - - /* And read the first row */ - return (*source->pub.get_pixel_rows) (cinfo, sinfo); -} - - -/* - * Read the file header; return image size and component count. - */ - -METHODDEF void -start_input_bmp (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -{ - bmp_source_ptr source = (bmp_source_ptr) sinfo; - U_CHAR bmpfileheader[14]; - U_CHAR bmpinfoheader[64]; -#define GET_2B(array,offset) ((unsigned int) UCH(array[offset]) + \ - (((unsigned int) UCH(array[offset+1])) << 8)) -#define GET_4B(array,offset) ((INT32) UCH(array[offset]) + \ - (((INT32) UCH(array[offset+1])) << 8) + \ - (((INT32) UCH(array[offset+2])) << 16) + \ - (((INT32) UCH(array[offset+3])) << 24)) - INT32 headerSize; - INT32 biWidth = 0; /* initialize to avoid compiler warning */ - INT32 biHeight = 0; - unsigned int biPlanes; - INT32 biCompression; - INT32 biXPelsPerMeter,biYPelsPerMeter; - INT32 biClrUsed = 0; - int mapentrysize = 0; /* 0 indicates no colormap */ - JDIMENSION row_width; - - /* Read and verify the bitmap file header */ - if (! ReadOK(source->pub.input_file, bmpfileheader, 14)) - ERREXIT(cinfo, JERR_INPUT_EOF); - if (GET_2B(bmpfileheader,0) != 0x4D42) /* 'BM' */ - ERREXIT(cinfo, JERR_BMP_NOT); - /* We ignore the remaining fileheader fields */ - - /* The infoheader might be 12 bytes (OS/2 1.x), 40 bytes (Windows), - * or 64 bytes (OS/2 2.x). Check the first 4 bytes to find out which. - */ - if (! ReadOK(source->pub.input_file, bmpinfoheader, 4)) - ERREXIT(cinfo, JERR_INPUT_EOF); - headerSize = (INT32) GET_4B(bmpinfoheader,0); - if (headerSize < 12 || headerSize > 64) - ERREXIT(cinfo, JERR_BMP_BADHEADER); - if (! ReadOK(source->pub.input_file, bmpinfoheader+4, headerSize-4)) - ERREXIT(cinfo, JERR_INPUT_EOF); - - switch ((int) headerSize) { - case 12: - /* Decode OS/2 1.x header (Microsoft calls this a BITMAPCOREHEADER) */ - biWidth = (INT32) GET_2B(bmpinfoheader,4); - biHeight = (INT32) GET_2B(bmpinfoheader,6); - biPlanes = GET_2B(bmpinfoheader,8); - source->bits_per_pixel = (int) GET_2B(bmpinfoheader,10); - - switch (source->bits_per_pixel) { - case 8: /* colormapped image */ - mapentrysize = 3; /* OS/2 uses RGBTRIPLE colormap */ - TRACEMS2(cinfo, 1, JTRC_BMP_OS2_MAPPED, (int) biWidth, (int) biHeight); - break; - case 24: /* RGB image */ - TRACEMS2(cinfo, 1, JTRC_BMP_OS2, (int) biWidth, (int) biHeight); - break; - default: - ERREXIT(cinfo, JERR_BMP_BADDEPTH); - break; - } - if (biPlanes != 1) - ERREXIT(cinfo, JERR_BMP_BADPLANES); - break; - case 40: - case 64: - /* Decode Windows 3.x header (Microsoft calls this a BITMAPINFOHEADER) */ - /* or OS/2 2.x header, which has additional fields that we ignore */ - biWidth = GET_4B(bmpinfoheader,4); - biHeight = GET_4B(bmpinfoheader,8); - biPlanes = GET_2B(bmpinfoheader,12); - source->bits_per_pixel = (int) GET_2B(bmpinfoheader,14); - biCompression = GET_4B(bmpinfoheader,16); - biXPelsPerMeter = GET_4B(bmpinfoheader,24); - biYPelsPerMeter = GET_4B(bmpinfoheader,28); - biClrUsed = GET_4B(bmpinfoheader,32); - /* biSizeImage, biClrImportant fields are ignored */ - - switch (source->bits_per_pixel) { - case 8: /* colormapped image */ - mapentrysize = 4; /* Windows uses RGBQUAD colormap */ - TRACEMS2(cinfo, 1, JTRC_BMP_MAPPED, (int) biWidth, (int) biHeight); - break; - case 24: /* RGB image */ - TRACEMS2(cinfo, 1, JTRC_BMP, (int) biWidth, (int) biHeight); - break; - default: - ERREXIT(cinfo, JERR_BMP_BADDEPTH); - break; - } - if (biPlanes != 1) - ERREXIT(cinfo, JERR_BMP_BADPLANES); - if (biCompression != 0) - ERREXIT(cinfo, JERR_BMP_COMPRESSED); - - if (biXPelsPerMeter > 0 && biYPelsPerMeter > 0) { - /* Set JFIF density parameters from the BMP data */ - cinfo->X_density = (UINT16) (biXPelsPerMeter/100); /* 100 cm per meter */ - cinfo->Y_density = (UINT16) (biYPelsPerMeter/100); - cinfo->density_unit = 2; /* dots/cm */ - } - break; - default: - ERREXIT(cinfo, JERR_BMP_BADHEADER); - break; - } - - /* Read the colormap, if any */ - if (mapentrysize > 0) { - if (biClrUsed <= 0) - biClrUsed = 256; /* assume it's 256 */ - else if (biClrUsed > 256) - ERREXIT(cinfo, JERR_BMP_BADCMAP); - /* Allocate space to store the colormap */ - source->colormap = (*cinfo->mem->alloc_sarray) - ((j_common_ptr) cinfo, JPOOL_IMAGE, - (JDIMENSION) biClrUsed, (JDIMENSION) 3); - /* and read it from the file */ - read_colormap(source, (int) biClrUsed, mapentrysize); - } - - /* Compute row width in file, including padding to 4-byte boundary */ - if (source->bits_per_pixel == 24) - row_width = (JDIMENSION) (biWidth * 3); - else - row_width = (JDIMENSION) biWidth; - while ((row_width & 3) != 0) row_width++; - source->row_width = row_width; - - /* Allocate space for inversion array, prepare for preload pass */ - source->whole_image = (*cinfo->mem->request_virt_sarray) - ((j_common_ptr) cinfo, JPOOL_IMAGE, - row_width, (JDIMENSION) biHeight, (JDIMENSION) 1); - source->pub.get_pixel_rows = preload_image; - if (cinfo->progress != NULL) { - cd_progress_ptr progress = (cd_progress_ptr) cinfo->progress; - progress->total_extra_passes++; /* count file input as separate pass */ - } - - /* Allocate one-row buffer for returned data */ - source->pub.buffer = (*cinfo->mem->alloc_sarray) - ((j_common_ptr) cinfo, JPOOL_IMAGE, - (JDIMENSION) (biWidth * 3), (JDIMENSION) 1); - source->pub.buffer_height = 1; - - cinfo->in_color_space = JCS_RGB; - cinfo->input_components = 3; - cinfo->data_precision = 8; - cinfo->image_width = (JDIMENSION) biWidth; - cinfo->image_height = (JDIMENSION) biHeight; -} - - -/* - * Finish up at the end of the file. - */ - -METHODDEF void -finish_input_bmp (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -{ - /* no work */ -} - - -/* - * The module selection routine for BMP format input. - */ - -GLOBAL cjpeg_source_ptr -jinit_read_bmp (j_compress_ptr cinfo) -{ - bmp_source_ptr source; - - /* Create module interface object */ - source = (bmp_source_ptr) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - SIZEOF(bmp_source_struct)); - source->cinfo = cinfo; /* make back link for subroutines */ - /* Fill in method ptrs, except get_pixel_rows which start_input sets */ - source->pub.start_input = start_input_bmp; - source->pub.finish_input = finish_input_bmp; - - return (cjpeg_source_ptr) source; -} - -#endif /* BMP_SUPPORTED */ diff --git a/jpeg/rdcolmap.c b/jpeg/rdcolmap.c deleted file mode 100644 index 54f5c1de0d..0000000000 --- a/jpeg/rdcolmap.c +++ /dev/null @@ -1,253 +0,0 @@ -/* - * rdcolmap.c - * - * Copyright (C) 1994, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file implements djpeg's "-map file" switch. It reads a source image - * and constructs a colormap to be supplied to the JPEG decompressor. - * - * Currently, these file formats are supported for the map file: - * GIF: the contents of the GIF's global colormap are used. - * PPM (either text or raw flavor): the entire file is read and - * each unique pixel value is entered in the map. - * Note that reading a large PPM file will be horrendously slow. - * Typically, a PPM-format map file should contain just one pixel - * of each desired color. Such a file can be extracted from an - * ordinary image PPM file with ppmtomap(1). - * - * Rescaling a PPM that has a maxval unequal to MAXJSAMPLE is not - * currently implemented. - */ - -#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ - -#ifdef QUANT_2PASS_SUPPORTED /* otherwise can't quantize to supplied map */ - -/* Portions of this code are based on the PBMPLUS library, which is: -** -** Copyright (C) 1988 by Jef Poskanzer. -** -** Permission to use, copy, modify, and distribute this software and its -** documentation for any purpose and without fee is hereby granted, provided -** that the above copyright notice appear in all copies and that both that -** copyright notice and this permission notice appear in supporting -** documentation. This software is provided "as is" without express or -** implied warranty. -*/ - - -/* - * Add a (potentially) new color to the color map. - */ - -LOCAL void -add_map_entry (j_decompress_ptr cinfo, int R, int G, int B) -{ - JSAMPROW colormap0 = cinfo->colormap[0]; - JSAMPROW colormap1 = cinfo->colormap[1]; - JSAMPROW colormap2 = cinfo->colormap[2]; - int ncolors = cinfo->actual_number_of_colors; - int index; - - /* Check for duplicate color. */ - for (index = 0; index < ncolors; index++) { - if (GETJSAMPLE(colormap0[index]) == R && - GETJSAMPLE(colormap1[index]) == G && - GETJSAMPLE(colormap2[index]) == B) - return; /* color is already in map */ - } - - /* Check for map overflow. */ - if (ncolors >= (MAXJSAMPLE+1)) - ERREXIT1(cinfo, JERR_QUANT_MANY_COLORS, (MAXJSAMPLE+1)); - - /* OK, add color to map. */ - colormap0[ncolors] = (JSAMPLE) R; - colormap1[ncolors] = (JSAMPLE) G; - colormap2[ncolors] = (JSAMPLE) B; - cinfo->actual_number_of_colors++; -} - - -/* - * Extract color map from a GIF file. - */ - -LOCAL void -read_gif_map (j_decompress_ptr cinfo, FILE * infile) -{ - int header[13]; - int i, colormaplen; - int R, G, B; - - /* Initial 'G' has already been read by read_color_map */ - /* Read the rest of the GIF header and logical screen descriptor */ - for (i = 1; i < 13; i++) { - if ((header[i] = getc(infile)) == EOF) - ERREXIT(cinfo, JERR_BAD_CMAP_FILE); - } - - /* Verify GIF Header */ - if (header[1] != 'I' || header[2] != 'F') - ERREXIT(cinfo, JERR_BAD_CMAP_FILE); - - /* There must be a global color map. */ - if ((header[10] & 0x80) == 0) - ERREXIT(cinfo, JERR_BAD_CMAP_FILE); - - /* OK, fetch it. */ - colormaplen = 2 << (header[10] & 0x07); - - for (i = 0; i < colormaplen; i++) { - R = getc(infile); - G = getc(infile); - B = getc(infile); - if (R == EOF || G == EOF || B == EOF) - ERREXIT(cinfo, JERR_BAD_CMAP_FILE); - add_map_entry(cinfo, - R << (BITS_IN_JSAMPLE-8), - G << (BITS_IN_JSAMPLE-8), - B << (BITS_IN_JSAMPLE-8)); - } -} - - -/* Support routines for reading PPM */ - - -LOCAL int -pbm_getc (FILE * infile) -/* Read next char, skipping over any comments */ -/* A comment/newline sequence is returned as a newline */ -{ - register int ch; - - ch = getc(infile); - if (ch == '#') { - do { - ch = getc(infile); - } while (ch != '\n' && ch != EOF); - } - return ch; -} - - -LOCAL unsigned int -read_pbm_integer (j_decompress_ptr cinfo, FILE * infile) -/* Read an unsigned decimal integer from the PPM file */ -/* Swallows one trailing character after the integer */ -/* Note that on a 16-bit-int machine, only values up to 64k can be read. */ -/* This should not be a problem in practice. */ -{ - register int ch; - register unsigned int val; - - /* Skip any leading whitespace */ - do { - ch = pbm_getc(infile); - if (ch == EOF) - ERREXIT(cinfo, JERR_BAD_CMAP_FILE); - } while (ch == ' ' || ch == '\t' || ch == '\n' || ch == '\r'); - - if (ch < '0' || ch > '9') - ERREXIT(cinfo, JERR_PPM_NONNUMERIC); - - val = ch - '0'; - while ((ch = pbm_getc(infile)) >= '0' && ch <= '9') { - val *= 10; - val += ch - '0'; - } - return val; -} - - -/* - * Extract color map from a PPM file. - */ - -LOCAL void -read_ppm_map (j_decompress_ptr cinfo, FILE * infile) -{ - int c; - unsigned int w, h, maxval, row, col; - int R, G, B; - - /* Initial 'P' has already been read by read_color_map */ - c = getc(infile); /* save format discriminator for a sec */ - - /* while we fetch the remaining header info */ - w = read_pbm_integer(cinfo, infile); - h = read_pbm_integer(cinfo, infile); - maxval = read_pbm_integer(cinfo, infile); - - if (w <= 0 || h <= 0 || maxval <= 0) /* error check */ - ERREXIT(cinfo, JERR_BAD_CMAP_FILE); - - /* For now, we don't support rescaling from an unusual maxval. */ - if (maxval != (unsigned int) MAXJSAMPLE) - ERREXIT(cinfo, JERR_BAD_CMAP_FILE); - - switch (c) { - case '3': /* it's a text-format PPM file */ - for (row = 0; row < h; row++) { - for (col = 0; col < w; col++) { - R = read_pbm_integer(cinfo, infile); - G = read_pbm_integer(cinfo, infile); - B = read_pbm_integer(cinfo, infile); - add_map_entry(cinfo, R, G, B); - } - } - break; - - case '6': /* it's a raw-format PPM file */ - for (row = 0; row < h; row++) { - for (col = 0; col < w; col++) { - R = pbm_getc(infile); - G = pbm_getc(infile); - B = pbm_getc(infile); - if (R == EOF || G == EOF || B == EOF) - ERREXIT(cinfo, JERR_BAD_CMAP_FILE); - add_map_entry(cinfo, R, G, B); - } - } - break; - - default: - ERREXIT(cinfo, JERR_BAD_CMAP_FILE); - break; - } -} - - -/* - * Main entry point from djpeg.c. - * Input: opened input file (from file name argument on command line). - * Output: colormap and actual_number_of_colors fields are set in cinfo. - */ - -GLOBAL void -read_color_map (j_decompress_ptr cinfo, FILE * infile) -{ - /* Allocate space for a color map of maximum supported size. */ - cinfo->colormap = (*cinfo->mem->alloc_sarray) - ((j_common_ptr) cinfo, JPOOL_IMAGE, - (JDIMENSION) (MAXJSAMPLE+1), (JDIMENSION) 3); - cinfo->actual_number_of_colors = 0; /* initialize map to empty */ - - /* Read first byte to determine file format */ - switch (getc(infile)) { - case 'G': - read_gif_map(cinfo, infile); - break; - case 'P': - read_ppm_map(cinfo, infile); - break; - default: - ERREXIT(cinfo, JERR_BAD_CMAP_FILE); - break; - } -} - -#endif /* QUANT_2PASS_SUPPORTED */ diff --git a/jpeg/rdgif.c b/jpeg/rdgif.c deleted file mode 100644 index b88660244f..0000000000 --- a/jpeg/rdgif.c +++ /dev/null @@ -1,671 +0,0 @@ -/* - * rdgif.c - * - * Copyright (C) 1991-1994, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains routines to read input images in GIF format. - * - * These routines may need modification for non-Unix environments or - * specialized applications. As they stand, they assume input from - * an ordinary stdio stream. They further assume that reading begins - * at the start of the file; input_init may need work if the - * user interface has already read some data (e.g., to determine that - * the file is indeed GIF format). - */ - -/* - * This code is loosely based on giftoppm from the PBMPLUS distribution - * of Feb. 1991. That file contains the following copyright notice: - * +-------------------------------------------------------------------+ - * | Copyright 1990, David Koblas. | - * | Permission to use, copy, modify, and distribute this software | - * | and its documentation for any purpose and without fee is hereby | - * | granted, provided that the above copyright notice appear in all | - * | copies and that both that copyright notice and this permission | - * | notice appear in supporting documentation. This software is | - * | provided "as is" without express or implied warranty. | - * +-------------------------------------------------------------------+ - * - * We are also required to state that - * "The Graphics Interchange Format(c) is the Copyright property of - * CompuServe Incorporated. GIF(sm) is a Service Mark property of - * CompuServe Incorporated." - */ - -#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ - -#ifdef GIF_SUPPORTED - - -#define MAXCOLORMAPSIZE 256 /* max # of colors in a GIF colormap */ -#define NUMCOLORS 3 /* # of colors */ -#define CM_RED 0 /* color component numbers */ -#define CM_GREEN 1 -#define CM_BLUE 2 - -#define MAX_LZW_BITS 12 /* maximum LZW code size */ -#define LZW_TABLE_SIZE (1<<MAX_LZW_BITS) /* # of possible LZW symbols */ - -/* Macros for extracting header data --- note we assume chars may be signed */ - -#define LM_to_uint(a,b) ((((b)&0xFF) << 8) | ((a)&0xFF)) - -#define BitSet(byte, bit) ((byte) & (bit)) -#define INTERLACE 0x40 /* mask for bit signifying interlaced image */ -#define COLORMAPFLAG 0x80 /* mask for bit signifying colormap presence */ - -#define ReadOK(file,buffer,len) (JFREAD(file,buffer,len) == ((size_t) (len))) - -/* LZW decompression tables look like this: - * symbol_head[K] = prefix symbol of any LZW symbol K (0..LZW_TABLE_SIZE-1) - * symbol_tail[K] = suffix byte of any LZW symbol K (0..LZW_TABLE_SIZE-1) - * Note that entries 0..end_code of the above tables are not used, - * since those symbols represent raw bytes or special codes. - * - * The stack represents the not-yet-used expansion of the last LZW symbol. - * In the worst case, a symbol could expand to as many bytes as there are - * LZW symbols, so we allocate LZW_TABLE_SIZE bytes for the stack. - * (This is conservative since that number includes the raw-byte symbols.) - * - * The tables are allocated from FAR heap space since they would use up - * rather a lot of the near data space in a PC. - */ - - -/* Private version of data source object */ - -typedef struct { - struct cjpeg_source_struct pub; /* public fields */ - - j_compress_ptr cinfo; /* back link saves passing separate parm */ - - JSAMPARRAY colormap; /* GIF colormap (converted to my format) */ - - /* State for GetCode and LZWReadByte */ - char code_buf[256+4]; /* current input data block */ - int last_byte; /* # of bytes in code_buf */ - int last_bit; /* # of bits in code_buf */ - int cur_bit; /* next bit index to read */ - boolean out_of_blocks; /* TRUE if hit terminator data block */ - - int input_code_size; /* codesize given in GIF file */ - int clear_code,end_code; /* values for Clear and End codes */ - - int code_size; /* current actual code size */ - int limit_code; /* 2^code_size */ - int max_code; /* first unused code value */ - boolean first_time; /* flags first call to LZWReadByte */ - - /* Private state for LZWReadByte */ - int oldcode; /* previous LZW symbol */ - int firstcode; /* first byte of oldcode's expansion */ - - /* LZW symbol table and expansion stack */ - UINT16 FAR *symbol_head; /* => table of prefix symbols */ - UINT8 FAR *symbol_tail; /* => table of suffix bytes */ - UINT8 FAR *symbol_stack; /* => stack for symbol expansions */ - UINT8 FAR *sp; /* stack pointer */ - - /* State for interlaced image processing */ - boolean is_interlaced; /* TRUE if have interlaced image */ - jvirt_sarray_ptr interlaced_image; /* full image in interlaced order */ - JDIMENSION cur_row_number; /* need to know actual row number */ - JDIMENSION pass2_offset; /* # of pixel rows in pass 1 */ - JDIMENSION pass3_offset; /* # of pixel rows in passes 1&2 */ - JDIMENSION pass4_offset; /* # of pixel rows in passes 1,2,3 */ -} gif_source_struct; - -typedef gif_source_struct * gif_source_ptr; - - -/* Forward declarations */ -METHODDEF JDIMENSION get_pixel_rows - JPP((j_compress_ptr cinfo, cjpeg_source_ptr sinfo)); -METHODDEF JDIMENSION load_interlaced_image - JPP((j_compress_ptr cinfo, cjpeg_source_ptr sinfo)); -METHODDEF JDIMENSION get_interlaced_row - JPP((j_compress_ptr cinfo, cjpeg_source_ptr sinfo)); - - -LOCAL int -ReadByte (gif_source_ptr sinfo) -/* Read next byte from GIF file */ -{ - register FILE * infile = sinfo->pub.input_file; - int c; - - if ((c = getc(infile)) == EOF) - ERREXIT(sinfo->cinfo, JERR_INPUT_EOF); - return c; -} - - -LOCAL int -GetDataBlock (gif_source_ptr sinfo, char *buf) -/* Read a GIF data block, which has a leading count byte */ -/* A zero-length block marks the end of a data block sequence */ -{ - int count; - - count = ReadByte(sinfo); - if (count > 0) { - if (! ReadOK(sinfo->pub.input_file, buf, count)) - ERREXIT(sinfo->cinfo, JERR_INPUT_EOF); - } - return count; -} - - -LOCAL void -SkipDataBlocks (gif_source_ptr sinfo) -/* Skip a series of data blocks, until a block terminator is found */ -{ - char buf[256]; - - while (GetDataBlock(sinfo, buf) > 0) - /* skip */; -} - - -LOCAL void -ReInitLZW (gif_source_ptr sinfo) -/* (Re)initialize LZW state; shared code for startup and Clear processing */ -{ - sinfo->code_size = sinfo->input_code_size + 1; - sinfo->limit_code = sinfo->clear_code << 1; /* 2^code_size */ - sinfo->max_code = sinfo->clear_code + 2; /* first unused code value */ - sinfo->sp = sinfo->symbol_stack; /* init stack to empty */ -} - - -LOCAL void -InitLZWCode (gif_source_ptr sinfo) -/* Initialize for a series of LZWReadByte (and hence GetCode) calls */ -{ - /* GetCode initialization */ - sinfo->last_byte = 2; /* make safe to "recopy last two bytes" */ - sinfo->last_bit = 0; /* nothing in the buffer */ - sinfo->cur_bit = 0; /* force buffer load on first call */ - sinfo->out_of_blocks = FALSE; - - /* LZWReadByte initialization: */ - /* compute special code values (note that these do not change later) */ - sinfo->clear_code = 1 << sinfo->input_code_size; - sinfo->end_code = sinfo->clear_code + 1; - sinfo->first_time = TRUE; - ReInitLZW(sinfo); -} - - -LOCAL int -GetCode (gif_source_ptr sinfo) -/* Fetch the next code_size bits from the GIF data */ -/* We assume code_size is less than 16 */ -{ - register INT32 accum; - int offs, ret, count; - - while ( (sinfo->cur_bit + sinfo->code_size) > sinfo->last_bit) { - /* Time to reload the buffer */ - if (sinfo->out_of_blocks) { - WARNMS(sinfo->cinfo, JWRN_GIF_NOMOREDATA); - return sinfo->end_code; /* fake something useful */ - } - /* preserve last two bytes of what we have -- assume code_size <= 16 */ - sinfo->code_buf[0] = sinfo->code_buf[sinfo->last_byte-2]; - sinfo->code_buf[1] = sinfo->code_buf[sinfo->last_byte-1]; - /* Load more bytes; set flag if we reach the terminator block */ - if ((count = GetDataBlock(sinfo, &sinfo->code_buf[2])) == 0) { - sinfo->out_of_blocks = TRUE; - WARNMS(sinfo->cinfo, JWRN_GIF_NOMOREDATA); - return sinfo->end_code; /* fake something useful */ - } - /* Reset counters */ - sinfo->cur_bit = (sinfo->cur_bit - sinfo->last_bit) + 16; - sinfo->last_byte = 2 + count; - sinfo->last_bit = sinfo->last_byte * 8; - } - - /* Form up next 24 bits in accum */ - offs = sinfo->cur_bit >> 3; /* byte containing cur_bit */ -#ifdef CHAR_IS_UNSIGNED - accum = sinfo->code_buf[offs+2]; - accum <<= 8; - accum |= sinfo->code_buf[offs+1]; - accum <<= 8; - accum |= sinfo->code_buf[offs]; -#else - accum = sinfo->code_buf[offs+2] & 0xFF; - accum <<= 8; - accum |= sinfo->code_buf[offs+1] & 0xFF; - accum <<= 8; - accum |= sinfo->code_buf[offs] & 0xFF; -#endif - - /* Right-align cur_bit in accum, then mask off desired number of bits */ - accum >>= (sinfo->cur_bit & 7); - ret = ((int) accum) & ((1 << sinfo->code_size) - 1); - - sinfo->cur_bit += sinfo->code_size; - return ret; -} - - -LOCAL int -LZWReadByte (gif_source_ptr sinfo) -/* Read an LZW-compressed byte */ -{ - register int code; /* current working code */ - int incode; /* saves actual input code */ - - /* First time, just eat the expected Clear code(s) and return next code, */ - /* which is expected to be a raw byte. */ - if (sinfo->first_time) { - sinfo->first_time = FALSE; - code = sinfo->clear_code; /* enables sharing code with Clear case */ - } else { - - /* If any codes are stacked from a previously read symbol, return them */ - if (sinfo->sp > sinfo->symbol_stack) - return (int) *(-- sinfo->sp); - - /* Time to read a new symbol */ - code = GetCode(sinfo); - - } - - if (code == sinfo->clear_code) { - /* Reinit state, swallow any extra Clear codes, and */ - /* return next code, which is expected to be a raw byte. */ - ReInitLZW(sinfo); - do { - code = GetCode(sinfo); - } while (code == sinfo->clear_code); - if (code > sinfo->clear_code) { /* make sure it is a raw byte */ - WARNMS(sinfo->cinfo, JWRN_GIF_BADDATA); - code = 0; /* use something valid */ - } - /* make firstcode, oldcode valid! */ - sinfo->firstcode = sinfo->oldcode = code; - return code; - } - - if (code == sinfo->end_code) { - /* Skip the rest of the image, unless GetCode already read terminator */ - if (! sinfo->out_of_blocks) { - SkipDataBlocks(sinfo); - sinfo->out_of_blocks = TRUE; - } - /* Complain that there's not enough data */ - WARNMS(sinfo->cinfo, JWRN_GIF_ENDCODE); - /* Pad data with 0's */ - return 0; /* fake something usable */ - } - - /* Got normal raw byte or LZW symbol */ - incode = code; /* save for a moment */ - - if (code >= sinfo->max_code) { /* special case for not-yet-defined symbol */ - /* code == max_code is OK; anything bigger is bad data */ - if (code > sinfo->max_code) { - WARNMS(sinfo->cinfo, JWRN_GIF_BADDATA); - incode = 0; /* prevent creation of loops in symbol table */ - } - /* this symbol will be defined as oldcode/firstcode */ - *(sinfo->sp++) = (UINT8) sinfo->firstcode; - code = sinfo->oldcode; - } - - /* If it's a symbol, expand it into the stack */ - while (code >= sinfo->clear_code) { - *(sinfo->sp++) = sinfo->symbol_tail[code]; /* tail is a byte value */ - code = sinfo->symbol_head[code]; /* head is another LZW symbol */ - } - /* At this point code just represents a raw byte */ - sinfo->firstcode = code; /* save for possible future use */ - - /* If there's room in table, */ - if ((code = sinfo->max_code) < LZW_TABLE_SIZE) { - /* Define a new symbol = prev sym + head of this sym's expansion */ - sinfo->symbol_head[code] = sinfo->oldcode; - sinfo->symbol_tail[code] = (UINT8) sinfo->firstcode; - sinfo->max_code++; - /* Is it time to increase code_size? */ - if ((sinfo->max_code >= sinfo->limit_code) && - (sinfo->code_size < MAX_LZW_BITS)) { - sinfo->code_size++; - sinfo->limit_code <<= 1; /* keep equal to 2^code_size */ - } - } - - sinfo->oldcode = incode; /* save last input symbol for future use */ - return sinfo->firstcode; /* return first byte of symbol's expansion */ -} - - -LOCAL void -ReadColorMap (gif_source_ptr sinfo, int cmaplen, JSAMPARRAY cmap) -/* Read a GIF colormap */ -{ - int i; - - for (i = 0; i < cmaplen; i++) { - cmap[CM_RED][i] = (JSAMPLE) ReadByte(sinfo); - cmap[CM_GREEN][i] = (JSAMPLE) ReadByte(sinfo); - cmap[CM_BLUE][i] = (JSAMPLE) ReadByte(sinfo); - } -} - - -LOCAL void -DoExtension (gif_source_ptr sinfo) -/* Process an extension block */ -/* Currently we ignore 'em all */ -{ - int extlabel; - - /* Read extension label byte */ - extlabel = ReadByte(sinfo); - TRACEMS1(sinfo->cinfo, 1, JTRC_GIF_EXTENSION, extlabel); - /* Skip the data block(s) associated with the extension */ - SkipDataBlocks(sinfo); -} - - -/* - * Read the file header; return image size and component count. - */ - -METHODDEF void -start_input_gif (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -{ - gif_source_ptr source = (gif_source_ptr) sinfo; - char hdrbuf[10]; /* workspace for reading control blocks */ - unsigned int width, height; /* image dimensions */ - int colormaplen, aspectRatio; - int c; - - /* Allocate space to store the colormap */ - source->colormap = (*cinfo->mem->alloc_sarray) - ((j_common_ptr) cinfo, JPOOL_IMAGE, - (JDIMENSION) MAXCOLORMAPSIZE, (JDIMENSION) NUMCOLORS); - - /* Read and verify GIF Header */ - if (! ReadOK(source->pub.input_file, hdrbuf, 6)) - ERREXIT(cinfo, JERR_GIF_NOT); - if (hdrbuf[0] != 'G' || hdrbuf[1] != 'I' || hdrbuf[2] != 'F') - ERREXIT(cinfo, JERR_GIF_NOT); - /* Check for expected version numbers. - * If unknown version, give warning and try to process anyway; - * this is per recommendation in GIF89a standard. - */ - if ((hdrbuf[3] != '8' || hdrbuf[4] != '7' || hdrbuf[5] != 'a') && - (hdrbuf[3] != '8' || hdrbuf[4] != '9' || hdrbuf[5] != 'a')) - TRACEMS3(cinfo, 1, JTRC_GIF_BADVERSION, hdrbuf[3], hdrbuf[4], hdrbuf[5]); - - /* Read and decipher Logical Screen Descriptor */ - if (! ReadOK(source->pub.input_file, hdrbuf, 7)) - ERREXIT(cinfo, JERR_INPUT_EOF); - width = LM_to_uint(hdrbuf[0],hdrbuf[1]); - height = LM_to_uint(hdrbuf[2],hdrbuf[3]); - colormaplen = 2 << (hdrbuf[4] & 0x07); - /* we ignore the color resolution, sort flag, and background color index */ - aspectRatio = hdrbuf[6] & 0xFF; - if (aspectRatio != 0 && aspectRatio != 49) - TRACEMS(cinfo, 1, JTRC_GIF_NONSQUARE); - - /* Read global colormap if header indicates it is present */ - if (BitSet(hdrbuf[4], COLORMAPFLAG)) - ReadColorMap(source, colormaplen, source->colormap); - - /* Scan until we reach start of desired image. - * We don't currently support skipping images, but could add it easily. - */ - for (;;) { - c = ReadByte(source); - - if (c == ';') /* GIF terminator?? */ - ERREXIT(cinfo, JERR_GIF_IMAGENOTFOUND); - - if (c == '!') { /* Extension */ - DoExtension(source); - continue; - } - - if (c != ',') { /* Not an image separator? */ - WARNMS1(cinfo, JWRN_GIF_CHAR, c); - continue; - } - - /* Read and decipher Local Image Descriptor */ - if (! ReadOK(source->pub.input_file, hdrbuf, 9)) - ERREXIT(cinfo, JERR_INPUT_EOF); - /* we ignore top/left position info, also sort flag */ - width = LM_to_uint(hdrbuf[4],hdrbuf[5]); - height = LM_to_uint(hdrbuf[6],hdrbuf[7]); - source->is_interlaced = BitSet(hdrbuf[8], INTERLACE); - - /* Read local colormap if header indicates it is present */ - /* Note: if we wanted to support skipping images, */ - /* we'd need to skip rather than read colormap for ignored images */ - if (BitSet(hdrbuf[8], COLORMAPFLAG)) { - colormaplen = 2 << (hdrbuf[8] & 0x07); - ReadColorMap(source, colormaplen, source->colormap); - } - - source->input_code_size = ReadByte(source); /* get min-code-size byte */ - if (source->input_code_size < 2 || source->input_code_size >= MAX_LZW_BITS) - ERREXIT1(cinfo, JERR_GIF_CODESIZE, source->input_code_size); - - /* Reached desired image, so break out of loop */ - /* If we wanted to skip this image, */ - /* we'd call SkipDataBlocks and then continue the loop */ - break; - } - - /* Prepare to read selected image: first initialize LZW decompressor */ - source->symbol_head = (UINT16 FAR *) - (*cinfo->mem->alloc_large) ((j_common_ptr) cinfo, JPOOL_IMAGE, - LZW_TABLE_SIZE * SIZEOF(UINT16)); - source->symbol_tail = (UINT8 FAR *) - (*cinfo->mem->alloc_large) ((j_common_ptr) cinfo, JPOOL_IMAGE, - LZW_TABLE_SIZE * SIZEOF(UINT8)); - source->symbol_stack = (UINT8 FAR *) - (*cinfo->mem->alloc_large) ((j_common_ptr) cinfo, JPOOL_IMAGE, - LZW_TABLE_SIZE * SIZEOF(UINT8)); - InitLZWCode(source); - - /* - * If image is interlaced, we read it into a full-size sample array, - * decompressing as we go; then get_interlaced_row selects rows from the - * sample array in the proper order. - */ - if (source->is_interlaced) { - /* We request the virtual array now, but can't access it until virtual - * arrays have been allocated. Hence, the actual work of reading the - * image is postponed until the first call to get_pixel_rows. - */ - source->interlaced_image = (*cinfo->mem->request_virt_sarray) - ((j_common_ptr) cinfo, JPOOL_IMAGE, - (JDIMENSION) width, (JDIMENSION) height, (JDIMENSION) 1); - if (cinfo->progress != NULL) { - cd_progress_ptr progress = (cd_progress_ptr) cinfo->progress; - progress->total_extra_passes++; /* count file input as separate pass */ - } - source->pub.get_pixel_rows = load_interlaced_image; - } else { - source->pub.get_pixel_rows = get_pixel_rows; - } - - /* Create compressor input buffer. */ - source->pub.buffer = (*cinfo->mem->alloc_sarray) - ((j_common_ptr) cinfo, JPOOL_IMAGE, - (JDIMENSION) width * NUMCOLORS, (JDIMENSION) 1); - source->pub.buffer_height = 1; - - /* Return info about the image. */ - cinfo->in_color_space = JCS_RGB; - cinfo->input_components = NUMCOLORS; - cinfo->data_precision = 8; - cinfo->image_width = width; - cinfo->image_height = height; - - TRACEMS3(cinfo, 1, JTRC_GIF, width, height, colormaplen); -} - - -/* - * Read one row of pixels. - * This version is used for noninterlaced GIF images: - * we read directly from the GIF file. - */ - -METHODDEF JDIMENSION -get_pixel_rows (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -{ - gif_source_ptr source = (gif_source_ptr) sinfo; - register int c; - register JSAMPROW ptr; - register JDIMENSION col; - register JSAMPARRAY colormap = source->colormap; - - ptr = source->pub.buffer[0]; - for (col = cinfo->image_width; col > 0; col--) { - c = LZWReadByte(source); - *ptr++ = colormap[CM_RED][c]; - *ptr++ = colormap[CM_GREEN][c]; - *ptr++ = colormap[CM_BLUE][c]; - } - return 1; -} - - -/* - * Read one row of pixels. - * This version is used for the first call on get_pixel_rows when - * reading an interlaced GIF file: we read the whole image into memory. - */ - -METHODDEF JDIMENSION -load_interlaced_image (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -{ - gif_source_ptr source = (gif_source_ptr) sinfo; - JSAMPARRAY image_ptr; - register JSAMPROW sptr; - register JDIMENSION col; - JDIMENSION row; - cd_progress_ptr progress = (cd_progress_ptr) cinfo->progress; - - /* Read the interlaced image into the virtual array we've created. */ - for (row = 0; row < cinfo->image_height; row++) { - if (progress != NULL) { - progress->pub.pass_counter = (long) row; - progress->pub.pass_limit = (long) cinfo->image_height; - (*progress->pub.progress_monitor) ((j_common_ptr) cinfo); - } - image_ptr = (*cinfo->mem->access_virt_sarray) - ((j_common_ptr) cinfo, source->interlaced_image, row, TRUE); - sptr = image_ptr[0]; - for (col = cinfo->image_width; col > 0; col--) { - *sptr++ = (JSAMPLE) LZWReadByte(source); - } - } - if (progress != NULL) - progress->completed_extra_passes++; - - /* Replace method pointer so subsequent calls don't come here. */ - source->pub.get_pixel_rows = get_interlaced_row; - /* Initialize for get_interlaced_row, and perform first call on it. */ - source->cur_row_number = 0; - source->pass2_offset = (cinfo->image_height + 7) / 8; - source->pass3_offset = source->pass2_offset + (cinfo->image_height + 3) / 8; - source->pass4_offset = source->pass3_offset + (cinfo->image_height + 1) / 4; - - return get_interlaced_row(cinfo, sinfo); -} - - -/* - * Read one row of pixels. - * This version is used for interlaced GIF images: - * we read from the virtual array. - */ - -METHODDEF JDIMENSION -get_interlaced_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -{ - gif_source_ptr source = (gif_source_ptr) sinfo; - JSAMPARRAY image_ptr; - register int c; - register JSAMPROW sptr, ptr; - register JDIMENSION col; - register JSAMPARRAY colormap = source->colormap; - JDIMENSION irow; - - /* Figure out which row of interlaced image is needed, and access it. */ - switch ((int) (source->cur_row_number & 7)) { - case 0: /* first-pass row */ - irow = source->cur_row_number >> 3; - break; - case 4: /* second-pass row */ - irow = (source->cur_row_number >> 3) + source->pass2_offset; - break; - case 2: /* third-pass row */ - case 6: - irow = (source->cur_row_number >> 2) + source->pass3_offset; - break; - default: /* fourth-pass row */ - irow = (source->cur_row_number >> 1) + source->pass4_offset; - break; - } - image_ptr = (*cinfo->mem->access_virt_sarray) - ((j_common_ptr) cinfo, source->interlaced_image, irow, FALSE); - /* Scan the row, expand colormap, and output */ - sptr = image_ptr[0]; - ptr = source->pub.buffer[0]; - for (col = cinfo->image_width; col > 0; col--) { - c = GETJSAMPLE(*sptr++); - *ptr++ = colormap[CM_RED][c]; - *ptr++ = colormap[CM_GREEN][c]; - *ptr++ = colormap[CM_BLUE][c]; - } - source->cur_row_number++; /* for next time */ - return 1; -} - - -/* - * Finish up at the end of the file. - */ - -METHODDEF void -finish_input_gif (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -{ - /* no work */ -} - - -/* - * The module selection routine for GIF format input. - */ - -GLOBAL cjpeg_source_ptr -jinit_read_gif (j_compress_ptr cinfo) -{ - gif_source_ptr source; - - /* Create module interface object */ - source = (gif_source_ptr) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - SIZEOF(gif_source_struct)); - source->cinfo = cinfo; /* make back link for subroutines */ - /* Fill in method ptrs, except get_pixel_rows which start_input sets */ - source->pub.start_input = start_input_gif; - source->pub.finish_input = finish_input_gif; - - return (cjpeg_source_ptr) source; -} - -#endif /* GIF_SUPPORTED */ diff --git a/jpeg/rdjpgcom.1 b/jpeg/rdjpgcom.1 deleted file mode 100644 index d237bb828f..0000000000 --- a/jpeg/rdjpgcom.1 +++ /dev/null @@ -1,44 +0,0 @@ -.TH RDJPGCOM 1 "8 July 1994" -.SH NAME -rdjpgcom \- display text comments from a JPEG file -.SH SYNOPSIS -.B rdjpgcom -[ -.B \-verbose -] -[ -.I filename -] -.LP -.SH DESCRIPTION -.LP -.B rdjpgcom -reads the named JPEG/JFIF file, or the standard input if no file is named, -and prints any text comments found in the file on the standard output. -.PP -The JPEG standard allows "comment" (COM) blocks to occur within a JPEG file. -Although the standard doesn't actually define what COM blocks are for, they -are widely used to hold user-supplied text strings. This lets you add -annotations, titles, index terms, etc to your JPEG files, and later retrieve -them as text. COM blocks do not interfere with the image stored in the JPEG -file. The maximum size of a COM block is 64K, but you can have as many of -them as you like in one JPEG file. -.SH OPTIONS -.TP -.B \-verbose -Causes -.B rdjpgcom -to also display the JPEG image dimensions. -.PP -Switch names may be abbreviated, and are not case sensitive. -.SH HINTS -.B rdjpgcom -does not depend on the IJG JPEG library. Its source code is intended as an -illustration of the minimum amount of code required to parse a JPEG file -header correctly. -.SH SEE ALSO -.BR cjpeg (1), -.BR djpeg (1), -.BR wrjpgcom (1) -.SH AUTHOR -Independent JPEG Group diff --git a/jpeg/rdjpgcom.c b/jpeg/rdjpgcom.c deleted file mode 100644 index d121dc9aa9..0000000000 --- a/jpeg/rdjpgcom.c +++ /dev/null @@ -1,475 +0,0 @@ -/* - * rdjpgcom.c - * - * Copyright (C) 1994, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains a very simple stand-alone application that displays - * the text in COM (comment) markers in a JFIF file. - * This may be useful as an example of the minimum logic needed to parse - * JPEG markers. - */ - -#define JPEG_CJPEG_DJPEG /* to get the command-line config symbols */ -#include "jinclude.h" /* get auto-config symbols, <stdio.h> */ - -#include <ctype.h> /* to declare isupper(), tolower() */ -#ifdef USE_SETMODE -#include <fcntl.h> /* to declare setmode()'s parameter macros */ -/* If you have setmode() but not <io.h>, just delete this line: */ -#include <io.h> /* to declare setmode() */ -#endif - -#ifdef USE_CCOMMAND /* command-line reader for Macintosh */ -#ifdef __MWERKS__ -#include <SIOUX.h> /* Metrowerks declares it here */ -#endif -#ifdef THINK_C -#include <console.h> /* Think declares it here */ -#endif -#endif - -#ifdef DONT_USE_B_MODE /* define mode parameters for fopen() */ -#define READ_BINARY "r" -#else -#define READ_BINARY "rb" -#endif - -#ifndef EXIT_FAILURE /* define exit() codes if not provided */ -#define EXIT_FAILURE 1 -#endif -#ifndef EXIT_SUCCESS -#ifdef VMS -#define EXIT_SUCCESS 1 /* VMS is very nonstandard */ -#else -#define EXIT_SUCCESS 0 -#endif -#endif - - -/* - * These macros are used to read the input file. - * To reuse this code in another application, you might need to change these. - */ - -static FILE * infile; /* input JPEG file */ - -/* Return next input byte, or EOF if no more */ -#define NEXTBYTE() getc(infile) - - -/* Error exit handler */ -#define ERREXIT(msg) (fprintf(stderr, "%s\n", msg), exit(EXIT_FAILURE)) - - -/* Read one byte, testing for EOF */ -static int -read_1_byte (void) -{ - int c; - - c = NEXTBYTE(); - if (c == EOF) - ERREXIT("Premature EOF in JPEG file"); - return c; -} - -/* Read 2 bytes, convert to unsigned int */ -/* All 2-byte quantities in JPEG markers are MSB first */ -static unsigned int -read_2_bytes (void) -{ - int c1, c2; - - c1 = NEXTBYTE(); - if (c1 == EOF) - ERREXIT("Premature EOF in JPEG file"); - c2 = NEXTBYTE(); - if (c2 == EOF) - ERREXIT("Premature EOF in JPEG file"); - return (((unsigned int) c1) << 8) + ((unsigned int) c2); -} - - -/* - * JPEG markers consist of one or more 0xFF bytes, followed by a marker - * code byte (which is not an FF). Here are the marker codes of interest - * in this program. (See jdmarker.c for a more complete list.) - */ - -#define M_SOF0 0xC0 /* Start Of Frame N */ -#define M_SOF1 0xC1 /* N indicates which compression process */ -#define M_SOF2 0xC2 /* Only SOF0 and SOF1 are now in common use */ -#define M_SOF3 0xC3 -#define M_SOF5 0xC5 -#define M_SOF6 0xC6 -#define M_SOF7 0xC7 -#define M_SOF9 0xC9 -#define M_SOF10 0xCA -#define M_SOF11 0xCB -#define M_SOF13 0xCD -#define M_SOF14 0xCE -#define M_SOF15 0xCF -#define M_SOI 0xD8 /* Start Of Image (beginning of datastream) */ -#define M_EOI 0xD9 /* End Of Image (end of datastream) */ -#define M_SOS 0xDA /* Start Of Scan (begins compressed data) */ -#define M_COM 0xFE /* COMment */ - - -/* - * Find the next JPEG marker and return its marker code. - * We expect at least one FF byte, possibly more if the compressor used FFs - * to pad the file. - * There could also be non-FF garbage between markers. The treatment of such - * garbage is unspecified; we choose to skip over it but emit a warning msg. - * NB: this routine must not be used after seeing SOS marker, since it will - * not deal correctly with FF/00 sequences in the compressed image data... - */ - -static int -next_marker (void) -{ - int c; - int discarded_bytes = 0; - - /* Find 0xFF byte; count and skip any non-FFs. */ - c = read_1_byte(); - while (c != 0xFF) { - discarded_bytes++; - c = read_1_byte(); - } - /* Get marker code byte, swallowing any duplicate FF bytes. Extra FFs - * are legal as pad bytes, so don't count them in discarded_bytes. - */ - do { - c = read_1_byte(); - } while (c == 0xFF); - - if (discarded_bytes != 0) { - fprintf(stderr, "Warning: garbage data found in JPEG file\n"); - } - - return c; -} - - -/* - * Read the initial marker, which should be SOI. - * For a JFIF file, the first two bytes of the file should be literally - * 0xFF M_SOI. To be more general, we could use next_marker, but if the - * input file weren't actually JPEG at all, next_marker might read the whole - * file and then return a misleading error message... - */ - -static int -first_marker (void) -{ - int c1, c2; - - c1 = NEXTBYTE(); - c2 = NEXTBYTE(); - if (c1 != 0xFF || c2 != M_SOI) - ERREXIT("Not a JPEG file"); - return c2; -} - - -/* - * Most types of marker are followed by a variable-length parameter segment. - * This routine skips over the parameters for any marker we don't otherwise - * want to process. - * Note that we MUST skip the parameter segment explicitly in order not to - * be fooled by 0xFF bytes that might appear within the parameter segment; - * such bytes do NOT introduce new markers. - */ - -static void -skip_variable (void) -/* Skip over an unknown or uninteresting variable-length marker */ -{ - unsigned int length; - - /* Get the marker parameter length count */ - length = read_2_bytes(); - /* Length includes itself, so must be at least 2 */ - if (length < 2) - ERREXIT("Erroneous JPEG marker length"); - length -= 2; - /* Skip over the remaining bytes */ - while (length > 0) { - (void) read_1_byte(); - length--; - } -} - - -/* - * Process a COM marker. - * We want to print out the marker contents as legible text; - * we must guard against random junk and varying newline representations. - */ - -static void -process_COM (void) -{ - unsigned int length; - int ch; - int lastch = 0; - - /* Get the marker parameter length count */ - length = read_2_bytes(); - /* Length includes itself, so must be at least 2 */ - if (length < 2) - ERREXIT("Erroneous JPEG marker length"); - length -= 2; - - while (length > 0) { - ch = read_1_byte(); - /* Emit the character in a readable form. - * Nonprintables are converted to \nnn form, - * while \ is converted to \\. - * Newlines in CR, CR/LF, or LF form will be printed as one newline. - */ - if (ch == '\r') { - printf("\n"); - } else if (ch == '\n') { - if (lastch != '\r') - printf("\n"); - } else if (ch == '\\') { - printf("\\\\"); - } else if (isprint(ch)) { - putc(ch, stdout); - } else { - printf("\\%03o", ch); - } - lastch = ch; - length--; - } - printf("\n"); -} - - -/* - * Process a SOFn marker. - * This code is only needed if you want to know the image dimensions... - */ - -static void -process_SOFn (int marker) -{ - unsigned int length; - unsigned int image_height, image_width; - int data_precision, num_components; - const char * process; - int ci, c1, c2, c3; - - length = read_2_bytes(); /* usual parameter length count */ - - data_precision = read_1_byte(); - image_height = read_2_bytes(); - image_width = read_2_bytes(); - num_components = read_1_byte(); - - switch (marker) { - case M_SOF0: process = "Baseline"; break; - case M_SOF1: process = "Extended sequential"; break; - case M_SOF2: process = "Progressive"; break; - case M_SOF3: process = "Lossless"; break; - case M_SOF5: process = "Differential sequential"; break; - case M_SOF6: process = "Differential progressive"; break; - case M_SOF7: process = "Differential lossless"; break; - case M_SOF9: process = "Extended sequential, arithmetic coding"; break; - case M_SOF10: process = "Progressive, arithmetic coding"; break; - case M_SOF11: process = "Lossless, arithmetic coding"; break; - case M_SOF13: process = "Differential sequential, arithmetic coding"; break; - case M_SOF14: process = "Differential progressive, arithmetic coding"; break; - case M_SOF15: process = "Differential lossless, arithmetic coding"; break; - default: process = "Unknown"; break; - } - - printf("JPEG image is %uw * %uh, %d color components, %d bits per sample\n", - image_width, image_height, num_components, data_precision); - printf("JPEG process: %s\n", process); - - if (length != (unsigned int) (8 + num_components * 3)) - ERREXIT("Bogus SOF marker length"); - - for (ci = 0; ci < num_components; ci++) { - c1 = read_1_byte(); /* Component ID code */ - c2 = read_1_byte(); /* H, V sampling factors */ - c3 = read_1_byte(); /* Quant table number */ - } -} - - -/* - * Parse the marker stream until SOS or EOI is seen; - * display any COM markers. - * While the companion program wrjpgcom will always insert COM markers before - * SOFn, other implementations might not, so we scan to SOS before stopping. - * If we were only interested in the image dimensions, we would stop at SOFn. - * (Conversely, if we only cared about COM markers, there would be no need - * for special code to handle SOFn; we could treat it like other markers.) - */ - -static int -scan_JPEG_header (int verbose) -{ - int marker; - - /* Expect SOI at start of file */ - if (first_marker() != M_SOI) - ERREXIT("Expected SOI marker first"); - - /* Scan miscellaneous markers until we reach SOS. */ - for (;;) { - marker = next_marker(); - switch (marker) { - case M_SOF0: /* Baseline */ - case M_SOF1: /* Extended sequential, Huffman */ - case M_SOF2: /* Progressive, Huffman */ - case M_SOF3: /* Lossless, Huffman */ - case M_SOF5: /* Differential sequential, Huffman */ - case M_SOF6: /* Differential progressive, Huffman */ - case M_SOF7: /* Differential lossless, Huffman */ - case M_SOF9: /* Extended sequential, arithmetic */ - case M_SOF10: /* Progressive, arithmetic */ - case M_SOF11: /* Lossless, arithmetic */ - case M_SOF13: /* Differential sequential, arithmetic */ - case M_SOF14: /* Differential progressive, arithmetic */ - case M_SOF15: /* Differential lossless, arithmetic */ - if (verbose) - process_SOFn(marker); - else - skip_variable(); - break; - - case M_SOS: /* stop before hitting compressed data */ - return marker; - - case M_EOI: /* in case it's a tables-only JPEG stream */ - return marker; - - case M_COM: - process_COM(); - break; - - default: /* Anything else just gets skipped */ - skip_variable(); /* we assume it has a parameter count... */ - break; - } - } /* end loop */ -} - - -/* Command line parsing code */ - -static const char * progname; /* program name for error messages */ - - -static void -usage (void) -/* complain about bad command line */ -{ - fprintf(stderr, "rdjpgcom displays any textual comments in a JPEG file.\n"); - - fprintf(stderr, "Usage: %s [switches] [inputfile]\n", progname); - - fprintf(stderr, "Switches (names may be abbreviated):\n"); - fprintf(stderr, " -verbose Also display dimensions of JPEG image\n"); - - exit(EXIT_FAILURE); -} - - -static int -keymatch (char * arg, const char * keyword, int minchars) -/* Case-insensitive matching of (possibly abbreviated) keyword switches. */ -/* keyword is the constant keyword (must be lower case already), */ -/* minchars is length of minimum legal abbreviation. */ -{ - register int ca, ck; - register int nmatched = 0; - - while ((ca = *arg++) != '\0') { - if ((ck = *keyword++) == '\0') - return 0; /* arg longer than keyword, no good */ - if (isupper(ca)) /* force arg to lcase (assume ck is already) */ - ca = tolower(ca); - if (ca != ck) - return 0; /* no good */ - nmatched++; /* count matched characters */ - } - /* reached end of argument; fail if it's too short for unique abbrev */ - if (nmatched < minchars) - return 0; - return 1; /* A-OK */ -} - - -/* - * The main program. - */ - -int -main (int argc, char **argv) -{ - int argn; - char * arg; - int verbose = 0; - - /* On Mac, fetch a command line. */ -#ifdef USE_CCOMMAND - argc = ccommand(&argv); -#endif - - progname = argv[0]; - if (progname == NULL || progname[0] == 0) - progname = "rdjpgcom"; /* in case C library doesn't provide it */ - - /* Parse switches, if any */ - for (argn = 1; argn < argc; argn++) { - arg = argv[argn]; - if (arg[0] != '-') - break; /* not switch, must be file name */ - arg++; /* advance over '-' */ - if (keymatch(arg, "verbose", 1)) { - verbose++; - } else - usage(); - } - - /* Open the input file. */ - /* Unix style: expect zero or one file name */ - if (argn < argc-1) { - fprintf(stderr, "%s: only one input file\n", progname); - usage(); - } - if (argn < argc) { - if ((infile = fopen(argv[argn], READ_BINARY)) == NULL) { - fprintf(stderr, "%s: can't open %s\n", progname, argv[argn]); - exit(EXIT_FAILURE); - } - } else { - /* default input file is stdin */ -#ifdef USE_SETMODE /* need to hack file mode? */ - setmode(fileno(stdin), O_BINARY); -#endif -#ifdef USE_FDOPEN /* need to re-open in binary mode? */ - if ((infile = fdopen(fileno(stdin), READ_BINARY)) == NULL) { - fprintf(stderr, "%s: can't open stdin\n", progname); - exit(EXIT_FAILURE); - } -#else - infile = stdin; -#endif - } - - /* Scan the JPEG headers. */ - (void) scan_JPEG_header(verbose); - - /* All done. */ - exit(EXIT_SUCCESS); - return 0; /* suppress no-return-value warnings */ -} diff --git a/jpeg/rdppm.c b/jpeg/rdppm.c deleted file mode 100644 index 6aa8e6fdf8..0000000000 --- a/jpeg/rdppm.c +++ /dev/null @@ -1,384 +0,0 @@ -/* - * rdppm.c - * - * Copyright (C) 1991-1994, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains routines to read input images in PPM/PGM format. - * The PBMPLUS library is NOT required to compile this software - * (but it is highly useful as a set of PPM image manipulation programs). - * - * These routines may need modification for non-Unix environments or - * specialized applications. As they stand, they assume input from - * an ordinary stdio stream. They further assume that reading begins - * at the start of the file; start_input may need work if the - * user interface has already read some data (e.g., to determine that - * the file is indeed PPM format). - */ - -#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ - -#ifdef PPM_SUPPORTED - - -/* Portions of this code are based on the PBMPLUS library, which is: -** -** Copyright (C) 1988 by Jef Poskanzer. -** -** Permission to use, copy, modify, and distribute this software and its -** documentation for any purpose and without fee is hereby granted, provided -** that the above copyright notice appear in all copies and that both that -** copyright notice and this permission notice appear in supporting -** documentation. This software is provided "as is" without express or -** implied warranty. -*/ - - -/* Macros to deal with unsigned chars as efficiently as compiler allows */ - -#ifdef HAVE_UNSIGNED_CHAR -typedef unsigned char U_CHAR; -#define UCH(x) ((int) (x)) -#else /* !HAVE_UNSIGNED_CHAR */ -#ifdef CHAR_IS_UNSIGNED -typedef char U_CHAR; -#define UCH(x) ((int) (x)) -#else -typedef char U_CHAR; -#define UCH(x) ((int) (x) & 0xFF) -#endif -#endif /* HAVE_UNSIGNED_CHAR */ - - -#define ReadOK(file,buffer,len) (JFREAD(file,buffer,len) == ((size_t) (len))) - - -/* - * On most systems, reading individual bytes with getc() is drastically less - * efficient than buffering a row at a time with fread(). On PCs, we must - * allocate the buffer in near data space, because we are assuming small-data - * memory model, wherein fread() can't reach far memory. If you need to - * process very wide images on a PC, you might have to compile in large-memory - * model, or else replace fread() with a getc() loop --- which will be much - * slower. - */ - - -/* Private version of data source object */ - -typedef struct { - struct cjpeg_source_struct pub; /* public fields */ - - U_CHAR *iobuffer; /* non-FAR pointer to I/O buffer */ - JSAMPROW pixrow; /* FAR pointer to same */ - JDIMENSION buffer_width; /* width of one row */ - JSAMPLE *rescale; /* => maxval-remapping array, or NULL */ -} ppm_source_struct; - -typedef ppm_source_struct * ppm_source_ptr; - - -LOCAL int -pbm_getc (FILE * infile) -/* Read next char, skipping over any comments */ -/* A comment/newline sequence is returned as a newline */ -{ - register int ch; - - ch = getc(infile); - if (ch == '#') { - do { - ch = getc(infile); - } while (ch != '\n' && ch != EOF); - } - return ch; -} - - -LOCAL unsigned int -read_pbm_integer (j_compress_ptr cinfo, FILE * infile) -/* Read an unsigned decimal integer from the PPM file */ -/* Swallows one trailing character after the integer */ -/* Note that on a 16-bit-int machine, only values up to 64k can be read. */ -/* This should not be a problem in practice. */ -{ - register int ch; - register unsigned int val; - - /* Skip any leading whitespace */ - do { - ch = pbm_getc(infile); - if (ch == EOF) - ERREXIT(cinfo, JERR_INPUT_EOF); - } while (ch == ' ' || ch == '\t' || ch == '\n' || ch == '\r'); - - if (ch < '0' || ch > '9') - ERREXIT(cinfo, JERR_PPM_NONNUMERIC); - - val = ch - '0'; - while ((ch = pbm_getc(infile)) >= '0' && ch <= '9') { - val *= 10; - val += ch - '0'; - } - return val; -} - - -/* - * Read one row of pixels. - * - * We provide several different versions depending on input file format. - * In all cases, input is scaled to the size of JSAMPLE. - * - * Note that a really fast path is provided for reading raw files with - * maxval = MAXJSAMPLE, which is the normal case (at least for 8-bit JSAMPLEs). - */ - - -METHODDEF JDIMENSION -get_text_gray_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -/* This version is for reading text-format PGM files with any maxval */ -{ - ppm_source_ptr source = (ppm_source_ptr) sinfo; - FILE * infile = source->pub.input_file; - register JSAMPROW ptr; - register JSAMPLE *rescale = source->rescale; - JDIMENSION col; - - ptr = source->pub.buffer[0]; - for (col = cinfo->image_width; col > 0; col--) { - *ptr++ = rescale[read_pbm_integer(cinfo, infile)]; - } - return 1; -} - - -METHODDEF JDIMENSION -get_text_rgb_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -/* This version is for reading text-format PPM files with any maxval */ -{ - ppm_source_ptr source = (ppm_source_ptr) sinfo; - FILE * infile = source->pub.input_file; - register JSAMPROW ptr; - register JSAMPLE *rescale = source->rescale; - JDIMENSION col; - - ptr = source->pub.buffer[0]; - for (col = cinfo->image_width; col > 0; col--) { - *ptr++ = rescale[read_pbm_integer(cinfo, infile)]; - *ptr++ = rescale[read_pbm_integer(cinfo, infile)]; - *ptr++ = rescale[read_pbm_integer(cinfo, infile)]; - } - return 1; -} - - -METHODDEF JDIMENSION -get_scaled_gray_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -/* This version is for reading raw-format PGM files with any maxval */ -{ - ppm_source_ptr source = (ppm_source_ptr) sinfo; - register JSAMPROW ptr; - register U_CHAR * bufferptr; - register JSAMPLE *rescale = source->rescale; - JDIMENSION col; - - if (! ReadOK(source->pub.input_file, source->iobuffer, source->buffer_width)) - ERREXIT(cinfo, JERR_INPUT_EOF); - ptr = source->pub.buffer[0]; - bufferptr = source->iobuffer; - for (col = cinfo->image_width; col > 0; col--) { - *ptr++ = rescale[UCH(*bufferptr++)]; - } - return 1; -} - - -METHODDEF JDIMENSION -get_scaled_rgb_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -/* This version is for reading raw-format PPM files with any maxval */ -{ - ppm_source_ptr source = (ppm_source_ptr) sinfo; - register JSAMPROW ptr; - register U_CHAR * bufferptr; - register JSAMPLE *rescale = source->rescale; - JDIMENSION col; - - if (! ReadOK(source->pub.input_file, source->iobuffer, source->buffer_width)) - ERREXIT(cinfo, JERR_INPUT_EOF); - ptr = source->pub.buffer[0]; - bufferptr = source->iobuffer; - for (col = cinfo->image_width; col > 0; col--) { - *ptr++ = rescale[UCH(*bufferptr++)]; - *ptr++ = rescale[UCH(*bufferptr++)]; - *ptr++ = rescale[UCH(*bufferptr++)]; - } - return 1; -} - - -METHODDEF JDIMENSION -get_raw_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -/* This version is for reading raw-format files with maxval = MAXJSAMPLE. */ -/* In this case we just read right into the JSAMPLE buffer! */ -/* Note that same code works for PPM and PGM files. */ -{ - ppm_source_ptr source = (ppm_source_ptr) sinfo; - - if (! ReadOK(source->pub.input_file, source->iobuffer, source->buffer_width)) - ERREXIT(cinfo, JERR_INPUT_EOF); - return 1; -} - - -/* - * Read the file header; return image size and component count. - */ - -METHODDEF void -start_input_ppm (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -{ - ppm_source_ptr source = (ppm_source_ptr) sinfo; - int c; - unsigned int w, h, maxval; - boolean can_use_raw; - - if (getc(source->pub.input_file) != 'P') - ERREXIT(cinfo, JERR_PPM_NOT); - - c = getc(source->pub.input_file); /* save format discriminator for a sec */ - - /* while we fetch the remaining header info */ - w = read_pbm_integer(cinfo, source->pub.input_file); - h = read_pbm_integer(cinfo, source->pub.input_file); - maxval = read_pbm_integer(cinfo, source->pub.input_file); - - if (w <= 0 || h <= 0 || maxval <= 0) /* error check */ - ERREXIT(cinfo, JERR_PPM_NOT); - - cinfo->data_precision = BITS_IN_JSAMPLE; /* we always rescale data to this */ - cinfo->image_width = (JDIMENSION) w; - cinfo->image_height = (JDIMENSION) h; - - /* Raw PPM/PGM matches JSAMPLE representation iff: */ - can_use_raw = (maxval == MAXJSAMPLE && SIZEOF(JSAMPLE) == SIZEOF(U_CHAR)); - - switch (c) { - case '2': /* it's a text-format PGM file */ - cinfo->input_components = 1; - cinfo->in_color_space = JCS_GRAYSCALE; - TRACEMS2(cinfo, 1, JTRC_PGM_TEXT, w, h); - source->pub.get_pixel_rows = get_text_gray_row; - can_use_raw = FALSE; /* force a rescale array to be made */ - break; - - case '3': /* it's a text-format PPM file */ - cinfo->input_components = 3; - cinfo->in_color_space = JCS_RGB; - TRACEMS2(cinfo, 1, JTRC_PPM_TEXT, w, h); - source->pub.get_pixel_rows = get_text_rgb_row; - can_use_raw = FALSE; /* force a rescale array to be made */ - break; - - case '5': /* it's a raw-format PGM file */ - cinfo->input_components = 1; - cinfo->in_color_space = JCS_GRAYSCALE; - TRACEMS2(cinfo, 1, JTRC_PGM, w, h); - if (can_use_raw) - source->pub.get_pixel_rows = get_raw_row; - else - source->pub.get_pixel_rows = get_scaled_gray_row; - /* allocate space for I/O buffer: 1 byte/pixel */ - source->iobuffer = (U_CHAR *) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - (size_t) (SIZEOF(U_CHAR) * (size_t) w)); - break; - - case '6': /* it's a raw-format PPM file */ - cinfo->input_components = 3; - cinfo->in_color_space = JCS_RGB; - TRACEMS2(cinfo, 1, JTRC_PPM, w, h); - if (can_use_raw) - source->pub.get_pixel_rows = get_raw_row; - else - source->pub.get_pixel_rows = get_scaled_rgb_row; - /* allocate space for I/O buffer: 3 bytes/pixel */ - source->iobuffer = (U_CHAR *) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - (size_t) (3 * SIZEOF(U_CHAR) * (size_t) w)); - break; - - default: - ERREXIT(cinfo, JERR_PPM_NOT); - break; - } - - /* Create compressor input buffer. */ - source->buffer_width = (JDIMENSION) w * cinfo->input_components; - if (can_use_raw) { - /* For unscaled raw-input case, we can just map it onto the I/O buffer. */ - /* Synthesize a JSAMPARRAY pointer structure */ - /* Cast here implies near->far pointer conversion on PCs */ - source->pixrow = (JSAMPROW) source->iobuffer; - source->pub.buffer = & source->pixrow; - source->pub.buffer_height = 1; - } else { - /* Need to translate anyway, so make a separate sample buffer. */ - source->pub.buffer = (*cinfo->mem->alloc_sarray) - ((j_common_ptr) cinfo, JPOOL_IMAGE, - source->buffer_width, (JDIMENSION) 1); - source->pub.buffer_height = 1; - } - - /* Compute the rescaling array if required (we use it for all but raw) */ - if (can_use_raw) { - source->rescale = NULL; /* no rescaling required */ - } else { - INT32 val, half_maxval; - - /* On 16-bit-int machines we have to be careful of maxval = 65535 */ - source->rescale = (JSAMPLE *) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - (size_t) (((long) maxval + 1L) * SIZEOF(JSAMPLE))); - half_maxval = maxval / 2; - for (val = 0; val <= (INT32) maxval; val++) { - /* The multiplication here must be done in 32 bits to avoid overflow */ - source->rescale[val] = (JSAMPLE) ((val*MAXJSAMPLE + half_maxval)/maxval); - } - } -} - - -/* - * Finish up at the end of the file. - */ - -METHODDEF void -finish_input_ppm (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -{ - /* no work */ -} - - -/* - * The module selection routine for PPM format input. - */ - -GLOBAL cjpeg_source_ptr -jinit_read_ppm (j_compress_ptr cinfo) -{ - ppm_source_ptr source; - - /* Create module interface object */ - source = (ppm_source_ptr) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - SIZEOF(ppm_source_struct)); - /* Fill in method ptrs, except get_pixel_rows which start_input sets */ - source->pub.start_input = start_input_ppm; - source->pub.finish_input = finish_input_ppm; - - return (cjpeg_source_ptr) source; -} - -#endif /* PPM_SUPPORTED */ diff --git a/jpeg/rdraw.c b/jpeg/rdraw.c deleted file mode 100644 index 4d40f7118a..0000000000 --- a/jpeg/rdraw.c +++ /dev/null @@ -1,383 +0,0 @@ -/* - * rdraw.c - * - * Copyright (C) 1991-1994, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains routines to read input images in PPM/PGM format. - * The PBMPLUS library is NOT required to compile this software - * (but it is highly useful as a set of PPM image manipulation programs). - * - * These routines may need modification for non-Unix environments or - * specialized applications. As they stand, they assume input from - * an ordinary stdio stream. They further assume that reading begins - * at the start of the file; start_input may need work if the - * user interface has already read some data (e.g., to determine that - * the file is indeed PPM format). - */ - -#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ - -#ifdef RAW_SUPPORTED - - -/* Portions of this code are based on the PBMPLUS library, which is: -** -** Copyright (C) 1988 by Jef Poskanzer. -** -** Permission to use, copy, modify, and distribute this software and its -** documentation for any purpose and without fee is hereby granted, provided -** that the above copyright notice appear in all copies and that both that -** copyright notice and this permission notice appear in supporting -** documentation. This software is provided "as is" without express or -** implied warranty. -*/ - - -/* Macros to deal with unsigned chars as efficiently as compiler allows */ - -#ifdef HAVE_UNSIGNED_CHAR -typedef unsigned char U_CHAR; -#define UCH(x) ((int) (x)) -#else /* !HAVE_UNSIGNED_CHAR */ -#ifdef CHAR_IS_UNSIGNED -typedef char U_CHAR; -#define UCH(x) ((int) (x)) -#else -typedef char U_CHAR; -#define UCH(x) ((int) (x) & 0xFF) -#endif -#endif /* HAVE_UNSIGNED_CHAR */ - - -#define ReadOK(file,buffer,len) (JFREAD(file,buffer,len) == ((size_t) (len))) - - -/* - * On most systems, reading individual bytes with getc() is drastically less - * efficient than buffering a row at a time with fread(). On PCs, we must - * allocate the buffer in near data space, because we are assuming small-data - * memory model, wherein fread() can't reach far memory. If you need to - * process very wide images on a PC, you might have to compile in large-memory - * model, or else replace fread() with a getc() loop --- which will be much - * slower. - */ - - -/* Private version of data source object */ - -typedef struct { - struct cjpeg_source_struct pub; /* public fields */ - - U_CHAR *iobuffer; /* non-FAR pointer to I/O buffer */ - JSAMPROW pixrow; /* FAR pointer to same */ - JDIMENSION buffer_width; /* width of one row */ - JSAMPLE *rescale; /* => maxval-remapping array, or NULL */ -} raw_source_struct; - -typedef raw_source_struct * raw_source_ptr; - - -LOCAL int -pbm_getc (FILE * infile) -/* Read next char, skipping over any comments */ -/* A comment/newline sequence is returned as a newline */ -{ - register int ch; - - ch = getc(infile); - if (ch == '#') { - do { - ch = getc(infile); - } while (ch != '\n' && ch != EOF); - } - return ch; -} - - -LOCAL unsigned int -read_pbm_integer (j_compress_ptr cinfo, FILE * infile) -/* Read an unsigned decimal integer from the PPM file */ -/* Swallows one trailing character after the integer */ -/* Note that on a 16-bit-int machine, only values up to 64k can be read. */ -/* This should not be a problem in practice. */ -{ - register int ch; - register unsigned int val; - - /* Skip any leading whitespace */ - do { - ch = pbm_getc(infile); - if (ch == EOF) - ERREXIT(cinfo, JERR_INPUT_EOF); - } while (ch == ' ' || ch == '\t' || ch == '\n' || ch == '\r'); - - if (ch < '0' || ch > '9') - ERREXIT(cinfo, JERR_PPM_NONNUMERIC); - - val = ch - '0'; - while ((ch = pbm_getc(infile)) >= '0' && ch <= '9') { - val *= 10; - val += ch - '0'; - } - return val; -} - - -/* - * Read one row of pixels. - * - * We provide several different versions depending on input file format. - * In all cases, input is scaled to the size of JSAMPLE. - * - * Note that a really fast path is provided for reading raw files with - * maxval = MAXJSAMPLE, which is the normal case (at least for 8-bit JSAMPLEs). - */ - - -METHODDEF JDIMENSION -get_text_gray_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -/* This version is for reading text-format PGM files with any maxval */ -{ - raw_source_ptr source = (raw_source_ptr) sinfo; - FILE * infile = source->pub.input_file; - register JSAMPROW ptr; - register JSAMPLE *rescale = source->rescale; - JDIMENSION col; - - ptr = source->pub.buffer[0]; - for (col = cinfo->image_width; col > 0; col--) { - *ptr++ = rescale[read_pbm_integer(cinfo, infile)]; - } - return 1; -} - - -METHODDEF JDIMENSION -get_text_rgb_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -/* This version is for reading text-format PPM files with any maxval */ -{ - raw_source_ptr source = (raw_source_ptr) sinfo; - FILE * infile = source->pub.input_file; - register JSAMPROW ptr; - register JSAMPLE *rescale = source->rescale; - JDIMENSION col; - - ptr = source->pub.buffer[0]; - for (col = cinfo->image_width; col > 0; col--) { - *ptr++ = rescale[read_pbm_integer(cinfo, infile)]; - *ptr++ = rescale[read_pbm_integer(cinfo, infile)]; - *ptr++ = rescale[read_pbm_integer(cinfo, infile)]; - } - return 1; -} - - -METHODDEF JDIMENSION -get_scaled_gray_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -/* This version is for reading raw-format PGM files with any maxval */ -{ - raw_source_ptr source = (raw_source_ptr) sinfo; - register JSAMPROW ptr; - register U_CHAR * bufferptr; - register JSAMPLE *rescale = source->rescale; - JDIMENSION col; - - if (! ReadOK(source->pub.input_file, source->iobuffer, source->buffer_width)) - ERREXIT(cinfo, JERR_INPUT_EOF); - ptr = source->pub.buffer[0]; - bufferptr = source->iobuffer; - for (col = cinfo->image_width; col > 0; col--) { - *ptr++ = rescale[UCH(*bufferptr++)]; - } - return 1; -} - - -METHODDEF JDIMENSION -get_scaled_rgb_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -/* This version is for reading raw-format PPM files with any maxval */ -{ - raw_source_ptr source = (raw_source_ptr) sinfo; - register JSAMPROW ptr; - register U_CHAR * bufferptr; - register JSAMPLE *rescale = source->rescale; - JDIMENSION col; - - if (! ReadOK(source->pub.input_file, source->iobuffer, source->buffer_width)) - ERREXIT(cinfo, JERR_INPUT_EOF); - ptr = source->pub.buffer[0]; - bufferptr = source->iobuffer; - for (col = cinfo->image_width; col > 0; col--) { - *ptr++ = rescale[UCH(*bufferptr++)]; - *ptr++ = rescale[UCH(*bufferptr++)]; - *ptr++ = rescale[UCH(*bufferptr++)]; - } - return 1; -} - - -METHODDEF JDIMENSION -get_raw_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -/* This version is for reading raw-format files with maxval = MAXJSAMPLE. */ -/* In this case we just read right into the JSAMPLE buffer! */ -/* Note that same code works for PPM and PGM files. */ -{ - raw_source_ptr source = (raw_source_ptr) sinfo; - - if (! ReadOK(source->pub.input_file, source->iobuffer, source->buffer_width)) - ERREXIT(cinfo, JERR_INPUT_EOF); - return 1; -} - - -/* - * Read the file header; return image size and component count. - */ - -METHODDEF void -start_input (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -{ - raw_source_ptr source = (raw_source_ptr) sinfo; - int c; - unsigned int w, h, maxval; - boolean can_use_raw; - - if (getc(source->pub.input_file) != 'P') - ERREXIT(cinfo, JERR_PPM_NOT); - - c = getc(source->pub.input_file); /* save format discriminator for a sec */ - - /* while we fetch the remaining header info */ - w = read_pbm_integer(cinfo, source->pub.input_file); - h = read_pbm_integer(cinfo, source->pub.input_file); - maxval = read_pbm_integer(cinfo, source->pub.input_file); - - if (w <= 0 || h <= 0 || maxval <= 0) /* error check */ - ERREXIT(cinfo, JERR_PPM_NOT); - - cinfo->image_width = (JDIMENSION) w; - cinfo->image_height = (JDIMENSION) h; - - /* Raw PPM/PGM matches JSAMPLE representation iff: */ - can_use_raw = (maxval == MAXJSAMPLE && SIZEOF(JSAMPLE) == SIZEOF(U_CHAR)); - - switch (c) { - case '2': /* it's a text-format PGM file */ - cinfo->input_components = 1; - cinfo->in_color_space = JCS_GRAYSCALE; - TRACEMS2(cinfo, 1, JTRC_PGM_TEXT, w, h); - source->pub.get_pixel_rows = get_text_gray_row; - can_use_raw = FALSE; /* force a rescale array to be made */ - break; - - case '3': /* it's a text-format PPM file */ - cinfo->input_components = 3; - cinfo->in_color_space = JCS_RGB; - TRACEMS2(cinfo, 1, JTRC_PPM_TEXT, w, h); - source->pub.get_pixel_rows = get_text_rgb_row; - can_use_raw = FALSE; /* force a rescale array to be made */ - break; - - case '5': /* it's a raw-format PGM file */ - cinfo->input_components = 1; - cinfo->in_color_space = JCS_GRAYSCALE; - TRACEMS2(cinfo, 1, JTRC_PGM, w, h); - if (can_use_raw) - source->pub.get_pixel_rows = get_raw_row; - else - source->pub.get_pixel_rows = get_scaled_gray_row; - /* allocate space for I/O buffer: 1 byte/pixel */ - source->iobuffer = (U_CHAR *) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - (size_t) (SIZEOF(U_CHAR) * (size_t) w)); - break; - - case '6': /* it's a raw-format PPM file */ - cinfo->input_components = 3; - cinfo->in_color_space = JCS_RGB; - TRACEMS2(cinfo, 1, JTRC_PPM, w, h); - if (can_use_raw) - source->pub.get_pixel_rows = get_raw_row; - else - source->pub.get_pixel_rows = get_scaled_rgb_row; - /* allocate space for I/O buffer: 3 bytes/pixel */ - source->iobuffer = (U_CHAR *) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - (size_t) (3 * SIZEOF(U_CHAR) * (size_t) w)); - break; - - default: - ERREXIT(cinfo, JERR_PPM_NOT); - break; - } - - /* Create compressor input buffer. */ - source->buffer_width = (JDIMENSION) w * cinfo->input_components; - if (can_use_raw) { - /* For unscaled raw-input case, we can just map it onto the I/O buffer. */ - /* Synthesize a JSAMPARRAY pointer structure */ - /* Cast here implies near->far pointer conversion on PCs */ - source->pixrow = (JSAMPROW) source->iobuffer; - source->pub.buffer = & source->pixrow; - source->pub.buffer_height = 1; - } else { - /* Need to translate anyway, so make a separate sample buffer. */ - source->pub.buffer = (*cinfo->mem->alloc_sarray) - ((j_common_ptr) cinfo, JPOOL_IMAGE, - source->buffer_width, (JDIMENSION) 1); - source->pub.buffer_height = 1; - } - - /* Compute the rescaling array if required (we use it for all but raw) */ - if (can_use_raw) { - source->rescale = NULL; /* no rescaling required */ - } else { - INT32 val, half_maxval; - - /* On 16-bit-int machines we have to be careful of maxval = 65535 */ - source->rescale = (JSAMPLE *) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - (size_t) (((long) maxval + 1L) * SIZEOF(JSAMPLE))); - half_maxval = maxval / 2; - for (val = 0; val <= (INT32) maxval; val++) { - /* The multiplication here must be done in 32 bits to avoid overflow */ - source->rescale[val] = (JSAMPLE) ((val*MAXJSAMPLE + half_maxval)/maxval); - } - } -} - - -/* - * Finish up at the end of the file. - */ - -METHODDEF void -finish_input (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -{ - /* no work */ -} - - -/* - * The module selection routine for PPM format input. - */ - -GLOBAL cjpeg_source_ptr -jinit_read_raw (j_compress_ptr cinfo) -{ - raw_source_ptr source; - - /* Create module interface object */ - source = (raw_source_ptr) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - SIZEOF(raw_source_struct)); - /* Fill in method ptrs, except get_pixel_rows which start_input sets */ - source->pub.start_input = start_input; - source->pub.finish_input = finish_input; - - return (cjpeg_source_ptr) source; -} - -#endif /* RAW_SUPPORTED */ diff --git a/jpeg/rdrle.c b/jpeg/rdrle.c deleted file mode 100644 index b58eb754bc..0000000000 --- a/jpeg/rdrle.c +++ /dev/null @@ -1,384 +0,0 @@ -/* - * rdrle.c - * - * Copyright (C) 1991-1994, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains routines to read input images in Utah RLE format. - * The Utah Raster Toolkit library is required (version 3.1 or later). - * - * These routines may need modification for non-Unix environments or - * specialized applications. As they stand, they assume input from - * an ordinary stdio stream. They further assume that reading begins - * at the start of the file; start_input may need work if the - * user interface has already read some data (e.g., to determine that - * the file is indeed RLE format). - * - * Based on code contributed by Mike Lijewski, - * with updates from Robert Hutchinson. - */ - -#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ - -#ifdef RLE_SUPPORTED - -/* rle.h is provided by the Utah Raster Toolkit. */ - -#include <rle.h> - -/* - * We assume that JSAMPLE has the same representation as rle_pixel, - * to wit, "unsigned char". Hence we can't cope with 12- or 16-bit samples. - */ - -#if BITS_IN_JSAMPLE != 8 - Sorry, this code only copes with 8-bit JSAMPLEs. /* deliberate syntax err */ -#endif - -/* - * We support the following types of RLE files: - * - * GRAYSCALE - 8 bits, no colormap - * MAPPEDGRAY - 8 bits, 1 channel colomap - * PSEUDOCOLOR - 8 bits, 3 channel colormap - * TRUECOLOR - 24 bits, 3 channel colormap - * DIRECTCOLOR - 24 bits, no colormap - * - * For now, we ignore any alpha channel in the image. - */ - -typedef enum - { GRAYSCALE, MAPPEDGRAY, PSEUDOCOLOR, TRUECOLOR, DIRECTCOLOR } rle_kind; - - -/* - * Since RLE stores scanlines bottom-to-top, we have to invert the image - * to conform to JPEG's top-to-bottom order. To do this, we read the - * incoming image into a virtual array on the first get_pixel_rows call, - * then fetch the required row from the virtual array on subsequent calls. - */ - -typedef struct _rle_source_struct * rle_source_ptr; - -typedef struct _rle_source_struct { - struct cjpeg_source_struct pub; /* public fields */ - - rle_kind visual; /* actual type of input file */ - jvirt_sarray_ptr image; /* virtual array to hold the image */ - rle_hdr header; /* Input file information */ - rle_pixel** rle_row; /* holds a row returned by rle_getrow() */ - -} rle_source_struct; - - -/* - * Read the file header; return image size and component count. - */ - -METHODDEF void -start_input_rle (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -{ - rle_source_ptr source = (rle_source_ptr) sinfo; - JDIMENSION width, height; -#ifdef PROGRESS_REPORT - cd_progress_ptr progress = (cd_progress_ptr) cinfo->progress; -#endif - - /* Use RLE library routine to get the header info */ - source->header = *rle_hdr_init(NULL); - source->header.rle_file = source->pub.input_file; - switch (rle_get_setup(&(source->header))) { - case RLE_SUCCESS: - /* A-OK */ - break; - case RLE_NOT_RLE: - ERREXIT(cinfo, JERR_RLE_NOT); - break; - case RLE_NO_SPACE: - ERREXIT(cinfo, JERR_RLE_MEM); - break; - case RLE_EMPTY: - ERREXIT(cinfo, JERR_RLE_EMPTY); - break; - case RLE_EOF: - ERREXIT(cinfo, JERR_RLE_EOF); - break; - default: - ERREXIT(cinfo, JERR_RLE_BADERROR); - break; - } - - /* Figure out what we have, set private vars and return values accordingly */ - - width = source->header.xmax - source->header.xmin + 1; - height = source->header.ymax - source->header.ymin + 1; - source->header.xmin = 0; /* realign horizontally */ - source->header.xmax = width-1; - - cinfo->image_width = width; - cinfo->image_height = height; - cinfo->data_precision = 8; /* we can only handle 8 bit data */ - - if (source->header.ncolors == 1 && source->header.ncmap == 0) { - source->visual = GRAYSCALE; - TRACEMS2(cinfo, 1, JTRC_RLE_GRAY, width, height); - } else if (source->header.ncolors == 1 && source->header.ncmap == 1) { - source->visual = MAPPEDGRAY; - TRACEMS3(cinfo, 1, JTRC_RLE_MAPGRAY, width, height, - 1 << source->header.cmaplen); - } else if (source->header.ncolors == 1 && source->header.ncmap == 3) { - source->visual = PSEUDOCOLOR; - TRACEMS3(cinfo, 1, JTRC_RLE_MAPPED, width, height, - 1 << source->header.cmaplen); - } else if (source->header.ncolors == 3 && source->header.ncmap == 3) { - source->visual = TRUECOLOR; - TRACEMS3(cinfo, 1, JTRC_RLE_FULLMAP, width, height, - 1 << source->header.cmaplen); - } else if (source->header.ncolors == 3 && source->header.ncmap == 0) { - source->visual = DIRECTCOLOR; - TRACEMS2(cinfo, 1, JTRC_RLE, width, height); - } else - ERREXIT(cinfo, JERR_RLE_UNSUPPORTED); - - if (source->visual == GRAYSCALE || source->visual == MAPPEDGRAY) { - cinfo->in_color_space = JCS_GRAYSCALE; - cinfo->input_components = 1; - } else { - cinfo->in_color_space = JCS_RGB; - cinfo->input_components = 3; - } - - /* - * A place to hold each scanline while it's converted. - * (GRAYSCALE scanlines don't need converting) - */ - if (source->visual != GRAYSCALE) { - source->rle_row = (rle_pixel**) (*cinfo->mem->alloc_sarray) - ((j_common_ptr) cinfo, JPOOL_IMAGE, - (JDIMENSION) width, (JDIMENSION) cinfo->input_components); - } - - /* request a virtual array to hold the image */ - source->image = (*cinfo->mem->request_virt_sarray) - ((j_common_ptr) cinfo, JPOOL_IMAGE, - (JDIMENSION) (width * source->header.ncolors), - (JDIMENSION) height, (JDIMENSION) 1); - -#ifdef PROGRESS_REPORT - if (progress != NULL) { - /* count file input as separate pass */ - progress->total_extra_passes++; - } -#endif - - source->pub.buffer_height = 1; -} - - -/* - * Read one row of pixels. - * Called only after load_image has read the image into the virtual array. - * Used for GRAYSCALE, MAPPEDGRAY, TRUECOLOR, and DIRECTCOLOR images. - */ - -METHODDEF JDIMENSION -get_rle_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -{ - rle_source_ptr source = (rle_source_ptr) sinfo; - - source->pub.buffer = (*cinfo->mem->access_virt_sarray) - ((j_common_ptr) cinfo, source->image, cinfo->next_scanline, FALSE); - - return 1; -} - -/* - * Read one row of pixels. - * Called only after load_image has read the image into the virtual array. - * Used for PSEUDOCOLOR images. - */ - -METHODDEF JDIMENSION -get_pseudocolor_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -{ - rle_source_ptr source = (rle_source_ptr) sinfo; - JSAMPROW src_row, dest_row; - JDIMENSION col; - rle_map *colormap; - int val; - - colormap = source->header.cmap; - dest_row = source->pub.buffer[0]; - src_row = * (*cinfo->mem->access_virt_sarray) - ((j_common_ptr) cinfo, source->image, cinfo->next_scanline, FALSE); - - for (col = cinfo->image_width; col > 0; col--) { - val = GETJSAMPLE(*src_row++); - *dest_row++ = colormap[val ] >> 8; - *dest_row++ = colormap[val + 256] >> 8; - *dest_row++ = colormap[val + 512] >> 8; - } - - return 1; -} - - -/* - * Load the image into a virtual array. We have to do this because RLE - * files start at the lower left while the JPEG standard has them starting - * in the upper left. This is called the first time we want to get a row - * of input. What we do is load the RLE data into the array and then call - * the appropriate routine to read one row from the array. Before returning, - * we set source->pub.get_pixel_rows so that subsequent calls go straight to - * the appropriate row-reading routine. - */ - -METHODDEF JDIMENSION -load_image (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -{ - rle_source_ptr source = (rle_source_ptr) sinfo; - JDIMENSION row, col; - JSAMPROW scanline, red_ptr, green_ptr, blue_ptr; - rle_pixel **rle_row; - rle_map *colormap; - char channel; -#ifdef PROGRESS_REPORT - cd_progress_ptr progress = (cd_progress_ptr) cinfo->progress; -#endif - - colormap = source->header.cmap; - rle_row = source->rle_row; - row = cinfo->image_height; - - /* Read the RLE data into our virtual array. - * We assume here that (a) rle_pixel is represented the same as JSAMPLE, - * and (b) we are not on a machine where FAR pointers differ from regular. - */ - RLE_CLR_BIT(source->header, RLE_ALPHA); /* don't read the alpha channel */ - -#ifdef PROGRESS_REPORT - if (progress != NULL) { - progress->pub.pass_limit = cinfo->image_height; - progress->pub.pass_counter = 0; - (*progress->pub.progress_monitor) ((j_common_ptr) cinfo); - } -#endif - - switch (source->visual) { - - case GRAYSCALE: - case PSEUDOCOLOR: - while (row--) { - rle_row = (rle_pixel **) (*cinfo->mem->access_virt_sarray) - ((j_common_ptr) cinfo, source->image, row, TRUE); - rle_getrow(&source->header, rle_row); -#ifdef PROGRESS_REPORT - if (progress != NULL) { - progress->pub.pass_counter++; - (*progress->pub.progress_monitor) ((j_common_ptr) cinfo); - } -#endif - } - break; - - case MAPPEDGRAY: - case TRUECOLOR: - while (row--) { - scanline = * (*cinfo->mem->access_virt_sarray) - ((j_common_ptr) cinfo, source->image, row, TRUE); - rle_row = source->rle_row; - rle_getrow(&source->header, rle_row); - - for (col = 0; col < cinfo->image_width; col++) { - for (channel = 0; channel < source->header.ncolors; channel++) { - *scanline++ = (JSAMPLE) - colormap[GETJSAMPLE(rle_row[channel][col]) + 256 * channel] >> 8; - } - } - -#ifdef PROGRESS_REPORT - if (progress != NULL) { - progress->pub.pass_counter++; - (*progress->pub.progress_monitor) ((j_common_ptr) cinfo); - } -#endif - } - break; - - case DIRECTCOLOR: - while (row--) { - scanline = * (*cinfo->mem->access_virt_sarray) - ((j_common_ptr) cinfo, source->image, row, TRUE); - rle_getrow(&source->header, rle_row); - - red_ptr = rle_row[0]; - green_ptr = rle_row[1]; - blue_ptr = rle_row[2]; - - for (col = cinfo->image_width; col > 0; col--) { - *scanline++ = *red_ptr++; - *scanline++ = *green_ptr++; - *scanline++ = *blue_ptr++; - } - -#ifdef PROGRESS_REPORT - if (progress != NULL) { - progress->pub.pass_counter++; - (*progress->pub.progress_monitor) ((j_common_ptr) cinfo); - } -#endif - } - } - -#ifdef PROGRESS_REPORT - if (progress != NULL) - progress->completed_extra_passes++; -#endif - - /* Set up to call proper row-extraction routine in future */ - if (source->visual == PSEUDOCOLOR) { - source->pub.buffer = source->rle_row; - source->pub.get_pixel_rows = get_pseudocolor_row; - } else { - source->pub.get_pixel_rows = get_rle_row; - } - - /* And fetch the topmost (bottommost) row */ - return (*source->pub.get_pixel_rows) (cinfo, sinfo); -} - - -/* - * Finish up at the end of the file. - */ - -METHODDEF void -finish_input_rle (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -{ - /* no work */ -} - - -/* - * The module selection routine for RLE format input. - */ - -GLOBAL cjpeg_source_ptr -jinit_read_rle (j_compress_ptr cinfo) -{ - rle_source_ptr source; - - /* Create module interface object */ - source = (rle_source_ptr) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - SIZEOF(rle_source_struct)); - /* Fill in method ptrs */ - source->pub.start_input = start_input_rle; - source->pub.finish_input = finish_input_rle; - source->pub.get_pixel_rows = load_image; - - return (cjpeg_source_ptr) source; -} - -#endif /* RLE_SUPPORTED */ diff --git a/jpeg/rdtarga.c b/jpeg/rdtarga.c deleted file mode 100644 index 8c58138a3e..0000000000 --- a/jpeg/rdtarga.c +++ /dev/null @@ -1,499 +0,0 @@ -/* - * rdtarga.c - * - * Copyright (C) 1991-1994, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains routines to read input images in Targa format. - * - * These routines may need modification for non-Unix environments or - * specialized applications. As they stand, they assume input from - * an ordinary stdio stream. They further assume that reading begins - * at the start of the file; start_input may need work if the - * user interface has already read some data (e.g., to determine that - * the file is indeed Targa format). - * - * Based on code contributed by Lee Daniel Crocker. - */ - -#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ - -#ifdef TARGA_SUPPORTED - - -/* Macros to deal with unsigned chars as efficiently as compiler allows */ - -#ifdef HAVE_UNSIGNED_CHAR -typedef unsigned char U_CHAR; -#define UCH(x) ((int) (x)) -#else /* !HAVE_UNSIGNED_CHAR */ -#ifdef CHAR_IS_UNSIGNED -typedef char U_CHAR; -#define UCH(x) ((int) (x)) -#else -typedef char U_CHAR; -#define UCH(x) ((int) (x) & 0xFF) -#endif -#endif /* HAVE_UNSIGNED_CHAR */ - - -#define ReadOK(file,buffer,len) (JFREAD(file,buffer,len) == ((size_t) (len))) - - -/* Private version of data source object */ - -typedef struct _tga_source_struct * tga_source_ptr; - -typedef struct _tga_source_struct { - struct cjpeg_source_struct pub; /* public fields */ - - j_compress_ptr cinfo; /* back link saves passing separate parm */ - - JSAMPARRAY colormap; /* Targa colormap (converted to my format) */ - - jvirt_sarray_ptr whole_image; /* Needed if funny input row order */ - JDIMENSION current_row; /* Current logical row number to read */ - - /* Pointer to routine to extract next Targa pixel from input file */ - JMETHOD(void, read_pixel, (tga_source_ptr sinfo)); - - /* Result of read_pixel is delivered here: */ - U_CHAR tga_pixel[4]; - - int pixel_size; /* Bytes per Targa pixel (1 to 4) */ - - /* State info for reading RLE-coded pixels; both counts must be init to 0 */ - int block_count; /* # of pixels remaining in RLE block */ - int dup_pixel_count; /* # of times to duplicate previous pixel */ - - /* This saves the correct pixel-row-expansion method for preload_image */ - JMETHOD(JDIMENSION, get_pixel_rows, (j_compress_ptr cinfo, - cjpeg_source_ptr sinfo)); -} tga_source_struct; - - -/* For expanding 5-bit pixel values to 8-bit with best rounding */ - -static const UINT8 c5to8bits[32] = { - 0, 8, 16, 24, 32, 41, 49, 57, - 65, 74, 82, 90, 98, 106, 115, 123, - 131, 139, 148, 156, 164, 172, 180, 189, - 197, 205, 213, 222, 230, 238, 246, 255 -}; - - - -LOCAL int -read_byte (tga_source_ptr sinfo) -/* Read next byte from Targa file */ -{ - register FILE *infile = sinfo->pub.input_file; - register int c; - - if ((c = getc(infile)) == EOF) - ERREXIT(sinfo->cinfo, JERR_INPUT_EOF); - return c; -} - - -LOCAL void -read_colormap (tga_source_ptr sinfo, int cmaplen, int mapentrysize) -/* Read the colormap from a Targa file */ -{ - int i; - - /* Presently only handles 24-bit BGR format */ - if (mapentrysize != 24) - ERREXIT(sinfo->cinfo, JERR_TGA_BADCMAP); - - for (i = 0; i < cmaplen; i++) { - sinfo->colormap[2][i] = (JSAMPLE) read_byte(sinfo); - sinfo->colormap[1][i] = (JSAMPLE) read_byte(sinfo); - sinfo->colormap[0][i] = (JSAMPLE) read_byte(sinfo); - } -} - - -/* - * read_pixel methods: get a single pixel from Targa file into tga_pixel[] - */ - -LOCAL void -read_non_rle_pixel (tga_source_ptr sinfo) -/* Read one Targa pixel from the input file; no RLE expansion */ -{ - register FILE *infile = sinfo->pub.input_file; - register int i; - - for (i = 0; i < sinfo->pixel_size; i++) { - sinfo->tga_pixel[i] = (U_CHAR) getc(infile); - } -} - - -LOCAL void -read_rle_pixel (tga_source_ptr sinfo) -/* Read one Targa pixel from the input file, expanding RLE data as needed */ -{ - register FILE *infile = sinfo->pub.input_file; - register int i; - - /* Duplicate previously read pixel? */ - if (sinfo->dup_pixel_count > 0) { - sinfo->dup_pixel_count--; - return; - } - - /* Time to read RLE block header? */ - if (--sinfo->block_count < 0) { /* decrement pixels remaining in block */ - i = read_byte(sinfo); - if (i & 0x80) { /* Start of duplicate-pixel block? */ - sinfo->dup_pixel_count = i & 0x7F; /* number of dups after this one */ - sinfo->block_count = 0; /* then read new block header */ - } else { - sinfo->block_count = i & 0x7F; /* number of pixels after this one */ - } - } - - /* Read next pixel */ - for (i = 0; i < sinfo->pixel_size; i++) { - sinfo->tga_pixel[i] = (U_CHAR) getc(infile); - } -} - - -/* - * Read one row of pixels. - * - * We provide several different versions depending on input file format. - */ - - -METHODDEF JDIMENSION -get_8bit_gray_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -/* This version is for reading 8-bit grayscale pixels */ -{ - tga_source_ptr source = (tga_source_ptr) sinfo; - register JSAMPROW ptr; - register JDIMENSION col; - - ptr = source->pub.buffer[0]; - for (col = cinfo->image_width; col > 0; col--) { - (*source->read_pixel) (source); /* Load next pixel into tga_pixel */ - *ptr++ = (JSAMPLE) UCH(source->tga_pixel[0]); - } - return 1; -} - -METHODDEF JDIMENSION -get_8bit_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -/* This version is for reading 8-bit colormap indexes */ -{ - tga_source_ptr source = (tga_source_ptr) sinfo; - register int t; - register JSAMPROW ptr; - register JDIMENSION col; - register JSAMPARRAY colormap = source->colormap; - - ptr = source->pub.buffer[0]; - for (col = cinfo->image_width; col > 0; col--) { - (*source->read_pixel) (source); /* Load next pixel into tga_pixel */ - t = UCH(source->tga_pixel[0]); - *ptr++ = colormap[0][t]; - *ptr++ = colormap[1][t]; - *ptr++ = colormap[2][t]; - } - return 1; -} - -METHODDEF JDIMENSION -get_16bit_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -/* This version is for reading 16-bit pixels */ -{ - tga_source_ptr source = (tga_source_ptr) sinfo; - register int t; - register JSAMPROW ptr; - register JDIMENSION col; - - ptr = source->pub.buffer[0]; - for (col = cinfo->image_width; col > 0; col--) { - (*source->read_pixel) (source); /* Load next pixel into tga_pixel */ - t = UCH(source->tga_pixel[0]); - t += UCH(source->tga_pixel[1]) << 8; - /* We expand 5 bit data to 8 bit sample width. - * The format of the 16-bit (LSB first) input word is - * xRRRRRGGGGGBBBBB - */ - ptr[2] = (JSAMPLE) c5to8bits[t & 0x1F]; - t >>= 5; - ptr[1] = (JSAMPLE) c5to8bits[t & 0x1F]; - t >>= 5; - ptr[0] = (JSAMPLE) c5to8bits[t & 0x1F]; - ptr += 3; - } - return 1; -} - -METHODDEF JDIMENSION -get_24bit_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -/* This version is for reading 24-bit pixels */ -{ - tga_source_ptr source = (tga_source_ptr) sinfo; - register JSAMPROW ptr; - register JDIMENSION col; - - ptr = source->pub.buffer[0]; - for (col = cinfo->image_width; col > 0; col--) { - (*source->read_pixel) (source); /* Load next pixel into tga_pixel */ - *ptr++ = (JSAMPLE) UCH(source->tga_pixel[2]); /* change BGR to RGB order */ - *ptr++ = (JSAMPLE) UCH(source->tga_pixel[1]); - *ptr++ = (JSAMPLE) UCH(source->tga_pixel[0]); - } - return 1; -} - -/* - * Targa also defines a 32-bit pixel format with order B,G,R,A. - * We presently ignore the attribute byte, so the code for reading - * these pixels is identical to the 24-bit routine above. - * This works because the actual pixel length is only known to read_pixel. - */ - -#define get_32bit_row get_24bit_row - - -/* - * This method is for re-reading the input data in standard top-down - * row order. The entire image has already been read into whole_image - * with proper conversion of pixel format, but it's in a funny row order. - */ - -METHODDEF JDIMENSION -get_memory_row (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -{ - tga_source_ptr source = (tga_source_ptr) sinfo; - JDIMENSION source_row; - - /* Compute row of source that maps to current_row of normal order */ - /* For now, assume image is bottom-up and not interlaced. */ - /* NEEDS WORK to support interlaced images! */ - source_row = cinfo->image_height - source->current_row - 1; - - /* Fetch that row from virtual array */ - source->pub.buffer = (*cinfo->mem->access_virt_sarray) - ((j_common_ptr) cinfo, source->whole_image, source_row, FALSE); - - source->current_row++; - return 1; -} - - -/* - * This method loads the image into whole_image during the first call on - * get_pixel_rows. The get_pixel_rows pointer is then adjusted to call - * get_memory_row on subsequent calls. - */ - -METHODDEF JDIMENSION -preload_image (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -{ - tga_source_ptr source = (tga_source_ptr) sinfo; - JDIMENSION row; - cd_progress_ptr progress = (cd_progress_ptr) cinfo->progress; - - /* Read the data into a virtual array in input-file row order. */ - for (row = 0; row < cinfo->image_height; row++) { - if (progress != NULL) { - progress->pub.pass_counter = (long) row; - progress->pub.pass_limit = (long) cinfo->image_height; - (*progress->pub.progress_monitor) ((j_common_ptr) cinfo); - } - source->pub.buffer = (*cinfo->mem->access_virt_sarray) - ((j_common_ptr) cinfo, source->whole_image, row, TRUE); - (*source->get_pixel_rows) (cinfo, sinfo); - } - if (progress != NULL) - progress->completed_extra_passes++; - - /* Set up to read from the virtual array in unscrambled order */ - source->pub.get_pixel_rows = get_memory_row; - source->current_row = 0; - /* And read the first row */ - return get_memory_row(cinfo, sinfo); -} - - -/* - * Read the file header; return image size and component count. - */ - -METHODDEF void -start_input_tga (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -{ - tga_source_ptr source = (tga_source_ptr) sinfo; - U_CHAR targaheader[18]; - int idlen, cmaptype, subtype, flags, interlace_type, components; - unsigned int width, height, maplen; - boolean is_bottom_up; - -#define GET_2B(offset) ((unsigned int) UCH(targaheader[offset]) + \ - (((unsigned int) UCH(targaheader[offset+1])) << 8)) - - if (! ReadOK(source->pub.input_file, targaheader, 18)) - ERREXIT(cinfo, JERR_INPUT_EOF); - - /* Pretend "15-bit" pixels are 16-bit --- we ignore attribute bit anyway */ - if (targaheader[16] == 15) - targaheader[16] = 16; - - idlen = UCH(targaheader[0]); - cmaptype = UCH(targaheader[1]); - subtype = UCH(targaheader[2]); - maplen = GET_2B(5); - width = GET_2B(12); - height = GET_2B(14); - source->pixel_size = UCH(targaheader[16]) >> 3; - flags = UCH(targaheader[17]); /* Image Descriptor byte */ - - is_bottom_up = ((flags & 0x20) == 0); /* bit 5 set => top-down */ - interlace_type = flags >> 6; /* bits 6/7 are interlace code */ - - if (cmaptype > 1 || /* cmaptype must be 0 or 1 */ - source->pixel_size < 1 || source->pixel_size > 4 || - (UCH(targaheader[16]) & 7) != 0 || /* bits/pixel must be multiple of 8 */ - interlace_type != 0) /* currently don't allow interlaced image */ - ERREXIT(cinfo, JERR_TGA_BADPARMS); - - if (subtype > 8) { - /* It's an RLE-coded file */ - source->read_pixel = read_rle_pixel; - source->block_count = source->dup_pixel_count = 0; - subtype -= 8; - } else { - /* Non-RLE file */ - source->read_pixel = read_non_rle_pixel; - } - - /* Now should have subtype 1, 2, or 3 */ - components = 3; /* until proven different */ - cinfo->in_color_space = JCS_RGB; - - switch (subtype) { - case 1: /* Colormapped image */ - if (source->pixel_size == 1 && cmaptype == 1) - source->get_pixel_rows = get_8bit_row; - else - ERREXIT(cinfo, JERR_TGA_BADPARMS); - TRACEMS2(cinfo, 1, JTRC_TGA_MAPPED, width, height); - break; - case 2: /* RGB image */ - switch (source->pixel_size) { - case 2: - source->get_pixel_rows = get_16bit_row; - break; - case 3: - source->get_pixel_rows = get_24bit_row; - break; - case 4: - source->get_pixel_rows = get_32bit_row; - break; - default: - ERREXIT(cinfo, JERR_TGA_BADPARMS); - break; - } - TRACEMS2(cinfo, 1, JTRC_TGA, width, height); - break; - case 3: /* Grayscale image */ - components = 1; - cinfo->in_color_space = JCS_GRAYSCALE; - if (source->pixel_size == 1) - source->get_pixel_rows = get_8bit_gray_row; - else - ERREXIT(cinfo, JERR_TGA_BADPARMS); - TRACEMS2(cinfo, 1, JTRC_TGA_GRAY, width, height); - break; - default: - ERREXIT(cinfo, JERR_TGA_BADPARMS); - break; - } - - if (is_bottom_up) { - /* Create a virtual array to buffer the upside-down image. */ - source->whole_image = (*cinfo->mem->request_virt_sarray) - ((j_common_ptr) cinfo, JPOOL_IMAGE, - (JDIMENSION) width * components, (JDIMENSION) height, (JDIMENSION) 1); - if (cinfo->progress != NULL) { - cd_progress_ptr progress = (cd_progress_ptr) cinfo->progress; - progress->total_extra_passes++; /* count file input as separate pass */ - } - /* source->pub.buffer will point to the virtual array. */ - source->pub.buffer_height = 1; /* in case anyone looks at it */ - source->pub.get_pixel_rows = preload_image; - } else { - /* Don't need a virtual array, but do need a one-row input buffer. */ - source->whole_image = NULL; - source->pub.buffer = (*cinfo->mem->alloc_sarray) - ((j_common_ptr) cinfo, JPOOL_IMAGE, - (JDIMENSION) width * components, (JDIMENSION) 1); - source->pub.buffer_height = 1; - source->pub.get_pixel_rows = source->get_pixel_rows; - } - - while (idlen--) /* Throw away ID field */ - (void) read_byte(source); - - if (maplen > 0) { - if (maplen > 256 || GET_2B(3) != 0) - ERREXIT(cinfo, JERR_TGA_BADCMAP); - /* Allocate space to store the colormap */ - source->colormap = (*cinfo->mem->alloc_sarray) - ((j_common_ptr) cinfo, JPOOL_IMAGE, (JDIMENSION) maplen, (JDIMENSION) 3); - /* and read it from the file */ - read_colormap(source, (int) maplen, UCH(targaheader[7])); - } else { - if (cmaptype) /* but you promised a cmap! */ - ERREXIT(cinfo, JERR_TGA_BADPARMS); - source->colormap = NULL; - } - - cinfo->input_components = components; - cinfo->data_precision = 8; - cinfo->image_width = width; - cinfo->image_height = height; -} - - -/* - * Finish up at the end of the file. - */ - -METHODDEF void -finish_input_tga (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) -{ - /* no work */ -} - - -/* - * The module selection routine for Targa format input. - */ - -GLOBAL cjpeg_source_ptr -jinit_read_targa (j_compress_ptr cinfo) -{ - tga_source_ptr source; - - /* Create module interface object */ - source = (tga_source_ptr) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - SIZEOF(tga_source_struct)); - source->cinfo = cinfo; /* make back link for subroutines */ - /* Fill in method ptrs, except get_pixel_rows which start_input sets */ - source->pub.start_input = start_input_tga; - source->pub.finish_input = finish_input_tga; - - return (cjpeg_source_ptr) source; -} - -#endif /* TARGA_SUPPORTED */ diff --git a/jpeg/structure.doc b/jpeg/structure.doc deleted file mode 100644 index 30d5828bf3..0000000000 --- a/jpeg/structure.doc +++ /dev/null @@ -1,862 +0,0 @@ -IJG JPEG LIBRARY: SYSTEM ARCHITECTURE - -Copyright (C) 1991-1994, Thomas G. Lane. -This file is part of the Independent JPEG Group's software. -For conditions of distribution and use, see the accompanying README file. - - -This file provides an overview of the architecture of the IJG JPEG software; -that is, the functions of the various modules in the system and the interfaces -between modules. For more precise details about any data structure or calling -convention, see the include files and comments in the source code. - -We assume that the reader is already somewhat familiar with the JPEG standard. -The README file includes references for learning about JPEG. The file -libjpeg.doc describes the library from the viewpoint of an application -programmer using the library; it's best to read that file before this one. -Also, the file coderules.doc describes the coding style conventions we use. - -In this document, JPEG-specific terminology follows the JPEG standard: - A "component" means a color channel, e.g., Red or Luminance. - A "sample" is a single component value (i.e., one number in the image data). - A "coefficient" is a frequency coefficient (a DCT transform output number). - A "block" is an 8x8 group of samples or coefficients. - An "MCU" (minimum coded unit) is an interleaved set of blocks of size - determined by the sampling factors, or a single block in a - noninterleaved scan. -We do not use the terms "pixel" and "sample" interchangeably. When we say -pixel, we mean an element of the full-size image, while a sample is an element -of the downsampled image. Thus the number of samples may vary across -components while the number of pixels does not. (This terminology is not used -rigorously throughout the code, but it is used in places where confusion would -otherwise result.) - - -*** System features *** - -The IJG distribution contains two parts: - * A subroutine library for JPEG compression and decompression. - * cjpeg/djpeg, two simple applications that use the library to transform - JFIF JPEG files to and from several other image formats. -cjpeg/djpeg are of no great intellectual complexity: they merely add a simple -command-line user interface and I/O routines for several uncompressed image -formats. This document concentrates on the library itself. - -We desire the library to be capable of supporting all JPEG baseline and -extended sequential DCT processes. Progressive processes are also allowed -for in the system architecture, although they are not likely to be -implemented very soon. Hierarchical processes are not supported. - -The library does not support the lossless (spatial) JPEG process. Lossless -JPEG shares little or no code with lossy JPEG, and would normally be used -without the extensive pre- and post-processing provided by this library. -We feel that lossless JPEG is better handled by a separate library. - -Within these limits, any set of compression parameters allowed by the JPEG -spec should be readable for decompression. (We can be more restrictive about -what formats we can generate.) Although the system design allows for all -parameter values, some uncommon settings are not yet implemented and may -never be; nonintegral sampling ratios are the prime example. Furthermore, -we treat 8-bit vs. 12-bit data precision as a compile-time switch, not a -run-time option, because most machines can store 8-bit pixels much more -compactly than 12-bit. - -For legal reasons, JPEG arithmetic coding is not currently supported, but -extending the library to include it would be straightforward. - -By itself, the library handles only interchange JPEG datastreams --- in -particular the widely used JFIF file format. The library can be used by -surrounding code to process interchange or abbreviated JPEG datastreams that -are embedded in more complex file formats. (For example, we anticipate that -Sam Leffler's TIFF library will use this code to support the revised TIFF -JPEG format.) - -The library includes a substantial amount of code that is not covered by the -JPEG standard but is necessary for typical applications of JPEG. These -functions preprocess the image before JPEG compression or postprocess it after -decompression. They include colorspace conversion, downsampling/upsampling, -and color quantization. This code can be omitted if not needed. - -A wide range of quality vs. speed tradeoffs are possible in JPEG processing, -and even more so in decompression postprocessing. The decompression library -provides multiple implementations that cover most of the useful tradeoffs, -ranging from very-high-quality down to fast-preview operation. On the -compression side we have generally not provided low-quality choices, since -compression is normally less time-critical. It should be understood that the -low-quality modes may not meet the JPEG standard's accuracy requirements; -nonetheless, they are useful for viewers. - - -*** Portability issues *** - -Portability is an essential requirement for the library. The key portability -issues that show up at the level of system architecture are: - -1. Memory usage. We want the code to be able to run on PC-class machines -with limited memory. Images should therefore be processed sequentially (in -strips), to avoid holding the whole image in memory at once. Where a -full-image buffer is necessary, we should be able to use either virtual memory -or temporary files. - -2. Near/far pointer distinction. To run efficiently on 80x86 machines, the -code should distinguish "small" objects (kept in near data space) from -"large" ones (kept in far data space). This is an annoying restriction, but -fortunately it does not impact code quality for less brain-damaged machines, -and the source code clutter turns out to be minimal with sufficient use of -pointer typedefs. - -3. Data precision. We assume that "char" is at least 8 bits, "short" and -"int" at least 16, "long" at least 32. The code will work fine with larger -data sizes, although memory may be used inefficiently in some cases. However, -the JPEG compressed datastream must ultimately appear on external storage as a -sequence of 8-bit bytes if it is to conform to the standard. This may pose a -problem on machines where char is wider than 8 bits. The library represents -compressed data as an array of values of typedef JOCTET. If no data type -exactly 8 bits wide is available, custom data source and data destination -modules must be written to unpack and pack the chosen JOCTET datatype into -8-bit external representation. - - -*** System overview *** - -The compressor and decompressor are each divided into two main sections: -the JPEG compressor or decompressor proper, and the preprocessing or -postprocessing functions. The interface between these two sections is the -image data that the official JPEG spec regards as its input or output: this -data is in the colorspace to be used for compression, and it is downsampled -to the sampling factors to be used. The preprocessing and postprocessing -steps are responsible for converting a normal image representation to or from -this form. (Those few applications that want to deal with YCbCr downsampled -data can skip the preprocessing or postprocessing step.) - -Looking more closely, the compressor library contains the following main -elements: - - Preprocessing: - * Color space conversion (e.g., RGB to YCbCr). This step may also - provide gamma adjustment. - * Edge expansion and downsampling. Optionally, this step can do simple - smoothing --- this is often helpful for low-quality source data. - JPEG proper: - * MCU assembly, DCT, quantization. - * Entropy coding (Huffman or arithmetic). - -In addition to these modules we need overall control, marker generation, -and support code (memory management & error handling). There is also a -module responsible for physically writing the output data --- typically -this is just an interface to fwrite(), but some applications may need to -do something else with the data. - -The decompressor library contains the following main elements: - - JPEG proper: - * Entropy decoding (Huffman or arithmetic). - * Dequantization, inverse DCT, MCU disassembly. - Postprocessing: - * Upsampling. Optionally, this step may be able to do more general - rescaling of the image. - * Color space conversion (e.g., YCbCr to RGB). This step may also - provide gamma adjustment. - * Optional color quantization (e.g., reduction to 256 colors). - * Optional color precision reduction (e.g., 24-bit to 15-bit color). - [Not implemented in v5.] - -We also need overall control, marker parsing, and a data source module. -The support code (memory management & error handling) can be shared with -the compression half of the library. - -There may be several implementations of each of these elements, particularly -in the decompressor, where a wide range of speed/quality tradeoffs is very -useful. It must be understood that some of the best speedups involve -merging adjacent steps in the pipeline. For example, upsampling, color space -conversion, and color quantization might all be done at once when using a -low-quality ordered-dither technique. The system architecture is designed to -allow such merging where appropriate. - - -Note: it is convenient to regard edge expansion (padding to block boundaries) -as a preprocessing/postprocessing function, even though the JPEG spec includes -it in compression/decompression. We do this because downsampling/upsampling -can be simplified a little if they work on padded data: it's not necessary to -have special cases at the right and bottom edges. Therefore the interface -buffer is always an integral number of blocks wide and high, and we expect -compression preprocessing to pad the source data properly. Padding will occur -only to the next block (8-sample) boundary. In an interleaved-scan situation, -additional dummy blocks may be used to fill out MCUs, but the MCU assembly and -disassembly logic will create or discard these blocks internally. (This is -advantageous for speed reasons, since we avoid DCTing the dummy blocks. -It also permits a small reduction in file size, because the compressor can -choose dummy block contents so as to minimize their size in compressed form.) -Applications that wish to deal directly with the downsampled data must provide -similar buffering and padding for odd-sized images. - - -*** Poor man's object-oriented programming *** - -It should be clear by now that we have a lot of quasi-independent processing -steps, many of which have several possible behaviors. To avoid cluttering the -code with lots of switch statements, we use a simple form of object-style -programming to separate out the different possibilities. - -For example, two different color quantization algorithms could be implemented -as two separate modules that present the same external interface; at runtime, -the calling code will access the proper module indirectly through an "object". - -We can get the limited features we need while staying within portable C. -The basic tool is a function pointer. An "object" is just a struct -containing one or more function pointer fields, each of which corresponds to -a method name in real object-oriented languages. During initialization we -fill in the function pointers with references to whichever module we have -determined we need to use in this run. Then invocation of the module is done -by indirecting through a function pointer; on most machines this is no more -expensive than a switch statement, which would be the only other way of -making the required run-time choice. The really significant benefit, of -course, is keeping the source code clean and well structured. - -We can also arrange to have private storage that varies between different -implementations of the same kind of object. We do this by making all the -module-specific object structs be separately allocated entities, which will -be accessed via pointers in the master compression or decompression struct. -The "public" fields or methods for a given kind of object are specified by -a commonly known struct. But a module's initialization code can allocate -a larger struct that contains the common struct as its first member, plus -additional private fields. With appropriate pointer casting, the module's -internal functions can access these private fields. (For a simple example, -see jdatadst.c, which implements the external interface specified by struct -jpeg_destination_mgr, but adds extra fields.) - -(Of course this would all be a lot easier if we were using C++, but we are -not yet prepared to assume that everyone has a C++ compiler.) - -An important benefit of this scheme is that it is easy to provide multiple -versions of any method, each tuned to a particular case. While a lot of -precalculation might be done to select an optimal implementation of a method, -the cost per invocation is constant. For example, the upsampling step might -have a "generic" method, plus one or more "hardwired" methods for the most -popular sampling factors; the hardwired methods would be faster because they'd -use straight-line code instead of for-loops. The cost to determine which -method to use is paid only once, at startup, and the selection criteria are -hidden from the callers of the method. - -This plan differs a little bit from usual object-oriented structures, in that -only one instance of each object class will exist during execution. The -reason for having the class structure is that on different runs we may create -different instances (choose to execute different modules). You can think of -the term "method" as denoting the common interface presented by a particular -set of interchangeable functions, and "object" as denoting a group of related -methods, or the total shared interface behavior of a group of modules. - - -*** Overall control structure *** - -We previously mentioned the need for overall control logic in the compression -and decompression libraries. In IJG implementations prior to v5, overall -control was mostly provided by "pipeline control" modules, which proved to be -large, unwieldy, and hard to understand. To improve the situation, the -control logic has been subdivided into multiple modules. The control modules -consist of: - -1. Master control for module selection and initialization. This has two -responsibilities: - - 1A. Startup initialization at the beginning of image processing. - The individual processing modules to be used in this run are selected - and given initialization calls. - - 1B. Per-pass control. This determines how many passes will be performed - and calls each active processing module to configure itself - appropriately at the beginning of each pass. End-of-pass processing, - where necessary, is also invoked from the master control module. - - Method selection is partially distributed, in that a particular processing - module may contain several possible implementations of a particular method, - which it will select among when given its initialization call. The master - control code need only be concerned with decisions that affect more than - one module. - -2. Data buffering control. A separate control module exists for each - inter-processing-step data buffer. This module is responsible for - invoking the processing steps that write or read that data buffer. - -Each buffer controller sees the world as follows: - -input data => processing step A => buffer => processing step B => output data - | | | - ------------------ controller ------------------ - -The controller knows the dataflow requirements of steps A and B: how much data -they want to accept in one chunk and how much they output in one chunk. Its -function is to manage its buffer and call A and B at the proper times. - -A data buffer control module may itself be viewed as a processing step by a -higher-level control module; thus the control modules form a binary tree with -elementary processing steps at the leaves of the tree. - -The control modules are objects. A considerable amount of flexibility can -be had by replacing implementations of a control module. For example: -* Merging of adjacent steps in the pipeline is done by replacing a control - module and its pair of processing-step modules with a single processing- - step module. (Hence the possible merges are determined by the tree of - control modules.) -* In some processing modes, a given interstep buffer need only be a "strip" - buffer large enough to accommodate the desired data chunk sizes. In other - modes, a full-image buffer is needed and several passes are required. - The control module determines which kind of buffer is used and manipulates - virtual array buffers as needed. One or both processing steps may be - unaware of the multi-pass behavior. - -In theory, we might be able to make all of the data buffer controllers -interchangeable and provide just one set of implementations for all. In -practice, each one contains considerable special-case processing for its -particular job. The buffer controller concept should be regarded as an -overall system structuring principle, not as a complete description of the -task performed by any one controller. - - -*** Compression object structure *** - -Here is a sketch of the logical structure of the JPEG compression library: - - |-- Colorspace conversion - |-- Preprocessing controller --| - | |-- Downsampling -Main controller --| - | |-- Forward DCT, quantize - |-- Coefficient controller --| - |-- Entropy encoding - -This sketch also describes the flow of control (subroutine calls) during -typical image data processing. Each of the components shown in the diagram is -an "object" which may have several different implementations available. One -or more source code files contain the actual implementation(s) of each object. - -The objects shown above are: - -* Main controller: buffer controller for the subsampled-data buffer, which - holds the preprocessed input data. This controller invokes preprocessing to - fill the subsampled-data buffer, and JPEG compression to empty it. There is - usually no need for a full-image buffer here; a strip buffer is adequate. - -* Preprocessing controller: buffer controller for the downsampling input data - buffer, which lies between colorspace conversion and downsampling. Note - that a unified conversion/downsampling module would probably replace this - controller entirely. - -* Colorspace conversion: converts application image data into the desired - JPEG color space; also changes the data from pixel-interleaved layout to - separate component planes. Processes one pixel row at a time. - -* Downsampling: performs reduction of chroma components as required. - Optionally may perform pixel-level smoothing as well. Processes a "row - group" at a time, where a row group is defined as Vmax pixel rows of each - component before downsampling, and Vk sample rows afterwards (remember Vk - differs across components). Some downsampling or smoothing algorithms may - require context rows above and below the current row group; the - preprocessing controller is responsible for supplying these rows via proper - buffering. The downsampler is responsible for edge expansion at the right - edge (i.e., extending each sample row to a multiple of 8 samples); but the - preprocessing controller is responsible for vertical edge expansion (i.e., - duplicating the bottom sample row as needed to make a multiple of 8 rows). - -* Coefficient controller: buffer controller for the DCT-coefficient data. - This controller handles MCU assembly, including insertion of dummy DCT - blocks when needed at the right or bottom edge. When performing - Huffman-code optimization or emitting a multiscan JPEG file, this - controller is responsible for buffering the full image. - -* Forward DCT and quantization: Perform DCT, quantize, and emit coefficients - in zigzag block order. Works on one or more DCT blocks at a time. - -* Entropy encoding: Perform Huffman or arithmetic entropy coding and emit the - coded data to the data destination module. Works on one MCU per call. - -In addition to the above objects, the compression library includes these -objects: - -* Master control: determines the number of passes required, controls overall - and per-pass initialization of the other modules. - -* Marker writing: generates JPEG markers (except for RSTn, which is emitted - by the entropy encoder when needed). - -* Data destination manager: writes the output JPEG datastream to its final - destination (e.g., a file). The destination manager supplied with the - library knows how to write to a stdio stream; for other behaviors, the - surrounding application may provide its own destination manager. - -* Memory manager: allocates and releases memory, controls virtual arrays - (with backing store management, where required). - -* Error handler: performs formatting and output of error and trace messages; - determines handling of nonfatal errors. The surrounding application may - override some or all of this object's methods to change error handling. - -* Progress monitor: supports output of "percent-done" progress reports. - This object represents an optional callback to the surrounding application: - if wanted, it must be supplied by the application. - -The error handler, destination manager, and progress monitor objects are -defined as separate objects in order to simplify application-specific -customization of the JPEG library. A surrounding application may override -individual methods or supply its own all-new implementation of one of these -objects. The object interfaces for these objects are therefore treated as -part of the application interface of the library, whereas the other objects -are internal to the library. - -The error handler and memory manager are shared by JPEG compression and -decompression; the progress monitor, if used, may be shared as well. - - -*** Decompression object structure *** - -Here is a sketch of the logical structure of the JPEG decompression library: - - |-- Entropy decoding - |-- Coefficient controller --| - | |-- Dequantize, Inverse DCT -Main controller --| - | |-- Upsampling - |-- Postprocessing controller --| |-- Colorspace conversion - |-- Color quantization - |-- Color precision reduction - -As before, this diagram also represents typical control flow. The objects -shown are: - -* Main controller: buffer controller for the subsampled-data buffer, which - holds the output of JPEG decompression proper. This controller's primary - task is to feed the postprocessing procedure. Some upsampling algorithms - may require context rows above and below the current row group; when this - is true, the main controller is responsible for managing its buffer so as - to make context rows available. In the current design, the main buffer is - always a strip buffer; a full-image buffer is never required. - -* Coefficient controller: buffer controller for the DCT-coefficient data. - This controller handles MCU disassembly, including deletion of any dummy - DCT blocks at the right or bottom edge. When reading a multiscan JPEG - file, this controller is responsible for buffering the full image. - (Buffering DCT coefficients, rather than samples, is necessary to support - progressive JPEG.) The equivalent of one fully interleaved MCU row of - subsampled data is processed per call, even when the source JPEG file is - noninterleaved. - -* Entropy decoding: Read coded data from the data source module and perform - Huffman or arithmetic entropy decoding. Works on one MCU per call. - -* Dequantization and inverse DCT: like it says. Note that the coefficients - buffered by the coefficient controller have NOT been dequantized; we - merge dequantization and inverse DCT into a single step for speed reasons. - When scaled-down output is asked for, simplified DCT algorithms may be used - that emit only 1x1, 2x2, or 4x4 samples per DCT block, not the full 8x8. - Works on one DCT block at a time. - -* Postprocessing controller: buffer controller for the color quantization - input buffer, when quantization is in use. (Without quantization, this - controller just calls the upsampler.) For two-pass quantization, this - controller is responsible for buffering the full-image data. - -* Upsampling: restores chroma components to full size. (May support more - general output rescaling, too. Note that if undersized DCT outputs have - been emitted by the DCT module, this module must adjust so that properly - sized outputs are created.) Works on one row group at a time. This module - also calls the color conversion module, so its top level is effectively a - buffer controller for the upsampling->color conversion buffer. However, in - all but the highest-quality operating modes, upsampling and color - conversion are likely to be merged into a single step. - -* Colorspace conversion: convert from JPEG color space to output color space, - and change data layout from separate component planes to pixel-interleaved. - Works on one pixel row at a time. - -* Color quantization: reduce the data to colormapped form, using either an - externally specified colormap or an internally generated one. This module - is not used for full-color output. Works on one pixel row at a time; may - require two passes to generate a color map. Note that the output will - always be a single component representing colormap indexes. In the current - design, the output values are JSAMPLEs, so an 8-bit compilation cannot - quantize to more than 256 colors. This is unlikely to be a problem in - practice. - -* Color reduction: this module handles color precision reduction, e.g., - generating 15-bit color (5 bits/primary) from JPEG's 24-bit output. - Not quite clear yet how this should be handled... should we merge it with - colorspace conversion??? - -Note that some high-speed operating modes might condense the entire -postprocessing sequence to a single module (upsample, color convert, and -quantize in one step). - -In addition to the above objects, the decompression library includes these -objects: - -* Master control: determines the number of passes required, controls overall - and per-pass initialization of the other modules. - -* Marker reading: decodes JPEG markers (except for RSTn). - -* Data source manager: supplies the input JPEG datastream. The source - manager supplied with the library knows how to read from a stdio stream; - for other behaviors, the surrounding application may provide its own source - manager. - -* Memory manager: same as for compression library. - -* Error handler: same as for compression library. - -* Progress monitor: same as for compression library. - -As with compression, the data source manager, error handler, and progress -monitor are candidates for replacement by a surrounding application. - - -*** Data formats *** - -Arrays of pixel sample values use the following data structure: - - typedef something JSAMPLE; a pixel component value, 0..MAXJSAMPLE - typedef JSAMPLE *JSAMPROW; ptr to a row of samples - typedef JSAMPROW *JSAMPARRAY; ptr to a list of rows - typedef JSAMPARRAY *JSAMPIMAGE; ptr to a list of color-component arrays - -The basic element type JSAMPLE will typically be one of unsigned char, -(signed) char, or short. Short will be used if samples wider than 8 bits are -to be supported (this is a compile-time option). Otherwise, unsigned char is -used if possible. If the compiler only supports signed chars, then it is -necessary to mask off the value when reading. Thus, all reads of JSAMPLE -values must be coded as "GETJSAMPLE(value)", where the macro will be defined -as "((value) & 0xFF)" on signed-char machines and "((int) (value))" elsewhere. - -With these conventions, JSAMPLE values can be assumed to be >= 0. This helps -simplify correct rounding during downsampling, etc. The JPEG standard's -specification that sample values run from -128..127 is accommodated by -subtracting 128 just as the sample value is copied into the source array for -the DCT step (this will be an array of signed ints). Similarly, during -decompression the output of the IDCT step will be immediately shifted back to -0..255. (NB: different values are required when 12-bit samples are in use. -The code is written in terms of MAXJSAMPLE and CENTERJSAMPLE, which will be -defined as 255 and 128 respectively in an 8-bit implementation, and as 4095 -and 2048 in a 12-bit implementation.) - -We use a pointer per row, rather than a two-dimensional JSAMPLE array. This -choice costs only a small amount of memory and has several benefits: -* Code using the data structure doesn't need to know the allocated width of - the rows. This simplifies edge expansion/compression, since we can work - in an array that's wider than the logical picture width. -* Indexing doesn't require multiplication; this is a performance win on many - machines. -* Arrays with more than 64K total elements can be supported even on machines - where malloc() cannot allocate chunks larger than 64K. -* The rows forming a component array may be allocated at different times - without extra copying. This trick allows some speedups in smoothing steps - that need access to the previous and next rows. - -Note that each color component is stored in a separate array; we don't use the -traditional layout in which the components of a pixel are stored together. -This simplifies coding of modules that work on each component independently, -because they don't need to know how many components there are. Furthermore, -we can read or write each component to a temporary file independently, which -is helpful when dealing with noninterleaved JPEG files. - -In general, a specific sample value is accessed by code such as - GETJSAMPLE(image[colorcomponent][row][col]) -where col is measured from the image left edge, but row is measured from the -first sample row currently in memory. Either of the first two indexings can -be precomputed by copying the relevant pointer. - - -Since most image-processing applications prefer to work on images in which -the components of a pixel are stored together, the data passed to or from the -surrounding application uses the traditional convention: a single pixel is -represented by N consecutive JSAMPLE values, and an image row is an array of -(# of color components)*(image width) JSAMPLEs. One or more rows of data can -be represented by a pointer of type JSAMPARRAY in this scheme. This scheme is -converted to component-wise storage inside the JPEG library. (Applications -that want to skip JPEG preprocessing or postprocessing will have to contend -with component-wise storage.) - - -Arrays of DCT-coefficient values use the following data structure: - - typedef short JCOEF; a 16-bit signed integer - typedef JCOEF JBLOCK[DCTSIZE2]; an 8x8 block of coefficients - typedef JBLOCK *JBLOCKROW; ptr to one horizontal row of 8x8 blocks - typedef JBLOCKROW *JBLOCKARRAY; ptr to a list of such rows - typedef JBLOCKARRAY *JBLOCKIMAGE; ptr to a list of color component arrays - -The underlying type is at least a 16-bit signed integer; while "short" is big -enough on all machines of interest, on some machines it is preferable to use -"int" for speed reasons, despite the storage cost. Coefficients are grouped -into 8x8 blocks (but we always use #defines DCTSIZE and DCTSIZE2 rather than -"8" and "64"). The contents of a block may be either in "natural" or -zigzagged order, and may be true values or divided by the quantization -coefficients, depending on where the block is in the processing pipeline. - -Notice that the allocation unit is now a row of 8x8 blocks, corresponding to -eight rows of samples. Otherwise the structure is much the same as for -samples, and for the same reasons. - -On machines where malloc() can't handle a request bigger than 64Kb, this data -structure limits us to rows of less than 512 JBLOCKs, or a picture width of -4000+ pixels. This seems an acceptable restriction. - - -On 80x86 machines, the bottom-level pointer types (JSAMPROW and JBLOCKROW) -must be declared as "far" pointers, but the upper levels can be "near" -(implying that the pointer lists are allocated in the DS segment). -We use a #define symbol FAR, which expands to the "far" keyword when -compiling on 80x86 machines and to nothing elsewhere. - - -*** Suspendable processing *** - -In some applications it is desirable to use the JPEG library as an -incremental, memory-to-memory filter. In this situation the data source or -destination may be a limited-size buffer, and we can't rely on being able to -empty or refill the buffer at arbitrary times. Instead the application would -like to have control return from the library at buffer overflow/underrun, and -then resume compression or decompression at a later time. - -This scenario is supported for simple cases, namely, single-pass processing -of single-scan JPEG files. (For anything more complex, we recommend that the -application "bite the bullet" and develop real multitasking capability.) The -libjpeg.doc file goes into more detail about the usage and limitations of -this capability; here we address the implications for library structure. - -The essence of the problem is that the entropy codec (coder or decoder) must -be prepared to stop at arbitrary times. In turn, the controllers that call -the entropy codec must be able to stop before having produced or consumed all -the data that they normally would handle in one call. That part is reasonably -straightforward: we make the controller call interfaces include "progress -counters" which indicate the number of data chunks successfully processed, and -we require callers to test the counter rather than just assume all of the data -was processed. - -Rather than trying to restart at an arbitrary point, the current Huffman -codecs are designed to restart at the beginning of the current MCU after a -suspension due to buffer overflow/underrun. At the start of each call, the -codec's internal state is loaded from permanent storage (in the JPEG object -structures) into local variables. On successful completion of the MCU, the -permanent state is updated. (This copying is not very expensive, and may even -lead to *improved* performance if the local variables can be registerized.) -If a suspension occurs, the codec simply returns without updating the state, -thus effectively reverting to the start of the MCU. Note that this implies -leaving some data unprocessed in the source/destination buffer (ie, the -compressed partial MCU). The data source/destination module interfaces are -specified so as to make this possible. This also implies that the data buffer -must be large enough to hold a worst-case compressed MCU; a couple thousand -bytes should be enough. - -This design would probably not work for an arithmetic codec, since its -modifiable state is quite large and couldn't be copied cheaply. Instead it -would have to suspend and resume exactly at the point of the buffer end. -Also, a progressive JPEG decoder would have some problems with having already -updated the output DCT coefficient buffer, since progressive decoding depends -on the prior state of the coefficient buffer. This case might also have to be -handled by exact restart. Currently I expect that IJG will just not support -suspendable operation in these cases (when and if we implement them at all). - -The JPEG marker reader is designed to cope with suspension at an arbitrary -point. It does so by backing up to the start of the marker parameter segment, -so the data buffer must be big enough to hold the largest marker of interest. -Again, a couple KB should be adequate. (A special "skip" convention is used -to bypass COM and APPn markers, so these can be larger than the buffer size -without causing problems; otherwise a 64K buffer would be needed in the worst -case.) - -The JPEG marker writer currently does *not* cope with suspension. I feel that -this is not necessary; it is much easier simply to require the application to -ensure there is enough buffer space before starting. (An empty 2K buffer is -more than sufficient for the header markers; and ensuring there are a dozen or -two bytes available before calling jpeg_finish_compress() will suffice for the -trailer.) Again, this would not work for writing multi-scan JPEG files, but -we simply do not intend to support that capability with suspension. - - -*** Memory manager services *** - -The JPEG library's memory manager controls allocation and deallocation of -memory, and it manages large "virtual" data arrays on machines where the -operating system does not provide virtual memory. Note that the same -memory manager serves both compression and decompression operations. - -In all cases, allocated objects are tied to a particular compression or -decompression master record, and they will be released when that master -record is destroyed. - -The memory manager does not provide explicit deallocation of objects. -Instead, objects are created in "pools" of free storage, and a whole pool -can be freed at once. This approach helps prevent storage-leak bugs, and -it speeds up operations whenever malloc/free are slow (as they often are). -The pools can be regarded as lifetime identifiers for objects. Two -pools/lifetimes are defined: - * JPOOL_PERMANENT lasts until master record is destroyed - * JPOOL_IMAGE lasts until done with image (JPEG datastream) -Permanent lifetime is used for parameters and tables that should be carried -across from one datastream to another; this includes all application-visible -parameters. Image lifetime is used for everything else. (A third lifetime, -JPOOL_PASS = one processing pass, was originally planned. However it was -dropped as not being worthwhile. The actual usage patterns are such that the -peak memory usage would be about the same anyway; and having per-pass storage -substantially complicates the virtual memory allocation rules --- see below.) - -The memory manager deals with three kinds of object: -1. "Small" objects. Typically these require no more than 10K-20K total. -2. "Large" objects. These may require tens to hundreds of K depending on - image size. Semantically they behave the same as small objects, but we - distinguish them for two reasons: - * On MS-DOS machines, large objects are referenced by FAR pointers, - small objects by NEAR pointers. - * Pool allocation heuristics may differ for large and small objects. - Note that individual "large" objects cannot exceed the size allowed by - type size_t, which may be 64K or less on some machines. -3. "Virtual" objects. These are large 2-D arrays of JSAMPLEs or JBLOCKs - (typically large enough for the entire image being processed). The - memory manager provides stripwise access to these arrays. On machines - without virtual memory, the rest of the array may be swapped out to a - temporary file. - -(Note: JSAMPARRAY and JBLOCKARRAY data structures are a combination of large -objects for the data proper and small objects for the row pointers. For -convenience and speed, the memory manager provides single routines to create -these structures. Similarly, virtual arrays include a small control block -and a JSAMPARRAY or JBLOCKARRAY working buffer, all created with one call.) - -In the present implementation, virtual arrays are only permitted to have image -lifespan. (Permanent lifespan would not be reasonable, and pass lifespan is -not very useful since a virtual array's raison d'etre is to store data for -multiple passes through the image.) We also expect that only "small" objects -will be given permanent lifespan, though this restriction is not required by -the memory manager. - -In a non-virtual-memory machine, some performance benefit can be gained by -making the in-memory buffers for virtual arrays be as large as possible. -(For small images, the buffers might fit entirely in memory, so blind -swapping would be very wasteful.) The memory manager will adjust the height -of the buffers to fit within a prespecified maximum memory usage. In order -to do this in a reasonably optimal fashion, the manager needs to allocate all -of the virtual arrays at once. Therefore, there isn't a one-step allocation -routine for virtual arrays; instead, there is a "request" routine that simply -allocates the control block, and a "realize" routine (called just once) that -determines space allocation and creates all of the actual buffers. The -realize routine must allow for space occupied by non-virtual large objects. -(We don't bother to factor in the space needed for small objects, on the -grounds that it isn't worth the trouble.) - -To support all this, we establish the following protocol for doing business -with the memory manager: - 1. Modules must request virtual arrays (which may have only image lifespan) - during the global selection phase, i.e., in their jinit_xxx routines. - 2. All "large" objects (including JSAMPARRAYs and JBLOCKARRAYs) must also be - allocated at global selection time. - 3. realize_virt_arrays will be called at the completion of global selection. - The above conventions ensure that sufficient information is available - for it to choose a good size for virtual array buffers. -Small objects of any lifespan may be allocated at any time. We expect that -the total space used for small objects will be small enough to be negligible -in the realize_virt_arrays computation. - -In a virtual-memory machine, we simply pretend that the available space is -infinite, thus causing realize_virt_arrays to decide that it can allocate all -the virtual arrays as full-size in-memory buffers. The overhead of the -virtual-array access protocol is very small when no swapping occurs. - - -*** Memory manager internal structure *** - -To isolate system dependencies as much as possible, we have broken the -memory manager into two parts. There is a reasonably system-independent -"front end" (jmemmgr.c) and a "back end" that contains only the code -likely to change across systems. All of the memory management methods -outlined above are implemented by the front end. The back end provides -the following routines for use by the front end (none of these routines -are known to the rest of the JPEG code): - -jpeg_mem_init, jpeg_mem_term system-dependent initialization/shutdown - -jpeg_get_small, jpeg_free_small interface to malloc and free library routines - (or their equivalents) - -jpeg_get_large, jpeg_free_large interface to FAR malloc/free in MSDOS machines; - else usually the same as - jpeg_get_small/jpeg_free_small - -jpeg_mem_available estimate available memory - -jpeg_open_backing_store create a backing-store object - -read_backing_store, manipulate a backing-store object -write_backing_store, -close_backing_store - -On some systems there will be more than one type of backing-store object -(specifically, in MS-DOS a backing store file might be an area of extended -memory as well as a disk file). jpeg_open_backing_store is responsible for -choosing how to implement a given object. The read/write/close routines -are method pointers in the structure that describes a given object; this -lets them be different for different object types. - -It may be necessary to ensure that backing store objects are explicitly -released upon abnormal program termination. For example, MS-DOS won't free -extended memory by itself. To support this, we will expect the main program -or surrounding application to arrange to call self_destruct (typically via -jpeg_destroy) upon abnormal termination. This may require a SIGINT signal -handler or equivalent. We don't want to have the back end module install its -own signal handler, because that would pre-empt the surrounding application's -ability to control signal handling. - -The IJG distribution includes several memory manager back end implementations. -Usually the same back end should be suitable for all applications on a given -system, but it is possible for an application to supply its own back end at -need. - - -*** Implications of DNL marker *** - -Some JPEG files may use a DNL marker to postpone definition of the image -height (this would be useful for a fax-like scanner's output, for instance). -In these files the SOF marker claims the image height is 0, and you only -find out the true image height at the end of the first scan. - -We could read these files as follows: -1. Upon seeing zero image height, replace it by 65535 (the maximum allowed). -2. When the DNL is found, update the image height in the global image - descriptor. -This implies that control modules must avoid making copies of the image -height, and must re-test for termination after each MCU row. This would -be easy enough to do. - -In cases where image-size data structures are allocated, this approach will -result in very inefficient use of virtual memory or much-larger-than-necessary -temporary files. This seems acceptable for something that probably won't be a -mainstream usage. People might have to forgo use of memory-hogging options -(such as two-pass color quantization or noninterleaved JPEG files) if they -want efficient conversion of such files. (One could improve efficiency by -demanding a user-supplied upper bound for the height, less than 65536; in most -cases it could be much less.) - -The standard also permits the SOF marker to overestimate the image height, -with a DNL to give the true, smaller height at the end of the first scan. -This would solve the space problems if the overestimate wasn't too great. -However, it implies that you don't even know whether DNL will be used. - -This leads to a couple of very serious objections: -1. Testing for a DNL marker must occur in the inner loop of the decompressor's - Huffman decoder; this implies a speed penalty whether the feature is used - or not. -2. There is no way to hide the last-minute change in image height from an - application using the decoder. Thus *every* application using the IJG - library would suffer a complexity penalty whether it cared about DNL or - not. -We currently do not support DNL because of these problems. - -A different approach is to insist that DNL-using files be preprocessed by a -separate program that reads ahead to the DNL, then goes back and fixes the SOF -marker. This is a much simpler solution and is probably far more efficient. -Even if one wants piped input, buffering the first scan of the JPEG file needs -a lot smaller temp file than is implied by the maximum-height method. For -this approach we'd simply treat DNL as a no-op in the decompressor (at most, -check that it matches the SOF image height). - -We will not worry about making the compressor capable of outputting DNL. -Something similar to the first scheme above could be applied if anyone ever -wants to make that work. diff --git a/jpeg/structure.doc.gz b/jpeg/structure.doc.gz deleted file mode 100644 index da22e7b89c4fabc3a19cc79f55b5ff531d0325b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16346 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 diff --git a/jpeg/testimg.gif b/jpeg/testimg.gif deleted file mode 100644 index 8c14b8d930fb7616c862266f90c4265295b2e0e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21701 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 QSILXN;}PR$Vq&lc0KST5r2qf` diff --git a/jpeg/testimg.jpg b/jpeg/testimg.jpg deleted file mode 100644 index acf32dcfcec17533829c7e1d3ea97df553ee4328..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5767 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 GZvp_^?#v4S diff --git a/jpeg/testimg.ppm b/jpeg/testimg.ppm deleted file mode 100644 index 5464834943..0000000000 --- a/jpeg/testimg.ppm +++ /dev/null @@ -1,4 +0,0 @@ -P6 -227 149 -255 -00+00+11,22-42.42.53/53/830830830830920920920920:2.91-91-80,80,91-91-:2.80,80,80,80,80,80,80,80,5.,5.,5.,4-+4-+3,*3,*3,*3,*3,*3,*3,*3,*3,*3,*3,*/*%0+&0+&1,'2-(3.)4/*4/*72-72-83.94/94/:50;61;7/@:1A<0C>2E@4HA5IB6JC7JC7MD6MD6MD4LC3ND4ND4OE5RE6S>2Y>2c@5oB6}E7�G9�G:�E8�G;�F:�E;�F<�F?�F@�GA�DA�FM�CM�DL�DJ�CJ�BE�>C�<A�:A�9@�9?�;?�>A�??�>=�@8�<0�@.�@.�?-�?-�?-�>.�?.�?-�A-�A.�A-�@+�@*�@+�A-�?.�?0�?0�>/�>-�=,�=,�=,�?,�?,�=+�=+�=+�>,�?-�@0�@4�>3�=1�?0�B2�C2�D5�C4�>3�@5�E;�G=�G<o@5U8,C2)=53:45:458238127016/.6/.81081081070/70.6/-6/-50-0/..0.0/.0/.1..1..3-.3-.5,.4+-5),4(+8(,>.2F6:Q9>iBF|HL�MQ�OS�W\�dn�p��u��}������~��q{�^c�TMpPFdRKfNG_MH_SQcedp{}�������������������{|mfhVWWFPNFVQ\VPcVPc00+00+11,11,31-42.53/53/83083083083092092092092091-91-80,80,80,80,91-91-80,80,80,80,80,80,80,80,5.,5.,4-+4-+4-+3,*3,*3,*4-+4-+4-+4-+4-+4-+4-+4-+0+&1,'1,'2-(3.)4/*50+50+72-72-83.83.94/:50;61;7/?90@;/B=1D?3G@4HA5IB6IB6LC5LC5KB2KB2LB2MC3ND4QD5O>1V?1_@4kB5yD7�D5�D6�C4�B5�@5�@5�A8�C;�E=�F>�CA�DJ�AJ�CJ�CI�DH�BE�@C�>C�:A�9@�9?�;?�>A�@?�?=�?7�=0�@.�?-�?-�?-�>,�?.�?.�?-�@,�A.�@,�@+�@*�@+�A-�?.�?0�>/�>/�>-�=,�=,�=,�?,�>+�=+�=+�=+�>,�?-�@0�@4�>3�>2�>0�A2�D3�C5�C6�@5�B9�E;�H=�F=m@6S8,C3+>64;56:4593492381270/70/81081081070/70.6/-6/-50-0/..0.0/.0/.1..1..3-.3-.4-.5,.5),4(+6),=-1D48O7<c=AuDF�JK�MN�TV�aj�m~�s��|����~��{��mw�Y^�OJoODeNFdNG`OH`RN`ZYgmou������������������|�pjlZ\\MUSKWS[WQbYQb/.+/.+0/,10-21.21.41/41/72072072072081081081081/91-80,7/+7/+7/+7/+80,91-80,80,80,80,80,80,80,80,5.,3.,3.,3.,2-+2-+2-+2-+3.,3.,3.,3.,3.,3.,3.,3.+2-(2-(3.)4/*4/*50+50+61,72-72-72-83.94/:50:50;7/>8/?:.A<0C>2F?4G@5G@4G@4I@2I@2I@2I@2J@0KA1LB2MC3NA2QA1ZA3eB3qC4}B3�B2�@1�<.�:,�;/�=3�@7�C;�F>�D?�BF�@G�BH�BG�CG�CF�AD�?D�;A�:@�:@�=@�?A�@>�@<�@6�=/�?-�?-�>,�>.�?.�>-�?-�>.�@.�@-�@,�@-�?+�@+�@,�?.�>/�>/�>/�=,�=,�=,�=,�>-�>-�=,�=,�>-�>-�?,�@/�A3�@2�>0�?0�@3�C4�C6�B6�D9�F<�I@�I?�F=i@7R9.C5,?75>78=67;45:3292181081072072072061/61.50-50-31-.0.-0..0..0.0/.0/.1..3-.6/05./5,.5),5),:-0?25J47\89l?=zFB�JG�ON�\a�gu�n��y��~�|��u�en�SW�LFqKBhMBdNFdPIdMH_MK]Z[fpuz��������������}w{leiYZ[MUSM[T[[Sa\Sa.-*/.+/.+0/,10-21.30.30.61/61/61/61/70/70/70/70/7/-7/+6.*6.*6.*6.*7/+7/+80,80,80,80,80,80,80,70.3.,3.,3.,2-+2-+2-+1,*1,*4/-4/-4/-4/-4/-4/-4/-4/-4/,4/*4/*50+50+61,61,61,61,61,72-83.94/94/:50:6.=7.>9-?:.A<0D=2D=2E>2E>2G>2G>0F=/G>0H=0I?/KA1KA1LC3OE5VC4^D4jC3tB2@0�>.�8*�8(�8+�;.�@4�D9�G=�F?�CD�AD�BD�CD�BE�AD�@C�>B�;A�:@�:@�>@�AA�B>�?:�?4�=.�?,�?,�?,�>-�>-�>-�>,�?.�?-�?,�?+�?,�@+�?*�?+�>-�>/�>/�=.�=,�=,�<+�<+�=,�=,�<+�<+�=,�>-�?.�?.�A3�@2�>/�@2�B5�C7�B6�B6�E=�I@�KC�JA}E=c?6M91B6/@86?87>78=65;43:3292192172072072041/61.31-31-21..1/.1//1//1/10/10/2//2//6017016/05,.4+-7+.;/2C23S73a;5oA:yE>�IE�ST�_k�i��s�|z�w~�oy�_g�PS�KFuKAmL@gPEgQFgKD_GBWLL[]_ginqtzyw}xy�wv{pjob_cTVYMTTM]WZ^V]^U_,.*,.*.-*/.+0/,10-2/-30.2/-2/-4/-4/-4/-4/-4/-4/-5.,5.,4-+4-+4-+4-+5.,5.,6/-6/-6/-6/-6/-6/-6/-6/-3.,3.,2-+2-+2-+1,*1,*1,*4/-4/-4/-4/-4/-4/-4/-4/-50-50-50-50-50-61.61.61.61.61.72/72/830941:52:50;5.<6->8/?90A:/B;0B;0B;/D;/D;/D;/E<.G</H=0I>1I@2KF7MG6SF5ZF6cE4kC2vA0~>,�:*�9*�:+�<-�A3�F9�J>�H@�FC�DD�DC�DC�BC�@B�=@�;?�:@�9=�;?�??�A>�B:�@6�?1�>.�>-�>-�>-�=.�>.�>.�>.�>/�>.�?-�>,�?-�>,�>+�>+�>-�?/�>.�>.�>.�=-�=-�=-�=-�=-�=-�=-�<-�>.�>/�>-�B3�A1�?0�@3�A6�C8�B9�A8�C<�GB�KE�ICtD>[=4F8/<4.@86@86?66>64=53<42:3192072052052032/41/21.21.02..1/,2/.1/.1//1//1/10/2//4116016015./3,-4+-7.0<//N6/X9.c>2l@6qC<yLJ�[d�h~~q�yx�t|�kt�^e�SU�NHLCuNAnNBiMBfIAaGBZFFYJKXLQV\cd_gcaib_f]Y`UV[NTYNXXQ^YW`WY`W[+-)+-).-*.-*/.+0/,2/-2/-1.,1.,3.,3.,3.,3.,3.,3.,4-,4-+3,*2+)2+)3,*4-+4-+4-+4-+4-+4-+4-+4-+4-+4-+2-+2-+2-+2-+1,*1,*1,*0+)3.,3.,3.,3.,3.,3.,3.,3.,50-50-50-50-50-50-50-50-50-61.61.72/83094194194/:4-;5,<6-=7.?8/@9.@9.@9.C9/C:.C:.D;/F;0G</I>1I@2JG7JG7OF6VF6]E4eB3n@1v>.|;,�:*�:+�<-�@2�E6�J;�I>�GA�EB�EB�EA�BB�@>�=?�:=�:=�:<�<>�?>�B=�B8�?3�=-�>-�@-�?,�?,�>.�=-�=-�>-�>.�>-�?-�>-�>,�>+�>*�>+�>,�>.�>.�>.�=-�=-�=-�<,�=-�<,�<,�<,�<.�=-�>0�?/�C1�A/�@0�B5�C8�C9�A;�A<�@<�HC�NH�NFpF?T>7A:1:50@84B76?75>64<42:3192083052052043032/32/02.02./3.-30-30/20/200200202102103004114115/03-.2,-5./9.-F4-N5*W8,_</d?6lGEw[c�l�v�||�v}�nv�ci�Z\�QN�KC{OBqL@iI=dG?`HB_DCY?BP:@GAHJDMKIQKIQJHQGJQFNUJUXP_YT`XT`XV*,**,*+-+,.,-/--/-0/.0/.0--0--0--0--2,-2,-2,-2-+3,+3,+2+*2+*2+*2+*3,+3,+2+*2+*2+*2+*2+*2+*2+*2+*2,-0--0--/,,/,,/,,.++.++1..1..1..1..1..1..1..1.,50-50-50-4/,4/,4/,4/,4/,50-50-61.72/83083094194/93,:4-;5.<6/>60>7.>7.>7,B8.B8.C9/C:.F;0G<1I>3I@4HE7HE5KE6RC5YB3`B3g?/o=-w<-|:+�9*�:+�=/�B3�F8�F9�F=�E?�E?�E?�CA�B?�@@�=?�9;�:;�<=�@=�C;�C6�?0�<*�>.�?.�?.�>-�>/�>/�=.�>.�=/�>/�>.�>.�?-�=+�>+�>*�>,�>.�>.�=-�=/�=/�<.�=.�<.�=.�;-�<-�=/�>/�>0�?0�C1�B0�A1�B6�C9�C;�C>�C>�FB�PL�WS�XRtQLXH@DB:<?7?94A63>62=51;50:4/92072/53/53/43013/13//3./3./3.-30-30-30-30/20/2002002010/2103213001..0--3-.5.-?0,D0)K3(S8,Z<5bGEu^i�t�������}��t{�lq�bf�VT�KD�J?rI=hG;dE>_EB^CBX=BO9@I:BF=HHDMIGQJGQIIRHMVLTYN_YPbXNbXP*,**,*+-++-+,.,-/-0/.0/.0--0--0--0--2,-2,-2,-2,-3,-2+*2+,1*)1*+2+*2+,3,+1*+1*)1*+1*)1*+1*)1*+0*+0--0--0--/,,/,,.++.++.++0--0--0--0--0--0--0--0--4/-4/,4/,4/,4/,4/,4/,4/,50-50-61.72/72/83094194182-93,:4-;5.=5/=5/=5/=6-B80B8.C9/C9/F;1H=2I>3I@4GB5GB5KB6PA5U@2]@3b=1j;.r;/x9+~7*�7)�:-�=0�A5�B6�E;�E<�F?�F@�FA�FB�CA�AA�:<�;<�=<�A<�D:�C4�?.�=)�A.�A.�@-�?/�?/�>.�>.�>0�>/�?/�>/�?.�>,�>+�>*�>,�>.�>.�>.�=-�=/�=.�=.�=.�=.�<.�<.�<.�<0�>/�?2�@0�D1�C0�B3�C6�C;�D>�D?�EB�PL�ZU�d]�f^v^W[TKHLDDHB=83?73>62<61:4/83.72/53/53/44/24013/04//3./3./3.-30-30-30-30/20/200200200/.10/3213212//1..1..4/-8-,;,(B0)K7/R<5\IIrcm�|������ƃ��z��ry�hk�VW�HE�D>mF=eD=bB>^BAZ?CW>EQ<FLFQRJWVP^XSaYR_VQ^UR_TX_T^[MbYKbYK+.,+.,+.,+.,,.,,.,,.,,.,/.-/.-0--/,,/,,/,,.++.++0*+0*+0*-0*+0*-0*+0*-1+,0*-0*+0*-0*+0*-0*+0*-0*+.++.++.++/,,/,,0--0--1..0--0--0--0--0--0--0--0--1,*2-+3.,4/-4/-4/-4/-4/-4/-4/-4/-4/-50.61/72083070.82-93.:4/<40=5/=5/=5/?5/?5-@6.A7/C70E:0F;1F<2H>4I?5K@6P?6U=4Y;2^90c6,n8/u8.}8,�9-�:/�<1�>2�=1�A4�A5�C9�E;�G>�F?�D?�C@�??�AA�DA�E>�C9�A2�@/�A-�A/�@.�>-�>/�=.�=.�>/�>0�<-�<-�<.�=.�=-�=,�<+�=+�<,�=,�=.�<-�<-�=-�;-�;-�=/�=0�=0�>1�>4�@3�A6�B3�E4�D1�E6�I=�G?�D?�EB�LH�YS�f`�pi�rjqhkiaV]VIPIMKCKE>C=6=70:4-84,72-42,53/44/13.13.02./1--1,-1,.1/.1/.1/.1//1//1//1//1/0200202102102102102103004+/;/2@41C5.J<5\OOwnx��������Ϗ���t{�io�^b�Y[�KJsGCe@>]=>Y>BV@IWJV]Racaqom}yu�}o�vkzpfui]l`V_Q^[Ic[Gd\H+.,+.,+.,+.,,.,,.,,.,,.,/.-.-,/,,/,,.++.++.++.++/),/),/),/),0*-0*-0*-0*-0*-0*-0*-0*-0*-0*-0*-.+-.+-.++.++/,,/,,/,,0--0--0--0--0--0--0--0--0--0--1+,1,*2-+3.,4/-4/-3.,3.,3.,3.,3.,3.,4/-50.61/72070/81/920:4/<40=51=51<4.?5/?5/?5/@6.B6/D81F:3G;4I=6I=6M=7O=6R<5V;3[91`6/i71p7/x6.�8.�9/�<1�<2�=2�@4�A4�A6�C9�E;�F=�E>�C=�CA�E@�FB�F?�E9�B3�A.�A.�B/�A.�?/�>.�>.�>.�>/�>/�<-�=-�=.�<-�=,�=,�=+�=-�=,�=,�<-�=-�=-�<,�;-�<-�=0�=0�=2�>2�?3�@7�A8�B5�H8�E4�G9�J?�HC�FB�KG�TO�c]�qg�}r�}s�{onsh[e]OWPMMDLH>FB8A=5>:297/53-20*33.33.02-/1,/1-.0,.0,.0,/1/.1//1//1//1//1//1//1/0200202102102102102103024,38.5;22>62G?9\WTvty��������ɏ�ӄ��y��qz�kt�fp�\_�WZrRVkRXkS^iYgnevwq��t��~�����|��t�zo�retf[eT\ZEaZAc[E+..+..+..+..+..+..,-.,-.,-.,-..,.-+--+-,*,-*,-*,-).-).-).-).,(-,(-,(-,(-.*/.*/.*/.*/.*/.*/.*/.+--*,,*,-+--+--+-.,..,..,..,..,..,./-//-//-//-/0--1+,1+,2,-3-.3-.3-.3-.2,-2,-2,-2,-2,-3-.4./5/061/70/81/920:31<42<40<40<40?41?5/?5/?5/B61C72E94F:5I:6K:7L;8N<7Q;7T:5W73[5/d60l6/u5-~60�80�:1�<1�<2�?4�?5�@4�@4�B7�D9�D;�D;�EA�HA�IC�I@�E;�B4�A/�A/�B0�A/�>/�=.�=.�=.�=0�?1�<.�=.�</�=/�=.�=-�<,�<,�<+�<+�=-�<,�;-�<-�;.�;.�<1�=1�<3�>4�?5�A9�C;�C:�K<�H8�H;�KA�KE�KG�SN�_W�sh��r��{��~��ytrcpgYbXNQENM@IH;ED9A@5:;/55,00'11*11*00+00+/.+/.+0/.0/.0/..0.0/.0/.0/.0/.0/.0/.10/10/10/10/10/10/10/2/15,66,4701;61GF;__Vx{{�����������Ƅ��|��z��{��|��{��v��p~�m}�m~o�x��������������������z�|i{j\hUWXA]Y=_ZA,//,//,//,//,//,//-./-./,-.,-.-+--+-,*,,*,-*,-*,-).,(-,(-,(-,(-+',+',+',-).-).-).-).-).-).-).-).,*,,*,,*,,*,,*,-+--+--+--+-.,..,..,..,./-//-//-/0*+1+,2,-2,-2,-2,-1+,1+,1+,1+,1+,1+,2,-3-.4./5/0810921:32;42<42<42<42<40>30>30>30>4.@4/B61C72D83G84I85J96K:7L:7O95R83U51_63e50o50y70�91�:0�<1�=2�?5�>5�>3�>2�@3�B6�C8�D;�F?�GA�IB�H?�E;�B6�@1�@/�@.�@.�?.�>-�>-�=-�=/�>/�<-�<-�=/�<.�<-�<,�<.�<-�;*�;*�<,�<,�;,�<,�;.�;-�<0<2<2�>6�@8�C;�E=�E=�L?�H;�G=�JB�LH�PK�\U�j_��p��|���������{�zmzocl`TYLQUFKO@EI:@C7<=166-22)11*00)//*/-)/,*/,*0--1..0--0--0--0--0--/.-0--/.-1..0/.1..0/.0/.0/.0/.1.06-75+33.,86.GK;agVy�x������������������������������������������|�����������������������~�}j}iYePTU<ZV:^Z>*0/*0/*0/*0/,//,//,//,//,-.,-..,.-+--+-,*,,*,,*,-).-)/-)/,(.,(.+'-+'-+'--)/-)/-)/-)/-)/-)/-)/-).,*,,*,,*,,*,,*,+)++)++)+,*,-+--+-.,..,./-//-//-/0*+1+,1+,1+,1+,1+,0*+/)*0*+0*+0*+0*+1+,2,-4./5/0812921:32;43<33<42;31;31=21=2/=2/=2/?30@41A50B61C74D85E96F:7H97I85L75O50Y63`61j61s70}:2�<2�=3�=2�@6�>5�>5�?4�?4�B6�C7�D9�E<�F>�G?�F>�C9�A6�?1�?0�@.�@.�>/�=.�<-�<-�<0�<0�;/�;.�;0�</�;.�;-�;-�<-�;,�;+�;+�;+�:+�;+�:-�;/�:1<2=5?7�B:�D>�GA�H@�L@�H<�G>�LD�PK�WR�f\�vh��x������������~�t�tktf\dTV^MOUDFL;@E6<?37:077.11*1/)/-)0+(0+)0*+2,-3-.2,-2,-2,-2,-2,-0--2,-0--3-.1..3-.1..1..1..1..3-07-54*11,'67(FM5_iOx�m������������������������������������������������������������������{�yf{eSbJQT:WT:YV<+10+10+10+10-00-00-00-00-./-.//-/.,..,..,.-+--+-.*0.*0.*0-)/,(.+'-+'-+'-,(.,(.,(.,(.,(.,(.,(.,(-,*.,*,+)++)++)+*(**(**(*,*,,*,,*,-+-.,..,./-//-/0*+0*+1+,1+,0*+0*+/)*.()1+,1+,0*+1+,2,-3-.4./5/0923923:32;43<33;22;31:20=21<10<1.<1.>2/?30@4/@4/@52A63@84A95C85D85G65I40Q51Y50b6/m7.v9/�<0�>1�<2�>6�>6�>6�?4�A5�B5�B5�C5�A6�C9�E;�D<�B8�>5�=2�>1�?/�>,�=-�=-�;,�;,�</�</�;.�<.�;/�;.�:-�;-�;,�;,�;+�;+�:*�:*�;+�:*:.}:.<2~<4?7A9�C=�G@�JC�JB�J@�G=�HB�NI�VQ�`Z�pe��q��~��������������y�wqzleo]^hTS]KJRABJ:?D5;@39<244-31+2-*0+(0)*1*+2+,3,-2+,2+,2+,2+,2+,1+,1+,1+,2,-2,-2,-2,-0--0--0--2,-6,33*,1-#57!DL,[hEu�a��x�������������������Ū�ΰ�ɮ�ʰ�˱�ȭ�������������������������{w�scx^P`EOR8RQ6TQ7+10+10+10+10-00-00-00-00./0./0./0./0/-//-/.,..,.0,2/+1/+1.*0-)/,(.,(.+'-,(.,(.,(.,(.,(.,(.,(.,(-+)-+)++)+*(**(**(*)'))')+)++)+,*,-+-.,..,./-//-/0*+0*+0*+0*+0*+/)*.()-'(1+,1+,1+,1+,2,-3-.5/05/0923:34:34;45<33;22;22:11<10<10<10;0/=1.=1.>2/>30=51<61<74=85>96?94A63D51H3/O4,Y4+d5,o8-y9.�;/�;/�<5�<6�=4�?3�@3�A2�A3�@1�>2�?5�B8�A:�@7�>6�=3�>3�?.�?.�>-�=,�;+�;+�<.�<.�:/�:/�:.�;.�:.�:-�:,�:,�:*�:*�:*�9)�:*�:*~9-|9-<2=5�@8�B:�E?�IB�LG�MG�IA�H?�JF�SO�]X�ha�zm��z������������������{x�pkwdeq\[gRR\JJTCCK;?D7<?577053-4/,1*(1(*1(*2)+4+-2)+2)+2)+2)+2)+1*+1*+1*+2+,2+,1+,1+,1+,1+,1+,2+,6*-5*'3.47@I!Ve7q�T��l��~����������������ș�Р�Ӯ�Ү�ѭ�˦�����������������������|z�uq�k^tWM]BIO4KM1LK0-00-0.-00-0.-00.0../0.0./0110/1/10/.0.01..0-/0-/1.00-/2,1/+0.*/-).,(-,(-,(-,(-,(-+).+).+).+).+)-+)-+)+,(-*(*+(*)')*')(&(+(*+)+-*,,+*.+-.-,0--0--.++.++0*+0*+/)*.()-'(-'(2,-2-+2,-2-+3.,4/-50.61/:32:32;43;43<33;22:11:11<10<10;0/;0/<//=00>11=2/;5.;7/<72<72=83=83=72@60B2,H2,Q3,\4,f7.o9.x;1}:0�=3�<4�>3�@2�@2�?2�>0�=0�<.�>1�A7�C8�A6�?3�>3�=2�>2�=/�=.�<-�=-�=-�=-�>.�=-�</�;.�:-�9-�:-�9.�:.�;+�;+:*:*:,|:+|9-{:/>3?6~A7�C;�G>�KC�NF�OH�HB�IC�OI�[S�h_�uh��t��������������������|�{v�rl{egv^amVYePQ[IHRA@H:<A688175150-2+*1(*3',4(-5).1*+0*+0*+1*+1*+1*+1*+1*+2*.2*.2*.1+.1+.1+.1+.2*.5),5*)3.!56>G#Sa7n|P��f��u��{����{��|����ċ�˓�Ȝ�ƞ�Ɲ������������������������}�{u�qm�hZnTJYAGL4HI0EF-.0..0,.0./1-/1/10-21021.32152052252041150.4./4/-50.50-5.-3.,2-+2-+/,,/,,.,..,..,.,-0+,/*+.)*-(),-).-)./(/-)./).-)./),-*,0*+.++0*+/,*1+,/,*2-+0-+/,,.-,/,,0--0-+1.,3.,3.,2-+2-*4-,5.,6/-81/81/920;42;42=53=53=53<42;22:11=22<11<11;00;00<11=01=21:3*:5(:5);5,;5.:4/;3/<1.;/*>-*C-'J.)U1*_5.k93r<3|@1�@.�A1�B2�?2�<1�;.�8,�;.�=/�A0�B1�B1�@/�>-�;-�<2�<4�=1�>0�@/�@,�@+�@)�B,�@-�>/�<.�:.�9/�80�:0z9.}@4x;/s6*{<.{<.y9.~>3{;0�@5�F:�J@�MB�MC�ND�MF�LH�TO�bX�q`�~i��p��y��������������������w�|t�vs�kp}cgtZbnW_kVYcQNXGELA>A9;;67124+/3'.4&.6%/2&-,*,(++)*+*(*+(*.(+0(,1(,2(/2(/2(/1)/0*/0*/.*00)00(.2*.1,)0/"=?+U\AqyY~�h��v��t��u��v��u��t��z��������������������������������~y�ws�rjzg[iWOYGKP;EH0@C+0/,10-10-10-21.21.30.41/52052083183172061/6/.6/-6/-60+5/*5/*3.+2-*/,*/,*.-,/.--./,-.,-0),.(+-(),-)//(//(//(//)./)./),/),0*+0*+1,*1,*2-+2-+2-*2-*0--/.-/.-/.-0-+0-+2-+3.,3.+3.+5.,6/-71,82-93.:4/<61<61=51=53=53<42;31;22=22<11;00;/2;/2;/2=03=21=3)=4(?4)A3*B2,A0-?0.?0.;/,=.*?.+E/)O1,Z40d75l:4r@0xA,�A/�@1�?3�=2�;0�;0�9-�;.�=-�@/�A0�B.�A.�?2�<4�=6�=3�?0�@.�A,B)�A)�A+�?*�>,�<-�;-�9.�8/�:1v9/v=2r9.r7,x;/z:/v6+x8-}=2B6�G;�K>�LA�MB�ND�LD�KG�UQ�g\�xe��o}�v�~���������������������w�|t�us�ln�efz^bvZ`tZZmVQaNIWGAJ@<C<7973021+01)/3&//'-,*,(+++)++)+,)+/),1)/1)/1)/1)/0)00)0.*0-+0-+0-+03,33-21+,.,(9:.SWEpw^��j��p��m��m��o��o��m��v����������������}��z��|��~������~�x�xs�rjzi]hYPXHGK9BD0==*21.21.21.21.32/32/52052063163194294294283181070.70.71,60+5/*4/,3.+0-+0-+/.-/.-0/.-/-,-.+,-*+,+)--)//(//)./)./)./)./),/),1+,1+,2-+2-+2-*3.+3.+3.+1..1..1.,1.,1.,0-+2-*2-*4/,50-71,82-93.:4/<4.=5/>60>60?71?73>62=51<40<42=21<10;0/;00;00;00<11>11B2*C2)H/*J.,M,.L+-H+.E+/@-->/+?.+C/(K/*W1-b11h40k:-p;,x;/�<3�=3�;4�:3�:3�;1�=1�>1�@0�A1�A2�B4�C5�?4�>3�@1�@/�@,�?)�?)�>'�>'�=)�;(�:)�;+�;+~<-{<.{>2x=2w:0y90~=2~=2{:/y9.?6�C9�H>�K@�KB�JB�LD�LE�JG�VP�g[�xd��m��s~�z�����������������������|~�xt�pl�jf�ec�bab]{`VqYNhRDYI?QD7F<1;4,40)/.*+,+)+/()0')0')0')/()0)*0*-/,..+--+-+,/*-/(-/'./'./(-02.44.3/),+)%67+PTBnu]}�j��l�i��k��n��m~�j��p��w��~��|��y��y��y�x~�z~�{~�~���{�{v�uq�pjzg]hWPXHFG9?>1<8,32/32/430430430541631631742853:53;64;64:53:32:3192082-82-71,50-4/,2/-2/-2//10/10/10/0.0-./,-.-+-0*/0*/0*/0*/0*/0*-0*-0*+2,-2,-3.,3.,4/,4/,4/,4/,30.30.2/-2/-2/-1/+3.+3.+72/72-93.:4/;50=72>60?71@82@90A93@82@82?71=51=51=2/=2/<10;0/;0/<10=22>2/D2-I0+K/-N--P*.O)/K)0F*/D//@/,@/,B0+I/*R/,Z0-_1+g:0l;.u<2~<5�<6�;7�:7�:6�>7�@7�A8�B8�B6�B6�A6�A6�@3�A1�A/�@/�?,�>)�<(�<&�:%�:%�:'�:(�<*{=)x>*x>,?4y7/z7/}:2}7.}:0�?4~>3~C8F;�I>�K@�JA�KC�ME�OG�TI�]P�iZ�ua��f�l~�s~�{��������������������}��xv�rp�nl�kj�ij�kf�ga|b\u^QgRJ^LAPD7D9192-3.+/*,)'2''5%'3&'2''0''/)*.++.-,*,*),,'-,&-,',.&-,&-.),./).2*.1*+/*'98-PTDjqYw�f{�hy�g}�j�m}�lz�i{�k��q��s��s�q~�q}�t}�w{�yz�yz�y}�{y�xt�qp�kgzcZiUQYIFE:A;4<6/541541541652652652853853964964<75=86=86=86=65=64;42;50:4/:4/83.72-61.42.41/52052032/21010/0/./-/2,/3+/3+/3+/3+/3,-3,-3,-5./5.-5.-5.-6/-6/-70.61.41/41/41/42.61.61.61.61,:4/;50;50=70?71@82A93A93D:2D:0E;3D:2C91B80@60@60<4.<4.;3/;3/;3/;3/<42?30H2.K0.M1/M01L/2K.1H.2F/2D11C1.C1.C1,G1+K3,O4,U3+d;2j;2t<6{=9�<9�<:�;:�:9�;6�=7�@8�B9�B:�B:�@9�?6�B3�D1�A/�@.�>+�=)�;(�;(�8&�9&�:(�<(|>*v?)t@*u?,}:.z0(�70�<5|2,y1+�?7B8}F;|I=}L?L@�LC�ME�NH�UI}aMxkQ~qXv\�}a��h��r��{��}������������|�||�v|�q}�oz�oy�ny�ov�nr�in}gdp]]gUTYLHK?A?7;7/60)3+'5)&4''3('0(&.)&+*'*,(*.)&,'&,)&,)(+))*++*)+)+.(+,#'2)+6/.94/CB5UYGfoWo}_u�dr�av�dy�hx�jt�eu�fy�j}�m{�ky�lx�mz�rz�vz�xy�xw�vx�xv�sr�nn�hfz^ZiQQYHFB:@86;31652652763763874874964964:75;86>97?:8?:8?:8?87?86>83>83=72<61;61:509419417517518537426314303213004./5./5-15./5./5./5./5.-6/.6/.6/.70/70.70.81/81/72053/64064094194/94/:50<61=70>81?92A93B:4C;5D=4F<2F=1F<2F<2E;1C9/B80A7/>7.>60=5/<4.<4.=5/>62A50H31K2/J32J53G65E64F54E43F33H31H3/H4-H4-G6-G8,N6+Y4*e3+m5/w63~76�86�76�6574}93~<5~>5�?8�@8�?9�@7�A4�C0�A0�?/�=-�<,�;*�:)�:(�;(�<*}=*y?+v@+uA-y?-�7+�3-�LF�VR�>9�61�D<�I>yH;wL=vO?xP@|OC�PF�SK�]MrkOmtQzvW�y\�z`��i��s��z��y��{��~��������}|�x}�u��s��r��q��s��s�r}�oy�kqzdjs_bfVXYJPL@FA5>7,;1'9-(8,'6,&2,%.,&+.&*.&(/((/(*.(-,).+)2))4))7')7')4''=2/E=7JF<RRC]bMgqWkyYo�]l�[l�\p�ar�dp�ao�br�ey�jv�gs�hv�my�qy�ux�vv�ut�su�st�qp�jl�ce{]YkNPZFFB:B76=22772883883883994994:84;95;95<:6?:7@;8@;8@;8A:8A:8@;6@;6?:5>94=83=83<72<72<72<72<74:8497386274263161/70/70170/70/70/70/70.70.70.70.70.81/81/920920830830941:50;61=83>83?92>81?92A93B;2C<3D=4G=5G=3I>3I>1H?3G>2F=1D;/B8.A7-@9.?8/?8/>7.>7.?8/>81B82E41F52C93@<4>>5<?5A=5C<3H61K5/N4/M5.K7/G:-C=.I;*X1%e/&o3,z62�97�;8�;9�=:�A=�@:�=6<2�:3�<3�=6�@8�@4�@4�?3�>1�=0�</�<,=,}=+z>+y?-x@.z@.z@.{?0�<0�3,�=9�kg�|z�WU�@=�JB�LAsJ=mO>lR@mSArTAzVE�YK�dOlsPm|T�zZ�w^�q`�ne�qj�wn��w��z��~��������}��x��u��s��s��s��u��u��v~�s|�qv�kreju^`iSW]HLQ<CE1?<,>4*>2+;1)60'20(00'-0&-0(.1)1/)5-+:++>(+B&+E%+B')F4/MB8VOC\WHaaNglTjvYj{Xl�Zh�Vg�Xl�]p�`o�_n�`r�eu�hr�gq�ht�kx�rz�vw�tt�sq�pu�sr�oo�ii�bdzZWlLP[BJF<G;8B55883883994994994::5;95;95<:6=;7@;8A<9A<9A<9B;9B<7A<7A<7A<7@;6?:5>94>94=83>94>94>94>94=83:82:5094/81/81/81/81/81081/81/81/70.70.81/81/81/92092092083094/:50<72=83?;3A;4A;4?92@:1A:1C<3D=4E>3H>4H?3J?2J?2I>1H?1F=1E<0C:.B9-A:/A:/@90?8/?8/?90@:1@:1A71B82A;4B>4A@5C?5H>4L<4N6/P5-T4.T4.Q6,P8-M:+R8*e6)s6*~;3�@8�D?�GC�JF�LE�QI�LC�D:�;/�7,�6,�90�<3�<6�<6�;5�;4�<4�<3~=0z?0wA0vA0vA2w@2{>2<2�:2�60�*&�?<�{z����ed�DA�HAzG;nM=fR>cV?dY?jXAt[F�^M�fOzsP�xT�u[�m]�a^�V[�RZ�T[�pt�zw͆{��}����|��w��v��s��s��v��v��v��t��t��s��m��k|wbrmXiaN^TBSF5N=0M5,L2,G1*B1(>0'9/%6/&5/&71(:0(=.*A,*E**H(*K'*H)(UA7ZP>e]JhdOjkRntWnzYl}Yl�Yg�Uh�Wm�\q�`r�as�cw�gv�is�hq�ht�kw�sy�uv�vr�rs�ss�sr�pn�hk�bd{XWlJO\APM?LB:H<7::3::3::3::3::3;;4><6><6><6><6A<7A<7B=8C>9E?:E?:E@;EA9EA9D@8D@8C?7C?7B>6A;4A;4A;4A;4A;4@<4@:3@:3?94@84@84?73?75>62>62>62>62>62=51<40;3/;3/:20920:50:6.:6.;7/=70>81@:3A;2B;2C<1F<2H>4I?5JA5KB6KB6LA4LA4K@3J?2H=0G</E<0E<0A:.@9-?:.>9->9->9-?90>:087,JF<L@9K92X>9U51S/*a;7Z4.\7.[6-Y1(\0(e5/o;6t;3�I<�G8�H>�K@�F=�>6�=5�D:�NC�PB�VG�YJ�OA�A4�:/�=5�95�88�55�32�74�>8}@6s>1qC4nB2o>0s<092�63�01�*+�JJ�db�EE�VV�ww�SP�C=�UGlS>e\BedGegIhaFo^EbM�iS�cK�n\�og�Z\�<J�-C�-G�1K�@X�J[�Zd�nq�{{܀|ۃ~���w��w��y��y��y��x��z��y�|n�zn�tj�lb�aZ�TN{ICvB>t;;g/1d11_20N(&F&"K1+L6/F4-D2+C1,F1-E/+E,)J.,O70XH7aU>g^FgcGlnPu|[v�`o�Zl�Xm�Yp�^s�`s�au�cw�cx�ft�gv�mu�ns�lt�qx�uy�yw�wv�vp�ol�ij�ej�aczWWlJQ_AOO<RL=QH<::3::3::3::3;;4<<5?=7@>8?=7?=7B=8B=8C>9D?:E?:E?:FB:EA9EA9EA9D@8D@8C?7C?7D>7D>5D>7C=4B<3B=1B<3B;2A:1A93A93A93@84@84@84@84>62>62=51=51<40;3/:20:2.;5.:6.:6.;7/=70?90@:1A<0B;0C<1G=3H?3JA5JA5KB6LA6NA4NA4M@3I>1H=0G</E<0E<0B;/A:.?:.?:.?:.>:.?;1=<1=>0B;0J0*Z--r27~4:�8;�CD~F@{LA{NB{L?�LE�NJ�LP�KL�B7�B3�B5�B7�>2�7,�7,�=/�C4�?/�@.�E3�G6�E6�H:�ND�KJ�GJ�@D�8;�88�=:�@8w>3o>1zI;�NA�@8�.+�,.�<B�OT�NO�ON�>>�>@�]]�UR�=6�RExaJa]AY_@dkJqmPwfK�bL�bO�dY�aZ�WY�CM�.B�&C�'G�(H�.M�3M�=Q�IY�P]�Q\�R\�Za�fj�kk�mo�pq�qr�su�uv�uv�x{�vy�sy�nu�jq�em�al�_j�am�S^�LT�HP�EJ�FHk86GT1,L1)G1*H7.I:0J;1M?5SF7\O8dY>h`DieHoqRz�`{�et�ar�`q�^q�_q�_u�cw�cw�cy�ew�i|�q|�u{�v~�z�����������y�yp�nm�gj�bbxXWlJR`@RU=UQ=TP<992992992::3<<5==6@>8A?9A?9A?9D?:D?:D?:D?:E?:E?:FB:FB:FB:EA9EA9EA9F@7E?6HB9GB6G@7F?4E>3D=1D=2C<1B;0B;2B;2B;2C;5C;5C;5C;5?71?71>62=51<40<40;3/;3/;5.;5,;5,<6-=7.?:.A:/B;0E;1F=1G>2I@4K@5K@3LA4K@3NA4M@3L?2K>1H=2G<1E<0D;/B;0B;0@:1@:1?;1@<2@<2?>1JJ;I8-h32�?F�FV�Oa�Ye�]c�D?�MB�SD�TE�UO�TU�JX�GO�?5�B0�@0�?1�;.�7+�8*�=.�E5�=*�7#�9&�>*�A.�B1�C8�10�:=�DI�KO�MQ�JK�A=�80z80v6+v3)�2,�54�?D�IR�PY�IH�64�;:�22�KL�`]�G@�YK|cMg`DbfForP}qR�gK�fO�gX�ca�SY�EP�8H�3G�3M�0L�+G�2N�0J�1I�5K�4L�2J�2K�7O�CY�GZ�I^�L`�Nb�Pf�Si�Uj�Qi�Ph�Mh�Mh�Mk�On�Ss�Vt�h��a{�\s�Vk�[k�eq�SZq-1\'&W1+U;3O@4@;,8:(=C0LN8WN4bV9f^BhdGrtV�f�lw�gy�hu�es�ds�bv�dy�ez�f|�h��u��~������������������������y�xo�li}aauXVlLRbDSY>XW>YX?881881992::3<<5>>7A?9B@:CA;CA;E@;E@;E@;E@;F@;F@;GC;GC;GC;FB:FB:FB8GA8GB6JE9ID8IB7HA5F?3E>2F=1E<0D:0B;0C<1C<3C<3D=4D<6D<6@82?71?73>62=51<40<40<4.;5,;5,<6-<6->9-?:.B;0C<0F=1F=1H?3I@2K@3K@3K@3K@3N?3N?3L?2K=3J<2F;0E<0D:0C<1C<1A;2@<2@<2A=3@?4C>2J=.R.%�;>�R_�Pd�Og�Qb�HP�50�>0�D1�G6�H@�IJ�>L�:C�@8�F4�B2�@2�?2�>2�A3�D5�G4�B.�<(�;'�;'�:'�6%�2'�94�9:�9:�7;�=@�JL�TT�XU�?8�4*�-$�60�II�PT�CM�6<�<:�/*�85�65�BA�ZV�TK�VGwWAsgJysT|rR�gK�cK�l[�sj�SX�EO�=J�:I�?N�AQ�;L�5G�@R�9L�4J�3J�0I�.H�/M�5R�5S�7U�8V�9V�:Y�=[�>^�@`�Be�@e�?d�>f�>g�Bl�Eo�Ir�Pt�Rt�Uu�Tp�Um�bw�fu�Xa{24h1.W2)N9+E?.=B+9E.>H.QJ1`S:h_GojQ}{e��u��x~�q{�q}�r}�r{�nz�l~�l��r��y���������������������������������t�ph{d_sWVjMRdESZ?WZ>Y\@77.77.88/990;;2==4@>6A?7CA9CA9EA9EA9EA9FB:GA:GA:GC;EC;GC;HD<HD:HD:IC:ID8KD9JC7KB6JA5H?3G>0G</E<.E<0E<0E<0E;1E;1E;1E;3E;3B80B80B82A71@52?41?41<4.<6-<7+<7+=8,?8-A:/B;/C<0G>2G>0J?2K@3K@3LB2KA1K@3N?3M>4M>4J<3I;2F;1D:0D:2C<3C<3A;4@<4A=5@>6A?7I>4W8-r61�MR�\i�K^�=R�5D�&,�2,�9*�<(�?+�B5�D?�<C�9=�>5�B4�@1�>1�@4�C8�H:�I;�>.�>.�=*�;(�9(�:+�;,�=.�H<�F<�@;�88�8<�BF�MO�QQ�C?�KE�SM�SN�KH�??�58�34�5-�9/�1,�95�55�=:�YQ�SCzN:dJ�lQ�bG�\F�eU�oe�ki�EL�<C�;B�>C�DG�HJ�IK�HM�KS�BM�9H�5G�1F�.E�1K�8Q�9U�:W�;W�<W�=Z�?^�Bb�Cd�Eh�Dj�Dl�Cl�Bn�Bn�Bn�Al�Go�Ag�Hl�No�Jg�Oj�\q�cr�Zb�?C_'#P+!TA2UP;HM6AD,SI6fXGviZ�zi��~���������������������������������������������¿�����ļ�����������y�yjzf^qZWkOTfIP\?T[@V]B66-66-77.88/990;;2><4?=5A?7A?7D@8EA9FB:FB:HB;GC;HD<FD<HD<IE=IE;IE;JE9KF:KD8JC7LC7KB4JA3I@2I>1H=0G>2G>2F=1F=1E;1E;1E;3D:2C91C91B82B82A63@52?41=5/=6-<7+<7+=8,?8-A:/C<0D=1H?1H?1J?2K@3LB2LB2KA1M@3N?5M>4L<4K;3I;2F;1E92C91B;2A;2A;4@<4?=5@>6A?7M;4l83�ED�Y_�Xa�DP�9E�4<�,,�1(�7(�9$�8#�;+�>3�:5�74�6,�:-�9-�6,�:1�B7�E:�E9�>1�?/�;+�6&�6(�>/�D8�H9�:'�B/�F:�D?�>@�9>�39�/2�77�GD�SL�NF�=6�1+�/+�71�2'�=0�,#�61�1-�30�e]�k]�WD�\DX@�T=�]M�kb�ec�RU�EL�?E�=?�>=�B=�HA�PL�XV�OQ�DM�:G�5F�1D�-C�0F�6M�7R�8S�8S�:V�=[�A`�De�Fh�>d�?g�?i�@l�>m�=l�:l�9g�Hq�<`�@c�Lm�Mm�Ol�Un�Zm�r��ai�JKs;7[6,P9*PD1UM:_PDsdZ�{r��������������������������������������������������������������ν���������o}mbr^YmSXiNS`EUaDVaG66-66-66-66-77.990;91<:2><4?=5B>6D@8EA9GC;IC<HD<HD<GE=IE=IE=JF<JF<LG;LG;LE9KD8MD6MD6MB5LB2LB2LB2JA3JA3I@2H?1G>2F=1E;1E;1D:2D:2C93B82A63A63@52>60>7.=8,>7,>7,@9-A:.E<0F=1H?1I@2KA1LB2LB2LB2KA1M@3M>4N<5L<4K;3I;4E92D81C91A93@:3@:5?:5><6?=7@@9Q83w..�HI�SU�@A�55�52�30�3*�/"�5#�7#�8!�:$�='�<)�9(�7*�8,�5+�4+�80�@8�C:�@6�B7�A3�<.�7*�:/�C7�D:�B3�@'�A&�8&�,#�#$�&+�*3�/6�(,�--�2,�3+�3)�2'�0&�2&�4$�7'�2&�5-�4/�;8�^V�}r�eS�WB�O:�YI�f\�c`�PU�AJ�FL�BC�A>�B;�A7�A6�F@�NK�KM�AJ�9G�6G�5F�3E�6G�:L�6O�6Q�4Q�6T�8W�;\�?a�Ad�Cj�Cl�Cn�Dq�Cr�As�?s�@o�Fl�Aa�Fe�Lj�Lj�Ws�`y�^s�k}�q}�pv�^`�D@f7.gB6sVJzd^�|{�����������������������Ľ�������������������������������������������Ϲ��������t�vgwd^qZ]nUZjO\iN[hN66/66/66/66/66/770971:82=;5><4A=5C?7EA9GC;HD<IE=IE=GE=IE=JF<JF:KH:LG:MH;MF:MF:LE:LE:ND<ND<ND>ND<MD8MD6KB4JA3H?3G>2F<2E;1D:2B;2C93A93B74?73>62>62>7.=7.>7.?8/@90A:1C<3D=4G@5I@4JA3LA4LB2LB2KA/KA1J?4J?5K=4K;3J83I74G63D83@84?94<:4<<3==4>?3?@4S8.�:7�ZX�ZW�:5�3)�6,�1&�3$�8&�>+�A-�@*�?(�A(�?'�;&�:+�;/�:/�7-�<2�D:�E;�?5�</�<.�:-�</�E8�K@�D;�9*�9 �>#�=)�5)�-)�),�',�%*�*-�-.�1-�3+�3'�3%�1"�3!�<(�4�?/�6(�7.�=6�@7�la�hZ�RE�PD�d[�he�QT�?I�AK�?C�><�>9�A8�?3�7+�6-�83�GG�@D�:C�:E�;F�9D�<H�?N�?R�=S�;S�9S�:T�;Y�=]�>b�Bj�Bk�Al�@o�>p�>q�>s�@p�Dg�Ol�Ur�Lg�C]�Vp�h��f��]v�`w�hz�p|�qw�fg�\X}YR�~y������Ļ������������������������������������������������������������������Ī�����|�{lzjdtaar[apXbnWamV300411520742964:75:84:84<:6=;5><6@>8B@8DB:FE:HD<KG?KG?KG=KG;MH9NJ8OK9OK9NI:KF9IC<LEDOINOHQJBPE>EMF=LC3JA1KB4KD8JC7E>3A:/D=4A;2@82>83@86>75=64;50B:6A95A95@86@98@98A:9B;:D=;F>8I?7K@5KA1M@/MA.J@-DA/C@2F<2J83N54O38O59K8;G<;9736:2:C59A04:'<>*`D2�i^�I@�7-�6*�8*�7(�8'�=,�8%�:&�>*�>+�<)�8&�7%�7&�7&�8(�9)�=-�A1�C3�B1�A0�>+�=+�<+�>.�D3�F7�>0�2%�:*�:)�9*�9,�7-�5.�4/�1/�.-�..�0-�2-�5+�7(�:(�;&�<$�6�5�:&�8&�7)�C6�UH�OF�TM�]Y�^^�PV�>H�7F�?J�CG�FC�C>�@8�;2�9.�9.�9/�I?�IB�EB�>>�=@�AF�BH�=F�DP�BQ�BS�CV�@U�<U�=[�Ce�Gl�Bi�;f�9h�<l�Bs�Gz�Ky�Qv�Rq�Tp�Tm�Oh�Pg�Zw�g��_��Gk�Uw�]z�[o�w��^_�vq�������Ż��������������������������������������������������������������������˾��������z�wr}np{j|�tx�mu~j1.02/1411633744853964973;95<:6><6@>8B@8DB:ED9FD<KG?KG?KG=KH:MI7NJ6OK6PL8MH9LH>NIFRNSYTa[VkXSkSOaPIJLE<G@7E>5E?8F@9D>7A;4B<5@:3>83>83?94?94=83;61;50;50<53=65?87?9:A:;B;:E=;F>:I?7K@5M@1N@.N@,JA+B?-@@/F=1I91L56K47F36B56A<::<7;>6@A5E<.K8)]C5�L?�PC�;.�1$�5'�9(�7%�9&�>+�:&�<)�?+�?-�<,�9*�5(�7(�9*�;)�:(�<*�?-�B.�B.�A-�?+�;'�<*�F5�I8�?0�9*�7*�7,�7-�:/�;.�<0�:.�8/�5.�1.�/,�/,�0,�4*�7)�:(�;%�?$�:�;#�?'�=)�7%�=.�H=�G@�JG�PR�QV�GP�;G�:F�DM�DF�GB�D>�@7�:0�7,�8,�9-�A4�I>�KD�GB�@=�AA�BE�CI�CK�CM�DQ�FU�BT�=T�>Y�Bb�Fi�Cj�>i�?k�Aq�Fv�I{�Mz�Nw�Mp�On�Tq�_w�az�Yv�Op�Ej�Ck�Di�Ih�\s�lvrII�|u���ȳ���������������������������������������������������������������������������Ĵ���������������������}0--1..2//300520631853862;95;93=;5?=7A?7CA9DB:EC;JF>JF<LG;MH9NJ8OK7OK7PL:LI;OKCURT`]gigynm�mk�kh�_YjYR[OHQHAHF?FE?DC=@@:;A<:?:7<72<72=91>:2>:0=9/64.75/;61=83?94@:5B:6D:4H<5I>4L>4N?1N?1O?/O?.M?-B8&B9)D9,D9.B82=836831814<5:>6C;5L3.[**q,.�6>�BF�91�2%�1!�8(�;*�7%�7#�;'�;'�<*�@-�A/�=.�;-�:-�<.�=/�=-�:(�:(�<*�>,�>,�=)�?,�9'�?-�L<�H9�7)�2%�9/�6-�6,�8-�:/�:0�8.�6/�3-�0.�/,�/,�1*�3(�6'�8#�9!�:#�8�;%�A,�?-�8(�:-�B8�<6�>;�EF�KN�IM�BH�?F�BH�DB�F>�D:�>3�9-�7)�8)�9*�6(�C7�LD�ID�A?�?@�DH�JO�AH�@J�CP�FU�DV�@V�>Y�A`�Dg�Cj�Cl�Eq�Hx�K{�K}�Iy�Gu�Js�Lr�Or�[y�b}�Vs�Ec�Jj�Tu�?]�I`�z��{aC>�{q���ҵ����������������������������������������������������������������������������������������������������0--0--1..2/-30.41/640751971:82<:4><6@>6B@8CA9DB:IE=JF<LG:NI:OK9PL8PL8PK<MI?ROM_]bml{yz���������zv�rl�e_zYTlRMdKGYFAPA<GC?E?<>;86;63;7/<8.=9-:9.881992;;4=;3A;2B;2C9/D9.J=0L=/M>0N@/N?1N@/N?1L?0E;+E:-D;/A:/?;3;;46=64<54<5><6I72T.,l(.�/8�5D�:D�6/�6)�9)�>.�>-�9'�8$�;'�:'�;*�>,�?/�=/�=0�<1�>2�?2�>1�;+�9)�:*�;+�;)�:)�;+�<+�B3�F8�?2�2&�2'�9.�5,�4*�6.�7-�8.�6-�4-�2+�0-�/,�/*�0)�2'�4%�7!�6�4�3�6#�>+�>.�;-�=3�D:�6.�71�:8�DE�LL�JL�AD�<;�@:�A7�?3�;.�9*�8)�9*�;,�3%�>2�H?�HB�A?�AA�FK�NT�@F�?F�BN�GV�GX�BX�?Y�@_�Ad�Bg�En�Ir�Mz�N}�K{�Hx�Cq�Nz�R{�Jo�Ll�Ut�Ut�Mi�Fb�Lg�@W�fu���Α�_;4iL@�zqϦ����������������������������������������������������������������������������������������������������2/-2/-1.,1.,2/-31-53/640860971:82<:4><4@>6B@8CA9IE;KF:MH;OJ;QK:RL;QM;OL>MKEVTVdervx���������č�ō�����zx�om�hd�^[}TQmMKaKGWEBL?=A:7786286.76+67+572594992<:2@;/A;,E;+G:)K=,L>,M?-N@/M@1K@3K@5G@5GB6EA5C=4A93?73>75>75?86@86E62L2-[1.v79�AE�AF�:=�;1�<,�?/�@0�?.�;*�;(�=+�8$�9'�;+�<.�;.�;/�;1�=3�@5�>2�:.�7+�8)�9*�8*�8*�8)�B4�D7�9+�2%�4(�7,�5,�5+�3*�4-�6-�5-�5,�2+�0+�0-�/+�0*�0(�2$�4"�6 �5�2�1�4!�7(�:,�;/�@5�E=�F?�?:�;8�?<�JG�MJ�CA�94�;1�</�;.�:+�:)�;*�=,�@/�:,�=1�@9�B>�BA�DE�IN�OS�>D�>D�BM�IV�JZ�FY�BY�B^�?`�Ae�Dm�Js�N{�N}�Lz�Gu�Gt�Q}�Qy�Gn�Gj�Rq�Vs�Ni�F^�H]�[l������ꢟ�MGd2*�lf͗�����������������������������������������������������������������������������������ʾ�̽�ο��ſȾ���74253/41/20,20,31-42.53/75/860971;93=;3?=5A?7C?5ID8KF9MH9PK<RL;SM<QL=PLBOLJXX_hk}|�������͖�٘�ޗ�ڒ�Ԍ�Ȇ���~�wv�ml�ee�\ZvUUhLKYDAI><>;:7:84763366368575973>8/C:,F<*J>+K=+L>,L@-KA1HA5GB6FB:CA;CA=A><@:;=78;56:45934:32@86@/,H.(_71}C>�ID�A@�81�<0�<,�>.�>.�=-�>+�>,�?.�7%�8(�9+�9-�9-�9/�:1�=3�>4�=3�:0�9-�9-�:.�8-�7+�7,�C6�A4�1%�-"�8.�<3�2)�4+�2)�2,�3+�4,�2,�0+�.+�/+�.*�0*�1)�4%�6#�7!�6 �7$�5"�4#�4%�5(�8-�;2�?7�XS�QM�GB�A>�D?�GB�D>�;4�8+�8'�9)�9(�:'�<*�@/�C2�C5�>2�=5�B<�ED�EG�HK�KO�AE�?D�BJ�KU�NZ�I[�F\�E`�@`�Ab�Dj�Jq�Nx�N{�My�Jw�Ox�Nw�Lr�Lo�Tt�\y�Ro�E]�Uk�Sc�gu������鈊�de�QN�khώ��������������������������������������������������������������������������������������������������=85<7294161,50+50+61,72-83.94/:50<72>:2@<4B>6C?5HC7JE8NH9QK<SM<SM>RM@PLDOLLYXdkm�~����Ɩ�ۜ�럪�ꘜ┙ړ�ԏ�ʉ�����yz�qq�ed}WWjON\HHQFCKBBK>?L<=H::A<9;>75C9/F;.H>,J>+I?,GA0FC5CD8AD<>D??BDA<GE=ME@OEDPCGOAIM?GI>GEDHBA=3K:/gF8�OB�I=�=2�7*�=0�=-�=+�>,�?-�?.�?.�<*�7'�8)�9+�9-�8.�7/�92�<4�;3�:2�80�9/�:0�;1�8/�7,�=2�?4�:0�2'�4)�<1�<2�3)�2)�1(�1+�2*�1*�0*�-)�,)�-*�/*�1*�3)�5(�6&�8"�8!�:$�8&�6$�4$�5'�6,�7/�70�MG�VQ�XT�PJ�FA�B<�>8�;0�9)�9%�:'�:&�9'�=)�A/�D3�H:�B6�B9�FB�HH�EG�EH�FK�EI�AE�CJ�KT�P[�N^�K^�Ka�C_�Db�Eg�Im�Mu�Oy�Oy�Ox�Sw�St�Rr�Wu�[x�Yu�Qj�I_�Xj�Vf�O]�`l�O[�Xb�Wd�[d�fgɂ窨������������������������������������������������������������������������������������������������A<7>94;6183.61,61,61,72-83.83.:50<72>:2@<4A=5B>4HC7JE8NH9RL;SM<TN=SL@PLDOLNZYglo�����̙�䟮�������������잤霡ᘛՔ�˒���xy�ii�_]{WVoQPgNMdLKdIH_FBTA<IA9?A97D:2E<0G>0F@1EB4CD8@D>=EA:EE;BKBAWIFbOPiW[p\bs^ep^dk_bbaZX\LDhI>�SF�VG�H8�=,�;,�@/�@0�@.�?.�@/�@0�=+�6&�7(�8+�8,�8.�6.�60�72�:5�81�80�80�91�:3�:1�90�6.�A9�9.�3)�8.�>4�=4�90�6,�2*�0(�0)�0*�/*�-*�,)�,)�-*�/*�2*�5*�5(�7'�7%�9$�8#�8&�7%�6'�6)�7+�6,�3+�2,�MG�b]�^Z�LI�?:�93�6,�:*�:&�:%�:$�:%�<)�@.�C1�H8�E8�G>�LG�JI�DD�BD�EG�GJ�CE�EI�MT�R[�Q]�N_�Na�H_�Ga�Fe�Ij�Ms�Px�Qy�Ty�Ts�Zt�^x�^w�Un�Me�Pf�Ym�\l�ds�O]�Vd�Pa�Wh�Mb�Rb�]`�urٚ�������������������������������������������������������������������������������������������������C=6B<5A;4?92=70;5.93,82+71*71*82+93,<61?94B<7D>7GA8JE8NH9QK:TK;SM<UNBVPIQKNTSacf�y���˓�䛫����������������������즬瞢ژ�ύ����ss�ge�\[�WS|VR{WRwVPoNG`F>NA9@A:;D>9B<5D@6DD;AC><B?:CC<GH@KVGTnWc�eo�kr�sv�~y�q�|am�]d�YZ�XV�VN�K@�=/�5%�6%�:)�<+�>-�@/�?-�?-�<,�;,�6(�6)�5+�6.�6.�70�82�82�91�:2�;3�:2�70�70�92�;2�D;�>5�8/�A6�\Q�mb�^S�?5�3*�2*�2+�/*�*'�)&�)'�,)�-,�0-�2,�1(�0$�1#�4%�;)�;'�<)�;*�<+�:,�8+�7-�6.�>9�61�EB�b]�VR�@;�=:�2)�6%�9#�:%�;%�;'�<*�?/�B1�B3�F:�RI�ZQ�NI�=9�;:�EE�GH�FF�JL�PU�QX�MW�KY�L\�Qg�Ng�Jf�Jg�Mm�Qt�Qw�Ru�Xu�Zr�Zr�\t�^v�[r�Wk�Wh�ct�Wf�\l�Zk�EX�CX�Ng�Tf�ei�hf̍�鴳���������������������������������������������������������������������������������������������D>7C=4B<5@:3>81<6/;5.:4-82+82+82+93,;50>83A;6C=6F@7ID7MG8PJ9SK8TL9VM?VOFRLOUQ`ad�v|���ʐ�㘨������������������������������롤◘�Ȁ�tr�hf�b^�^X�^W�]U�WPuOHcHBUF?JE?D@:;E@>IDBEB@A?ADBFMMRVVedh�ru��}��}��}��|��p��`v�Yj�Va�QV�GF�?5�;*�;'�<(�7$�7&�7'�8)�8'�8(�7(�5(�3&�3)�7.�:3�<4�<6�<6�<6�>8�<6�<6�>8�B<�D<�C;�B:�A9�B8�@6�8.�2'�6*�I=�[N�A7�6-�+$�)$�-*�0.�-,�))�1/�50�72�6/�3*�3'�2&�6'�:(�;(�;*�:*�9*�7)�5*�3)�70�3.�;6�OK�RP�JG�?>�.'�7'�:%�:&�;&�:'�;'�=+�=.�A3�E7�QE�XO�QH�B<�?:�EB�JG�IG�LM�RS�SX�OW�MW�N[�Vg�Ui�Rj�Ql�Qn�Rr�Ru�St�Pl�Yq�`w�cy�_t�Xl�Tf�Td�Ve�Ra�Yi�Yi�K^�Pc�Uk�Pa�^`�]X�}٩����������������������������������������������������������������������������������������������F@7FA5D>5B<3@:1>8/=7.<6-93,93,82+93,;50>83@:5B<5E?6HC7LE9PG7RH6SI7UJ=VLDTMLVQ^^_zqv���Î�ݖ���������������������������������ꘘߍ�҃��xu�rn�ia�g^�bZ�]W�XPxPJiHBWC>M<3=D:AM@CO?CQ=C[EKoW^~et�v��~�����{��u��m��^��Mo�A]�G]�EQ�:=�6/�<*�@(�?&�<(�;)�:)�:*�;,�;-�<.�</�5+�8/�<2�>6�@9�>8�;4�:3�80�5-�4,�:2�B:�E>�B;�>4�=3�5*�5)�8,�2&�,�6'�H9�K?�@7�4.�-*�,+�--�,-�+-�**�/,�3.�5.�4+�2(�1'�3'�7(�:)�:,�;+�;,�:,�8+�8-�4,�:5�:5�;8�NM�WV�DD�2,�8+�:'�:)�9(�:(�:'�9)�:)�@1�C5�L>�VJ�RF�F=�B9�D=�JE�HD�KJ�RQ�SU�OT�LT�MX�Wd�Yi�[q�Zs�Uo�Qm�Pm�Rq�Lj�Vq�`y�aw�Zp�Wj�Yj�]l�Yg�Yg�_m�]k�Yh�bo�ap�X`�[X|NG�lf��������������������������������������������������������������������������������������������JE9ID8GB6E@4C=4A;2@:1?90;5.:4-:4-:4-;50=72?94A;6D>7GA8KD8OF6PF4SF5UH9WI?XMLVOX]Zrnq�����Ք�ꛪ����������������������������������閗ዌց��{z�tn�mh�e`�^[�[V�SPvKEdE<RA3EK6BX<Dc>FoCK�NV�^e�hy�n��p��p��i��_��Uy�Eh�6V�.I�=Q�BN�:=�82�A1�C-�<%�6#�5$�4$�5&�6(�8+�;.�;0�@7�@8�?7�?7�<6�94�5/�4-�/'�.&�/'�4,�:3�=3�90�6,�6+�-!�*�7+�B3�?/�5$�.�F8�I=�H@�=8�-+�$&�'*�/2�..�//�3/�3-�1+�0+�/*�0*�6.�8-�:/�<1�?1�@2�@3�@3�6+�KC�KD�4/�GC�ZY�HI�A>�;.�:*�9)�9)�:)�;)�:*�9)�=/�?0�E8�OA�OA�G;�B6�A6�G@�F@�IF�OL�QP�MM�KN�KQ�Xa�[g�`r�av�Xn�Nh�Lh�Ol�Sr�Xu�Zs�Ym�Xj�^m�fr�jw�ft�an�al�am�ck�dk�ci�cb�]UfG<�^V���̫�������������������������������������������������������������������������������������������NG;MF:LE9JC7HA6F?4D=4C<3?71>60=5/=5/=51>62@84@:5D>9F@9JC8NE7QD3SE3UG6WH<YMHUMS[Wijl�}����ϓ�䙧說�������������������������������왜撕߉�օ�ρ��yv�mk�ce�``�[Y�TOtRFcZDZcAQq@M�DN�LU�U]�\c�Yi�Oq�Nu�Qu�Om�Jb�DX�:K�2@�;E�GL�IL�??�=7�D:�E7�;,�<-�<-�<-�=/�?1�B5�C8�E;�E:�A8�>6�:3�6.�4-�2,�2+�2'�5*�8-�9/�9/�8.�7-�6+�0%�6*�7(�2"�2!�:(�?*�<*�=,�D8�JB�D@�65�*-�*-�/3�78�56�31�1-�0+�0-�0.�0.�86�:5�:5�<4�>2�>2�?2�>1�7,�WM�aY�<5�<7�PN�FF�QN�=3�;.�8+�8+�9,�;-�:,�:+�9,�;-�A2�G8�I9�D5�@1�>/�F;�E=�IC�PJ�QN�ML�KL�LP�Ya�^h�es�gy�]r�Pf�Lf�Ok�Xx�Wt�Un�Wi�_n�ku�lt�fo�fq�`l�_j�js�qv�gi�a^�kb~eWVI:kXK�|s���������������������������������������������������������������������������������������������QJ>PI=OH<MF:KD9IB7G@7G@7B:4A93@82?71?73?73A95A;6C>9FB:JE9NE7QD3SE3UE4WG7ZLCVJMYSdjh�|����ɓ�ߙ�맬�������������������������������뙟攚ᐖݏ�ن��{��rx�pt�no�me�n]~}]y�Uj�N`�N]�S]�T^�QX�GR�<R�:S�@R�BP�DL�BE�==�97�NM�LK�CB�85�76�>9�?9�:2�C6�E6�E7�E8�F9�G;�G=�G>�=4�:2�70�3-�3+�3,�3-�5.�9.�=1�>3�=2�9/�6,�6+�8,�/#�<-�=-�2!�.�8%�>(�;'�9(�8*�:0�>9�@@�<>�48�,0�,/�++�**�+)�0-�44�88�9;�8;�8:�87�83�71�7,�6*�6(�5)�RD�nb�H@�5/�D@�>@�VU�C;�@3�:-�7*�9,�;.�;.�;-�7*�9,�=/�A/�A1�@-�?-�=,�C7�C:�G@�OH�RM�OJ�MM�OO�]d�ah�iu�m{�dv�Vk�Qj�Un�Wt�Wp�Xl�^m�ov�x}�lp�Y^�bl�an�cn�s|눋́}�uk�zkqkXMO;]WH�rh���������������������������������������������������������������������������������������������SM>RL=QJ>OH<MF:KD8JC8IB7E>5D=4B:4A93@84A95A97A:8D?<FA<JE9OF8RF3SE1UF2WG6YJ@TGGYQ_jg�~����Ŕ�ۘ�褧�����������������������������������읥監嗟㐛܉�ӆ�˅�Æ�����w��k��az�Wj�P_�LZ�IS�BJ�=B�=<�>9�C:�H;�I9�E4�B1�?2�TJ�G@�:7�55�89�:<�99�75�:0�;.�;.�:.�8,�6+�3(�2'�3+�3+�2)�3*�3+�4-�5/�70�>2�=1�<0�9.�8,�7+�5)�4(�4%�3$�5$�7#�=(�?)�:#�2�:'�4%�2'�62�<=�=A�7>�38�-2�-/�--�/.�43�9;�;>�:=�3:�18�25�21�2.�3*�3&�4%�3#�?0�k^�UK�:2�B<�;;�SQ�NG�F<�<2�7-�7-�9/�:-�9,�7)�;,�=-�>*�;)�<'�>*�?-�>1�=3�D9�KC�OI�MG�LJ�NM�af�`g�gs�o|�gy�Zl�Uk�Yq�Xq�\p�`n�io�|}��wx�_c�is�o{�gt�nx�楠�����}clVDS=UVGpi]���������������������������������������������������������������������������������������������UO@TN?RK?PI=NG;LE9KD8JC8G@5F?4D=4B;2A93A93B:4B<7D?:GC;KF:OF8RF3SE1VG3WG6WH>SFFXP^jg������Ɣ�ٚ�螠�����������������������������꣩쥩���죧홠蕡擟���ؔ�Ι���������c�Zq�Nd�GX�AN�>G�=B�>=�A7�C5�F5�I5�I2�D.�@-�<,�QF�B=�87�>?�DG�BE�;>�86�C:�D7�C7�A5�=2�9-�5*�2&�1)�2)�3+�4+�5/�4-�3-�3-�B7�=0�7+�7+�:.�9,�5(�2$�8)�2�2�:%�9&�5!�8$�C/�7&�8)�7+�6-�3.�52�::�??�KL�HG�CC�>?�<?�7;�29�+3�-4�+2�.0�00�2-�4+�7*�8)�1!�/ �fX�^R�A7�F>�=7�OJ�TP�KD�=5�6.�7-�8.�9,�7*�8+�=,�@-�<(�9$�;%�>*�A/�8*�7,�=2�F;�JA�HB�HD�IH�`b�]a�dk�nw�ju�]h�Wf�\l�]p�_q�bl�jm�}|�������qr�sx�{��br�Zg���ɲ����ZkP@T:MV@hcV���������������������������������������������������������������������������������������������XOAXOAWN@VM?TK=SJ<RI;QH<MD8LC7KB6I@4H?3H?3H?3F?4HB;HD:KF9PG7SI6VJ5VJ5WJ9YNDULN[Sckh�}}���Ē�ؙ�椤�������������������������뤨쩩�����������㔠נ�ϯ������g{�J]�@S�:M�7H�:E�=C�BA�DA�@>�?<�GA�<3�F:�G;�2(�LD�LH�ED�@A�<>�>@�??�><�>:�B:�?6�D:�LB�J?�</�5(�9+�6+�6+�5,�2)�/+�/*�1.�5/�A6�9,�2%�3%�9,�;.�8'�3 �3�4 �5 �5!�4#�5$�6'�6(�0#�3&�5(�6(�4'�3'�3&�3*�2+�30�45�26�.4�+6�-9�.7�.2�,-�-+�0,�6/�8/�7+�5&�-�3"�YI�ZM�<1�PE�6,�JC�QN�KK�CA�<5�8/�7-�9,�<,�;+�:)�9'�:'�<*�>*�>,�=,�9)�;-�=0�?4�?4�?7�?8�@<�ig�om�ba�lm�pr�ac�gj�pv�ly�iu�dl�bg�cg�kk�on�on�xz�|��Zk�cv�co������y�u[sRHZ;KR9qoZ���˷����������������������������������������������������������������������������������������YPBXOAXOAVM?UL>TK=SJ<RI;NE7MD6LC5KB4JA3JA3JA3HA5HB9IC:LE9PG7SI6TK5WK8UK;YMFULNZUdkh�||������Ԗ����럝�����������������젧磥榤穣ꫠ�������⟞ѩ������t��Uc�AP�8G�3B�2@�7>�<@�CB�EB�?C�;?�CD�=;�E>�C<�60�RO�FE�AC�=A�:>�::�:8�<7�=6�E>�=4�<3�G=�L@�C4�:+�9*�6)�7*�6,�4,�2-�3.�52�83�>3�;.�7*�5'�5(�5(�5#�4 �9%�9#�9&�:'�<,�<-�8-�4+�4+�5*�7)�7(�6#�4!�4 �3#�1'�1*�/-�-/�+1�+3�,8�-5�,+�.'�1+�3+�4)�5(�8*�9*�?0�*�E6�?0�G;�WL�D;�D<�VV�RS�KI�C?�=6�9/�9,�9)�;+�<(�;(�<*�>,�@.�@/�?-�:)�<+�=/�>0�>3�>4�@9�A;�gc�li�a^�jg�ol�b_�kh�tu�r{�p{�iq�^c�X]�ac�oo�xw�uv�v}�Qc�[o�]m������h�jYtPM`<RZ<us]����Ĺ���������������������������������������������������������������������������������������ZQCYPBYPBWN@VM?UL>TK=TK=QH:PG9OF8MD6MD6MD6MD6KD8IC:KE<MF:QH8TJ7WK6WK8UK;XMCVMO[Vckh�z{������̑�ט�ݙ�♙蚜휟��������睤㜢ߞ�������❘ࠖۥ�ѭ������v��\q�CT�?L�:E�7@�8>�:@�=@�@B�AD�>C�8=�?A�A@�D>�=7�:3�XT�BB�>A�<>�9;�77�75�:5�<5�H>�;0�5*�A4�J=�H8�=-�7(�6(�7(�7+�6-�5/�60�84�=8�3)�5*�7+�6+�5+�7*�:+�?-�4"�4 �5"�6#�9*�8*�4(�-%�A8�>5�=1�;-�9&�7#�7#�6$�6(�2(�.(�-*�,.�-1�-3�./�-&�1'�6*�6)�3'�4&�9*�>.�A3�0"�TF�</�B8�D;�KC�UP�VS�TR�ON�JD�C;�=3�9,�7'�7'�8&�8'�:(�<+�>-�>,�=-�:+�;,�<-�=.�<1�>3�A9�C>�ZW�fc�`]�li�pn�a_�fd�jn�S]�`j�hp�ej�_d�df�pp�vv�rt�lt�I\�Qg�[l���`�_ToINd>V`Bvw^���������������������������������������������������������������������������������������������ZQCZQCYPBXOAWN@WN@VM?VM?SJ<RI;QH:PG9PG9PG9PG9PG;LE<LF=OH<SJ:UK8XL7XL9XK<WLBULL]Vajgyy������Ð�ϓ�і�֕�ڗ�☛癝뛢윣ꝥ癢ޗ�ٕ�ԕ�Ԕ�Ւ�Փ�Ҍ������}��u��i��Z{�Ia�=L�?K�>D�>B�>@�>B�?D�?F�@F�?F�9>�>@�ED�@;�60�=7�ZV�AA�?B�<?�:<�88�96�<7�A7�D:�:-�2'�<.�E6�E3�=.�9'�8(�8(�8-�9.�8/�90�:6�>9�1*�3+�3-�5,�5-�7.�9.�=/�7)�:*�<,�<-�;.�;1�<7�:4�C?�@9�@6�=/�9)�8$�9%�:&�<+�6(�1%�0'�0-�20�00�/+�3'�6&�8'�8&�7&�7&�;*�=,�:,�<.�^Q�F;�4,�0)�B<�YT�vr�sp�jh�_Z�PH�A8�5)�.!�8(�9)�8'�;*�<,�=.�>-�=,�<+�<+�<,�<,�;.�=3�A:�E>�KG�_[�`]�pm�ss�``�^^�^c�IS�Zd�ho�gn�dk�jo�ru�uu�or�dm�CW�Ja�Wjꓕ���\{XPlDQi@[gFy|`���������������������������������������������������������������������������������������������[PC[PCZOBZOBYNAXM@XM@XM@VK>UJ=TI<TI<SH;TI<TI<SJ>NG<OH=RI=TK;VL9YM8ZL:YL=VKAVKJ]T^idyvt�}}������Ï�Đ�ǐ�Α�ԓ�ۓ�ߔ�ޕ�ݖ�ܓ�Վ�͉�Dž�ā��}���~��r��m��g��^��Pw�Dd�<V�:L�?H�AD�DB�DD�BF�AH�>K�>I�BI�=?�?>�GD�<7�1+�A;�SO�B@�@@�=?�<>�=:�?9�B:�E;�=1�8)�5(�9)�=,�=*�;*�;(�:)�;)�;.�;.�8.�7.�82�:4�86�63�21�32�43�51�2,�0(�1(�7.�:0�7/�4.�41�:<�?A�8:�73�70�6*�4%�4#�7"�:$�<*�8'�4&�4)�7/�93�82�8.�?.�<)�8%�7$�:'�<)�<)�:(�>/�:,�>3�C9�0*�;7�30�64�62�;6�C>�KD�RJ�TI�UI�UH�@1�?/�<-�=-�>-�?/�?0�>/�<-�<-�<-�<-�;/�<1�@8�C;�JE�a\�b`�nm�rs�`b�`b�`e�lu�py�ms�`g�^e�kp�vz�x{�lr�\i�@V�C\�Uh凌���e�^XtJ\vJhwQ��g��������������������������������������Ǽ㽻ݻ����������������������������������������������ZOBZOBZOBYNAYNAXM@XM@XM@WL?WL?VK>UJ=UJ=VK>VK>WL?RH>RH>TK?VL<YM:YM8ZL:YL;XJ@VKHZRXf^ooi�vs�~}���������������Ǎ�ώ�я�ԏ�ґ�Ҍ�Ʉ��}��u|�ov�io�ni��j��az�Yw�Pp�Ce�9W�5M�8I�?F�CB�GD�GF�FH�BK�>O�>M�BI�AB�?=�GC�93�2)�F?�IE�A>�<<�9:�::�>:�C<�E;�F9�7)�7'�8)�9'�9&�8%�:'�;'�;(�=*�<-�;-�8-�6+�5.�5/�23�.0�,1�03�48�78�46�32�.+�40�62�33�/2�/5�6>�;E�05�01�20�3+�4(�7&�9'�<)�7%�6%�6(�9,�=3�@8�@8�A7�G5�C-�;'�9%�<(�>*�=)�8&�:,�7*�1&�D;�2.�A>�0/�+)�2.�5/�82�91�8/�6+�2'�1$�E6�A3�=.�:*�9*�:,�:-�:-�<,�=-�>.�<-�;.�;/�=4�@7�RK�f`�b`�ij�mp�ch�jp�ou�rz�t}�nt�bj�dm�qy�v}�ot�go�We�@X�?Z�Pf�~����w�ll�\o�[x�a��s�����������������������������������°֮�ҧ�Ш�Ҭ�ԯ�ղ�ڻ������������������������������������YO?YO?YO?YO?XN>XN>XN>XN>WM=WM=VL<VL<VL<WM=WM=XM@TI?UJ?VK>YL=ZN;[M;[M;ZM<ZM@VLFXOS`Wce_tke�so�yx�}~����������É�Ɋ�ˊ�ʉ�ń��}}�ww�qq�ll�gf�m`��^r�T^�N_�K_�@Y�6L�4G�9D�=B�BA�FB�GD�EJ�BK�=O�>O�@E�DC�@<�GA�8.�6+�NE�A9�<7�53�0-�40�=7�C:�D8�B4�8'�:'�:)�:&�8$�9%�:&�:%�8%�:&�9+�9*�7*�5(�3*�3,�+,�*.�-4�/5�28�37�39�59�8<�8=�9>�9B�9E�7G�6I�5F�*5�,3�03�40�6.�8*�:+�<,�5&�7*�;/�<2�=6�<6�=7�@7�J;�H4�B0�=+�:(�9(�9)�9*�4&�9.�@7�D=�1.�/-�55�65�4.�7/�91�:2�;2�<1�;1�;0�M@�G:�@1�9+�7*�7)�8+�8+�;.�=0�>/�=.�;,�;,�;/�<3�KC�c\�b_�jj�os�ho�ry�w~�ho�px�rx�kr�lu�u~�t|�fn�am�Qa�AZ�<X�K`�tz�����z|�jz�f��i��v����̮����������������������շ�ˮ�ȥ������Ț�ʞ�ˢ�ͨ�ұ�ؼ����������������������������ƾYO?XN>XN>XN>XN>XN>WM=WM=XN>WM=WM=VL<VL<WM=XN>XM@UJ?WI?YL?ZM<[M<[M;[M;[M<\OBXLEXMM\RZ_Wgc]rke�so�xv�xx�|z��~������È�lj�ǂ}��y�{u�xq�vo�uk�qg�za��O[�GF�DI�GO�BO�9G�6B�9A�<>�@>�C@�EC�BI�@L�=N�?N�@B�GC�A;�G<�:-�:.�UH�>4�92�/+�*%�.)�:2�C8�C5�>.�;)�;(�<(�:&�;'�<'�;&�7$�5!�7$�8(�7)�5'�3'�3(�2+�42�68�8<�5:�-3�(.�(.�,1�.4�*1�&1�)7�,@�*B�!:�0�"0�'1�+2�/0�0-�2,�4*�6+�5,�81�=5�>7�96�63�42�93�I<�K;�F6�>.�7'�3$�6(�:,�5)�7,�D;�81�30�!�98�62�1)�4*�4*�5*�6,�6+�6,�7,�YN�SF�H<�@3�<0�</�=2�=2�9.�;.�=/�=/�;-�9+�9+�9.�<3�YR�b^�oq�uy�ls�q{�r|�{�����z�ip�do�p{�s~�js�\i�M`�@]�8V�G]�nt��������m}�h��h��r�������ͮ�ܾ�ڼ�յ�̪�à�����������������~��������Ò�Ě�Ȣ�ͫ�Ѷ���������������������ͽ�Ƿ�ZM>ZM>ZM>ZM>ZM>ZM>ZM>ZM>XK<XK<XK<YL=YL=ZM>ZM>ZM>ZM@[L@[L>\N=]M=^N=]O=]O>ZM>XMCXLIYMPZPX^UcaYjb[ske�ok�tp�wq�|u��~���ȋ�Lj��~��y��r��r��t��k��[��HM�B:�A;�CA�?@�9;�:?�BF�==�==�>>�@B�AJ�BN�?O�AM�??�A8�@5�@2�=.�>-�F7�OC�8.�=5�3-�4-�E:�@2�7&�?+�7$�:&�<'�;&�9$�9%�9&�:%�:&�9'�6%�2#�.!�/$�7-�=4�83�51�0.�++�')�%(�%(�%(�&+�"*�"/�'7�)?�!<�7�2�'9�".�"+�*/�-/�*)�-*�42�63�65�65�56�11�..�,,�.-�:1�;0�:0�TJ�#�,"�G=�.%�/'�>6�E?�;6�/)�/)�50�<6�>5�<.�5*�3'�6+�;/�;1�8.�bY�ZP�D;�6-�:0�9.�3(�6+�0&�1'�2'�3&�6(�:+�<-�=0�:/�C;�\X�oq�rv�w�y��r}�|��x�u|�sz�r}�p|�kw�fr�^m�G[�=[�=Z�@U�fj����y��m|�g}�d��j��x��������������}�wy�rx�p{�s��w��v��w��z�������������������������¨�̺���������վ�̺�²����ZM>ZM>ZM>ZM>ZM>ZM>ZM>ZM>XK<XK<XK<YL=YL=ZM>ZM>[L>[L@[L>\K>]M=]M<^N=]O=]O>^OA\ND\NGZNK[OR\RY_U_`Vge\tjb�og�qj�xp��y���Ċ�Ð���~��t��n��q��u��i��W|�=B�6,�4,�:4�>8�<9�=;�@>�=<�<=�<@�>C�@J�@J�>L�@G�>8�?3�>0�>.�=)�=*�D4�L@�J?�D<�92�80�C8�F7�<*�6"�9&�;'�=(�=(�;'�:'�:'�9%�9'�6%�2"�2$�5)�8-�8/�90�2'�0&�.&�-'�+(�+*�-,�-/�*.�&+�$/�'7�%<�8�4�1�1�-<�2?�)4�(-�-1�/3�*/�9>�7<�49�15�/3�/2�24�86�2.�<4�83�F>�F>�0(�3+�#�6.�A9�E?�=7�4,�2+�6/�;2�;-�9*�6(�5)�9,�<1�<2�9/�cZ�YO�@9�4,�92�;1�7-�:0�4,�3+�4+�5)�5(�5'�6'�6(�;/�B8�YU�lk�pt�w�|��v��}��z��v}�t~�s~�o|�iv�bp�]m�G\�<[�=[�CX�dg��v��nz�ct�]w�^~�c��l��q��q��no�^k�^g�]f�_k�`q�fx�jz�k��u��w��}��~�������������������������Ÿ�ƿ���Ѻ�Ƕ�������[M<[M<[M<[M<[M<[M<[M<[M<YK:YK:YK:ZL;ZL;[M<[M<[M<\K>\K>^K>]M=]M<^N=^N=]O=`RA^QB]OE\NG[OL\OO^QT^QZ_SfdXui]�lb�sk�v��}��}��������v��p��t��w��i��Ru�=E�6.�4,�:1�@7�B:�@9�=:�>=�<?�<A�=F�@H�@I�>F�?A�=5�=/�<*�=)�;'�<)�B0�J;�G=�=5�;3�>6�F<�RD�L9�5"�:'�:&�;(�=*�=+�<)�:(�9(�8&�1"�/"�4)�=2�?5�80�4*�4'�5'�2&�/%�-%�,&�,)�,)�,-�(,�&0�(7�%;�8�4�4�$:�/>�4D�7F�:G�<H�5?�+7�2=�/:�.8�,6�.2�.0�/0�31�0-�>:�74�<8�ni�D?�0+�/*�;3�A9�B:�=5�7-�5,�5,�6+�6(�6&�6(�8*�</�<1�<1�;2�`Z�TN�<4�0)�;4�>6�;3�>6�=8�<7�<6�<3�:0�9-�6)�6'�:.�@5�SN�gf�nr�y�����{��|��{��x�w��s��m|�eu�^o�Yl�F]�:Y�=[�FY�``��dv�[i�Rg�Pl�Ss�Xz�^|�_v�]o�Y`zN^Qa�Vd�Zm�`t�g|�k~�n��s��u��y��z��z��{�������������������ȹ�̷�ʵ����������ZL;ZL;ZL;ZL;ZL;ZL;ZL;ZL;YK:YK:YK:ZL;ZL;[M<[M<\L<^K>^K>^K<_L=_L<^N=^N=^N=_Q@_Q@^OC\ND]ME\NG]NJ^NP_P^cTleYzj^�qg�|t��{��z�����������z��x��u��c��Mk�GS�BA�A>�C<�D;�C;�B:�@;�AA�?A�?E�@H�BI�AG�=B�=<�?7�>0�=*�=)�<(�<)�A/�G9�?6�60�=8�D>�G>�WK�YG�<*�:(�7#�7$�;(�=+�<+�9)�8(�3%�2#�3&�8.�>6�>5�5-�/'�6*�7*�4+�1(�.*�-*�+)�**�)-�'-�(2�):�'=�!<�>�$B�5K�'8�-?�O_�`o�P_�;J�8G�)9�*7�-8�09�26�00�+'�)"�1.�74�2/�C@�so�VQ�>9�HB�>6�=5�;2�8/�7,�6+�3(�3%�5$�6%�8'�<-�</�:-�:0�=3�XR�MH�71�1)�<7�A;�;6�<8�=<�<<�><�?9�>6�</�:+�9*�8+�<0�NF�b`�np�{�����~��y��z�z��x��t��m|�cs�\m�Tg�D[�6U�<Y�I[�ZY�mQatFZuC[yDczJk~Ps�Wu�Yr�Yl�Xk�[k�]n�ct�hz�m��p��r��q��r��u��v��w��w��w��x��{��}��|��}���������ȶ�ɶ����������ZL;ZL;ZL;ZL;ZL;ZL;ZL;ZL;YK:YK:YK:ZL;ZL;[M<[M<\L<^K<_J<_J<_L=_L<`M=^N=^N=^N=^N>^N>]N@^MB^OC_PF_NKbNXcPddTpeZ|me�xr��w��u��}����É�ς��w��l��Xv�E^�EU�GQ�JQ�FI�A?�@=�B=�B?�CC�CD�CH�EI�EH�CE�?>�<8�A6�?.�<*�<)�;&�;'�=-�A5�H@�?:�DA�C@�=5�LA�ZK�M=�@/�8'�2"�7'�<,�:)�7(�8*�0$�3(�7.�:3�:4�6/�/*�,(�0-�2.�11�32�26�48�59�6<�-6�,7�/>�0D�-G�*G�,O�3S�8O�2D�?R�^q�k}�Vi�BT�>O�3E�2A�3=�6;�98�80�4'�/#�2,�.*�73�YS�]W�YS�C;�JB�E:�>3�8-�7,�:,�:,�7)�5%�8&�:%�;)�=-�;,�6*�8/�=6�NH�FB�61�2-�>:�@;�82�62�05�16�45�84�:1�:.�:+�:)�6'�7*�I?�_Z�mo�|�����~��v~�x}�z��x��s��kz�cu�\o�Qd�E\�7U�<Y�M\�UQx`AUi;Wr@[vDeyKn~Qs�Ww�[y�`v�bx�fw�iy�n{�q��s��s��q��p��s��u��u��u��u��s��u��x��|��y��y������������������������YK:YK:YK:YK:YK:YK:YK:YK:YK:YK:YK:ZL;ZL;[M<[M<\L<^K<_J<_J<`K=_L<`M=^N=^N=]M<]M<^N=_O?_O?`P@aQAcOGcMQcN\`PdaUrha�to�|t�~q��v����͋�܂��r��ct�Pc�=Q�6K�>R�DS�AL�;A�;?�?@�BC�EG�EE�EF�FG�FF�CB�>;�;5�>2�;,�8'�9'�:&�9'�:,�<2�ID�@>�==�77�3.�A9�ZO�gZ�P@�A0�4$�6&�9*�8*�7*�8+�0%�6,�;2�:3�4/�/+�-(�-,�4:�4;�3>�3=�2?�0>�1>�1?�1B�2C�4L�5N�0O�-P�1Y�=b�2J�M`�`r�^r�Vj�Ob�DX�8K�@R�:F�1;�//�3+�8*�;(�;'�:/�1*�JC�kd�MD�QH�=4�=3�ND�B6�8,�8,�<.�;-�9+�;*�<'�;&�<)�>.�9*�3(�:0�D<�GB�C>�72�3/�;8�;7�3.�1/�*1�+2�-1�31�70�:.�</�?.�6&�4'�B7�WR�ii�{�������w~�y~�{��x��q~�ix�as�[n�Ob�H_�9W�>Z�O^�RMoY9Pg8[vDa|Jm�Sv�Yz�^}�a��h��m�m|�n{�o|�q�p��o��m��m��r��r��s��s��p��q��s��u��w��u��x�������¯�̿�����ͯ���YK9YK9YK9YK9YK9YK9YK9YK9YK9YK9YK9ZL:ZL:[M;[M;\L;_J<aJ<_J<`K=_L<`M=^N=^N=^O;_P<aO<bO?bO?bO?bP=cNBfMLeMVaO^aUlhbuq�}w��s��v����͇��~��px�ck�PZ�<L�-G�5R�<T�9N�7F�;F�?E�?D�DF�ED�FE�FE�FC�C?�=9�:2�<0�9*�6&�9(�;)�;+�<0�>6�<9�78�/0�//�31�83�LD�k`�gZ�QB�<.�9,�:-�7)�6*�8.�4)�7.�92�61�1-�/+�0.�04�3B�0F�.G�+C�&A�#>�!:� 9�'B�+F�.N�/Q�+Q�*U�2a�Ai�B]�_q�gy�Ui�J^�K`�AX�1E�@Q�7B�,2�)%�.!�8"�@#�@&�?0�90�YN�]R�G=�E9�7,�=1�VK�G<�:-�9,�:+�9*�9(�=+�>*�<&�;&�=+�7)�4)�=5�MG�GB�FA�96�31�84�51�0,�10�+3�*3�-1�00�4.�8,�;.�?.�:)�3%�;1�NI�`a�x|�������{��}��}��x��n}�dv�]o�Xk�K_�G`�8V�=X�N\�KFfR0Ne5ZtDe~Nt�\�d��i��k��o��t��u��u~�r|�q~�o��n��m��m��o��o��p��p��m��l��o��s��u��u��w�������Ű�ξ��;�˧�����YK9YK9YK9YK9YK9YK9YK9YK9YK9YK9YK9ZL:ZL:[M;[M;\L;_J<_J<_J<`K=_L<`M=^N=^N=`Q=aR>aR>aR>aR>`Q=aO<aL>iOJhNScP[cWjke�uv�~|��x��z����ǃ��}��ty�ln�YZ�EK�3H�8S�<T�9O�:M�>L�=G�:A�BD�CB�D@�E@�E>�A:�;3�9/�<0�9*�7'�:+�=/�>0�@6�B<�63�56�--�1/�95�/&�3(�SH�vk�\O�C6�</�;/�6+�6*�9/�7/�71�62�31�10�01�45�4;�%7�#:�":�":�!9�9�6�7�5� :�%B�(F�'I�(M�4[�Fh�ax�`n�We�Q_�Pa�M\�?O�2@�=G�7:�0.�/%�5$�<%�@$�=$�:*�8.�VM�;1�@7�6.�3*�C;�XN�H=�:/�6)�5)�4&�4&�:+�=)�:%�8&�:)�4'�1&�?6�RK�IB�HB�;7�2/�50�1.�-,�13�,1�*0�+.�+*�-)�1'�5'�8)�>-�3#�8+�IA�\Y�wx�������������~��v��i{�^r�Wk�Th�C[�D]�6T�:U�MY�HB]K,Lc4Vo>c|Kt�\��g��m��o��s��w��z��w��s{�n{�j|�h�h��i��l��l��m��k��i��h��k��n��t��s��w�������Ū�ʵ��ø�Ƣ�����[L8[L8[L8[L8[L8[L8[L8[L8\M9\M9\M9\M9\M9\M9\M9\L;^I;_J>`K=^K<^K;_L<_O>aQ@bRAaQ@`P?`R@aSAaSB_Q@aNAiMIhKNdPZfZmnk�x{����������������с��x�rr�ic�b]�OU�BN�;I�=K�?N�<I�9C�=D�>?�A<�A8�A7�A5�=2�8.�7*�4%�A1�;-�5)�@6�F<�<6�61�84�62�4/�5,�8+�;+�9&�6&�<1�TM�[P�E:�7)�=/�@4�9.�1*�FC�.0�59�6>�-6�CN�)2�'/�*0�)1�&�!,�'1�&2�)�+�+9� /�&6�.?�$6�Zk�.?�^k�`j�[f�V_�QX�IN�@A�87�>8�B8�@2�7'�3 �7"�<&�<*�9.�80�F@�<8�41�65�53�DB�KG�KD�C:�9/�2*�3)�2*�4+�=.�:+�0"�)�-#�90�D:�G?�OG�D<�7/�0)�.,�00�/2�03�.1�/1�/0�0-�1-�2*�6*�:,�>.�2"�>0�=4�_X�tp�������������x��hz�^v�Zt�Tn�Ke�Ec�9Y�;[�?Y�]i�@;UG-L^5\sCj�Nz�^��d��h��k��o��p��o}�n|�m{�j{�i{�g}�f~�f��k��j��l��h��f��d��d��f��k��o��t��y������������������z��[L8[L8[L8[L8[L8[L8[L8[L8\M9\M9\M9\M9\M9\M9\M9\M9^I;`K=`M>`M=_L<_L<_O>aQAbRB_Q@^OA]PA]PC]RE]RG`PHgNKhNRfS`h_unn�y}�������ˤ���~��w��x��||�uk�j_�a_�SV�FO�GQ�FT�AN�<F�;@�;<�>9�@6�B6�A3�>0�9,�8+�;*�>.�7)�9-�@7�;5�62�<8�40�4.�4*�4)�7'�:'�:&�9(�8/�D<�ME�I=�>0�7)�6*�9/�:5�IG�/2�5;�7B�/=�AO�)3�&)�&%�)+�+-�*.�(+�(,�*0�$+�$+�&-�<C�$�6=�CJ�(.�kr�dk�\b�Y^�PT�DD�>9�@6�9,�E6�I7�@-�1 �*�)�)�/&�;7�UQ�IH�55�46�<>�WV�FC�F@�@:�7/�2*�3-�50�6/�<4�:0�6-�4*�5-�91�@8�E<�J?�@7�6,�/)�/+�00�/2�/2�01�11�10�0-�0-�2*�5*�9,�>/�3#�<.�=1�^V�vr�������������t��fy�\u�Xs�Qo�Ih�@a�:Z�?^�I_�S[|>6SF-O^8]tDj�Lw�Z{�`{�c|�g�j�k|�j{�jz�iy�fy�ey�e{�d|�e~�i�i��j�f�b��`��`��b��e��j��o��r��y���������y�dopR]^\M9\M9\M9\M9\M9\M9\M9\M9\M9\M9\M9\M9\M9\M9\M9\M9_K9aM;cO=cO?aN>`M=^N>_PB_PD^PF]OF[OH]QL^TNaVScWTfUVhV]h\olh�tu�|����̋�ՙ�ء�˫���}�Ѐ�僇�~w�sk�he�WX�HO�DM�DP�BM�=H�<B�8:�;7�?5�A5�B3�A1�<+�;*�<,�<,�9-�B7�H@�;3�0*�93�5/�5/�6-�7,�7)�7'�9'�;+�6.�6/�B:�OD�H;�4%�1#�>2�<6�FE�04�4;�8A�6A�FT�4>�*-�#$�$%�12�-/�'+�%)�16�)-�8=�+1�).�5:�TX�?C�]a�`e�W]�PU�NS�GJ�;<�95�@:�7-�?3�C6�?2�9.�4*�.$�(!�&�0+�FD�;;�--�46�AC�_^�>;�A<�@:�;3�80�;5�>9�?:�@=�>:�?:�B>�@=�<8�?<�IC�A8�;3�4+�1*�0,�20�01�/1�11�11�10�0-�0-�2*�5*�9,�?0�4$�8*�;/�[S�zv����������}��q��cx�[s�Tp�Mm�Fg�=_�<\�Ea�Tf�AEq;0TH1Ra;_vFk�Ov�[x�_x�`y�d}�h|�hy�gy�gx�dw�cw�cw�bz�cz�c{�g}�g�h}�d}�`|�]~�]��_��g��m��r��s��t��t{�mq�kUdZBON3@?]N:]N:]N:]N:]N:]N:]N:]N:]N:]N:]N:]N:]N:]N:]N:]N:_K7aM9cO;cO=aN>]M=]NB\ND\NG]QL`UTcXXcZ^e[bg_eh`fkahmdrpk�st�z~���ˆ�ی�⎆؟�Ԯ�Ŵ���y��{�߀{�x�vp�ec�VZ�LQ�DM�@H�<D�;?�78�;6�=5�@5�C3�A1�?,�=+�8)�=.�<1�F;�QH�H@�5/�0*�92�81�:1�<2�:.�5(�6'�9,�7-�4,�>5�OB�K=�:,�6*�@6�5.�>;�/1�17�5<�9C�P[�MV�?D�55�$%�/0�,/�25�*/�.3�:=��46�-/�:=�GH�Z[�PQ�?A�BE�DG�@B�:>�9:�99�:8�94�:2�;3�B;�NI�WT�OO�DA�83�:6�KJ�NM�RS�Y[�RR�YW�42�<7�A9�?7�>6�@:�B=�?<�??�9<�:<�@B�<=�67�><�LI�82�6/�2*�2+�3-�2/�00�/0�11�11�00�0-�0-�1*�5*�9,�@1�6&�5'�9-�VN�|x����������z��n~�cv�Xp�Ok�Fh�@c�9\�?^�Kc�Yg�32h;-XO7YfCezJm�Qu�Zv�]w�_y�c{�f{�gw�ev�bv�bu�av�av�ay�bz�c{�ez�f|�g{�c{�_{�^}�^�`��h��m��s��t��t��ru�hj�cQcVESM9GA]M<]M<]M<]M<]M<]M<]M<]M<]M<]M<]M<]M<]M<]M<]M<]N:^K4`M5bO8bN:`M=]L?]ME]NJ[PP`W[h`gofrqiyqizoi|nj|nl~qp�sv�w|�{��Ӆ�ኋ攍䞌۠���u��l��mr�vm�wh�uk�ng�gf�]]�PT�CH�:?�5:�68�96�=6�A4�C4�B2�@-�>,�7(�?4�:1�;2�QI�\R�LD�:1�91�6.�90�=4�=1�6+�4(�6+�4,�81�?6�E9�E9�B4�@3�>3�/'�62�/0�.2�.5�8?�QX�^c�[^�PR�/1�13�,/�EG�68�,.�-.�>A�24�44�cc�?=�,*�/.�(*�<>�BF�8;�48�:>�8<�/1�54�<<�GG�ST�`d�im�el�^b�A?�FA�^\�ih�pq�kk�KL�=<�31�=8�C<�B;�=6�:5�82�32�5:�/6�-5�/7�,3�,2�9;�KJ�3.�3-�2*�3*�4-�3/�3.�10�11�01�/0�/-�0-�1*�5*�9,�@1�9)�2$�8,�NF�|x���������v��k{�`s�Tn�Hg�>b�:_�6[�A`�Nb�W^q/*`?/[V=_lIg{Mn�Tv�]w�`x�`z�d{�dy�cu�au�at�`u�`w�`x�az�bz�c{�e{�g|�g{�cz�^x�]z�]~�_�b��i��p��q��s��u|�os�lewf\k_SbV^N=^N=^N=^N=^N=^N=^N=^N=^N=^N=^N=^N=^N=^N=^N=^O;^M4`M3aN7`N9]M=]ND_PL^SSbX`jaoul�{t�{u�ws�vr�tr�rt�rx�t|�x��{���Ѕ�ی�ߖ�ܚ�Μ���������}z�k\�R=�O@�RF�WO�WR�QQ�IJ�=@�37�::�;9�>6�@5�B5�B3�?-�=.�8-�A7�4,�.%�I@�g]�d[�UJ�;3�5*�3)�91�:1�6,�3*�6.�1*�82�<2�:/�>1�E6�B4�8,�0)�2.�21�-/�+/�28�FK�V[�^a�\`�9=�9=�+/�JN�8<�.2�58�((�(*�YW�?=�:7�84� �)*�=?�BF�5:�,3�18�06�)/�48�LO�bf�io�dm�aj�al�cl�MM�NK�\[�VU�MN�HG�33�30�A=�KD�OH�IC�?9�94�5/�.,�2:�-9�*6�(2�)3�07�>B�JI�1-�2+�3*�4+�3,�3.�3.�2.�11�/1�/0�.-�/-�0*�4*�8,�=/�<,�1#�7+�D<�yu�������}��p��gw�^q�Rl�Cc�9^�6]�6[�Eb�N]�IJf4*WC/\Y?`kIh{Mn�Sv�\y�`z�a{�e{�dw�at�^r�]r�]s�^v�_w�`z�bz�cx�dy�e{�ez�bw�]w�\y�^z�_}�a��g��n��p��u��z��w|�su�solgwf^P>^P>^P>^P>^P>^P>^P>^P>]O=]O=]O=]O=]O=]O=]O=^O;aP7aP5aO8^O;]N@_QJ`UUbX`oevun�y��~��|�zy�xv�vw�ty�t}�y��|���ń�ʍ�ϕ�Κ�ȡ��������ɭ�ƥ���n�gI�F0�A1�@3�A6�GA�MK�HH�?@�==�<;�=:�>9�A7�@4�=0�</�:1�?7�4-�0(�H@�bW�g\�eX�NC�>3�4*�7-�91�4-�2+�60�1-�60�8/�8.�>2�D5�>1�3&�3+�0,�20�..�./�15�79�BE�MS�Y_�FL�QX�48�GK�9=�BF�7;�./�14�IH�87�86�$!�;:�9:�;?�=B�7=�.7�*3�2<�=E�MT�^f�kt�jt�`k�[g�Yi�\g�de�ZW�VU�?>�11�45�34�CA�IF�QK�RL�IB�=8�94�72�32�-7�1=�0<�*6�.9�;B�CG�AA�1.�3,�4+�4+�4*�3+�3.�3/�01�/1�/0�.-�/-�0*�3*�7,�;-�>/�1$�7+�<4�tp�������v��i}�at�[p�Pj�Bb�7_�7`�;^�Le�OZ85^=-OF.WX?ZeDewLl�St�\x�_{�b{�ey�bt�^q�Zq�Xr�Yr�Yt�]u�^x�`x�aw�bw�cy�cv�`u�[u�Zv�[x�]}�a��h��m��o��s��u~�rx�mq�ij~dbu^^P>^P>^P>^P>^P>^P>^P>^P>]O=]O=]O=]O=]O=]O=]O=]O;aR:aS9`Q;^P?]OF^SRbX`e]mwp�{w������~�yy�ww�ux�v}�y�~�ł�ņ������������������ȷ�Ѿ����Ѻ�Ѭ��oT�\E�F4�=/�G<�VP�VS�NN�@@�>>�<<�=:�>9�<4�:0�9/�71�<6�94�=6�NF�XN�]P�eY�cV�L?�9.�8.�92�4.�1-�60�51�3.�5/�=3�D8�C5�;.�3&�5-�-'�0.�/-�31�55�-/�24�CG�X^�W]�ov�DK�HN�=C�[a�pu�?A�~��no�RR�?<�1.�;:�HJ�:?�7@�>G�7C�-9�?K�^h�mx�js�co�]h�^k�ao�^o�Zf�\^�OJ�IH�75�/1�55�//�85�D?�ID�IB�@9�50�40�72�65�'.�/;�2<�+5�07�>D�?@�43�3-�5,�5,�4)�3)�3+�3.�40�00�/1�/0�.-�/-�0*�3*�7,�:,�?1�1$�6+�70�qn�������p��bx�\p�Xn�Ni�Bb�9`�<c�Aa�Rf�QVe/&XD0HG,ST;V^>btKi�Qr�[w�`z�c}�ex�`s�[o�Vo�Vo�Vp�Wr�[t�]v�^w�`u�`v�`w�_t�\s�[s�Yt�Yv�\x�^|�c�h}�h{�jy�jp�bi�\_uUZnQRfI[M<]O>_Q@_Q@^P?^P?^P?`RAaSB^P?\N=\N=`RAbTCaSB_Q?bT@^R=]P?]RH\QP\RYi_pvo�}v�~z��~����}�wz�qt�ko�sw�w{́�ˋ�Ǘ�ĥ���������Ŵ�˱�έ�Ϩ�Ϥ�Ф�˝���Ө��f�]G�zf�te�I?�RL�cb�JK�?@�7:�::�:8�74�62�;6�72�5/�B<�<4�H@�WL�OB�dW�bU�XJ�F:�9/�6.�60�50�40�0.�2-�71�>4�=1�7*�6)�7-�0%�0'�/*�1.�20�40�52�65�7<�IQ�X`�NT�8>�6=�X_�����pu�hm�jl�gh�]]�ZY�[\�V[�DK�9C�8B�2?�,:�0?�=I�S`�`j�gs�eq�bn�co�ao�]h�RT�E@�76�31�02�..�21�85�C>�A;�?8�;5�81�82�84�65�7;�4:�3:�4;�6:�48�32�1.�2+�5,�7-�5*�3*�2)�2+�2/�11�02�01�/.�0.�1+�4+�7-�@3�9+�7+�/%�;6�XV����{��l�e|�\r�Ph�Gd�Bd�;a�9]�Mk�Rc�=>P+D;%DG-LM4Y_B[jDbxNp�[x�bx�au�]r�Zr�Zm�Tn�So�Tp�Us�Yu�[w�^v�^t�[r�\t�\u�[s�[s�Yr�Xq�Wy�_y�bx�bs�`j�Y`~QVrHQjC@W2?T0<Q-ZL;]O>_Q@_Q@_Q@^P?_Q@`RAaSB_Q@^P?_Q@aSBbTCaSB^Q@bXF]SCZPF]UQcY`g_opi�{t�{w�~{�~�z{�rt�ko�ko�nq�uv�|}։�ә�ϩ�ȹ���Ļ�Ͳ�֫�ڦ�ݦ�ݣ�ڤ�ؤ�С�Ɯջ����|dŋv�~n�VK�aZ�ro�Y[�IM�=A�<?�>?�::�65�64�<9�84�?9�5/�=4�KA�G<�\N�na�`R�G;�4)�/'�5.�4.�/*�52�96�<8�;4�8.�6*�5+�6+�8/�6,�3,�0,�0,�1,�3/�63�8:�>B�IP�W\�^c�]c�^d�ah�TY�OT�RW�ae�ko�gh�\^�OS�3;�+5�*7�-:�'6� .�'7�7D�P[�[e�bm�dn�do�cn�[i�Q[�DF�;8�44�54�45�11�10�63�>:�=8�;5�:4�82�83�96�97�8:�79�59�68�68�54�30�2+�3*�6,�8+�6+�3(�1)�1+�2/�11�12�01�0.�0.�1+�4+�7-�=1�>1�8-�2)�83�[Z����t|�fy�^v�Wo�Ni�Fe�?a�<`�A`�Og�KUy;7L2"=:"<B'FG.PS7WdA_rKm�Yv�_w�^s�Yr�Wp�Ul�Pl�Qm�Rn�Sq�Ws�Yu�\t�\t�[s�Zt�[s�Yr�Xo�Up�To�Um�Tl�Sg�P_�KVuCLi:D^2?W.?W.@V.AW/YL=[N?^QB^QB^QB^QB_RC`SDaTE`SD_RC`SDaTEaTE`SD\QD`VLZRLYRQa[`ldtrm�xt�}y�|y�~|�z{�pr�gh�bf�jm�rt�~|؇�ޘ�ܩ�ػ���������������������ڨ����������l��o�qa�TF�^U�mj�tt�]`�FM�>E�?C�=?�9:�66�=:�:7�@;�71�6-�>4�<0�F9�i]�i\�ZN�A6�2)�4,�6.�1-�43�A?�GD�=7�3*�2'�3(�2&�5+�2*�/*�0*�2,�6/�;5�A<�,-�46�CG�WY�_b�[_�TZ�RX�GN�IP�PV�^c�ns�or�Y^�?C�.6�,5�2<�2?�+:�'5�6F�KX�IT�OX�W`�_g�cl�`j�QZ�BJ�77�52�66�:9�:<�76�52�51�:4�:3�91�91�82�84�:7�;9�88�88�76�87�87�73�3/�2*�6+�7,�8+�6+�3(�0(�1)�2-�21�22�11�1.�1.�1+�3+�7-�:.�D8�9/�5-�0-�`a����lv�bx�Wr�Ol�Lk�Ce�:\�;^�Ie�Sf�DIm;3P>+><&:?'FD.GH/P\;XkFf|Rq�\t�[p�Vn�Sk�Pj�Nj�Lk�Mm�Qp�Uq�Vr�Yr�Zu�\u�Zt�Yq�Vo�Tk�Qj�Oi�Nc�Ja�J[~CTt>Ki6E_1@X-=U*C[0F^3Jb7WJ;ZM>\O@^QB]PA^QB_RCaTE`SD`SD`SDaTEaTE`SD_RC[PEWPNVSU^Zbhdspn�xt�|x�}z�|z�xv�pp�fg�_c�cf�mr�x{Ɋ����楡嶴���������������������۫�Ҫ�¢�����������v��r�ud�eX�ja�rn����ru�W^�HO�BF�@C�=@�<<�:8�;8�D?�B<�:1�90�5*�1$�I<�aS�j\�SF�9-�3(�5,�4.�32�MK�[X�LG�81�4+�5+�3)�/'�-&�-&�-&�0)�6,�:1�>7�.+�31�:9�DC�GG�GI�HL�NS�RX�W]�Z_�]b�hm�mr�Y^�:A�16�.5�,6�*4�%3�(5�<J�S`�>J�@J�FM�PW�Za�W^�FN�59�44�54�99�??�?@�<<�76�63�83�82�81�81�82�84�:7�:8�98�98�96�97�95�73�4-�3*�6+�8*�8+�7)�3(�1(�1(�2,�31�22�21�1.�1.�1+�3+�7-�9-�F;�90�3-�-+�gi�z�hs�by�Tp�Kj�Gi�>b�6X�=]�Qg�Xd�BAgB6\N:HF0BC,KG2FE,KU7Qd?atMk�Vp�Yn�Sl�Qi�Lh�Ji�Kj�Ll�Nn�Qp�Uq�Xr�Wu�Ys�Xr�To�Rk�Nf�Kf�Ie�J`�G\�DXx>Rp;Ni7Mf6Ne8Of9Me8Pi9Tl?UH9WJ;[N?\O@]PA]PA_RCaTE_RC`SDaTEaTE`SD_RC_RC\RJRNS[Zfjhzrq�uu�xw�zy�{z�xv�oo�de�`a�be�mp�w|ŀ�͔�ឞ宭輼��������������������ж�Ų��������������y�}r�yl�vj�pf�pj釅�}~�os�ae�UX�MO�FH�BB�:8�;8�B>�D?�;3�=4�A6�0$�/#�H<�XK�NA�<0�7+�6+�2+�33�TV�ji�]X�E?�<4�<3�:0�5-�3,�2+�1)�/(�.%�.%�/&�70�3-�2-�;6�D@�FE�CC�BD�FI�QT�W\�W\�_f�hn�Z`�BG�:<�48�28�18�3>�9D�HT�V`�6@�3<�5<�AE�JP�IN�:B�04�32�76�:9�::�::�98�74�51�:3�;2�:1�:1�83�74�75�76�97�97�87�98�96�84�5.�3+�7,�9+�9,�7)�4(�2&�1(�2,�31�42�31�1.�1.�1+�3+�7-�8-�D9�7/�1,�22�ko�ry�gs�]t�Ol�Ce�=c�9b�8]�Fa�Zj�VZxD=dJ<bXETO:LH3QI5HE-FP2J]9YlGd|Ok�Tl�Sk�Nh�Kg�Ih�Hi�Ik�Mm�Po�Tr�Wq�Vt�Wr�Tp�Qk�Mh�Jd�Gc�Ga�E[�AX{?Ut:Rm9Qj9Tk<YmA\pDWn?Wp?XqARE6UH9XK<ZM>[N?\O@^QB`SD`SDaTEaTEaTE`SD`SDbUF_WQ[Xbeg|uv�y{�yz�xy�xx�uv�oo�gh�`a�bc�kn�y|Ƃ�Ј�Қ�ޣ�᯲伾��������������������������¿ƹ����������~wvzursmfyoe�rh�d[�a\�pn�uv�y}�wz�or�bd�UW�KI�DB�>;�<7�A<�:2�B:�TK�=3�5*�9,�</�>0�A2�C6�@1�6.�10�JN�^^�WT�D?�<5�:2�:1�;4�;2�;2�;1�90�8-�7,�7,�(�3&�@6�I@�E=�<7�87�;:�9;�JL�WZ�Z]�_d�af�U\�AF�?>�><�@C�FJ�LU�QZ�S^�V_�3;�.6�.4�6;�<A�;@�49�03�23�75�67�23�01�11�21�3/�;5�=5�=4�<3�94�74�54�54�87�87�77�78�76�64�4.�3*�7*�9+�:*�8)�4%�2%�1'�2+�51�42�31�2.�2.�2+�4+�7-�:/�=2�80�0,�AB�nt�lt�cp�Ri�He�;`�4]�6a�>c�Nf�\f�GEjE9^K;^VBYQ=SI6PF3HD/AK/EV3Qd?]sIfNi�Pj�Li�Hg�Fg�Gh�Hi�Kl�On�Sq�Vq�Ts�To�Pl�Mi�Jf�Gb�Da�Ea�D^�E]~B[w@Xq>Wn>[oA_qF`tF[rBZsBYrAMC3PF6TJ:VL<WM=YO?[QA]SC`VFaWGaWG`VF^TD`VFe[Kf^Ziixps�xz�x{�wx�ux�rt�mn�ff�cd�de�hk�sw���̋�ב�י�ע�֫�ܴ�����������������ºʽ�Ż�¶�����������ymtuopmhfpkf~rk}bZ�d_�XU�ba�np�vw�xz�vv�ki�]Y�SO�GC�=7�D>�:5�F>�[R�:0�;0�7+�6)�=/�C4�B4�@1�?4�67�<?�BD�BA�=7�:2�80�90�<4�;4�;4�=4�>6�A6�C9�F9�,�:+�I<�L?�>4�1(�1,�;8�DD�MN�WY�[`�^d�Z`�LU�>A�3/�60�99�@@�CI�DK�AJ�>G�3<�17�27�7<�6:�15�-2�04�00�65�44�..�**�.,�2.�2,�<6�=5�>5�=4�;6�96�76�66�46�46�34�45�45�43�2-�1)�8+�9,�:*�8)�5%�3%�3'�3+�51�52�41�3.�2.�2+�4+�7-�<1�4*�;4�3/�UW�qw�dm�Zh�I`�Fc�8a�/\�4a�Bg�Ld�PXk5._G6YK9VN:\P=WI7N@.ID/=G+?P/I\7UkA`yHd�Kh�Jh�Ge�De�Cf�Eh�Ij�Mk�Pn�So�Tp�Qn�Ml�Kf�Gd�Eb�Cb�Eb�Ec�Hb�Fa}F_xE_vFbvHewLfyK]tD\uB[tAKB4NE7QH:TK=VK>XM@\O@^QBdWFeXGcYIaWG`UJaWMh^Vjdgts�uv�vw�rt�rs�su�no�ee�^_�cd�hk�or�x{Dž�ґ�ܙ�ߜ�֡�ԩ�ۮ���ܴ�۵�ܴ�ײ�ү�ʬ�Ū�å������|��v�i_fjdg`[Yd^Yvf^vXQ�b\�KE�QN�[Z�gf�us�|�}x�pm�a\�SP�GC�OJ�B=�F@�WO�+"�1'�4(�=/�D7�=.�1#�6'�D8�D?�98�3/�61�<5�>6�=5�>5�<5�93�6/�5,�5*�7,�;-�>0�RC�F7�;-�:-�=3�<2�71�5/�MJ�NN�QR�UV�Y\�VY�MR�CC�4,�6,�60�53�24�17�09�-7�3?�1<�5@�8C�2>�*6�(4�/8�+2�38�38�,0�),�./�32�40�;5�=5�=7�=7�<7�:7�87�77�35�14�14�23�44�40�1,�0'�8+�:,�:*�9'�6%�4%�4'�5)�61�51�41�3.�3,�3+�4+�7+�=3�.%�=8�44�cf�ox�[h�Ob�C]�Fe�:d�/\�6`�Fi�J\�BGS+"WI7TL9NH5ZP>TJ8G?,HF0<D&>J)GV2Rd;\sFd}Jf�Kf�Ic�Dc�Bd�Cf�Eh�Ii�Nl�Qm�Pn�Om�Lj�Ie�Fc�Db�Eb�Ed�Ga�E`Ea}Fb|FczJf{Kh{Lh}M^xB^zA_{BEA7GC9KE<OH?SH>WI?\M?_O?`P?`R@`SB`UHcYSha`pjosour�wu�{y�xw�pp�fg�``�]^�ab�gg�pp�zy̓�����蛚砞ޡ�أ�ڥ�ۥ�٥�ؤ�գ�Ԥ�ѣ�Ρ�ʢ�ɟ�ė������{�rn}igib__d\XjZTrWOVM�VL�PH�WO�VP�YT�ke�zs�}����ur�tt�^^�OM�EB�ZU�72�2*�5+�6)�6(�7'�8)�:,�</�?2�:/�>3�@5�<1�6)�3(�90�?5�80�80�7.�6+�8)�:+�?-�A0�=0�A4�E;�G=�D:�=3�2+�,%�=6�FA�PK�WT�ZW�XU�NM�C=�:*�9)�8-�5.�.0�*2�'4�'7�,?�*@�*@�)@�'@�&@�#=�#;�#7�(6�,8�,6�+2�/2�54�;8�93�:4�;7�;8�:8�88�78�57�26�35�45�55�62�5.�4,�5*�9+�9+�9)�9'�8'�8&�6&�5&�6.�4.�4/�4-�4+�5*�5)�7+�9/�7.�:5�?A�nv�cq�Tg�Hb�Kj�7Z�6`�=f�>d�Nk�JU]$"D,!>:(HE5PM=NI:EB2>B0@G/AH'FK&KR/R]9\kEbvLe~Nd�Kd�Gb�Cb�Ad�Cg�Fj�Kl�Qm�Pk�Mh�Hf�Hf�Gf�Ie�Jd�Ib�Hd�Ic�JcHcHeIeIe}Hb|D[z=]~>`�A>>5@@7GB=KE@QE@UG>[J?]M=aO<`Q=_RA_VJc[Yibiokzro�sp�sq�sp�om�gf�`a�\^�[\�dd�jj�sr�|{Ѕ�ڌ�ᔎ瘓暖ڛ�֜�ם�؝�ל�֛�՚�ҝ�қ�Λ�˚�Ș�đ�����y�rmzkfdd_\f\VkZQqVJTG�TI�TJ�ZS�WR�XS�fb�qk�xp�~x�������ut�fe�TT�ZV�2-�/&�7*�7'�6&�7'�8(�:+�;.�=0�<,�<,�=,�<,�:+�9+�7+�6,�91�80�7.�7,�9*�:(�;&�:'�7)�9-�>4�A7�B8�@6�=3�92�5.�>7�HC�OJ�QL�NI�C>�6.�7&�7%�7*�4-�/0�*4�)8�(;�+A�)B�(B�%B�#A� =�>�:�7�!5�&7�*7�.7�27�89�<:�95�;6�;7�;8�:8�88�78�57�36�47�55�65�72�60�6,�6*�:+�:+�9)�:'�9'�9&�8&�6&�5*�3*�4+�5)�5(�6(�6(�6)�;0�4+�53�TY�er�[m�Ga�Hh�Ae�;a�3\�;b�Mn�Mb�9@S+%@5(59);<-AA2DA1??.:C/=G->CLP']b=foKivSfyRe}Pd�Mb�Ga�Bb�Ad�Ag�Ei�Hk�Nl�Ok�Kh�Hg�Ie�Gf�Ke�Je�Kc�Ie�Lc�Jd�Id�Ge�He�He�FbB^�=_�>b�A69/;;2@>8E@;LB<PD=WH>ZK=^N=]O=]SC^WNd]^iempl|sp�ro�nl�if�b`�\[�YZ�[]�[_�gj�mo�vx�~�Ӆ�ى�ݎ�ᐎޓ�ԓ�ѓ�ѓ�ӓ�Ғ�Ғ�ё�ϔ�Β�Ȓ�Œ���������{�~s�ygtrabh\Ye[Se\NjWHwTE�RF�XP�^Z�ZY�YX�dc�lj�ql�wr����������}z�mi�`Y�3+�1'�7*�9(�8'�9%�9&�:(�:,�:-�<-�8)�7'�:*�?/�>/�5(�."�8.�6-�6,�8,�:+�:)�:&�8%�5(�7*�8-�:/�=2�@5�A6�B9�;2�@7�D>�E?�GA�F@�?9�7-�6'�6'�6-�4/�04�,6�+:�*=�&<�&>�%>�#<� ;�8�8�5�3�!2�%4�+7�3:�7;�9:�;9�95�;6�;7�;8�98�88�78�57�37�48�56�76�62�60�6,�5)�9*�9*�9(�9&�8&�8%�8%�7%�5(�4(�5)�5'�6&�7&�7&�7*�<1�1*�87�kr�\m�Pf�<[�Hk�7^�?f�5\�?c�Vq�?Ra#)K/*;7+/7'28'8<*@=+@<(@>)AC'@EX`5t}U��ex�ah~Tb|LaHa�D`�?b�Ad�Ah�Fj�Kk�Nl�Om�Mj�Ig�If�Hg�Lg�Le�Mc�Kd�Lc�Kb�Gc�Hf�If�He�Ga�Cd�Ce�Dh�G25+58.<<5B=8G?;LB<SE<WJ=YL=ZM>ZQE^VPd^cjgsom�qo�on�hh�_^�WW�SU�VX�[_�`c�kn�qs�z|ρ�և�ډ�܋��؎�ӏ�Ϗ�Ў�э�ҍ�ь�Ќ�ώ�ˍ�Ǎ���������~y�}p�~anzZ\kYTc\Pa^Lc[GnVC�QC�TK�[X�YZ�X\�cf�ll�pm�yt�|w�zt�������|�jb�<2�7*�:)�:(�:&�9%�:&�9'�8*�8+�=.�9*�6'�9)�?.�>.�7(�.!�5)�4)�3(�5)�:+�<+�=*�;*�;,�;,�:.�;.�;/�<0�<2�=3�E;�D=�A:�<5�<7�@9�@;�;3�4'�5*�5.�32�/6�*6�)8�(;�%:�&<�&<�'=�%=�%;�#;�#9�#4�$3�'3�-7�6<�:=�99�96�95�;6�;7�;8�98�88�78�57�48�48�67�76�73�60�6,�5*�8+�8)�8)�8'�7'�8%�7%�7%�5$�6'�7&�9'�9&�:'�9(�9*�:.�2-�HJ�nx�Vi�D^�<^�Af�4]�9c�?d�Ml�Pf0=I!B1.11(-6(3=,<B/B@+A<%E>%HD%V\1p}N��r��}��nk�X`zJ^~F_�Da�@c�Bg�Dk�Jl�Mm�Pm�Pn�Nk�Jh�Jg�Ih�Mh�Mg�Of�Ne�Mc�Kc�Hd�Ig�Ih�Jf�Hc�Eh�Gi�Hl�K.3(36,992=;7C<:G?;ND>RG=TI>TK?UNE[TRb^fjfvmj�mk�ih�a`�WV�PP�PQ�WY�_c�ej�nr�tx�{с�ׅ�چ�ى�ڊ��Њ�͉�Έ�ч�ш�҉�҈�ы�Њ�Ɍ���������|x�~m��ZgTUmWPc]N\aJ\_GgZC{SB�JC�SQ�RV�RY�]d�fj�ll�ur�to�oi�}w��|���k`�?3�7)�;)�<'�<'�;'�;'�9'�7)�7*�;0�:/�:-�:,�;,�:+�8*�6)�7,�7,�7-�6,�6+�9+�<-�>.�=-�=-�</�<.�:-�8+�7,�6+�@6�@7�=4�90�82�;3�:4�5-�/&�0*�21�16�.8�,:�*<�+=�-@�-@�.A�.A�/B�.@�-@�-?�)8�*6�+5�18�7;�9;�76�52�95�;6�;7�;8�98�88�68�47�49�49�57�77�73�60�6,�5*�8+�9)�9)�9'�9'�8'�7'�8%�8$�:%�;&�='�='�='�=)�<-�7,�:7�^e�`p�Oh�;Z�Ah�4^�4_�1Z�Km�Zr�?NZ%.C)-920,0*/8,6@/9B,;<#@<SI)`[5{�T��m��������xp�\aL_G`�Ec�Bf�Ek�Ho�Np�Qo�To�Tn�Nk�Jh�Jf�Hh�Mh�Mh�Pg�Oe�Kd�Jc�Id�Jf�Jg�If�Hd�Ei�Jj�Jm�M,1&/3+461994?:8C<;H@<KC=NG<NG>PJEXRS`]gfdvhg�ff�aa�ZY�QQ�MO�QS�Z^�di�ko�sx�x}�~�ׂ�م�څ�؇�ֈ�ӆ�̅�Ʌ�̄��у�Ӆ�ӆ�ь�ҋ�̌��������yv�zj{�W_�QRnVMd^M]dKZaFd]BwWC�ND�US�TY�RY�[c�ag�gj�qp�ys�qi�|u�rk�xn�[Q�:,�4$�;'�<(�<(�<(�;(�:)�9+�7+�7,�9.�</�;-�:*�8(�:*�<-�=/�?3�@5�=2�6+�4'�8*�<-�:+�;+�<,�<,�<,�9,�7*�5)�6+�;2�>5�?6�?8�>7�70�,&�*&�,+�03�29�0<�0=�0@�0@�0A�0A�0A�0>�.=�-:�+:�+7�0:�09�18�38�79�77�64�41�95�:6�:7�;8�98�88�68�47�5:�5:�68�77�75�60�6.�6*�7+�8*�8*�9(�9(�8&�7(�8&�9#�<$�=%�>&�@'�@)�?+�<-�60�HH�fq�Oc�He�7[�Al�/\�7b�4Y�Qk�Vgl2:D)+C7:6333515915=-2;#28CDha;��U��x����͘�ǔ��}v�bf�Ra�G`�Cc�Bh�Gn�Kr�Pr�Sq�Vp�Un�Nk�Kg�Ie�Gg�Lh�Mh�Oh�Pf�Le�Kd�Je�Jg�Jh�Ih�He�Di�Il�Lo�O(/$,0(04.351855=86A<9D>9JD=IE=LGDSPR[Zfbbuca}``�^^�YX�TT�ST�[]�fi�os�ty�{�~�܁�߃�ރ�ق�ׂ�Ճ�҂�́�ɂ�́��҃�Ն�և�Ԍ�Ҋ�Ɋ���������|�uq�tfn}VX{QLnWIe`K^eJ\dFc`Dt[E�SE�\U�ZZ�U[�[a�]d�af�lm�yt�rk�xp�YQ�ZP�C9�5(�9*�9'�;'�<(�<)�;*�9*�8*�6*�2(�5*�:-�<-�<+�;)�;)�;*�:+�C5�J>�F;�<0�4'�6(�;-�9(�9(�9(�9(�9(�8*�8*�8*�7*�<1�?5�@6�@9�A:�:4�1,�//�04�39�5?�3?�0?�/A�/@�-=�/=�/:�/8�-5�,3�*3�)2�29�5:�5:�68�66�54�74�74�95�:6�:7�:8�88�78�68�47�6;�6;�7;�88�75�71�7.�6*�8*�9*�9*�9)�9)�9'�8)�9'�9#�:!�>#�?$�@'�@)�=,�;.�95�U[�_n�H`�>`�9`�7f�3a�8_�Fe�Oa�@JR13?75@:=857=67<726:+3=#8CRZ/��Q��r�ŋ�ˏ�˓���}{�fh�R`�F^�Ac�Ai�Eo�Ks�Qs�Tq�Vo�Tm�Oj�Jf�Hd�Ff�Kg�Lh�Oh�Oe�Lc�Jc�Jd�If�Kg�Jh�Ie�Fk�Km�Mp�P&-"(/&.2,13/432855;86=;7HC>EC=HECPNRZYe``q^_z\\__�[Z�YX�[\�fg�ps�y|�}�܁�₅僆䃅ႃ܀�ր�Ӏ�σ�͂�ʃ�͂�τ�ԅ��؊�Ռ�ы�Ŋ�������~x�rnvoddvXSuSHkWGg_IcfJaeFdbDq^D{Q>�ZN�YT�SR�VZ�V]�Xa�cf�qn�mg�pi�C<�A8�1&�4'�B2�8&�:'�:(�;*�:+�9,�7,�7,�.$�1&�8*�=-�@.�>+�;(�8%�4$�A3�OB�MA�A5�7*�8*�>0�;*�;(�8'�7&�7&�7'�8+�8,�;/�;0�90�5-�7/�<4�<7�74�8:�8=�9B�9C�4B�/=�+<�,;�.<�0:�29�38�48�47�37�48�38�7:�9;�78�44�42�85�;8�85�96�:7�:8�88�78�68�47�6;�6;�7;�8:�96�83�70�7,�8,�:*�:,�;*�:*�:)�:*�;)�8!�:!�=#�>$�?'�?*�<-�80�<>�\f�Qe�Ie�8]�=g�.\�<g�<]�\q�LW]./G84AC?;8:>59D27C42=:*=E'FV+bs@��b����ʍ�Ɍ�Ì�����z{�fg�Q[{A_�@a�?h�Do�Kr�Pr�Sp�Un�Sm�Oi�Ie�Gc�Ee�Jg�Lh�Oh�Oe�Ld�Kc�Hd�Gf�Ig�Hg�Hd�Dk�Kn�Nq�Q(0"'.#)-'*.).0.432874::5><6@@9EDAJKLPRZWWfZ[t]]~XX�ZY�^]�de�mn�vx�~�ك�㊍���텇偂��ׁ�Ԃ���ɀ�Ȃ�̃�΅�ш�Ԋ�ӊ�Љ�Ɖ������~�y�wp{kehe]Wl[Nn\Ij\Hg^Fd_FeaEhaEn`DnQ:�TB�]P�`Y�YY�PU�R\�[a�gf�XQ�C=�60�60�:2�</�:,�9)�:'�9)�9*�8*�7+�5,�6,�0&�4*�:-�?0�A0�@.�=+�9(�9*�0#�VK�K@�/$�=2�;0�7)�;*�;(�:'�9&�7%�6%�5&�5&�6+�;0�>4�;2�60�71�>8�CA�BE�8@�2=�3@�1A�,<�-;�1>�6?�5<�59�68�8:�9:�79�68�<>�<=�;;�88�86�85�74�74�96�:7�:8�:9�::�:;�9;�9;�7<�6;�8;�9;�;:�<6�91�7-�8,�9*�9,�:*�:*�:(�;+�<)�9"�=&�:"�3�9$�D2�?5�0+�]d�Vf�Ia�<[�1V�0X�6b�Ch�Yp�GRn34M3-A?7=D=?89?-2J04I3/A9&CJ)Yn>~�`��x�ł�ʍ����������nf�RXvCZz@^?d�Ai�En�Jn�Mm�Ol�Pk�Oi�Je�Db�Cb�Cd�Jf�Le�Mc�Kf�Ng�Of�Le�Id�Fe�Ei�Il�Kr�Rr�Rt�T+0#*/$*.(*.)-/-131652883<<5??8AC>HJHOOTTUbYYlZ[v[Z�]]�cb�kj�tt�~~φ����ꌍ������섄���~�Ё�̄�ʅ�Ɇ�̈�ϋ�Ћ�ϋ�͋�ɉ������}��y�{s�skokcad]Rg_Lf^Hg^Fi]Fj]Dk^Ek`Em_Cv_F�[B�YE�YM�UQ�QT�PY�W`�TT�KE�>9�61�60�91�9-�8)�7'�8'�7)�8*�6*�5+�3,�5,�0(�5*�9,�>.�B0�@.�=+�:)�9*�</�QF�H=�4)�9.�9-�4%�=+�=*�<)�<)�:(�9(�8)�6(�7,�8.�7.�4+�1+�1,�72�::�CG�7?�/:�/;�0>�.<�1=�5@�5;�37�23�98�DC�HG�DD�??�::�99�98�97�96�96�:7�:7�96�97�98�99�::�:;�:;�8:�7;�6:�69�89�;9�;6�90�7,�8+�:+�;+�;+�;+�=*�<,�=*�9#�>(�:$�4�:&�;.�91�<<�]g�Pc�AZ�8V�6Z�;_�>c�Hd�?M�??^:3F;09>17>3E=;Q>>M1/R80UL6biFw�\��q��~�Ƃ��~��������xs�_ZtFUp>\zC_~Ac�@j�Dm�Im�Ll�Lj�Nj�Ng�Hd�Cb�Cb�Ee�Kg�Mg�Of�Nh�Ph�Nh�Lf�Hf�Ff�Fk�Jm�Mp�Pp�Qt�T-1"-0$,/',.*0/.21043055.::1=>2AA8EGBKLMQQXUTbWWj[Yu]]�ed�on�zx���Ό����돏���膄���~|�~}�ą�ȇ�lj�ˌ�ʌ�ʋ�Ƌ���������|��v�zp�tjqmeci_Wc]Nb`JbaFe^Ei\Em[Fo\Eo^Ep]CwbHyX>�S<�UE�WN�TT�NU�LT�=<�<8�85�62�50�5.�6,�6)�6'�7%�7'�7(�6*�4+�3,�5,�3)�6)�:*�=,�@.�@.�>,�9)�6(�K>�F;�A6�;0�5)�9,�5%�;(�;'�:(�:)�9(�8(�6)�3(�9.�7-�3-�3-�3.�62�:6�;;�;?�49�08�19�2=�3=�7A�<D�6<�AB�NL�XU�YV�PM�A?�75�65�75�75�85�96�:7�<9�;9�86�87�98�99�::�9:�9:�8:�69�58�68�88�;8�:5�80�7-�9,�:,�;,�<,�<,�<*�<,�<*�9%�@)�8#�6#�;*�0&�3/�OT�[h�I_�:T�7U�@]�Ge�Hc�N`�8:d?6Q@3DA18>-48)=6+J90E-$Q=-f]C��`��u��|��{��|��y��������n]uLIa6Oh8\wC`}@c�Ai�El�Hk�Ji�Jh�Mg�Lc�Ec�Db�Ed�Gf�Li�Oj�Pi�Oi�Pi�Pi�Nh�Kg�Hg�Il�Ln�Nt�Us�Vw�X34&03'11*11,21.32/44/55,:;-<=.@A3EF:JJEMNOSPXSR^WVe[Zpcaml�yw���ċ�א�䓑뒐썌㈆ځ��|�}��~�����Ì�Ċ���������}��|��w�xnqgnmbbj^Wi[Qd\Ia`Ga`Ee^Ej[EnZFq[Gr\Ft]FqY>xS:�R<�XG�ZQ�RQ�DJ�<A�00�40�52�51�4.�4,�5*�7*�6%�7%�8'�8(�6*�5+�3,�5.�6*�8(�8'�;)�>,�@.�=,�:*�5(�UJ�=2�8-�A5�3&�;,�<,�9%�9&�:'�:(�9(�8(�6)�3(�6+�3*�2,�4/�:6�=:�?<�==�46�49�6;�4<�2;�2:�6>�;A�TW�ac�lk�he�UQ�@=�54�30�64�74�74�85�96�97�:8�:9�87�88�99�::�::�9:�9:�8:�69�79�78�98�<8�<5�:0�:-�:+�;+�<*�<*�<+�=*�<*�;)�;&�@+�8%�8&�;,�*!�44�`f�Tc�G[�<T�=W�G_�Oc�O^�SYuG@WH:JD3EE2AF1=?+:8#;3?3OG+mlI��g��u��u��t��y��������~l�\L_;AW1Lb8Xq@`{Ae�Ai�Dk�Gj�Ih�Hd�Id�Ka�Cb�Cc�Ff�Ih�Nj�Pl�Rm�Sj�Qj�Oj�Mg�Jf�Hh�Hl�Lo�Pu�Xv�Yx�[88)78*75-66/66166177078,<=.>@.AC/EG5JK?NNGROOSQSVUTXX]`_mji�ts�}���ȋ�Ԕ�ⓑ㏍�ӄ�ŀ}�~|�~|�~�����������������z�x�~t�yn{rfkl__j\Ui[QiZLgZIf^Hf^Hi]Hk\Ho[Ir\Hu]Hx\GzW@�S<�S@�VG�QI�EA�68�14�0.�30�40�4.�2,�2*�5)�9)�7%�9%�9'�:(�8*�7+�4,�7.�:,�:*�7&�9(�<,�>/�=/�9-�;1�]U�>6�5,�@6�2%�7)�=,�:(�:)�:*�;+�;,�:,�9.�7.�3+�1*�1.�74�<:�>=�::�77�68�;=�;?�59�16�5;�AG�LP�wx�po�`\�ID�74�1.�74�?=�96�96�85�85�75�76�87�77�77�88�99�::�::�::�99�89�8:�8:�8:�::�=:�=7�<2�</�9*�;*�<*�<)�<+�<(�;*�<(�;'�=)�8&�9)�8,�/)�@@�ho�M]�GZ�DX�HZ�O]�T]�TW�YRdM?OL:KG5IE1FD.?B(<D$=H$JV/[g<w�U��g��n��o��s��~������u�eRbD?O1BS2Oa:Wk=bzCf�Ci�Dj�Fj�Ge�Gc�Ic�Ha�Cc�Df�Ih�Ki�Ok�Qm�Sn�Tj�Ok�Pi�Nh�Kh�Ji�Jm�Lq�Pu�Vv�Ww�X@=/>>/>=2><4><6<<5<<3<=/@B0AC-DG/GI3LL;ONARPJSQIXWJZ[O_^]fespn�zy������ŏ�ҏ�ԍ�Ј�Ȃ�|z�yw�xv�yw�{y�~}��~��~�}y�{t�zr�uksrggl`]j\Sj[OkZMk[Kk[Jl\Kl]Il]Il]Im^Jr^Jw_L~\I�bN�XF�O?�I>�?8�50�.,�.,�42�50�5.�3-�1*�3(�6'�:)�8%�:%�;'�;(�9*�9+�6,�9.�=-�;)�6$�6$�;*�>/�=0�9.�@8�]U�JB�91�?4�4'�0!�:(�8(�8&�7&�7'�8(�7)�8-�7.�<4�:3�96�=:�>=�=<�79�35�87�;:�9;�8:�=A�OQ�bd�oq�gf�TQ�<7�0,�31�:8�=:�;8�;8�:7�:7�86�76�66�66�77�88�78�89�9:�::�99�99�88�9;�9:�9:�;:�>:�?7�<2�</�9)�;)�;*�;)�<)�;(�;'�;'�<(�9'�;(�9)�6*�>7�UU�em�K[�I\�J[�MZ�QY�VU�ZQ�`QOI6GM:MI5H@,:557=O&Lf6k�Uv�]��f��e��g��l��u��}��no}]R_D=J0:E,BP2P^<Wi>dyEf�Cj�Ek�Gj�Ge�Gb�Fb�Hb�Df�Gi�Lk�Nj�Pj�Pl�Rl�Sm�Rk�Pl�Qk�Mj�Kl�Kq�Nr�Q{�\{�\z�[E@1EB4EA7DB:DB<DB<CB7CC4EF0FG.HJ.KL3PN9SP@UQEVSEZ[DZ]E\]O`abhhyqq�zz��~������ć���~{�vt�so�nm�ol�qn�sq�vr�vr�to�sk{qiokcaj`Xj\Rj[Ml\Lo\Mo\Lr[LtZLtZLp\Ln^Mn`LqbLx`M�]K�aR�QE�C9�;3�5/�/+�/*�2,�51�50�4-�3,�3+�5)�6&�8&�:#�<#�<%�=(�;*�:+�8,�;.�@.�<)�5"�4"�:)�>/�=0�8.�<4�QJ�UN�B:�A6�=/�/�:'�<+�:(�8)�6(�7*�:-�;2�<4�D>�B=�?=�>=�==�<<�8<�79�86�86�65�;;�JJ�\\�cd�b`�<:�73�3/�82�A>�DA�<<�42�;8�;8�97�97�87�77�88�78�78�89�89�9:�::�99�99�88�7:�79�89�;9�>9�>6�<1�<.�9*�;*�;)�<(�;)�:(�;(�:'�>*�6$�<*�8)�2&�PJ�kl�\e�O]�J[�HV�KR�RR�[Q�cP�jTKM7CL8JB/G9%B7EH$Up>f�W}�p��r��i|�Z��Z��d��e|�_YeDHS9:E.7B+:C->I0KW8Xg?f{Gh�Dm�Fm�Gj�Hd�Ga�Gb�He�Gk�Jl�Om�Pj�Pi�Oi�Pk�Rp�Uo�To�Tn�Qn�Op�Os�Rv�U|�]{�]z�\IC4JC7JE9JD;JF<JF<IE9IF6JH3KI3ML3ON5SO;UQ?XQEXTB\Y?[Z=\YG][Sdbgok}ws�|y��{��~����}�|w�so�oi�jg�id�if�lh�li�mh}kfsjbhia_g]Ug\Oh[Lj\Jm]Lq_Lq_Ls\Ku[MwZMt[Mt]Lu_Ky`K�^L�ZI�UG�F;�9/�6.�6/�5.�5.�5-�60�4.�3,�3,�6-�7*�7(�5%�:%�;%�;'�<(�;*�;+�9,�<.�@0�;(�3!�3!�:(�>/�=0�9/�3+�C<�\U�IA�B8�E8�0 �=+�F6�C4�A2�?1�?2�B6�E=�F@�A<�=:�:8�65�66�77�99�;:�?:�=7�:4�?;�LH�PM�?:�)"�-'�4.�>8�@<�>:�;9�;:�==�88�97�97�87�98�99�::�;;�89�89�::�::�::�99�88�88�79�68�88�;8�=9�=6�<2�;.�9)�;+�;*�<)�;(�:'�;)�:(�?-�5#�=-�7+�.'�[W�y{�X^�Xc�P\�KS�LN�UQ�_T�gT�nVPV9>J+<<C=TQ+kvE��g����u��t{�bm�Nt~P��^t}UZbA<C(5;&6<)<D3<D39B,DP3Ve?f{Ii�Gm�Gn�Hk�Hf�Ha�Gb�Hg�Ik�Lm�Qm�Qj�Ng�Lh�Mj�Oq�Vr�Uq�Tq�Rq�Pt�Qx�Uz�Yv�[u�Zs�YSJ<SJ<SJ>SJ>SJ>SJ>SJ>SJ<VM=WN>XO?YP@ZQA\SE]TF]TDc[EbZDbYIaZNe]Ykbdqgotkwzo�{q�s�t�|q�ujwmcmf]gd_ja^h`\d^Z__YZ_XVaYScYOe\Pf\Li\Kj\Jk\Hl]Gl]Gn\Gr^LybSsYIrQ?�[J�aO�^K�\K�L<�B3�7+�4'�5-�81�70�4.�70�7.�8.�8.�8.�8,�6*�7*�8*�8*�9*�9*�9+�9+�9+�;-�;,�>-�8)�2 �2!�9*�</�9.�6,�6.�:1�B9�J?�G:�<-�2"�PE�J?�F;�D:�H>�G?�C=�=9�73�96�:9�:9�88�63�94�=6�E=�A7�8.�2(�0%�4(�;.�?2�:/�<2�@6�@9�>:�;:�98�:;�89�99�99�99�99�99�99�99�43�54�74�85�96�:7�:7�99�;=�9<�9:�=;�A>�B<�@7�?2�:*�<,�<+�;)�9'�9&�8'�8&�A1�;.�/$�.'�KJ�mn�kp�V[�LO�NP�PN�TN�XP�]R�`U�iTXZ.9M6FSb(}�Q��o��x��x��r}�bg�M[mBXeBS]AGP8>D/9=+?C3<@19>1;C39C1AN3Rc?\sCh�Io�Kp�Lk�Hj�Jh�Kf�Kj�Mk�Pm�Rl�Qk�Ni�Nk�Nl�Op�Rq�Qr�Pt�Rv�Ry�T|�W|�[z�bn�Zc�PXM@XM@XM@XM@XM@XM@XM@XM@YNAZOBZOB\QD]RE^SF_TG`VFe[HdZGdZHdYLg\Rk_Xoc`qddsfiuhkwjmwjmtgjnabh[\cXW_ZW[YSZUPXTLYSJYTH\UI_VHdYLdZJgZIh\Ij\Hk^Gl_Hl_Hk_LtdSx[LTE�ZL�\L�UG�SD�G8�?/�8+�5(�7+�9/�91�7/�8/�8.�8.�8.�7-�8-�7,�7+�7+�7+�7+�8+�8+�8+�9+�;-�;.�>/�8)�0!�2 �:)�=.�;.�9.�4+�4*�;1�E;�NC�QD�OB�F?�A:�<4�;3�>6�=7�95�42�86�87�88�87�86�96�>8�B9�@5�>1�8+�4&�4%�7(�<,�?0�@3�@5�A6�?7�:6�86�75�99�78�79�79�89�89�99�99�99�97�:8�:6�;7�;7�;7�96�98�9<�:<�<>�?>�@<�?7�<3�:.�;,�<+�<,�<*�;)�9'�8&�9&�8(�8)�5*�;5�QQ�df�^b�MN�NM�SN�XQ�\R�^T�^T�_W�eR_`0Rg)]s2y�N��m��{��o��ai�G`uASe:JX6EP6>H48@049,9=.AB4<?59>3<A49C1@M3Qd?]tEg�Ip�No�Mm�Ik�Ik�Lg�Ji�Nj�Ok�Rk�Pi�Li�Lk�Ml�Np�Pp�Nr�Pu�Qx�T{�V{�V{�[m�Xb�RY�I^SF^SF^SF^SF^SF^SF^SF^SF\QD]RE^SF_TG`UHaVIbWJbXHf\Jf\Ie[IeZMf[Pg[Ti]Zi\\j]]k^_l_`l__j]]g[XcWT`VP[UNXTLVPISMDRLCTOCWPDXRC_VH_VFbXFdZGh\Ij^Il`KiaMd`LpfT{^O�XK�\S�WP�JB�E=�@6�=0�:.�7*�7*�9+�;.�;0�8/�7-�7-�9.�8-�7,�7,�7+�7+�7+�7+�8+�8+�9+�9+�;-�=0�>/�9)�2!�2�9&�>,�=.�>1�7,�2)�3+�<1�E:�L@�NC�:6�52�2/�41�96�>;�=;�;;�9;�69�36�35�67�96�=7�@7�7+�8*�5&�3$�3$�6'�;*�=-�D4�C5�B7�>6�:3�73�64�86�76�78�78�88�88�88�98�98�:8�;9�<9�<9�<9�;8�:7�96�99�<=�@?�B>�>:�:2�7,�6)�;-�;,�;,�;*�:)�9'�7&�8'{5$z5%�8,�F=�SP�VU�PP�IG�MI�SM�XQ�^T�`X�`X�_W�dQrrGy�V��m�������{y�ZXp;>S#@T*@Q.?L19C/5=-5:-49,8<-@A3<?58=2<A48B0@M3Pc>_vGi�Kr�Pq�Oo�Km�Km�Nj�Ml�Om�Pm�Rl�Oj�Mj�Mk�Mm�Op�Pp�Nr�Pw�U{�Y|�Xx�Tt�V_�JV~FOw?bWJbWJbWJbWJbWJbWJbWJbWJ`UHaVIaVIbWJcXKdYLeZMe[Kf\Jg]Kg]Mh]Ph]Rg[Tg[Vg[Xi]Zi]Zi]Zi]Zh\WfZUeYRdZR^YM[VJWRFSNBQL@QL?TMAUO@WQBYSB[UD]WDbZGe]Jg_LeaM`ePjfTv\N�ZP�_\�XU�DC�:7�=7�=3�</�;,�9(�9)�=-�=.�9,�7,�8-�9-�8-�8,�8,�7+�7+�8+�8+�8+�9+�9+�9+�;-�>1�>/�8(�2!�2�7"�=)�@.�>.�9,�6+�5+�7,�:/�;0�:1�65�23�11�43�87�;;�>=�==�8:�57�14�24�66�86�73�7/�3'�5&�5%�6%�6%�8'�:(�:)�A0�B3�B6�@7�<4�:4�85�86�75�87�87�87�87�99�99�:9�97�:7�:7�<8�;7�;6�96�:6�<;�?=�B>�@<�:3�6,�5(�6)�:+�;*�;*�;)�9'�7%�6$�8&�=+v4#�5'�E:�OI�MH�KH�QM�OK�UM�YP�^S�`W�`W�`X�fU��^��w��������sr�XMa5.A,?2B$:G-<F2:B29>19>1;>29:,?@2;>48=2;@38B0?L2Ob=`wHj�Ls�Qr�Pq�Mo�Mo�Pl�On�Qo�Qn�Qm�Ok�Nk�Mm�Oo�Qq�Qr�Rv�V{�[~�^z�Zp�Pg�J[�GS{CNv>dYLdYLdYLdYLdYLdYLdYLdYLdYLdYLeZMeZMf[Ng\Og\Og\Og]Mh^Ni_Oj_Rj_Tj_Ui]Vh\Wk_Zj^Yj^Wi]Vi^Ti^Ti^Si`Td]Q`YM[THVOCQL?OJ;OJ;OJ;QL=SN?UPAWSAYVD\YG^[I\^LZdP`bPnWI�XQ�cb�]_�IL�?B�=;�=6�>3�=/�;*�<(�?*�>,�:+�7*�8+�:,�9,�9+�9+�8*�8*�8*�8*�9*�9*�9*�9*�;-�>1�=1�:)�6#�3�6!�=&�A-�;*�:,�:-�8.�8/�91�<1�;3�9;�59�46�45�55�55�45�24�79�58�57�79�99�85�3.�0'�5'�9'�9'�9'�9'�9'�8%�7%�:(�<,�?2�@6�>5�<5�95�96�75�65�75�85�95�97�:7�;7�:7�:7�<9�=9�>9�>9�>:�?:�?;�A=�A;�<6�6.�4)�6)�:+�:*�<*�;+�:)�8'�7&�6%�7&�@.u3"|3&�F;�QJ�NG�MH�VO�UM�XM�ZO�[O�]S�_V�`X�hW��e��y�����i]lHCT31A##3,;#0<)3>-7@29A3;@39<0:;/9:,>?1:=37<1:?27A/>K1Ob=axIk�Mt�Rs�Qr�Nq�Oq�Rn�Qp�Rp�Pp�Rn�Nl�Nl�No�Qr�Tt�Vv�Xz�\}�_|�^s�Uf�H[�@_�KX}HSxCf[Nf[Nf[Nf[Nf[Nf[Nf[Nf[Nf[Ng\Og\Og\Oh]Ph]Pi^Qi^Qh]Pi^Qj_Rk`Uk`Uk`Vk`Vk`Vk`Vj_Ui^Si^Si^Qi^Qj`PkaQg^Nb\K^XIXRCSM>NI:LG8JG7LI9MJ:MM<OO>QQ@RTBTUFQWFR^KVZHdQD�TM�a`�^`�QT�NQ�BC�@;�>6�=/�=-�>*�>)�='�:)�7)�8*�9+�9+�9+�9+�9*�8*�9*�9*�9*�9*�9*�9*�;-�>1�<0�;*�9%�6 �4�;"�A*�A.�?/�;-�6+�2)�4,�;1�=9�69�49�7:�:;�;;�<;�;<�:9�57�79�:;�==�=;�:5�2.�0&�9*�=)�=)�=)�<(�;'�:&�8$�6$�8&�;-�>2�=4�=4�;5�:6�94�84�94�94�:6�;6�;8�=8�=:�>;�A<�A=�B=�B>�@<�B<�?9�@9�<4�8.�5)�5(�8)�<+�;)�;*�;)�9'�8(�6&�5%�6&~9)t2!8+�OB�YO�RH�OF�UK�YO�ZN�YN�ZN�\R�^U�`X�gX~xYx�]q|ZT`A:E+/;$0<)/=+3>/3<04=19@5>C8>A5<=/78*89+>?19<26;09>16@.=J0Na<axIk�Mt�Rt�Rs�Oq�Or�So�Qp�Pq�Op�Nn�Nm�Mo�Or�Tu�Wy�[{�^|�_z�_s�Xi�N_�DX�Aa�MZJTyDh]Ph]Ph]Ph]Ph]Ph]Ph]Ph]Ph]Ph]Ph]Pi^Qi^Qi^Qi^Qj_Rk`Sk`Uk`Uk`Uj_Tj_Tj_Tj_Tj_Ti^Qi_Oi_Oi_Mi_Mi_Li_Lg_Lf^KcZJ\VEWQ@QM;MH9JG7JG7HH7HI:GK;HL<IM=IN?GO?JTCQUEZOBnOC�TL�PK�OK�XV�JJ�BA�=8�<1�=0�?,�>'�9#�9(�7)�8*�:+�9+�:+�:+�;+�9*�:*�:*�:*�:*�:*�:*�;-�=0�<0�<-�<*�7!�4�9!�@*�B-�A/�</�5+�/&�0(�5/�:7�68�7=�<@�AB�CB�B@�A@�@<�21�65�;9�>:�<6�80�5-�5(�<*�>*�>*�?+�>*�='�;&�:&�6$�8&�8*�9-�8/�:1�=6�?8�:4�:3�:3�:4�;6�<6�<8�>8�A<�B=�C>�B>�B<�?;�>9�>9�<3�:0�7,�6)�6(�8*�9*�:)�<*�;+�;*�:(�9)�7'�6&~5%y3#y4&�A3�TF�WL�PD�PE�YM�YN�ZO�[R�[R�[U�[V�[W�bTjbDU`<IT3<H+5@)2>+4?05?55=67?8<C:BG<DG;CD5>@.::)78)=>09<26;09>15?-=J0M`;`wHk�Mt�Rt�Rs�Or�Pr�So�Qp�Nq�Mp�Lo�Mn�Lq�Qu�Wy�[�b~�az�_q�Xf�M_�F]�D^�Ic�QZJTyDi^Qi^Qi^Qi^Qi^Qi^Qi^Qi^Qh]Pi^Qi^Qi^Qi^Qi^Qj_Rj_RncXmbWk`Uj_Ti^Sh]Rh]Ri^Qj_Rj`Pj`Nj`Mi_Li_Li`Ji`Jh`Lg_Lf^Kc[H\VEVR@QL=NK;FF5EG5DH8DH8CH9BJ:BJ:BJ:GL=QRCTO@[K;jI9yB4�G=�XR�RO�FD�<9�94�<2�>.�;(�6!�:)�8(�9)�;+�;+�;+�;+�;+�:*�:*�:*�:*�:*�:*�:*�;-�;1�:/�;-�=,�8$�3�7�>(�8#�;)�=0�;1�7/�70�;6�?=�>A�@C�DD�DB�A>�;6�5/�2+�1+�60�;4�<6�:2�8.�9,�:*�=*�>*�?+�@,�@,�@*�>)�=)�;)�9'�6'�5(�4*�9/�?7�C;�=4�<3�<3�<4�<6�>8�>8�?:�C=�C>�C>�A<�?9�;6�93�:2�8,�7)�4(�5(�9*�<+�9*�7'�<+�<,�;+�;*9(}7&|6&|6&z1$�8+�F9�RD�OC�K>�QF�_T�VM�YO�[S�]U�\W�\W�YU�^R`X:DM'5@7A#=H1;E33>1-7-0816?5AF;FK>HI:BD0>?):;%78)=>08;15:/9>15?-<I/M`;`wHj�Lt�Rs�Qs�Or�Pr�So�Qp�Lp�Kp�Lo�Ko�Mr�Pw�Y{�]��e��ex�_j�Q]�FY�B^�Ge�Qd�R[�KTyDj_Rj_Rj_Rj_Rj_Rj_Rj_Rj_Rj_Rj_Rj_Rj_Rj_Rj_Rj_Rj_Tk`Vk`Vk`Vk`Vk`Uk`Uk`SkaQkaQkaOkaOkaNkaNkbLkbLkbLh^Kh^Kg]Jf^Jb\I[WCTP>NK;II8FG8AE6@D5@E8?G9?G9@E8JI<MJ<CE3JK5ZS:^G.�L8�j\�f_�SR�DD�@>�?<�=4�=/�=,�5$�5&�6'�7(�7(�8)�;,�=.�<-�<-�<-�<-�;,�;,�;,�<.�2)�7/�;0�:*�6#�5 �6�9#�@.�;,�6)�4*�5/�<7�B?�HE�DD�FG�CB�:5�60�8/�8-�5)�9/�9.�9,�9,�:+�;*�<*�=*�=+�=)�>*�?+�@,�A+�A,�@,�;)�:'�7'�6(�6*�8,�:0�<2�>3�>3�@5�A8�B8�A9�@9�@9�HA�E?�A;�:5�7/�4,�2)�3(�9,�:+�9,�9+�9*�:*�;,�<,�8(~8(}8(}8(}8(|7'z5'y2%x-!�A5�ND�MB�KA�QF�TK�RH�[S�[S�TN�SM�ZV�XT�VU�g[\T4HQ)@L%AL*=H.6A*2=,4?03<0GPBY^OV\IMO9DG-@B&<=$:<*>?1:=39>3:?23=+;H.Ob=byJl�Nt�Rr�Pq�Mp�Nr�Sp�Rp�Lq�Lr�Nr�Ns�Qv�T{�]�a��ex�]i�P_�H]�H`�Ke�Pg�Ud�T\LUxEj_Rj_Rj_Rj_Rj_Rj_Rj_Rj_Rj_Rj_Rj_Rj_Rj_Rj_Rj_Rj_Tk`Vk_Xk`Vk`Vk`Uk`SkaQkaOkaOkaOkaNkaNkaNkbLkaNkaNi_Li_Lh^Kh^Ke]J^XEVR@PM;JJ;FG8CD6@D5@E8>F8>F8@C7HC7FA4?E0DN4EM/KE&wU9�ua�aW�[X�QS�CD�==�A<�B8�=/�;,�=,�=/�>-�<.�<+�:,�:*�;-�:+�:-�:+�:-�:+�:-�;/�>6�A;�A8�<0�5$�1�1�2�4$�5)�:/�@8�D?�HD�IF�JI�BB�FC�C=�<2�9.�>/�@1�>.�@/�?/�?-�?.�?,�?-�A-�@+�=)�<)�<*�>+�?+�?+�?,�>,�?-�=,�:+�8+�7*�7,�9/�8.�</�=/�?4�A6�C:�D:�D;�D<�A:�@9�=6�:1�8.�6+�6)�7+�;-�=-�:-�:,�:+�;+�;+�<,:*|:){9*z9*y8)x7(v5(x3%�3(�C8�ND�K@�I?�PE�SJ�QH�RK�WP�TP�VQ�\Y�WS�RP�bU^W4Wd7^jAYfAHT36C(4@)<H3NXFXbP^gSV]EIN6BE)=A";=!9;)=>09<28=2;@34>,;H.Ob=czKl�Nt�Rs�Qq�Mq�Or�Sp�Rs�Or�Mp�Lq�Mt�Rx�X|�^�b{�`o�Tb�K\�E`�Kd�Od�Pb�Pe�T\LUxEj_Rj_Rj_Rj_Rj_Rj_Rj_Rj_Rj_Rj_Rj_Rj_Rj_Rj_Rj_Rj_Tk_Xk_Xk`Vk`Vk`Uk`SkaQkaOkaOkaNkaNkaNkaNkaNkaOkaNmaNl`Mj`Nj`Ng_La[HZVDTQ?NK=II:EF8AE6AE6@E6?D7AB4G@4@;,AH0CO2:E$IE&~_B�t_�SI�]Z�^a�MR�CG�GG�HC�?6�9,�:+�:-�:+�:-�9*�6*�6(�8,�8*�7,�8*�7,�9+�8-�9/�2.�40�5.�2)�/#�.�0!�3%�@3�B8�G@�LG�LG�IF�EB�CA�C@�D@�A9�;0�=/�C1�E3�F2�E0�E1�C1�B/�B-�B.|B-A-�;)�;(�:(�<)�<*�<*�=)�<)�?-�<,�;+�8*�8+�8-�:-�9,�9-�:-�</�?2�?5�A6�@7�A9�:1�91�8.�7,�6,�7+�9+�;.�;.�<-�;-�:,�:+�;+�;+�;-};,{:+{:-x9+w8*v7)u5*v3'�;2�E=�MC�J>�H=�NC�RI�QJ�NJ�SP�SR�VT�\[�YV�ZU�k\�}Y}�]�`kyOKX36D"=K-K[?erXdoV[fLMW=CJ/>D'=A":=#8:(;<.7:08=2<A45?-<I/Ob=czKm�Ou�Ss�Qr�Nq�Or�So�Qu�Sr�Np�Nr�Pw�W{�[}�_|�_o�Te�J[�D[�Dc�Ng�Rd�P]�Kd�T[~MTwFj_Rj_Rj_Rj_Rj_Rj_Rj_Rj_Rk`Sk`Sk`Sk`Sk`Sk`Sk`Sk`Ul`Yl`[l`YlaWlaVlbRlbRlbPlbOlbOlbOlbPlbPlbRlbRlbRobQnaPkaOkaOiaNf^K_YHZUFSN?NK=HG:EF8DE7CD6@D5@A3FC3A>,HI2GI-D@$eS6�gN�`M�>4�NK�]_�Y]�PT�KN�IG�F@�;1�:.�7,�7,�9.�:0�;1�;1�?5�?5�>5�>5�?6�?6�?6�?7�@<�A?�D?�E>�E=�H?�LA�OE�SI�OH�MH�HF�FB�B?�@=�A>�EA�D>�@6�=/�>.�D0�G2�J5�G1�F2�D2�C0�B.{A-xB-z@,�<*�:*�:*�;+�;+�<,�;*�:*�:*�9(�7(�7)�8+�:.�;.�;.�:-�9+�:,�;-�:/�:/�90�9/�6-�6,�7*�7+�8*�9*�:,�</�<.�;-�;,�9*�:*8+~9+};,|9-{:-z;-x9+t7+r5)s6*v5*�C9�H>�K@�G;�H=�OE�TL�SM�PM�TQ�PP�RP�\Y�_Y�h_�}k��o��et�VYi>CR*>P)O`<bsPduT\jJLZ<AM0<F*<C(<B';>&79':;-69/8=2<A46@.<I/Na<axIl�Nu�St�Rs�Or�Pr�So�Qs�Qq�Oq�Ou�U|�\~�`z�]u�Xb�G]�DZ�C^�Ge�Ph�Sd�P`�Lc�SZ}LSvEj_Rj_Rj_Rj_Rj_Rj_Rj_Rj_Rk`Sk`Sk`Sk`Sk`Sk`Sk`Sk`Ul`Yl`[l`YlaWlaVlbRlbRlbPlbPlbPlbPlbRlaTlaTlaVlaTpcTobSlbRlbRlbRi`Pe\N`ZKXRCSN?OJ=JG9HE7EE6CC4@A2BG2CF.NF0Q?(b@-�\K�aR�?3�2*�=8�TT�fg�ce�SU�LN�PO�IB�G<�@6�>4�@6�D:�G=�H>�JA�JA�JB�JB�KC�KC�LD�KF�SS�SU�SS�RP�SM�SM�TM�UO�LI�HG�EC�BA�AA�BA�DC�FC�IE�E?�?7�>2�@1�C0�F2�I3�E2�D2�C1�@/�@.|@/z@.{?.~<-�:-�:-�:-�<,�<,�<,�;,�9)�8)�8*�8)�8*�:,�:-�;,�;,�:,�9,�:-�9/�8.�8.�8.�7-�8,�8+�8,�9+�;+�:*�<,�:,�:-�9,�8+~7*~7,}8,{8,z7-z9.y9.w7,r5+p5*r7,u8,�H<�I=�I>�H<�K@�RG�VN�WP�QN�UR�RQ�VR�_Z�aX�g[�yenrPZj?JZ/@R'HZ/Vj>cwMi|UWjEK\9?M-9E(;E+=D,;A,9=+89*:;-58.7<1=B56@.;H.K^9^uFi�Ks�Qs�Qs�Or�Ps�Tp�Rp�Pp�Ps�Sz�\~�`|�_r�Ui�NY�@[�B_�Hc�Le�Ne�Nd�Od�Pb�RYzJRsCj_Rj_Rj_Rj_Rj_Rj_Rj_Rj_RlaTlaTlaTlaTlaTlaTlaTlaVmaZma\maZmbXmbWmbUmcSmcQmcQmcQmcSmbUmbWmbXmbXmbXpcVobSlbRmcSmcSlbRh_Qe\N_VHYSDSL@NI<LG:HE7FA4@B0<G.@G,PC,c<,�D9�WO�NI�,(�:8�=:�TO�pm�vu�ee�X]�__�UR�PG�GA�D;�D>�G?�GB�G@�HD�JC�IE�JD�KG�KE�KH�JH�GI�FJ�GI�GH�HE�GE�GC�EC�AB�AC�BB�BC�CC�AA�A?�A@�JH�D>�=6�>3�A2�A/�C/�E2�B1�A0�@0�>.�=/=.~=0~=0<0<0<2<0<0=.<0=.�<.�<,�;,�:*�9+�8)�7*�5(�:+�9+�:,�;.�;/�<1�<4�>3�9.�8-�:-�:,�;+�<*�<)�;*�:+�9,�7*6)|5*|5*|5*{6*x5+y8-x8-t7+q4*p5*r9.w<1�LA�K=�J=�L>�QD�UI�WN�VO�MJ�SP�US�[V�e]|]QfVFa^FFN.=O(>P'I]1^rDhPbyJUl?L`6?R-5F%7D)<G0<D39>/6;.7;,:;-58.7<1=B56@.9F,H[6ZqBe�Gq�Or�Pr�Nr�Ps�Tp�So�Qr�Tv�X{�]|�_u�Xi�N`�EX�?]�Dc�Le�Nd�Mc�Lc�Nf�P`�OXyIQrBj_Rj_Rj_Rj_Rj_Rj_Rj_Rj_RlaTlaTlaTlaTlaTlaTlaTlaVmaZma\maZmbXmbWmbUmcSmcSmcSmcSmbUmbUmbXmaZma\maZpbXnaTlaTmbUncVmbUj_Rg^PcZL_VHYPBRL=OI:KF7IC4AC/5I,<H)V@*D9�KK�CG�5;�26�CD�C?�NH�e_�so�nm�^d�WY�PO�LE�E@�C<�D@�E?�B?�@:�C@�C>�CA�D@�CB�EA�ED�DD�@E�@E�CG�GI�II�JJ�HJ�FI�@D�AE�AF�AF�AB�??�=;�<;�FE�><�83�<2�@3�@.�?-�A0�=.�=/�;0�:/�90�:0�;3�<3<2~=2~<4~=2~=2~=0~=2}</}</}<-~<-:*~9+~8(6)6'�:+�:+�:,�:-�:.�;/�<2�=2�9.�9.�:-�;-�<*�<)�<(;)8+�7-5+~4*}3){4){4+z4+u2*w5-w7.s6,p2*p4+s:0x?4�PC�N@�M>�QA�UG�WJ�UK�RJ�NJ�SO�SP�[W�e[o[KPJ7EJ2BN/J[7VhA_sIfzNczKUl=E^.@V,6I$0A 6C)<F4;D87>56:28;/;<.58.8=2>C66@.7D*EX3Ul=a}Cn�Lp�Nr�Nr�Pt�Uq�Tq�Tt�Wx�[y�\u�Zl�Qb�G[�@]�D_�Fa�Hc�Jd�Kd�Kb�Kc�M_�NWxHPqAj_Rj_Rj_Rj_Rj_Rj_Rj_Rj_RlaTlaTlaTlaTlaTlaTlaTlaVmbXmaZmbXmbWmbUmbUmcSmcSmcSmcSmbUmbWmbXmaZmaZoaZoaWnaTnaTnaTncVmbUk`Sh_Qe\NaXJ[RDVM?PJ9MG6IC2CD.9I+@F'[B-�QG�WW�:@�,4�GN�AD�?=�?;�JF�\Z�de�VZ�CG�GG�DA�A>�C?�GC�HA�C=�>8�C>�B>�C?�D@�DC�ED�ED�EE�?D�@E�AF�DH�FH�EG�AD�>B�AE�@D�=B�=A�>?�@@�CA�ED�BA�:6�6.�<2�@3�?0�>.�@1�<.�;-�;/�9.�90�90�:1�<2�:1~;1}<1}<1}</}</}</}</y8+z9,{:+{:+};,};,~9+|:+}:.}:.~9-8-�7+�6+�6,�6,�8,�9,�;-�;-�<-�=+~<+};*~9-}7.|6-z4+z4+y3*y3*x5-s1)u5,u8.s6,o3*n5+s<1yB7�TH�OC�NA�RE�VI�VK�QH�NF�TO�TO�QL�XN�cTfZEHK3=K-HY8YlHfyTdwPXnDRi<Md7K_59L%/@,94?(<D4;B79=78<6:=3:=169/8=2>C67?.7B)DU2Th<`zDn�Nq�Nq�Or�Rr�Tq�Tt�Ww�\x�]v�[o�Tf�K^�EZ�Ac�J`�G^�Ea�Hd�Ke�La�J_�I_�NWxHPqAj_Rj_Rj_Rk`Sk`SlaTlaTlaTk`Sk`Sk`Sk`Sk`Sk`Sk`Sk`Sn`Vn`Vn`VnaTnaTnaTnaTnaTobUobUobUobUoaWoaWoaWoaWm\Qp_RtcXsdXoaWk`Ui`ThaUg`TgaRc]N[UDVP=SN9OG3FA*JG-H?%bI4�gW�vn�jf�XV�NP�BD�CD�EG�GI�IJ�IL�JL�HL�@D�AC�CB�GD�HA�F<�F9�G;�A7�@8�@;�A<�A?�BB�BD�AC�BH�AH�BG�CH�CH�DI�EG�DG�BF�AE�@B�?A�?A�?A�@A�CB�C<�?5�:/�9,�;,�>/�?/�?.�@/�@.�>/�<.�;.�:.�8.�:/�<-�=-�=-�<,�<.�;-�;-�;-};,};,};,};,}:.}:.}:.}:.|9/{:/|9/|9/~8/~8/8/8/8/8/8/~7.~7.|7+|6-z7-y7/x8/w7.w7.v6-s6,r5+r4,m1(r6-m4*l3)o6,l5*p9.I>�SI�RI�QF�PG�OG�PI�PJ�QK�TL�UJ�[M�bPn_GXU9LW6M`<iYbxRYoGTjBSfANa<HY6DR28D'4>$39$6:(;?0AB6A?7==449.29.3:/6;08=0:@/:C-:F)Q`<`rGm�Sr�Vq�Rr�Sr�Tr�Tt�Y�d�dq�Vc�H_�D_�F^�E`�Gb�Id�Kf�Me�Lc�J`�G^�H^�MTuEKl<j_Rj_Rj_Rk`Sk`SlaTlaTlaTk`Sk`Sk`Sk`Sk`Sk`Sk`Sk`SnaTnaTnaTnaTnaTnaTnaTnaTobUobUobUobUobUobUobUpaUraTq`SraVrcWse[pg[neYjcWhcWlgZoiZlfUhbOc^I\T>SK5QJ1I=&R>*lP>�XH�NC�D>�C@�WW�TU�QR�OP�NM�MM�LK�JK�QS�DF�;;�<:�C?�G>�C8�=3�B8�A8�B:�B=�CA�CC�CC�BE�BH�BH�BG�DH�CH�EI�EG�EG�DF�CE�BB�AA�AA�@A�@A�C@�E>�D7�>3�;.�;,�;,�=,�>,�B/}A.~?/~=.�;.�:.�9,�:-�<,�<,�;+�;+�<,�;+�;+�;+:,:,};,};,}:.}:.}:.}:.{91{91{91{91{91{91|91|91|91|91~81}70}70}70|6/z7/x80v80t8/s7.r6-r6-o6,o6,j1'p7-l5*k4)n7,k4)n8-~H=�RH�RK�QI�OI�OK�PL�QK�SL�OF�TG[J{eNriOhlLeqPfyT^tNXnHPf@M`;L_;K\;HV8DO5<E-9?*6:(89*=</@?2?>3<=13:12;14;25<18=0:@/<B-;E+P[:^mEj�Rp�So�Tq�Rr�Tr�Ux�]|�cx�_k�R`�G]�D]�D\�C`�Ga�Hc�Je�Ld�Kb�I`�G^�H]KRsCIj:j_Rj_Rj_Rk`Sk`SlaTlaTlaTk`Sk`Sk`Sk`Sk`Sk`Sk`Sk`SnaTnaTnaTnaTnaTnaTnaTnaTobUobUobUobUobUobUobUpaUsbUo^Qm\Qn_SrdZpf\mcYhaVgaXql`|wjzkyjztcqiVe`KUS=GE/C>)NB/T@0V8)^7+l=4o71v82~:6�@;�IC�PK�WQ�ZS�_X�SM�FB�@>�AA�CB�A?�>9�A:�C;�G=�H?�FB�EC�BC�AE�BG�CH�CG�DG�DH�EH�EF�EF�EE�EE�DB�CA�CA�BA�BA�D?�F?�F:�C9�?3�;-�9*�9)�<+�A/A.~?/~=.�<.�;.�:,�;-�<,�;+�<+�<+�;+�;+�;+�;+:,:,}:.}:.}:.}:.}:.}:.{91{91{91{91{91z80z80z80|:2|:2|91|91{80{80{80z80u7/t8/s7.s7.p7-o6,n5+n5+i2'n7,l5*j3(l6+i3(m7,}G<�PH�PH�OI�PK�QL�RM�TO�VO�XN�\O}_NtbKniPosTkwXexTReAL_;FX7DU4EU7HU:HS9FQ8?H0=C.9=+7;+;<.=>0<=/8;/5<34=35<35<18=0:?0;A.:D*LW6ZiAe|Ml�Om�Rq�Rt�Vs�Vz�_w�`n�Wc�L\�E\�E\�EZ�C_�Ha�Jb�Kd�Mc�La�J_�H]�G[}IPqAGh8j_Rj_Rj_Rk`Sk`SlaTlaTlaTk`Sk`Sk`Sk`Sk`Sk`Sk`Sk`SnaTnaTnaTnaTnaTnaTnaTnaTobUobUobUobUobUobUobUobUsdXpaUn_Sl^TlaWmc[le\ke^ke^ysj��x����������s~zhacOOT?EG3GD2HB1G=-L<,WB4Q8+S6*W3*Y4*]5,b90f=2k>2�OB�UI�VN�LJ�AE�<A�@C�DE�A=�D>�G=�I?�GB�EC�BC�AC�BG�CH�DG�DG�DG�EG�EE�GF�FE�ED�EA�EA�D@�D@�EA�E?�D=�F<�F=�B7�</�9+�9*�<,�@/A.~?/~=.�<.�;.�:,�;-�;+�;+�<+�;*�;+�;+:*:*:,:,}:.}:.}:.}:.}:.|;0{91{91{91z80z80z80z80y7/|:2{91{91{91{80z80{80z80t6.s7.s7.r6-o6,n5+n5+l5*i2'n7,k4)h2'k5*h2'l6+}F;�OF�NI�OJ�QL�RM�UO�WO�ZP�^Q�aTx`OhZFc`HciN[gJM]?EU7AQ5=M1=J/@M3DQ7GR;HS<BK5>G3;A09=-9=.9=.8<-6;.6=45=65<55<38=29>/:@-9B*IS5Ve?axIj�Mm�Rs�Tv�Xw�Z{�br�[e�N\�EZ�C\�E\�EZ�C_�H`�Ia�Jb�Ka�J`�I^�G^�IX{HNo?Ef6i`Ri`Ri`RjaSjaSkbTkbTkbTjaSjaSjaSjaSjaSjaSjaSk`SnaTnaTnaTnaTnaTnaTnaTnaTobUobUobUobUobUobUobUobUsfYug]tf\ncYkaYld^tni{vq�}x���������������������{{ldfTPR@HJ8FH6CE3CE3FH6LL=KH:HC6D=1B9-B7,A6+D5)L9)iF7�PG�NJ�DH�BH�BH�AD�BB�DA�G@�HA�G@�E@�A@�@B�BG�CH�DG�DG�EG�EG�EE�ED�FE�FD�FA�E@�F@�F@�F@�F?�A;�C:�E>�C:�>3�:.�;-�=.�?/�@.>/~=.�<.�;.�:,�;-�;,�<,�;+�;+�;+�:*:,:,};,};,}:.}:.|;.|;.|;0|;0{91z:2z:2y91y91x80x80w7/z:2z:2y91y91z81x80y70x80s70p7/p7/o6.n5-m4,l4,l4,i1)m7.j4+h2)j4+e2(i6,|E:�NF�MG�OI�RK�TN�WO�YQ�[P{ZLu\NjZI]UAXYCX_GMZ@=M2;G08D/5A,6@,9C/>H4CL8EN:BK7?G6<D3;A09>/8=.6;,3;-4<54<65;65<57<18=09?.8A)FP2Ra;_vGi�Ln�Su�Vx�Zx�[x�_m�V_�HY~BZC]�F]�F\�E_�H`�Ia�Ja�J`�I_�H^�G]�HX{HMpACf7i`Ri`Ri`RjaSjaSkbTkbTkbTjaSjaSjaSjaSjaSjaSjaSjaSlaTnaTnaTnaTnaTnaTnaTnaTobUobUobUobUobUobUobUobUn`VodZqf\mc[kc]smh��}����������������Ŀ��������������sgbUQQ@GH9?E4;C2;E39D39D39C2:B4=B5@C9DD;FE::7)K<.d?6�D@�MP�VZ�PU�CH�HI�GG�IE�IC�GC�EA�B>�A@�CG�CH�DG�DG�DF�DF�DD�ED�ED�FD�FA�F@�E?�E?�G@�F>�?:�A9�C=�D<�B8�=3�=0�=/�?/�?.>/~=.=.�<.�;,�<-�;+�;+�;+�;+�:*:*:,~9+};,};,}:.}:.|;.|;.|;0|;0z:2z:2y91y91x80w7/w7/u7/x80v80x80u7/u7/u7/t6.t6.p7/p7/o6.n5-m4,l4,k3+j4+h2)l6-i3*e2(g4*d1'h5+zC8�LF�LF�OI�SK�VN�WM�YN}[Pt[Mk[K`XEVSAOT?IR>>J54@+2<+2:*08(08(2:*5=-9A1<D4?G7?G6>F5;E3:B26@/4>-2;-2:42:63963:36:27</9?.8A+BL0O^8\sDi�No�Tw�Zx�Zv�Yq�Ze�NY~BW|@[�D\�E\�E]�F_�H_�H_�H_�H_�H^�G]�F\�IWzIKmABd8i`Ri`Ri`RjaSjaSkbTkbTkbTjaSjaSjaSjaSjaSjaSjaSjaSlaTlaTlaTlaTlaTlaTlaTlaTmbUmbUmbUmbUmbUmbUmbUmbWk`VkaYkd[lf_vpk���������������������������������ϻ������{zm^_YJLL;@D2;D0?I7>H7=E5;C5;>6;;4:84;61@<4C<1L80];3�LH�``�ce�Y[�QS�MP�KL�IK�HF�GC�F@�EA�DG�CH�DG�CF�CF�CE�CC�DC�ED�DC�E@�F@�E?�E?�G@�F>�A<�A:�B=�C=�C;�A7�;0�9,�=/�>.�>/~=.=.�<.�<,�=-�;+�;+�;+:*:,:,~9+|:+}:.}:.|;0|;0|;0|;0|;0|;0z:2x:2w91w91v80u7/t6.s7.u7/t8/t6.s7.s7.r6-r6-p7-o6.n6.m5-m5-l4,j4+i3*i3*g1(j7-g4*d1'g4*b0&f4*yB7�LF�LF�OI�SK�WM�YL{ZLs\Ml^M]WFQQ>JN<BJ98B01;)/9(27,26.15-04,05*07,2:,4<.:C5<F5>H7=H7<F57B14@-2=./71/730631725937<18=.7@*>H,KZ6ZqDh�Mp�Ww�\v�Yr�Ug�P]�HTx?VzAZ~EZ~EZ~E\�G^�I^�I^�I^�I]�H]�H\�G\�KUvHJjA@`7i`Ri`Ri`RjaSjaSkbTkbTkbTjaSjaSjaSjaSjaSjaSjaSjaSlaTlaTlaTlaTlaTlaTlaTlaTmbUmbUmbUmbUmbUmbUmbUlcWqg_nf`mgbupk������������������������������������������«����~tb_[GLM7CH3BH3BH5AG6CD8B@8C<:D98A97?86C=8B82B2*X<7�XS�lj�pn�[]�VW�RT�NO�JL�IG�HE�GD�EG�DH�EG�CF�CF�BE�BC�CC�DD�DC�D@�D?�E?�E?�F?�F>�C?�A;�A=�D>�E=�B9�:0�5)�=/�>.�>/~=.=.=.�<,�=-�;+�;+�;+:*:,~9+|:+|:+}:.}:.|;0|;0|;0|;0|;0{;2x:2x:2w91v80u7/t8/s7.r6-s7.q8.p7-p7-p7-n7,n7,n7,n6.n6.m5-k5,j4+j4+i3*g4*e2(j7-g4*c1'e3)b0&e3)yA9�LF�MH�PI�TL�XL|YLsZLj\KZTCIK9>D1=E48B1/9(.7)5=/46157257346124/15-07.18-7@4;D6>I:?J9=H77E32A-0>.,6/-51/520614826;08=.7@,;E+IW5XoBg�No�Wv�]t�Yo�T`�JW{BRv=VzAZ~EX|CX|C[F^�I^�I]�H]�H]�H\�G\�G]KSsJHhB@]8icTicTicTicTicTicTicTicTicTicTicTicTicTicTicTicTkbTkbTkbTlcUlcUmdVmdVmdVmdVmdVmdVmdVmdVmdVmdVmdXhb[hc^wro����������������������������������������������ɶǵ������jcbGFG.EH0DF0GD2HC6G;4D51F33J9:E::C<;A:8B:6XLG�qj���㯪Ӌ��po�YY�OQ�NO�LL�KL�KJ�FI�IL�DF�<>�>A�GJ�EF�;<�@A�AA�B?�C?�C?�B=�B<�A:�D@�@;�@<�A<�B;�@8�:1�8-�=0�>/�>0�>/=.~<-�<,�<,:,:,:,~9+|:+{9*{8,{8,{:/{:/{:/{:/z:1z:1z:1z:1z<4x<5w;4v:3u92q80p7/p7/o6.n6.n6.n6.n6.m7.m7.m7.i3,m70p:3o92k5.f2+f2+g3,d0)i7/d2*\-$_0'^/&a2)t>5�NI�OJ�QI�QIXLx^PhXHTN=DF4?E49C16@/2=.2;-2;/3:/684874765462351260/6/.5,/8,3<.7B3;F7:H68F44C/1?/*4,+3/,2/-3.2605:/8=07@,5>&DR2VlDh�Rr�^w�`q�Xj�SZCWyCSu?Su?VxBY{EZ|FY{E]Ia�Ma�M]I[}G^�J_�K]LUrKGdA<W5icTicTicTicTicTicTicTicTicTicTicTicTicTicTicTicTkbTkbTkbTlcUlcUmdVmdVmdVmdVmdVmdVmdVmdVmdVmdVkdYhc^pmk����������������������������������������������������ͳ��������dhjLMP4HI0FB.GA0I>3J:4M86L;:A88E?@MHFZSRtlh���ɵ�������ﱫр}�a_�VV�ST�KN�CG�EF�FF�HH�KK�EG�=?�<=�AB�?@�?@�A?�B?�C?�B>�B=�A:�A>�@;�@<�B=�C<�@9�;2�9.�=0�>/�>0�>/=.~<-�<,�<,:,:,:,~9+|:+{9*{8,{8,{:/{:/{:/{:/z:1{;2{;2y<2x<5w;4v:3s:2r91p7/o6.n6.n6.m7.m7.k8.k8.k8.k8.k8.j6/n81o92m92k70h4-f2+e3+c1)c4+^/&].%a2)].%_0'p>6�ID�PK�WQ�WNtUJfQCSI9A>.;A07A/5@/3>/2=03<04;06:2795876876573462260/6//6-/8,2;/5@19D59G58F45E24B2.80-5/-3.,3,04,27,6;.6>-6?)DR4VlFh�Vs�aw�co�Zf�QX|CVxBSu?Su?UwAXzDXzDXzDZ|F^�J^�J[}GZ|F]I]I]|LSnLG^A:Q4icTicTicTicTicTicTicTicTicTicTicTicTicTicTicTicTkbTkbTkbTlcUlcUmdVmdVmdVmdVmdVmdVmdVmdVneWneWleZfd`y{y��������������������������������������������������������à�����m`gFQW8EF-EC.JD5MD8L@9I>;?<:NMLhab�vw���ð����������������ꬤ�gd�CF�CK�PW�UU�MJ�EA�DA�FE�FF�DC�DC�>>�??�@>�A>�C?�B>�B>�A;�@<�@:�A=�E?�D=�A:�<3�:/�<0�=/�>0�>/~=.}<-=,=,};,};,}:.|9-|9-{8,z9.z9.|;0|;0{;2{;2{;2{;2y<2y<2v:3u92r91q80p7/n6.m5-l6-m7.k8.k8.j8.j8.j8.j8.j8.m92l81l81k91k91i7/f4,a2)b3*`1(\-$^1'b5+[.$^1'sD;OJ�UO�WPtRHaI>QB6A;,56'4:)1;*1<-2=.3<03<04;06:279579768457357337107007./8,1:.3>/7B37E58F48F48F64>42:3.5.+2)-1)/4)38+3;*5>(DQ6XmKk�[v�gw�gk�[^�LUyBTvBQs?Qs?SuAUwCVxDVxDWyEZ|H\~JZ|HZ|H\~J[}IYwJPgJBWA4I3icTicTicTicTicTicTicTicTicTicTicTicTicTicTicTicTkbTkbTkbTlcUlcUmdVmdVmdVmdVmdVmdVneWneWneWneWlg[kjg�������������������������������������������������������������ٵ��������fflMNQ7GH1II6LI;IC:B@8HJEdcb���������������������������������描�_h�<B�PL�TL�QH�G@�GB�MJ�KG�A>�>=�?>�@=�B>�B>�B>�B>�C<�?:�A9�C>�F@�F>�A:�=4�<1�<0�=/�>0�>/~=.}<-=,=,};,};,}:.|9-|9-{8,z9.z9.}<1}<1|<3{;2{;2{;2y<2y;3t81s70q80p7/n6.l6-k5,i6,j7-i7-i7-g8-g8-f9-f9-g8-m;3k70h6.i7/j80j80d5,`1(d5,`3)\/%`3)a4*X+!`3)zNF�[UyVQkMFZB9L;2B9-=:,8<-08(0:)2;-3<.4=14;05:/59179468468459348248018/18//8,09-1<-3>/6A27E5<G6=H9:C96?518/,3(,1&-2%05&19(3<(ER8\qQr�ez�ow�je�XT|FQu@Qs?Pr>Pr>Qs?Rt@SuASuATvBXzFZ|HY{G[}I\~JY{GVrHI^D=M</?.hcThcThcThcThcThcThcThcThcThcThcThcThcThcThcThcTicTicTicTjdUjdUkeVkeVkeVkeVkeVkeVlfWlfWmgXmgXmg^prp����������������������������������������������������������������Ѯ������~�cZ]CGL5FJ8FJ:CF:?D9]a[�|���Ǵ�����������������������������ce�KB�RC�ZL�\O�RH�E=�B:�E?�@<�@=�A<�B=�C>�D>�D>�C<�@:�B9�E?�F?�D<�@8�>4�=2�=0�>/�>0�>/~=.}<-~>,~>,};,}:.}:.|9-{:-z9,z9.z9.|<3|<3|<3{;2y;3x:2x:2x:2r6/p61o50o50m5/k5.k5.i5.j6/i7/g8/f9/f9/e9/e9/f9/i93h60f4.g5/g71g71d4.a1+a3,a3,^0)]1)]1)V*"b6.|TLtYQcMFP>7E5-?5+=8,;:-9<02:,3;-4<.5=/5=/6;.49,47-59159348248048029018/18-/8,/8,09-1:.4=/7B3;D6=F8<E99B64;0/7).3&-2%/4%.6%1:&GS<auXw�l{�sq�h[�RIp>Np=Po=Po=Po=Po=Po=Rq?Rq?VuCZyG\{I\{I^}K^}KYxFQmEDT@6C8(5*hcThcThcThcThcThcThcThcThcThcThcThcThcThcThcThcTicTicTicTjdUjdUkeVkeVkeVkeVkeVlfWlfWmgXnhYnhYlh^lmn{���������������������������������������������������������������ֺ�Ħ�����sfgPNP<GK;GL=GNCJQH{{t���Ȼ����������������������������������������ے��fR�K8�UD�XI�G;�A6�LC�D=�D>�C<�C=�C=�C=�D=�C:�B;�D:�E>�E=�B9�>5�<2�=2�=0�>/�>0�>/~=.}<-~>,~>,}:.}:.}:.|9-{:-z9,z9.z9.|<3{;2{;2z:1x:2w91v80u90r61o50o50n60l6/l6/i5.h6.h6.f7.e8.d8.d8.b9.b9.d8.g71h60g5/g5/f60g71f60d6/`2+d6/^2*\0(`4,a5-i=5vRIZF>G=5>4,;4+=7.:9.67+36*5:-4<.6;.5:-5:-49,47+36*38-18-37/18-18/18-18-18-/8,/8,/8,09-1:,4=/7@28A3;D69C27?/4<.27*05(/4%-5%/7&HT?dx\u�ns�mf�`QwLAh:Jk;Ml:On<On<Ml:Ml:Nm;Po=UtBYxF\{I]|J^}K^}KUtBNgA<J80:3%-'hcThcThcThcThcThcThcThcThcThcThcThcThcThcThcThcTicTicTicTjdUjdUkeVkeVkeVkeVkeVlfWlfWmgXnhYoiZmi_gjlnt{����������������������������������������������������������������ư�����~vn[[VGQPCSVL[b[hje���������������������������������������������������𫓻pY�WB�SA�QB�N?�K?�H>�F>�F=�F=�F=�E<�D;�C9�D<�F;�G>�D;�?5�<2�<1�=2�=0�>/�>0�>/~=.}<-~>,~>,}:.}:.}:.|9-{:/z9.y9.y9.{;2{;2x;1w:0v80u7/u7/s7.r61o50n60n60m70l6/j6/i7/h6.f7.e8.d8.d8.b9.b9.b9.e70g71h82h82g71h82i;4k=6f81i=5b6.a5-mD;vMDsJAmMED9/75-64,:80::166-14*25+58,49,47+36*37(37(37(27*/7)/8*07,/8*/8,/8*08*08*19+08*07,/6+07,18-3:/4<.8B19C1:B19A18=.49*05&,4$19(IU@bv\m�ge�cWzUHnF>d9Gh:Kj:Ml<Ml<Kj:Kj:Lk;Nm=TsCXwGZyI\{K]|L[zJPo?G`:5B5,40#)&hcThcThcThcThcThcThcThcThcThcThcThcThcThcThcThcThcThcTicTjcWjcWkdXkeVkeVkeTkeTkgUlgXmh[mh\nh_ljfjornt{����������������������������������������������������������������θ������}ubb_OYZL^cXnvo��~���ǻ��������������������������������������������������˺��m�RB�TE�TG�E8�K?�I?�G=�F=�E<�D;�C:�C8�H;�H;�H;�E7�?3�;/�;/�?2�>0�>1�?0�>/=.~<-�<.�<.}:.}:.}:.|9-{:/z9.y9.y9.z:1z:1w:0v9/u8.t7-t6.r6-o71n81m70m70k70k70j80i7/f7.f7.e8.e8.d8.d8.b9.d8.e5/j82m;5l:4i93i:1l?5oC9jA6mE<d<3b=3yVK�dZyWMcKB?904806918<469/05*25+8=236,16)14*/4'03'16)36*38+.6(-6(.7).7).7).7)/7)/7)19+08*07,/6+/6+/6+07,08*6@/8B1<D4<D4:B25=-/7',4$1;)JVAbs\g|b\vXNmLEfB@b9Ge:Jh;Mk>Mk>Jh;Ig:Ki<Mk>SqDVtGYwJZxK\zOYwLMk@C[:3=3*/1!&(idWidWidWidWidWidWidWidWidWidWidWidWidWidWidWidWidUheUidWjeYkdYleZleYlfUeaMieQnlWmm\gf[ffasrq�������������������������������������������������������������������������ӷ�����}qt\^dOakYr}n������������������������������������������������������������������ק��aX�F<�PF�NC�H=�D:�F;�IA�JB�GA�F;�G7�J5�J7�I5�E3�C1�B2�D4�C4�B5�@3�?2�=1�;.�:.�:.:.|;0{:/z9.y8-y8-w7,v6+w7,w7,v9-v9-u8,t7+q6+m4*k70j82j82i71i71h60f60f60e5/f60g71h82g71f60d4.e3-g3.k40l81l81k91i:/j=1jA4fB3jI;eH;w^Pj\�xk�~pSJ>88/3:159129048029037/18/26.07,26./6+16+.5*05*.5*.5*.5*.5*.5*.5*.5*.5*.5*/6+.5*.5*-4)-4).5*.5*/6+3:/5<17@49B6:C78A36@/4>-4@-EQ<VeOZkROcGDX;?U7AW7Hc=Je?Jf>Jf>Ie;Ie;Kg=Nj@TpFXtL[wO\wQ\wSVqMGb@:O7(0*(*.&(,idWidWidWidWidWidWidWidWidWidWidWidWidWidWidWidWheUheUhdXjeYjd[leZleYlfUhdPjhRmkVjlZeh^jmk}��������������������������������������������������������������������������б�����yjqXXaK_kXs�q�������ø����������������������������������������������������������������v�LB�OA�L?�MA�J?�D:�;5�=7�C:�G6�K6�M9�J6�G6�D1�D5�F6�C6�B7�A6�?4�=3�;2�:0�:0}:0{;0z:1z:/y90x8-u8.u8,t7-u8,t9.t9,t9.r7*n5*l5*j80h82h82g71g71g71f60f60c3-c3-g5/h60j82j82j82k93j61m62l81l:2l:0k>2k@1jC3hG7lP>hQBueT�uf��t��sLL=5:/29029029018/18/18/07.07.07.07./6-/6-.5,.5,.5,.5*.5*.5*.5*.5*.5*.5*.5*/6+.5*-4)-4)-4)-4).5*/6-0702923<26?58A58A57B36A07C0DP=O^HQ`HHW?@P5AQ6DV9JbAId@JeAJe?Hc=Gc;Hd<Ie=RnFWrL[vR\wUZtUSmOB\>5I5(/.)+1&(.idWidWidWidWidWidWidWidWidWidWidWidWidWidWidWidWheUheUidXjeYjd[kfZleYlfUlhTkiSmkVjlZilbuxv����������������������������������������������������������������������������ʮ�����|tybjp]s{k������������������������������������������������������������������������������ՠ��N=�SC�L<�?2�F<�XN�SK�>5�D6�H9�K<�J:�C6�@2�A6�E:�A8�A9�A8}@6~>5}=4~<4}=4y<2x=2w;2w<1t;1s:/s:0s:/q:/q:.q:/q:.o9.n9,l6+k5*k70j82j82j82i71i71i71h60e5/e5/e5/f60g71h82j:4j:4k;5j:4i:1i<2l?3kB5jC3gE3gI8mUBkXHvjW�~n��|�~nEF749.18/18/18/07.07.07./6-07.07.07./6-/6-.5,.5,.5,.5,.5,.5,.5,.5,.5,.5,.5,.5,.5,-4+,3*,3*-4+.5,.5,-4-.5.07.2904=16?38A39C29E2@L9DS=BQ9:I17G,=M2CU8I_AJbALdCKc@Ia>G`:F_9G`:RkEXpM]uT^vWZqTPgL=T9.@/(/.)+1')/idWidWidWidWidWidWidWidWidWidWidWidWidWidWidWidWheUheUidXjeYjd[kfZleYkgUmiUljTklVln\orh}���������������������������������������������������������������������������ٽ�Ǯ������������������������������������������������������������������������������������������������IJ��q�P@�O@�WK�L@�B:�E=�A5�F:�I>�G<�@8�<3�>5�B;�@;�A;�A9}A:y@8x@8w?7w?7u>3u>3u>3t=2s=2r<1r<1q;0n;/n;/n;/m:.k:-j9,j9,i7-l81n73m62k72k72i71i71i71j:4i93g71e70e70e70g92g92k?7g>5f=2g>3iB4iE6gF4dF3cI7iUAj\JtjW��p��{qq`9=-38-18/07.07.07./6-/6-/6-07.07.07./6-/6-.5,.5,.5,-4+-4+-4+-4+-4+-4+-4+-4+-4+-4+,3*,3*,3*,3*-4+-4+,3,,3,-4+.5,09-3<06?17@27B1;G4;J67F01@*1@(7F.=N3CY<E]>J`BJbAJ`@G_<G^;F^;RiFXpO_uW^uXYnTLcJ8M5(:)&-,')/&(.idWidWidWidWidWidWidWidWidWidWidWidWidWidWidWidWheUheUidXjeYjd[kfZkfYkgUkgSkiSmnXmq_rwl�������������������������������������������������������������������������������˲������������������������������������������������������������������������������������������������������Ĝ��cQ�I;�K=�NA�K?�@6�C:�F>�E=�>:�;6�;7�?:�>;�?;�A<}A<xB;tB:qD:qD:q?5r?5r?5q>4p>4p>4p>4o=3m>3l=2k<1j;0i<0h;/h;/i:/n81o73o73m62m62k72i71i71k;5j:4g92e91e91e91d;2d<3fA7dA6dC5eD6eG6eI7bI4`H3_K7eV@kaNrmX��p��s[_M4:)18-18/07.07.07./6-/6-/6-07.07.07./6-/6-.5,.5,.5,-4--4--4--4--4--4--4--4-,3,,3,+2++2++2++2+,3,,3,.5.-4-,3*,3*-4)07,1:,3<.2=,5A.6B/5A,/>(/>(3B,6G.<P6?U8EY=G]@I]@H^>J_?J`@ShHZpRbvZ`u[XkTI^H5H4%4&%,+&(,$&*idWidWidWidWidWidWidWidWidWidWidWidWidWidWidWidWheUheUidXjeYjd[kfZkfYkgUjhSjkTlnXnr`rwl������������������������������������������������������������������������������ι�κ�Ʒ�ø������������������������������������������������������������������������������������������������ͧ��kY�ZH�VF�K<�D9�D;�F>�F>�A=�=9�;8�;8�=<�?<�@<}A:vB;qD:nE:nE:o@7q?5q?5q?5o@5n?4n?4n?4nA5m@4l?3j=1h=0h=0h=0k<3o84p63o73o73m62k72j82h82g71f81e91d;2d<3d?5e@6eB7_B5aG9dL;eM<dL9aK7^K4^L5^Q:cW@mhStr\��ov{fFO;4<+29.18/18/18/07.07.07./6-07.07.07./6-/6-.5,.5,.5,,3,,3,,2-,3,,2-,3,,2-,3,,2-+2+*0+*1**0+*1*+1,,3,.5..5.,3*,3*,3*-4).7+/8*.7)0;*4?.5A.2A-1@*1@,2A+6G08K4?P9AU;FW<G[?L]BL`DTeJ[oSct[_r[WgSFYE3C2$1&%,+&(,$&*idWidWidWidWidWidWidWidWidWidWidWidWidWidWidWidWidUidUidXjeYjd[kfZkfYkgUljUklUkmWio\krgx�|����������������������������������������������������������������������������н�������������������������������������������������������������������������������������������������������������ͼ�vc�P;�[G�N?�J<�I>�I?�H?�D=�>9�;6�=8�?9�?9A9xB9rE9oF9oF;o@7q?7q?7q?7q?7q?7o@7o@7pC9oB8m@6k>4i=3j>4j>4m>5o84q74o73o73n73k72j82h82d80c:1c;2c>4c@5cA6cA6`C6[D5`M=hVCiWDdR=^O9\O6]R8^U=]X?okVuv_|�lclV3=)7A/3:/29029029018/18/18/07.07.07.07./6-/6-.5,.5,.5.,2-,2-,2/,2-,2/,2-,2/,2-+1.+1,*0-)/*)/,*0++1.+1,/3-/3-.2,.2*-4+-4).5*.7)-6(09+2=.6A07B17C05@/2A-1@,3C/9H4<M6@O9CT;IX@K\CSbJ[lUbq[]mYTbPCSB1>1"/&'.-&+-$)+idWidWidWidWidWidWidWidWidWidWidWidWidWidWidWidWidUidUidXjeYjd[kfZkfYjgUomXknVhmVflYdmar{w������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ح��pX�WC�R@�P>�O@�PA�K?�C;�=4�>6�?5�@7�A6zC7uD6qF7qF7o@7q?7r>7q?7q?7q?7q?7o@7rC:pC9nA7l?5k>4j>4l?5n?6o84p84o84l83l83h82g92f:2e<3c>4c@5aB6`C6\B4[A3XA2UG5\R?g^Hj^IcW@[R:[R8]V;ZU<YV<lmVtw_v|gVaJ'18D13:/3:13:129029029018/18/07.07.07./6-/6-.5,.5,.5.,2-,2/,2/,2/,2/,2/,2/,2/+1.*0-*0-)/,)/,*0-*0-+1,-1,-1+.2,/3--4+.5,/6-/6+-6*/8*3<06A29D59D37B36A0.<*1?-4B08G3;J6?N8ET>IX@Q`JZiU`o[[iWP^NANA.;0",$*2.(.-&+-idWidWidWidWidWidWidWidWjeXjeXjeXjeXjeXjeXjeXjeXjeVjeVjeYkfZke\lg[lgZkhVqoZknVjoXjs_hsfnzu�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������л�h�cJ�O8�U>�ZE�R@�J9�M>�</�>/�>1~=.x=.t?.qC2sE6q>4q=6t>7r>7t@9t@9s?8q?7sA9pA8pA8pA8o@7m@6n?6n?6k93l83l:4k;5k;5h<4f=4b=3b?4]>2dG:bH:T=.M9)L8(@0XP<QM8LI1OJ3]X?idKeaEWT8YX=^`Dps[zgekV>I2.8$2>+4;04;23:13:13:129029029029029029018/07.07.07./6/061063/52/52.41.41.41.41+1.+1.+1.+1.+1.+1.*0-*0+04//3-/3-.2,/3-/3+.5,.5,+2),5)/8.4=18A5<E7=H;?J;5C33A/1?-/>*0?+7F0@O9GV@M\HTcO[iWWeUJWJ:G<-:/)3+(0,'/+&-,idWidWidWidWidWidWidWidWjeXjeXjeXjeXjeXjeXjeXjeXjeVjeVjeYkfZke\lg[lgZkhVnoYjmUipXjs_juho}w���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ౖ�u[�[B�ZA�ZB�VB�R?�G4�G5�E3�E2{C1wC/qA.o>.tA7r>7s?8t@9s?8o=5p>6sA9q?7o@7o@7m@6n?6l?5m>5l?5j<5k=6l>7k?7i@7fA7dA6aB6dG:ZA3^G8]I9M=,E7%F8&?5"MK5HK3EF-ED+NM2]Z@c`Da`CZY>egKtw_sx`Y_J:C-0:&8B06=25<35<35<34;24;24;24;24;24;24;23:13:1290290292172172174061063061/52/50-30-3.,2/,2-+1.+1,*0-*0+,0*,0*+/)+/)+/),0*+2),3*.5,-4+-6,/8.3<28A5=G=@K>9G78F65C12@.1@,4C/:I3>M7JYEQ`LWeUUcSJWL;H=/<3)6-*2,)1-(0,idWidWidWidWidWidWidWidWjeXjeXjeXjeXjeXjeXjeXjeXjeVjeVkdYleZke\lg[khZkhVlmWhmUgpXjt`huhp~x�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������i�YA�Q:�\E�]H�S>~G1t?(r>(rA*tD/vF3q@3n<2o=3tB8sA7n?4pA6wH=m>3l?3l?3k@3k>2j?2k>2j>4g?6fA7fA7fC8eC8bC7`C6]D6bK<UB2YI8`TAQG4C;'E=)EA,BE-BG/BE+=@&@B&ON3`_BjiLbaFoqUwzbglTJO:5;&4=)=E47>37>57>57>56=46=46=45<37>57>56=46=46=45<35<35<34;43:33943:3283292283181/50/6/.4/-4-,2-+2+*0+*1**.(+-(+-(+-(*.(+/),0*-1+070.5.+2++2+-5.4=3;C<?I?>K>=K;;I77E33B.1@,2A+4C-CR>JYEP^NP^NGTI;H=1>5,90,4.,4.+3-hcVhcVidWidWidWidWjeXjeXjeXjeXjeXjeXjeXjeXjeXjeXjeVjeVkdYleZke\lg[khZiiVkmWhmUgpXht_gtgl}v�������������������������������������������������������������ֿ�������������������������������������������������������������������������������������������������������������������������������������������������������Ӽ��yyS=tJ3tI0uJ3yN7|Q:xM6mA-d8&zM?rE9oD7qF9oD7g</d9,f=0h?2h?2h?2g@2f?1f?1f?1d@1bA3`C6`C6^D6]D6[D5YE5UE4WI7OC0\T@niTb^IMK5IG1JK4>C+@G.@F+<B'=@$GI-YX;edGnmRyx]uv_\_GAC/6;&9?,=C28?48?68?67>57>56=46=46=48?67>57>57>57>57>57>57>56=66=66=65<55<55<54;44;4292292070/6/.5.,3,+2++2+-/*-/*,.),.),0*-1+.2,.2,/6/-4-*1**1*+3-0816>89C;>K>?M;?M;<K77F22A-0?)/>(;J6AP<GUCHVFCPC:G<1>5-:1,6/-5/,4.hcVhcVhcVidWidWjeXjeXjeXjeXjeXjeXjeXjeXjeXjeXjeXkeVkeVkdYleZke\lg[khZiiVkmWhoVhqYgs^crdizs����������������������������������������������������������վ�л�ѿ����������������������������������������������������������������������������������������������������������������������������������������������������������ӽε�����vawWCjJ6kI6qM;tP>kG6gC2fB1iE4mI8mK9nL:nL:dB0cB0cB0cB0cB0cB0aC0`D2]F5[G7[G7ZG7XH7VH6TH5QG4PH4LH3fdN}~gqr[VYAJM5GL4=D+<F,@G,AG,BE)EG+NM0UT7yv\|y_omWVT>DA/@@-?A/:>.:?48?68?67>57>56=46=46=47>57>57>57>57>57>57>57>58?68?68?67>57>57>56=46=45<34;23:129018//6-.5,.5,/1,/1,.0,-/+-/+.0,.2-.2--1,-1,+1,+1,-30/501952<4:G:<L9?O<?O;;K76G03D-1B+5F/9I5?O<AQ@>M?7F80?3,9.,6.+5-*4,gbUgbUhcVidWidWjeXkfYkfYjeXjeXjeXjeXjeXjeXjeXjeXkeVkeVkdYleZke\lg[khZiiVkmWhoVhqYgs^apbfxq����������������������������������������������������������ѻ�ʸ�˻����������������������������������������������������������������������������������������������������������������������������������������������������������������������ҾҼ������r�saz^J{_JsUBaE0W;'Y=([?+W>(_F1_F0_F1^G0_G2_H1_G2\I2[L8ZN;ZN;WM:WM:UM9QL7PL7NL6PQ:ilT{�hlqYRY@EL3=G-<F,<F,@G,DJ/FI-EG+IH+ML/zw]urXgcNUQ<MI7LI7GD4<=.;@58?68?68?67>57>57>57>56=46=47>57>57>57>58?68?69@79@79@79@78?68?68?67>57>57>56=45<34;23:129048013.02-/1-.0,-/+-/+,0+,0+,0+-1,,2/-30.41.41-51+5.2?26F3<L8?O;>O8;L58I27H14E.7H1;K7=M:;K:6E70?3+:.)6-+5-*4,gbUgbUhcVidWidWjeXkfYkfYjeXjeXjeXjeXjeXjeXjeXjeXkeVkeVkdYleZke\lg[khZiiVjlVgnUgrYet^`rcgyr�������������������������������������������������������վ�̷�IJ�ŵ�ʽ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������˴��vt^GeP6bL5[H.]J2\K0\K2]L1]L3^M2^M4[N5XO9WO;WO;UP;TO:RN9PN8MN7MP8OT<_fMeoUT^DDO5@K1;F,?I/?I/DK0HN3IL0GI-PO2ZW;qlSjeLa\G[VAYSBUQ?NI:CC4<A6:A8:A8:A89@79@79@78?67>57>57>58?68?69@79@79@7:A6:A6:A69@59@58?48?48?49@59@58?48?47>37>36=28<468365254132//1-.0,,0+,0+-0.-0.,2/-30-32-32,21*2,*9+.A-5H3:M8<O8;O59M39M34G06I29L7;N:9K:5G8/A4,;/*7.+5-*4,ddSddSeeTffUffUifVjgWjgWifXifXjeXjeXjeXjeXjeXjeVjeVjeVkdXkfZke\kg[khZiiVikUgnVgrYfu_asfi{t�������������������������������������������������������Ѽ�dzÿ�Ŀ��Ĺ�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Ý�u_Q7QC)WI-WI-ZN1ZN1ZO2ZO2[P3[P3ZR4ZR6VO6TO8SP8QO9PN8MN7KN6HM5HO6KR9R\@OY=?I-;E)@L/?I+EL1GM0JP3LR5JM1JM1ZY>kjOhcJb]F^YB_ZE`[FYUAQO:JJ7AB4?B6?B6=B5=B7=B7<A6<A68?68?68?69@79@79B69B69B6:A6:A6:A69@59@58?48?48?4:A6:A6:A6:A69@59@59@59@7:>8:<879457226004./3-/3./20-30,2-+3-*2+*2++4*(6(>!1F,7L2:O7:M6:M6:M67J38K4:M6;N7;N95I5/C1+=.+8-,6.,4-\eM]fN^gQ_hRciTejUfkVikWfhVggVheUheUidUjeVkeVkfWkfWkhXlgZkg[kg]jfZifXegUejUclTdoXap\crhr�����������������������������������������������������Ӿ�ϼ���������¸��¿��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ɏ�oUN5VM3SK/RJ,VN0VN.UO.UO.SO0SO0RP2RP2QM1RM4RO5QP7NO6LO5HM5FM4IP5GN3BJ,>F&?G'CK*FM,GK)RT5SS4KO/FM,OW7]eGadHYZA\YA^YBaYCaZA]X?XW:RV7PS7HF0GD2DA/@@/??0>?1?@2=@4:?48?48?48A58A58C48C48C49B49A39A38@28@29A39A3:B4:B4:B49A3:B4;C5<D6=E7>E:9A:9A:8A77@46=24;0290181.4/.60-7/,9,-<(/@'5G(6M(:V,9W,:U1:T5;R9<Q;=P<=P;9L7?S9DX>EY=CX>>U<3I3)=),6,+3,+2+ZgL[hM\iO]jP`kRbkSflWflWgiUgiUifVifVjeVkfWlfWlgXlhVkhXkhZkg[jf\jfZgfYegUfkVdmUeo[dr`ixny������������������������������������������������������˸˾�´�������¶������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ˊ�qQL5RN2QJ/QJ.UO0UO.SP.SP.RP0QQ0QQ2QQ2PM1QN2QN4OQ5NO6JP5HM5FM4IP5FN0CK-@H'BI(FM*KP+MP,QQ.SS0V[6[d@ZeCT_>QY;SV<WV=YT=\U<]V=ZV:XX9RY8SW7OL2NI2KG3HD0DA1AA0@?2=A2;>48?48?48A57B38C46D28C29B49A39A38@28@29A39A3:B4:B4:B4:B4:B4;C5<D6=E7=F:=G?;H?<F<;F7;D69B48?47>76>84>73=5/?.2C*8M+AY0Ga1Np<Kn;Ki>Eb?BY@<R=:L;9L8<O:CW=J^BKaCKaDF]@8Q80E/+5++2+)0)XhLYiM\iO^kQ`kRclTflWgmXikWikWkhXkhXkfWlgXmgXmhYlhVkhXkhZjfZjf\ieYgfYfhVfkVbkScmYftbn}s~���������������������������������������������������˹������������Ķ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ʈ�oOJ3PL0QJ/QJ.TN/UO0SO0TP1SQ1QQ0QQ2PP1PM1PM1QN4NP4NO6JP5IN6GN5IP5GO1DL.DL+FM,JQ.PU0TY4TW1Z]7iqIu�ZlyVSa?GQ3KQ4RQ8TO8VN8WP7VQ8UT7TX9UY:VS9UP9QM9MI5HE5CC2BA4>B3;>48?49@58A57B37B36D28C29B4:B49A39A39A39A3:B4:B4:B4:B4:B4:B4;C5<D6>F8=F:?IA=JA?I?>I:>G9=F8=D9<C<=E?9C<6@83C28I0AV4Og>XrB]KZ}JWuJLiFCZA9O:5G63F2;N9DX>MaEQgIRhKLcF>W>5J4/9//6/-4-XhLYiM\iO^kQalScnUgmXhnYkmYkmYkkZliYmhYmhYnhYniZliWkhXjgYjfZie[ieYgfYfhVdiT_hP`jVdr`n}s}������������������������������������������ҿ�˹�ƴ¾����ķ�Ⱥ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ˉ�pOJ3QL3SL1SL0TN/UO0TP1TP1SQ1QQ0PP1OO0OL0OL0PM3MO3MN5JP5JO7IP7KR7HP2HP2JR1MT3OV3W\7^c<kpGwT��h��r��kgxTUcAPX:MN5PM5RJ4RJ4QL5RQ6RU9TW;XU=WR;SO;PL8KH8FF5DC6?C4<?59@59@58A57B37B35C17B1:C5:B49A39A39A39A3:B4;C5;C5:B4:B4;C5;C5=E7>F8>G;=G?;H?>H>>I:>G9=F8=D9<C<<D>9C<6@83C28I0CX6Qi@[uEY{GVyFSqFHeB=T;2H3.@/,?+5H3?S9K_CPfHRhKMdG>W>5J40:0070-4-XhLYiM\iO^kQalScnUhnYioZmo[lnZll[mjZmhYmhYniZniZliWkhXjgYieYie[ieYhgZgiWejU`iQ`jVdr`n}sz������������������������������������������ɷ�IJ¾�������˾��ŷ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������rQL5SN5TM2UN2TN/UO0UQ2UQ2TR4QQ2OO0NN/OL0OL0OL2LN2MN5KQ6KP8KR9MT9JR4KS5PX7SZ9T[8^c>fnF��b��r�����}��w��om~ZXdEMP6NM4OJ5OG3NI4OL4OP7QR9UR:UP9RN:PL8LI9HH7FE8BF7<?59@59@58A57B37B35C17B1:C5;C5:B49A39A3:B4;C5;C5;C5;C5;C5;C5<D6=E7>F8>G;=G?;H?=G==H9=F8<E7<C8<C<9A;7A:5?73C28I0AV4Me<Uo?SuAQtAOmBDa>9P7-C.*<+*=)0C.;O5G[?NdFQgJLcF>W>4I3,6,+2+'.' \ No newline at end of file diff --git a/jpeg/testorig.jpg b/jpeg/testorig.jpg deleted file mode 100644 index 58d908b3a134a2dad4b68a13042cefb09fa15d6f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5782 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 VIP1pqn+K8%e_eDH-MR7qO#qRG&anUh diff --git a/jpeg/usage.doc b/jpeg/usage.doc deleted file mode 100644 index 3fc061fc33..0000000000 --- a/jpeg/usage.doc +++ /dev/null @@ -1,449 +0,0 @@ -USAGE instructions for the Independent JPEG Group's JPEG software -================================================================= - -This file describes usage of the JPEG conversion programs cjpeg and djpeg, -as well as the utility programs rdjpgcom and wrjpgcom. (See the other -documentation files if you wish to use the JPEG library within your own -programs.) - -If you are on a Unix machine you may prefer to read the Unix-style manual -pages in files cjpeg.1, djpeg.1, rdjpgcom.1, wrjpgcom.1. - - -INTRODUCTION - -These programs implement JPEG image compression and decompression. JPEG -(pronounced "jay-peg") is a standardized compression method for full-color -and gray-scale images. JPEG is designed to handle "real-world" scenes, -for example scanned photographs. Cartoons, line drawings, and other -non-realistic images are not JPEG's strong suit; on that sort of material -you may get poor image quality and/or little compression. - -JPEG is lossy, meaning that the output image is not necessarily identical to -the input image. Hence you should not use JPEG if you have to have identical -output bits. However, on typical real-world images, very good compression -levels can be obtained with no visible change, and amazingly high compression -is possible if you can tolerate a low-quality image. You can trade off image -quality against file size by adjusting the compressor's "quality" setting. - - -GENERAL USAGE - -We provide two programs, cjpeg to compress an image file into JPEG format, -and djpeg to decompress a JPEG file back into a conventional image format. - -On Unix-like systems, you say: - cjpeg [switches] [imagefile] >jpegfile -or - djpeg [switches] [jpegfile] >imagefile -The programs read the specified input file, or standard input if none is -named. They always write to standard output (with trace/error messages to -standard error). These conventions are handy for piping images between -programs. - -On most non-Unix systems, you say: - cjpeg [switches] imagefile jpegfile -or - djpeg [switches] jpegfile imagefile -i.e., both the input and output files are named on the command line. This -style is a little more foolproof, and it loses no functionality if you don't -have pipes. (You can get this style on Unix too, if you prefer, by defining -TWO_FILE_COMMANDLINE when you compile the programs; see install.doc.) - -You can also say: - cjpeg [switches] -outfile jpegfile imagefile -or - djpeg [switches] -outfile imagefile jpegfile -This syntax works on all systems, so it is useful for scripts. - -The currently supported image file formats are: PPM (PBMPLUS color format), -PGM (PBMPLUS gray-scale format), BMP, GIF, Targa, and RLE (Utah Raster Toolkit -format). (RLE is supported only if the URT library is available.) -cjpeg recognizes the input image format automatically, with the exception -of some Targa-format files. You have to tell djpeg which format to generate. - -JPEG files are in the defacto standard JFIF file format. There are other, -less widely used JPEG-based file formats, but we don't support them. - -All switch names may be abbreviated; for example, -grayscale may be written --gray or -gr. Most of the "basic" switches can be abbreviated to as little as -one letter. Upper and lower case are equivalent (-GIF is the same as -gif). -British spellings are also accepted (e.g., -greyscale), though for brevity -these are not mentioned below. - - -CJPEG DETAILS - -The basic command line switches for cjpeg are: - - -quality N Scale quantization tables to adjust image quality. - Quality is 0 (worst) to 100 (best); default is 75. - (See below for more info.) - - -grayscale Create monochrome JPEG file from color input. - Be sure to use this switch when compressing a grayscale - GIF file, because cjpeg isn't bright enough to notice - whether a GIF file uses only shades of gray. By - saying -grayscale, you'll get a smaller JPEG file that - takes less time to process. - - -optimize Perform optimization of entropy encoding parameters. - Without this, default encoding parameters are used. - -optimize usually makes the JPEG file a little smaller, - but cjpeg runs somewhat slower and needs much more - memory. Image quality and speed of decompression are - unaffected by -optimize. - - -targa Input file is Targa format. Targa files that contain - an "identification" field will not be automatically - recognized by cjpeg; for such files you must specify - -targa to make cjpeg treat the input as Targa format. - For most Targa files, you won't need this switch. - -The -quality switch lets you trade off compressed file size against quality of -the reconstructed image: the higher the quality setting, the larger the JPEG -file, and the closer the output image will be to the original input. Normally -you want to use the lowest quality setting (smallest file) that decompresses -into something visually indistinguishable from the original image. For this -purpose the quality setting should be between 50 and 95; the default of 75 is -often about right. If you see defects at -quality 75, then go up 5 or 10 -counts at a time until you are happy with the output image. (The optimal -setting will vary from one image to another.) - --quality 100 will generate a quantization table of all 1's, eliminating loss -in the quantization step (but there is still information loss in subsampling, -as well as roundoff error). This setting is mainly of interest for -experimental purposes. Quality values above about 95 are NOT recommended for -normal use; the compressed file size goes up dramatically for hardly any gain -in output image quality. - -In the other direction, quality values below 50 will produce very small files -of low image quality. Settings around 5 to 10 might be useful in preparing an -index of a large image library, for example. Try -quality 2 (or so) for some -amusing Cubist effects. (Note: quality values below about 25 generate 2-byte -quantization tables, which are considered optional in the JPEG standard. -cjpeg emits a warning message when you give such a quality value, because -some commercial JPEG programs may be unable to decode the resulting file. -Use -baseline if you need to ensure compatibility at low quality values.) - -Switches for advanced users: - - -dct int Use integer DCT method (default). - -dct fast Use fast integer DCT (less accurate). - -dct float Use floating-point DCT method. - The floating-point method is the most accurate, but - will be the slowest unless your machine has very fast - floating-point hardware. Also note that results of - the floating-point method may vary slightly across - machines, while the integer methods should give the - same results everywhere. The fast integer method is - much less accurate than the other two. - - -restart N Emit a JPEG restart marker every N MCU rows, or every - N MCU blocks if "B" is attached to the number. - -restart 0 (the default) means no restart markers. - - -smooth N Smooth the input image to eliminate dithering noise. - N, ranging from 1 to 100, indicates the strength of - smoothing. 0 (the default) means no smoothing. - - -maxmemory N Set limit for amount of memory to use in processing - large images. Value is in thousands of bytes, or - millions of bytes if "M" is attached to the number. - For example, -max 4m selects 4000000 bytes. If more - space is needed, temporary files will be used. - - -verbose Enable debug printout. More -v's give more printout. - or -debug Also, version information is printed at startup. - -The -restart option inserts extra markers that allow a JPEG decoder to -resynchronize after a transmission error. Without restart markers, any damage -to a compressed file will usually ruin the image from the point of the error -to the end of the image; with restart markers, the damage is usually confined -to the portion of the image up to the next restart marker. Of course, the -restart markers occupy extra space. We recommend -restart 1 for images that -will be transmitted across unreliable networks such as Usenet. - -The -smooth option filters the input to eliminate fine-scale noise. This is -often useful when converting GIF files to JPEG: a moderate smoothing factor of -10 to 50 gets rid of dithering patterns in the input file, resulting in a -smaller JPEG file and a better-looking image. Too large a smoothing factor -will visibly blur the image, however. - -Switches for wizards: - - -arithmetic Use arithmetic coding rather than Huffman coding. - (Not currently supported for legal reasons.) - - -baseline Force a baseline JPEG file to be generated. This - clamps quantization values to 8 bits even at low - quality settings. - - -nointerleave Generate noninterleaved JPEG file (not yet supported). - - -qtables file Use the quantization tables given in the specified - file. The file should contain one to four tables - (64 values each) as plain text. Comments preceded by - '#' may be included in the file. The tables are - implicitly numbered 0,1,etc. If -quality N is also - specified, the values in the file are scaled according - to cjpeg's quality scaling curve. - - -qslots N[,...] Select which quantization table to use for each color - component. By default, table 0 is used for luminance - and table 1 for chrominance components. - - -sample HxV[,...] Set JPEG sampling factors. If you specify - fewer H/V pairs than there are components, the - remaining components are set to 1x1 sampling. The - default setting is equivalent to "-sample 2x2". - -The "wizard" switches are intended for experimentation with JPEG. If you -don't know what you are doing, DON'T USE THEM. You can easily produce files -with worse image quality and/or poorer compression than you'll get from the -default settings. Furthermore, these switches should not be used when making -files intended for general use, because not all JPEG implementations will -support unusual JPEG parameter settings. - - -DJPEG DETAILS - -The basic command line switches for djpeg are: - - -colors N Reduce image to at most N colors. This reduces the - or -quantize N number of colors used in the output image, so that it - can be displayed on a colormapped display or stored in - a colormapped file format. For example, if you have - an 8-bit display, you'd need to reduce to 256 or fewer - colors. (-colors is the recommended name, -quantize - is provided only for backwards compatibility.) - - -fast Select recommended processing options for fast, low - quality output. (The default options are chosen for - highest quality output.) Currently, this is equivalent - to "-dct fast -nosmooth -onepass -dither ordered". - - -grayscale Force gray-scale output even if JPEG file is color. - Useful for viewing on monochrome displays; also, - djpeg runs noticeably faster in this mode. - - -scale M/N Scale the output image by a factor M/N. Currently - the scale factor must be 1/1, 1/2, 1/4, or 1/8. - Scaling is handy if the image is larger than your - screen; also, djpeg runs much faster when scaling - down the output. - - -bmp Select BMP output format (Windows flavor). 8-bit - colormapped format is emitted if -colors or -grayscale - is specified, or if the JPEG file is gray-scale; - otherwise, 24-bit full-color format is emitted. - - -gif Select GIF output format. Since GIF does not support - more than 256 colors, -colors 256 is assumed (unless - you specify a smaller number of colors). If you - specify -fast, the default number of colors is 216. - - -os2 Select BMP output format (OS/2 1.x flavor). 8-bit - colormapped format is emitted if -colors or -grayscale - is specified, or if the JPEG file is gray-scale; - otherwise, 24-bit full-color format is emitted. - - -pnm Select PBMPLUS (PPM/PGM) output format (this is the - default format). PGM is emitted if the JPEG file is - gray-scale or if -grayscale is specified; otherwise - PPM is emitted. - - -rle Select RLE output format. (Requires URT library.) - - -targa Select Targa output format. Gray-scale format is - emitted if the JPEG file is gray-scale or if - -grayscale is specified; otherwise, colormapped format - is emitted if -colors is specified; otherwise, 24-bit - full-color format is emitted. - -Switches for advanced users: - - -dct int Use integer DCT method (default). - -dct fast Use fast integer DCT (less accurate). - -dct float Use floating-point DCT method. - The floating-point method is the most accurate, but - will be the slowest unless your machine has very fast - floating-point hardware. Also note that results of - the floating-point method may vary slightly across - machines, while the integer methods should give the - same results everywhere. The fast integer method is - much less accurate than the other two. - - -dither fs Use Floyd-Steinberg dithering in color quantization. - -dither ordered Use ordered dithering in color quantization. - -dither none Do not use dithering in color quantization. - By default, Floyd-Steinberg dithering is applied when - quantizing colors; this is slow but usually produces - the best results. Ordered dither is a compromise - between speed and quality; no dithering is fast but - usually looks awful. Note that these switches have - no effect unless color quantization is being done. - Ordered dither is only available in -onepass mode. - - -map FILE Quantize to the colors used in the specified image - file. This is useful for producing multiple files - with identical color maps, or for forcing a predefined - set of colors to be used. The FILE must be a GIF - or PPM file. This option overrides -colors and - -onepass. - - -nosmooth Use a faster, lower-quality upsampling routine. - - -onepass Use one-pass instead of two-pass color quantization. - The one-pass method is faster and needs less memory, - but it produces a lower-quality image. -onepass is - ignored unless you also say -colors N. Also, - the one-pass method is always used for gray-scale - output (the two-pass method is no improvement then). - - -maxmemory N Set limit for amount of memory to use in processing - large images. Value is in thousands of bytes, or - millions of bytes if "M" is attached to the number. - For example, -max 4m selects 4000000 bytes. If more - space is needed, temporary files will be used. - - -verbose Enable debug printout. More -v's give more printout. - or -debug Also, version information is printed at startup. - - -HINTS FOR CJPEG - -Color GIF files are not the ideal input for JPEG; JPEG is really intended for -compressing full-color (24-bit) images. In particular, don't try to convert -cartoons, line drawings, and other images that have only a few distinct -colors. GIF works great on these, JPEG does not. If you want to convert a -GIF to JPEG, you should experiment with cjpeg's -quality and -smooth options -to get a satisfactory conversion. -smooth 10 or so is often helpful. - -Avoid running an image through a series of JPEG compression/decompression -cycles. Image quality loss will accumulate; after ten or so cycles the image -may be noticeably worse than it was after one cycle. It's best to use a -lossless format while manipulating an image, then convert to JPEG format when -you are ready to file the image away. - -The -optimize option to cjpeg is worth using when you are making a "final" -version for posting or archiving. It's also a win when you are using low -quality settings to make very small JPEG files; the percentage improvement -is often a lot more than it is on larger files. - - -HINTS FOR DJPEG - -To get a quick preview of an image, use the -grayscale and/or -scale switches. -"-grayscale -scale 1/8" is the fastest case. - -Several options are available that trade off image quality to gain speed. -"-fast" turns on the recommended settings. - -"-dct fast" and/or "-nosmooth" gain speed at a small sacrifice in quality. -When producing a color-quantized image, "-onepass -dither ordered" is fast but -much lower quality than the default behavior. "-dither none" may give -acceptable results in two-pass mode, but is seldom tolerable in one-pass mode. - -If you are fortunate enough to have very fast floating point hardware, -"-dct float" may be even faster than "-dct fast". - -Two-pass color quantization requires a good deal of memory; on MS-DOS machines -it may run out of memory even with -maxmemory 0. In that case you can still -decompress, with some loss of image quality, by specifying -onepass for -one-pass quantization. - - -HINTS FOR BOTH PROGRAMS - -If more space is needed than will fit in the available main memory (as -determined by -maxmemory), temporary files will be used. (MS-DOS versions -will try to get extended or expanded memory first.) The temporary files are -often rather large: in typical cases they occupy three bytes per pixel, for -example 3*800*600 = 1.44Mb for an 800x600 image. If you don't have enough -free disk space, leave out -optimize (for cjpeg) or specify -onepass (for -djpeg). - -On MS-DOS, the temporary files are created in the directory named by the TMP -or TEMP environment variable, or in the current directory if neither of those -exist. Amiga implementations put the temp files in the directory named by -JPEGTMP:, so be sure to assign JPEGTMP: to a disk partition with adequate free -space. - -The default memory usage limit (-maxmemory) is set when the software is -compiled. If you get an "insufficient memory" error, try specifying a smaller --maxmemory value, even -maxmemory 0 to use the absolute minimum space. You -may want to recompile with a smaller default value if this happens often. - -On machines that have "environment" variables, you can define the environment -variable JPEGMEM to set the default memory limit. The value is specified as -described for the -maxmemory switch. JPEGMEM overrides the default value -specified when the program was compiled, and itself is overridden by an -explicit -maxmemory switch. - -On MS-DOS machines, -maxmemory is the amount of main (conventional) memory to -use. (Extended or expanded memory is also used if available.) Most -DOS-specific versions of this software do their own memory space estimation -and do not need you to specify -maxmemory. - - -THE COMMENT UTILITIES - -The JPEG standard allows "comment" (COM) blocks to occur within a JPEG file. -Although the standard doesn't actually define what COM blocks are for, they -are widely used to hold user-supplied text strings. This lets you add -annotations, titles, index terms, etc to your JPEG files, and later retrieve -them as text. COM blocks do not interfere with the image stored in the JPEG -file. The maximum size of a COM block is 64K, but you can have as many of -them as you like in one JPEG file. - -We provide two utility programs to display COM block contents and add COM -blocks to a JPEG file. - -rdjpgcom searches a JPEG file and prints the contents of any COM blocks on -standard output. The command line syntax is - rdjpgcom [-verbose] [inputfilename] -The switch "-verbose" (or just "-v") causes rdjpgcom to also display the JPEG -image dimensions. If you omit the input file name from the command line, -the JPEG file is read from standard input. (This may not work on some -operating systems, if binary data can't be read from stdin.) - -wrjpgcom adds a COM block, containing text you provide, to a JPEG file. -Ordinarily, the COM block is added after any existing COM blocks, but you -can delete the old COM blocks if you wish. wrjpgcom produces a new JPEG -file; it does not modify the input file. DO NOT try to overwrite the input -file by directing wrjpgcom's output back into it; on most systems this will -just destroy your file. - -The command line syntax for wrjpgcom is similar to cjpeg's. On Unix-like -systems, it is - wrjpgcom [switches] [inputfilename] -The output file is written to standard output. The input file comes from -the named file, or from standard input if no input file is named. - -On most non-Unix systems, the syntax is - wrjpgcom [switches] inputfilename outputfilename -where both input and output file names must be given explicitly. - -wrjpgcom understands three switches: - -replace Delete any existing COM blocks from the file. - -comment "Comment text" Supply new COM text on command line. - -cfile name Read text for new COM block from named file. -(Switch names can be abbreviated.) If you have only one line of comment text -to add, you can provide it on the command line with -comment. The comment -text must be surrounded with quotes so that it is treated as a single -argument. Longer comments can be read from a text file. - -If you give neither -comment nor -cfile, then wrjpgcom will read the comment -text from standard input. (In this case an input image file name MUST be -supplied, so that the source JPEG file comes from somewhere else.) You can -enter multiple lines, up to 64KB worth. Type an end-of-file indicator -(usually control-D or control-Z) to terminate the comment text entry. - -wrjpgcom will not add a COM block if the provided comment string is empty. -Therefore -replace -comment "" can be used to delete all COM blocks from a -file. - -These utility programs do not depend on the IJG JPEG library. In -particular, the source code for rdjpgcom is intended as an illustration of -the minimum amount of code required to parse a JPEG file header correctly. diff --git a/jpeg/usage.doc.gz b/jpeg/usage.doc.gz deleted file mode 100644 index 9b9c12328149fe97c19d8fd05149b2fa79bb099b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5882 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 VIEYnh;ims=o!@W2NVjBQ000G4ZBhUL diff --git a/jpeg/wrbmp.c b/jpeg/wrbmp.c deleted file mode 100644 index 06970c6742..0000000000 --- a/jpeg/wrbmp.c +++ /dev/null @@ -1,440 +0,0 @@ -/* - * wrbmp.c - * - * Copyright (C) 1994, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains routines to write output images in Microsoft "BMP" - * format (MS Windows 3.x and OS/2 1.x flavors). - * Either 8-bit colormapped or 24-bit full-color format can be written. - * No compression is supported. - * - * These routines may need modification for non-Unix environments or - * specialized applications. As they stand, they assume output to - * an ordinary stdio stream. - * - * This code contributed by James Arthur Boucher. - */ - -#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ - -#ifdef BMP_SUPPORTED - - -/* - * To support 12-bit JPEG data, we'd have to scale output down to 8 bits. - * This is not yet implemented. - */ - -#if BITS_IN_JSAMPLE != 8 - Sorry, this code only copes with 8-bit JSAMPLEs. /* deliberate syntax err */ -#endif - -/* - * Since BMP stores scanlines bottom-to-top, we have to invert the image - * from JPEG's top-to-bottom order. To do this, we save the outgoing data - * in a virtual array during put_pixel_row calls, then actually emit the - * BMP file during finish_output. The virtual array contains one JSAMPLE per - * pixel if the output is grayscale or colormapped, three if it is full color. - */ - -/* Private version of data destination object */ - -typedef struct { - struct djpeg_dest_struct pub; /* public fields */ - - boolean is_os2; /* saves the OS2 format request flag */ - - jvirt_sarray_ptr whole_image; /* needed to reverse row order */ - JDIMENSION data_width; /* JSAMPLEs per row */ - JDIMENSION row_width; /* physical width of one row in the BMP file */ - int pad_bytes; /* number of padding bytes needed per row */ - JDIMENSION cur_output_row; /* next row# to write to virtual array */ -} bmp_dest_struct; - -typedef bmp_dest_struct * bmp_dest_ptr; - - -/* Forward declarations */ -LOCAL void write_colormap - JPP((j_decompress_ptr cinfo, bmp_dest_ptr dest, - int map_colors, int map_entry_size)); - - -/* - * Write some pixel data. - * In this module rows_supplied will always be 1. - */ - -METHODDEF void -put_pixel_rows (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo, - JDIMENSION rows_supplied) -/* This version is for writing 24-bit pixels */ -{ - bmp_dest_ptr dest = (bmp_dest_ptr) dinfo; - JSAMPARRAY image_ptr; - register JSAMPROW inptr, outptr; - register JDIMENSION col; - int pad; - - /* Access next row in virtual array */ - image_ptr = (*cinfo->mem->access_virt_sarray) - ((j_common_ptr) cinfo, dest->whole_image, dest->cur_output_row, TRUE); - dest->cur_output_row++; - - /* Transfer data. Note destination values must be in BGR order - * (even though Microsoft's own documents say the opposite). - */ - inptr = dest->pub.buffer[0]; - outptr = image_ptr[0]; - for (col = cinfo->output_width; col > 0; col--) { - outptr[2] = *inptr++; /* can omit GETJSAMPLE() safely */ - outptr[1] = *inptr++; - outptr[0] = *inptr++; - outptr += 3; - } - - /* Zero out the pad bytes. */ - pad = dest->pad_bytes; - while (--pad >= 0) - *outptr++ = 0; -} - -METHODDEF void -put_gray_rows (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo, - JDIMENSION rows_supplied) -/* This version is for grayscale OR quantized color output */ -{ - bmp_dest_ptr dest = (bmp_dest_ptr) dinfo; - JSAMPARRAY image_ptr; - register JSAMPROW inptr, outptr; - register JDIMENSION col; - int pad; - - /* Access next row in virtual array */ - image_ptr = (*cinfo->mem->access_virt_sarray) - ((j_common_ptr) cinfo, dest->whole_image, dest->cur_output_row, TRUE); - dest->cur_output_row++; - - /* Transfer data. */ - inptr = dest->pub.buffer[0]; - outptr = image_ptr[0]; - for (col = cinfo->output_width; col > 0; col--) { - *outptr++ = *inptr++; /* can omit GETJSAMPLE() safely */ - } - - /* Zero out the pad bytes. */ - pad = dest->pad_bytes; - while (--pad >= 0) - *outptr++ = 0; -} - - -/* - * Startup: normally writes the file header. - * In this module we may as well postpone everything until finish_output. - */ - -METHODDEF void -start_output_bmp (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo) -{ - /* no work here */ -} - - -/* - * Finish up at the end of the file. - * - * Here is where we really output the BMP file. - * - * First, routines to write the Windows and OS/2 variants of the file header. - */ - -LOCAL void -write_bmp_header (j_decompress_ptr cinfo, bmp_dest_ptr dest) -/* Write a Windows-style BMP file header, including colormap if needed */ -{ - char bmpfileheader[14]; - char bmpinfoheader[40]; -#define PUT_2B(array,offset,value) \ - (array[offset] = (char) ((value) & 0xFF), \ - array[offset+1] = (char) (((value) >> 8) & 0xFF)) -#define PUT_4B(array,offset,value) \ - (array[offset] = (char) ((value) & 0xFF), \ - array[offset+1] = (char) (((value) >> 8) & 0xFF), \ - array[offset+2] = (char) (((value) >> 16) & 0xFF), \ - array[offset+3] = (char) (((value) >> 24) & 0xFF)) - INT32 headersize, bfSize; - int bits_per_pixel, cmap_entries; - - /* Compute colormap size and total file size */ - if (cinfo->out_color_space == JCS_RGB) { - if (cinfo->quantize_colors) { - /* Colormapped RGB */ - bits_per_pixel = 8; - cmap_entries = 256; - } else { - /* Unquantized, full color RGB */ - bits_per_pixel = 24; - cmap_entries = 0; - } - } else { - /* Grayscale output. We need to fake a 256-entry colormap. */ - bits_per_pixel = 8; - cmap_entries = 256; - } - /* File size */ - headersize = 14 + 40 + cmap_entries * 4; /* Header and colormap */ - bfSize = headersize + (INT32) dest->row_width * (INT32) cinfo->output_height; - - /* Set unused fields of header to 0 */ - MEMZERO(bmpfileheader, SIZEOF(bmpfileheader)); - MEMZERO(bmpinfoheader, SIZEOF(bmpinfoheader)); - - /* Fill the file header */ - bmpfileheader[0] = 0x42; /* first 2 bytes are ASCII 'B', 'M' */ - bmpfileheader[1] = 0x4D; - PUT_4B(bmpfileheader, 2, bfSize); /* bfSize */ - /* we leave bfReserved1 & bfReserved2 = 0 */ - PUT_4B(bmpfileheader, 10, headersize); /* bfOffBits */ - - /* Fill the info header (Microsoft calls this a BITMAPINFOHEADER) */ - PUT_2B(bmpinfoheader, 0, 40); /* biSize */ - PUT_4B(bmpinfoheader, 4, cinfo->output_width); /* biWidth */ - PUT_4B(bmpinfoheader, 8, cinfo->output_height); /* biHeight */ - PUT_2B(bmpinfoheader, 12, 1); /* biPlanes - must be 1 */ - PUT_2B(bmpinfoheader, 14, bits_per_pixel); /* biBitCount */ - /* we leave biCompression = 0, for none */ - /* we leave biSizeImage = 0; this is correct for uncompressed data */ - if (cinfo->density_unit == 2) { /* if have density in dots/cm, then */ - PUT_4B(bmpinfoheader, 24, (INT32) (cinfo->X_density*100)); /* XPels/M */ - PUT_4B(bmpinfoheader, 28, (INT32) (cinfo->Y_density*100)); /* XPels/M */ - } - PUT_2B(bmpinfoheader, 32, cmap_entries); /* biClrUsed */ - /* we leave biClrImportant = 0 */ - - if (JFWRITE(dest->pub.output_file, bmpfileheader, 14) != (size_t) 14) - ERREXIT(cinfo, JERR_FILE_WRITE); - if (JFWRITE(dest->pub.output_file, bmpinfoheader, 40) != (size_t) 40) - ERREXIT(cinfo, JERR_FILE_WRITE); - - if (cmap_entries > 0) - write_colormap(cinfo, dest, cmap_entries, 4); -} - - -LOCAL void -write_os2_header (j_decompress_ptr cinfo, bmp_dest_ptr dest) -/* Write an OS2-style BMP file header, including colormap if needed */ -{ - char bmpfileheader[14]; - char bmpcoreheader[12]; - INT32 headersize, bfSize; - int bits_per_pixel, cmap_entries; - - /* Compute colormap size and total file size */ - if (cinfo->out_color_space == JCS_RGB) { - if (cinfo->quantize_colors) { - /* Colormapped RGB */ - bits_per_pixel = 8; - cmap_entries = 256; - } else { - /* Unquantized, full color RGB */ - bits_per_pixel = 24; - cmap_entries = 0; - } - } else { - /* Grayscale output. We need to fake a 256-entry colormap. */ - bits_per_pixel = 8; - cmap_entries = 256; - } - /* File size */ - headersize = 14 + 12 + cmap_entries * 3; /* Header and colormap */ - bfSize = headersize + (INT32) dest->row_width * (INT32) cinfo->output_height; - - /* Set unused fields of header to 0 */ - MEMZERO(bmpfileheader, SIZEOF(bmpfileheader)); - MEMZERO(bmpcoreheader, SIZEOF(bmpcoreheader)); - - /* Fill the file header */ - bmpfileheader[0] = 0x42; /* first 2 bytes are ASCII 'B', 'M' */ - bmpfileheader[1] = 0x4D; - PUT_4B(bmpfileheader, 2, bfSize); /* bfSize */ - /* we leave bfReserved1 & bfReserved2 = 0 */ - PUT_4B(bmpfileheader, 10, headersize); /* bfOffBits */ - - /* Fill the info header (Microsoft calls this a BITMAPCOREHEADER) */ - PUT_2B(bmpcoreheader, 0, 12); /* bcSize */ - PUT_2B(bmpcoreheader, 4, cinfo->output_width); /* bcWidth */ - PUT_2B(bmpcoreheader, 6, cinfo->output_height); /* bcHeight */ - PUT_2B(bmpcoreheader, 8, 1); /* bcPlanes - must be 1 */ - PUT_2B(bmpcoreheader, 10, bits_per_pixel); /* bcBitCount */ - - if (JFWRITE(dest->pub.output_file, bmpfileheader, 14) != (size_t) 14) - ERREXIT(cinfo, JERR_FILE_WRITE); - if (JFWRITE(dest->pub.output_file, bmpcoreheader, 12) != (size_t) 12) - ERREXIT(cinfo, JERR_FILE_WRITE); - - if (cmap_entries > 0) - write_colormap(cinfo, dest, cmap_entries, 3); -} - - -/* - * Write the colormap. - * Windows uses BGR0 map entries; OS/2 uses BGR entries. - */ - -LOCAL void -write_colormap (j_decompress_ptr cinfo, bmp_dest_ptr dest, - int map_colors, int map_entry_size) -{ - JSAMPARRAY colormap = cinfo->colormap; - int num_colors = cinfo->actual_number_of_colors; - FILE * outfile = dest->pub.output_file; - int i; - - if (colormap != NULL) { - if (cinfo->out_color_components == 3) { - /* Normal case with RGB colormap */ - for (i = 0; i < num_colors; i++) { - putc(GETJSAMPLE(colormap[2][i]), outfile); - putc(GETJSAMPLE(colormap[1][i]), outfile); - putc(GETJSAMPLE(colormap[0][i]), outfile); - if (map_entry_size == 4) - putc(0, outfile); - } - } else { - /* Grayscale colormap (only happens with grayscale quantization) */ - for (i = 0; i < num_colors; i++) { - putc(GETJSAMPLE(colormap[0][i]), outfile); - putc(GETJSAMPLE(colormap[0][i]), outfile); - putc(GETJSAMPLE(colormap[0][i]), outfile); - if (map_entry_size == 4) - putc(0, outfile); - } - } - } else { - /* If no colormap, must be grayscale data. Generate a linear "map". */ - for (i = 0; i < 256; i++) { - putc(i, outfile); - putc(i, outfile); - putc(i, outfile); - if (map_entry_size == 4) - putc(0, outfile); - } - } - /* Pad colormap with zeros to ensure specified number of colormap entries */ - if (i > map_colors) - ERREXIT1(cinfo, JERR_TOO_MANY_COLORS, i); - for (; i < map_colors; i++) { - putc(0, outfile); - putc(0, outfile); - putc(0, outfile); - if (map_entry_size == 4) - putc(0, outfile); - } -} - - -METHODDEF void -finish_output_bmp (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo) -{ - bmp_dest_ptr dest = (bmp_dest_ptr) dinfo; - register FILE * outfile = dest->pub.output_file; - JSAMPARRAY image_ptr; - register JSAMPROW data_ptr; - JDIMENSION row; - register JDIMENSION col; - cd_progress_ptr progress = (cd_progress_ptr) cinfo->progress; - - /* Write the header and colormap */ - if (dest->is_os2) - write_os2_header(cinfo, dest); - else - write_bmp_header(cinfo, dest); - - /* Write the file body from our virtual array */ - for (row = cinfo->output_height; row > 0; row--) { - if (progress != NULL) { - progress->pub.pass_counter = (long) (cinfo->output_height - row); - progress->pub.pass_limit = (long) cinfo->output_height; - (*progress->pub.progress_monitor) ((j_common_ptr) cinfo); - } - image_ptr = (*cinfo->mem->access_virt_sarray) - ((j_common_ptr) cinfo, dest->whole_image, row-1, FALSE); - data_ptr = image_ptr[0]; - for (col = dest->row_width; col > 0; col--) { - putc(GETJSAMPLE(*data_ptr), outfile); - data_ptr++; - } - } - if (progress != NULL) - progress->completed_extra_passes++; - - /* Make sure we wrote the output file OK */ - fflush(outfile); - if (ferror(outfile)) - ERREXIT(cinfo, JERR_FILE_WRITE); -} - - -/* - * The module selection routine for BMP format output. - */ - -GLOBAL djpeg_dest_ptr -jinit_write_bmp (j_decompress_ptr cinfo, boolean is_os2) -{ - bmp_dest_ptr dest; - JDIMENSION row_width; - - /* Create module interface object, fill in method pointers */ - dest = (bmp_dest_ptr) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - SIZEOF(bmp_dest_struct)); - dest->pub.start_output = start_output_bmp; - dest->pub.finish_output = finish_output_bmp; - dest->is_os2 = is_os2; - - if (cinfo->out_color_space == JCS_GRAYSCALE) { - dest->pub.put_pixel_rows = put_gray_rows; - } else if (cinfo->out_color_space == JCS_RGB) { - if (cinfo->quantize_colors) - dest->pub.put_pixel_rows = put_gray_rows; - else - dest->pub.put_pixel_rows = put_pixel_rows; - } else { - ERREXIT(cinfo, JERR_BMP_COLORSPACE); - } - - /* Calculate output image dimensions so we can allocate space */ - jpeg_calc_output_dimensions(cinfo); - - /* Determine width of rows in the BMP file (padded to 4-byte boundary). */ - row_width = cinfo->output_width * cinfo->output_components; - dest->data_width = row_width; - while ((row_width & 3) != 0) row_width++; - dest->row_width = row_width; - dest->pad_bytes = (int) (row_width - dest->data_width); - - /* Allocate space for inversion array, prepare for write pass */ - dest->whole_image = (*cinfo->mem->request_virt_sarray) - ((j_common_ptr) cinfo, JPOOL_IMAGE, - row_width, cinfo->output_height, (JDIMENSION) 1); - dest->cur_output_row = 0; - if (cinfo->progress != NULL) { - cd_progress_ptr progress = (cd_progress_ptr) cinfo->progress; - progress->total_extra_passes++; /* count file input as separate pass */ - } - - /* Create decompressor output buffer. */ - dest->pub.buffer = (*cinfo->mem->alloc_sarray) - ((j_common_ptr) cinfo, JPOOL_IMAGE, row_width, (JDIMENSION) 1); - dest->pub.buffer_height = 1; - - return (djpeg_dest_ptr) dest; -} - -#endif /* BMP_SUPPORTED */ diff --git a/jpeg/wrgif.c b/jpeg/wrgif.c deleted file mode 100644 index d61e24d076..0000000000 --- a/jpeg/wrgif.c +++ /dev/null @@ -1,500 +0,0 @@ -/* - * wrgif.c - * - * Copyright (C) 1991-1994, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains routines to write output images in GIF format. - * - * These routines may need modification for non-Unix environments or - * specialized applications. As they stand, they assume output to - * an ordinary stdio stream. - */ - -/* - * This code is loosely based on ppmtogif from the PBMPLUS distribution - * of Feb. 1991. That file contains the following copyright notice: - * Based on GIFENCODE by David Rowley <mgardi@watdscu.waterloo.edu>. - * Lempel-Ziv compression based on "compress" by Spencer W. Thomas et al. - * Copyright (C) 1989 by Jef Poskanzer. - * Permission to use, copy, modify, and distribute this software and its - * documentation for any purpose and without fee is hereby granted, provided - * that the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation. This software is provided "as is" without express or - * implied warranty. - * - * We are also required to state that - * "The Graphics Interchange Format(c) is the Copyright property of - * CompuServe Incorporated. GIF(sm) is a Service Mark property of - * CompuServe Incorporated." - */ - -#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ - -#ifdef GIF_SUPPORTED - - -#define MAX_LZW_BITS 12 /* maximum LZW code size (4096 symbols) */ - -typedef INT16 code_int; /* must hold -1 .. 2**MAX_LZW_BITS */ - -#define LZW_TABLE_SIZE ((code_int) 1 << MAX_LZW_BITS) - -#define HSIZE 5003 /* hash table size for 80% occupancy */ - -typedef int hash_int; /* must hold -2*HSIZE..2*HSIZE */ - -#define MAXCODE(n_bits) (((code_int) 1 << (n_bits)) - 1) - - -/* - * The LZW hash table consists of two parallel arrays: - * hash_code[i] code of symbol in slot i, or 0 if empty slot - * hash_value[i] symbol's value; undefined if empty slot - * where slot values (i) range from 0 to HSIZE-1. The symbol value is - * its prefix symbol's code concatenated with its suffix character. - * - * Algorithm: use open addressing double hashing (no chaining) on the - * prefix code / suffix character combination. We do a variant of Knuth's - * algorithm D (vol. 3, sec. 6.4) along with G. Knott's relatively-prime - * secondary probe. - * - * The hash_value[] table is allocated from FAR heap space since it would - * use up rather a lot of the near data space in a PC. - */ - -typedef INT32 hash_entry; /* must hold (code_int<<8) | byte */ - -#define HASH_ENTRY(prefix,suffix) ((((hash_entry) (prefix)) << 8) | (suffix)) - - -/* Private version of data destination object */ - -typedef struct { - struct djpeg_dest_struct pub; /* public fields */ - - j_decompress_ptr cinfo; /* back link saves passing separate parm */ - - /* State for packing variable-width codes into a bitstream */ - int n_bits; /* current number of bits/code */ - code_int maxcode; /* maximum code, given n_bits */ - int init_bits; /* initial n_bits ... restored after clear */ - INT32 cur_accum; /* holds bits not yet output */ - int cur_bits; /* # of bits in cur_accum */ - - /* LZW string construction */ - code_int waiting_code; /* symbol not yet output; may be extendable */ - boolean first_byte; /* if TRUE, waiting_code is not valid */ - - /* State for LZW code assignment */ - code_int ClearCode; /* clear code (doesn't change) */ - code_int EOFCode; /* EOF code (ditto) */ - code_int free_code; /* first not-yet-used symbol code */ - - /* LZW hash table */ - code_int *hash_code; /* => hash table of symbol codes */ - hash_entry FAR *hash_value; /* => hash table of symbol values */ - - /* GIF data packet construction buffer */ - int bytesinpkt; /* # of bytes in current packet */ - char packetbuf[256]; /* workspace for accumulating packet */ - -} gif_dest_struct; - -typedef gif_dest_struct * gif_dest_ptr; - - -/* - * Routines to package compressed data bytes into GIF data blocks. - * A data block consists of a count byte (1..255) and that many data bytes. - */ - -LOCAL void -flush_packet (gif_dest_ptr dinfo) -/* flush any accumulated data */ -{ - if (dinfo->bytesinpkt > 0) { /* never write zero-length packet */ - dinfo->packetbuf[0] = (char) dinfo->bytesinpkt++; - if (JFWRITE(dinfo->pub.output_file, dinfo->packetbuf, dinfo->bytesinpkt) - != (size_t) dinfo->bytesinpkt) - ERREXIT(dinfo->cinfo, JERR_FILE_WRITE); - dinfo->bytesinpkt = 0; - } -} - - -/* Add a character to current packet; flush to disk if necessary */ -#define CHAR_OUT(dinfo,c) \ - { (dinfo)->packetbuf[++(dinfo)->bytesinpkt] = (char) (c); \ - if ((dinfo)->bytesinpkt >= 255) \ - flush_packet(dinfo); \ - } - - -/* Routine to convert variable-width codes into a byte stream */ - -LOCAL void -output (gif_dest_ptr dinfo, code_int code) -/* Emit a code of n_bits bits */ -/* Uses cur_accum and cur_bits to reblock into 8-bit bytes */ -{ - dinfo->cur_accum |= ((INT32) code) << dinfo->cur_bits; - dinfo->cur_bits += dinfo->n_bits; - - while (dinfo->cur_bits >= 8) { - CHAR_OUT(dinfo, dinfo->cur_accum & 0xFF); - dinfo->cur_accum >>= 8; - dinfo->cur_bits -= 8; - } - - /* - * If the next entry is going to be too big for the code size, - * then increase it, if possible. We do this here to ensure - * that it's done in sync with the decoder's codesize increases. - */ - if (dinfo->free_code > dinfo->maxcode) { - dinfo->n_bits++; - if (dinfo->n_bits == MAX_LZW_BITS) - dinfo->maxcode = LZW_TABLE_SIZE; /* free_code will never exceed this */ - else - dinfo->maxcode = MAXCODE(dinfo->n_bits); - } -} - - -/* The LZW algorithm proper */ - - -LOCAL void -clear_hash (gif_dest_ptr dinfo) -/* Fill the hash table with empty entries */ -{ - /* It's sufficient to zero hash_code[] */ - MEMZERO(dinfo->hash_code, HSIZE * SIZEOF(code_int)); -} - - -LOCAL void -clear_block (gif_dest_ptr dinfo) -/* Reset compressor and issue a Clear code */ -{ - clear_hash(dinfo); /* delete all the symbols */ - dinfo->free_code = dinfo->ClearCode + 2; - output(dinfo, dinfo->ClearCode); /* inform decoder */ - dinfo->n_bits = dinfo->init_bits; /* reset code size */ - dinfo->maxcode = MAXCODE(dinfo->n_bits); -} - - -LOCAL void -compress_init (gif_dest_ptr dinfo, int i_bits) -/* Initialize LZW compressor */ -{ - /* init all the state variables */ - dinfo->n_bits = dinfo->init_bits = i_bits; - dinfo->maxcode = MAXCODE(dinfo->n_bits); - dinfo->ClearCode = ((code_int) 1 << (i_bits - 1)); - dinfo->EOFCode = dinfo->ClearCode + 1; - dinfo->free_code = dinfo->ClearCode + 2; - dinfo->first_byte = TRUE; /* no waiting symbol yet */ - /* init output buffering vars */ - dinfo->bytesinpkt = 0; - dinfo->cur_accum = 0; - dinfo->cur_bits = 0; - /* clear hash table */ - clear_hash(dinfo); - /* GIF specifies an initial Clear code */ - output(dinfo, dinfo->ClearCode); -} - - -LOCAL void -compress_byte (gif_dest_ptr dinfo, int c) -/* Accept and compress one 8-bit byte */ -{ - register hash_int i; - register hash_int disp; - register hash_entry probe_value; - - if (dinfo->first_byte) { /* need to initialize waiting_code */ - dinfo->waiting_code = c; - dinfo->first_byte = FALSE; - return; - } - - /* Probe hash table to see if a symbol exists for - * waiting_code followed by c. - * If so, replace waiting_code by that symbol and return. - */ - i = ((hash_int) c << (MAX_LZW_BITS-8)) + dinfo->waiting_code; - /* i is less than twice 2**MAX_LZW_BITS, therefore less than twice HSIZE */ - if (i >= HSIZE) - i -= HSIZE; - - probe_value = HASH_ENTRY(dinfo->waiting_code, c); - - if (dinfo->hash_code[i] != 0) { /* is first probed slot empty? */ - if (dinfo->hash_value[i] == probe_value) { - dinfo->waiting_code = dinfo->hash_code[i]; - return; - } - if (i == 0) /* secondary hash (after G. Knott) */ - disp = 1; - else - disp = HSIZE - i; - for (;;) { - i -= disp; - if (i < 0) - i += HSIZE; - if (dinfo->hash_code[i] == 0) - break; /* hit empty slot */ - if (dinfo->hash_value[i] == probe_value) { - dinfo->waiting_code = dinfo->hash_code[i]; - return; - } - } - } - - /* here when hashtable[i] is an empty slot; desired symbol not in table */ - output(dinfo, dinfo->waiting_code); - if (dinfo->free_code < LZW_TABLE_SIZE) { - dinfo->hash_code[i] = dinfo->free_code++; /* add symbol to hashtable */ - dinfo->hash_value[i] = probe_value; - } else - clear_block(dinfo); - dinfo->waiting_code = c; -} - - -LOCAL void -compress_term (gif_dest_ptr dinfo) -/* Clean up at end */ -{ - /* Flush out the buffered code */ - if (! dinfo->first_byte) - output(dinfo, dinfo->waiting_code); - /* Send an EOF code */ - output(dinfo, dinfo->EOFCode); - /* Flush the bit-packing buffer */ - if (dinfo->cur_bits > 0) { - CHAR_OUT(dinfo, dinfo->cur_accum & 0xFF); - } - /* Flush the packet buffer */ - flush_packet(dinfo); -} - - -/* GIF header construction */ - - -LOCAL void -put_word (gif_dest_ptr dinfo, unsigned int w) -/* Emit a 16-bit word, LSB first */ -{ - putc(w & 0xFF, dinfo->pub.output_file); - putc((w >> 8) & 0xFF, dinfo->pub.output_file); -} - - -LOCAL void -put_3bytes (gif_dest_ptr dinfo, int val) -/* Emit 3 copies of same byte value --- handy subr for colormap construction */ -{ - putc(val, dinfo->pub.output_file); - putc(val, dinfo->pub.output_file); - putc(val, dinfo->pub.output_file); -} - - -LOCAL void -emit_header (gif_dest_ptr dinfo, int num_colors, JSAMPARRAY colormap) -/* Output the GIF file header, including color map */ -/* If colormap==NULL, synthesize a gray-scale colormap */ -{ - int BitsPerPixel, ColorMapSize, InitCodeSize, FlagByte; - int cshift = dinfo->cinfo->data_precision - 8; - int i; - - if (num_colors > 256) - ERREXIT1(dinfo->cinfo, JERR_TOO_MANY_COLORS, num_colors); - /* Compute bits/pixel and related values */ - BitsPerPixel = 1; - while (num_colors > (1 << BitsPerPixel)) - BitsPerPixel++; - ColorMapSize = 1 << BitsPerPixel; - if (BitsPerPixel <= 1) - InitCodeSize = 2; - else - InitCodeSize = BitsPerPixel; - /* - * Write the GIF header. - * Note that we generate a plain GIF87 header for maximum compatibility. - */ - putc('G', dinfo->pub.output_file); - putc('I', dinfo->pub.output_file); - putc('F', dinfo->pub.output_file); - putc('8', dinfo->pub.output_file); - putc('7', dinfo->pub.output_file); - putc('a', dinfo->pub.output_file); - /* Write the Logical Screen Descriptor */ - put_word(dinfo, (unsigned int) dinfo->cinfo->output_width); - put_word(dinfo, (unsigned int) dinfo->cinfo->output_height); - FlagByte = 0x80; /* Yes, there is a global color table */ - FlagByte |= (BitsPerPixel-1) << 4; /* color resolution */ - FlagByte |= (BitsPerPixel-1); /* size of global color table */ - putc(FlagByte, dinfo->pub.output_file); - putc(0, dinfo->pub.output_file); /* Background color index */ - putc(0, dinfo->pub.output_file); /* Reserved (aspect ratio in GIF89) */ - /* Write the Global Color Map */ - /* If the color map is more than 8 bits precision, */ - /* we reduce it to 8 bits by shifting */ - for (i=0; i < ColorMapSize; i++) { - if (i < num_colors) { - if (colormap != NULL) { - if (dinfo->cinfo->out_color_space == JCS_RGB) { - /* Normal case: RGB color map */ - putc(GETJSAMPLE(colormap[0][i]) >> cshift, dinfo->pub.output_file); - putc(GETJSAMPLE(colormap[1][i]) >> cshift, dinfo->pub.output_file); - putc(GETJSAMPLE(colormap[2][i]) >> cshift, dinfo->pub.output_file); - } else { - /* Grayscale "color map": possible if quantizing grayscale image */ - put_3bytes(dinfo, GETJSAMPLE(colormap[0][i]) >> cshift); - } - } else { - /* Create a gray-scale map of num_colors values, range 0..255 */ - put_3bytes(dinfo, (i * 255 + (num_colors-1)/2) / (num_colors-1)); - } - } else { - /* fill out the map to a power of 2 */ - put_3bytes(dinfo, 0); - } - } - /* Write image separator and Image Descriptor */ - putc(',', dinfo->pub.output_file); /* separator */ - put_word(dinfo, 0); /* left/top offset */ - put_word(dinfo, 0); - put_word(dinfo, (unsigned int) dinfo->cinfo->output_width); /* image size */ - put_word(dinfo, (unsigned int) dinfo->cinfo->output_height); - /* flag byte: not interlaced, no local color map */ - putc(0x00, dinfo->pub.output_file); - /* Write Initial Code Size byte */ - putc(InitCodeSize, dinfo->pub.output_file); - - /* Initialize for LZW compression of image data */ - compress_init(dinfo, InitCodeSize+1); -} - - -/* - * Startup: write the file header. - */ - -METHODDEF void -start_output_gif (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo) -{ - gif_dest_ptr dest = (gif_dest_ptr) dinfo; - - if (cinfo->quantize_colors) - emit_header(dest, cinfo->actual_number_of_colors, cinfo->colormap); - else - emit_header(dest, 256, (JSAMPARRAY) NULL); -} - - -/* - * Write some pixel data. - * In this module rows_supplied will always be 1. - */ - -METHODDEF void -put_pixel_rows (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo, - JDIMENSION rows_supplied) -{ - gif_dest_ptr dest = (gif_dest_ptr) dinfo; - register JSAMPROW ptr; - register JDIMENSION col; - - ptr = dest->pub.buffer[0]; - for (col = cinfo->output_width; col > 0; col--) { - compress_byte(dest, GETJSAMPLE(*ptr++)); - } -} - - -/* - * Finish up at the end of the file. - */ - -METHODDEF void -finish_output_gif (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo) -{ - gif_dest_ptr dest = (gif_dest_ptr) dinfo; - - /* Flush LZW mechanism */ - compress_term(dest); - /* Write a zero-length data block to end the series */ - putc(0, dest->pub.output_file); - /* Write the GIF terminator mark */ - putc(';', dest->pub.output_file); - /* Make sure we wrote the output file OK */ - fflush(dest->pub.output_file); - if (ferror(dest->pub.output_file)) - ERREXIT(cinfo, JERR_FILE_WRITE); -} - - -/* - * The module selection routine for GIF format output. - */ - -GLOBAL djpeg_dest_ptr -jinit_write_gif (j_decompress_ptr cinfo) -{ - gif_dest_ptr dest; - - /* Create module interface object, fill in method pointers */ - dest = (gif_dest_ptr) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - SIZEOF(gif_dest_struct)); - dest->cinfo = cinfo; /* make back link for subroutines */ - dest->pub.start_output = start_output_gif; - dest->pub.put_pixel_rows = put_pixel_rows; - dest->pub.finish_output = finish_output_gif; - - if (cinfo->out_color_space != JCS_GRAYSCALE && - cinfo->out_color_space != JCS_RGB) - ERREXIT(cinfo, JERR_GIF_COLORSPACE); - - /* Force quantization if color or if > 8 bits input */ - if (cinfo->out_color_space != JCS_GRAYSCALE || cinfo->data_precision > 8) { - /* Force quantization to at most 256 colors */ - cinfo->quantize_colors = TRUE; - if (cinfo->desired_number_of_colors > 256) - cinfo->desired_number_of_colors = 256; - } - - /* Calculate output image dimensions so we can allocate space */ - jpeg_calc_output_dimensions(cinfo); - - if (cinfo->output_components != 1) /* safety check: just one component? */ - ERREXIT(cinfo, JERR_GIF_BUG); - - /* Create decompressor output buffer. */ - dest->pub.buffer = (*cinfo->mem->alloc_sarray) - ((j_common_ptr) cinfo, JPOOL_IMAGE, cinfo->output_width, (JDIMENSION) 1); - dest->pub.buffer_height = 1; - - /* Allocate space for hash table */ - dest->hash_code = (code_int *) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - HSIZE * SIZEOF(code_int)); - dest->hash_value = (hash_entry FAR *) - (*cinfo->mem->alloc_large) ((j_common_ptr) cinfo, JPOOL_IMAGE, - HSIZE * SIZEOF(hash_entry)); - - return (djpeg_dest_ptr) dest; -} - -#endif /* GIF_SUPPORTED */ diff --git a/jpeg/wrjpgcom.1 b/jpeg/wrjpgcom.1 deleted file mode 100644 index 71ec4ded3d..0000000000 --- a/jpeg/wrjpgcom.1 +++ /dev/null @@ -1,102 +0,0 @@ -.TH WRJPGCOM 1 "30 August 1994" -.SH NAME -wrjpgcom \- insert text comments into a JPEG file -.SH SYNOPSIS -.B wrjpgcom -[ -.B \-replace -] -[ -.BI \-comment " text" -] -[ -.BI \-cfile " name" -] -[ -.I filename -] -.LP -.SH DESCRIPTION -.LP -.B wrjpgcom -reads the named JPEG/JFIF file, or the standard input if no file is named, -and generates a new JPEG/JFIF file on standard output. A comment block is -added to the file. -.PP -The JPEG standard allows "comment" (COM) blocks to occur within a JPEG file. -Although the standard doesn't actually define what COM blocks are for, they -are widely used to hold user-supplied text strings. This lets you add -annotations, titles, index terms, etc to your JPEG files, and later retrieve -them as text. COM blocks do not interfere with the image stored in the JPEG -file. The maximum size of a COM block is 64K, but you can have as many of -them as you like in one JPEG file. -.PP -.B wrjpgcom -adds a COM block, containing text you provide, to a JPEG file. -Ordinarily, the COM block is added after any existing COM blocks; but you -can delete the old COM blocks if you wish. -.SH OPTIONS -Switch names may be abbreviated, and are not case sensitive. -.TP -.B \-replace -Delete any existing COM blocks from the file. -.TP -.BI \-comment " text" -Supply text for new COM block on command line. -.TP -.BI \-cfile " name" -Read text for new COM block from named file. -.PP -If you have only one line of comment text to add, you can provide it on the -command line with -.BR \-comment . -The comment text must be surrounded with quotes so that it is treated as a -single argument. Longer comments can be read from a text file. -.PP -If you give neither -.B \-comment -nor -.BR \-cfile , -then -.B wrjpgcom -will read the comment text from standard input. (In this case an input image -file name MUST be supplied, so that the source JPEG file comes from somewhere -else.) You can enter multiple lines, up to 64KB worth. Type an end-of-file -indicator (usually control-D) to terminate the comment text entry. -.PP -.B wrjpgcom -will not add a COM block if the provided comment string is empty. Therefore -\fB\-replace \-comment ""\fR can be used to delete all COM blocks from a file. -.SH EXAMPLES -.LP -Add a short comment to in.jpg, producing out.jpg: -.IP -.B wrjpgcom \-c -\fI"View of my back yard" in.jpg -.B > -.I out.jpg -.PP -Attach a long comment previously stored in comment.txt: -.IP -.B wrjpgcom -.I in.jpg -.B < -.I comment.txt -.B > -.I out.jpg -.PP -or equivalently -.IP -.B wrjpgcom -.B -cfile -.I comment.txt -.B < -.I in.jpg -.B > -.I out.jpg -.SH SEE ALSO -.BR cjpeg (1), -.BR djpeg (1), -.BR rdjpgcom (1) -.SH AUTHOR -Independent JPEG Group diff --git a/jpeg/wrjpgcom.c b/jpeg/wrjpgcom.c deleted file mode 100644 index 0b25d69b6c..0000000000 --- a/jpeg/wrjpgcom.c +++ /dev/null @@ -1,574 +0,0 @@ -/* - * wrjpgcom.c - * - * Copyright (C) 1994, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains a very simple stand-alone application that inserts - * user-supplied text as a COM (comment) marker in a JFIF file. - * This may be useful as an example of the minimum logic needed to parse - * JPEG markers. - */ - -#define JPEG_CJPEG_DJPEG /* to get the command-line config symbols */ -#include "jinclude.h" /* get auto-config symbols, <stdio.h> */ - -#ifndef HAVE_STDLIB_H /* <stdlib.h> should declare malloc() */ -extern void * malloc (); -#endif -#include <ctype.h> /* to declare isupper(), tolower() */ -#ifdef USE_SETMODE -#include <fcntl.h> /* to declare setmode()'s parameter macros */ -/* If you have setmode() but not <io.h>, just delete this line: */ -#include <io.h> /* to declare setmode() */ -#endif - -#ifdef USE_CCOMMAND /* command-line reader for Macintosh */ -#ifdef __MWERKS__ -#include <SIOUX.h> /* Metrowerks declares it here */ -#endif -#ifdef THINK_C -#include <console.h> /* Think declares it here */ -#endif -#endif - -#ifdef DONT_USE_B_MODE /* define mode parameters for fopen() */ -#define READ_BINARY "r" -#define WRITE_BINARY "w" -#else -#define READ_BINARY "rb" -#define WRITE_BINARY "wb" -#endif - -#ifndef EXIT_FAILURE /* define exit() codes if not provided */ -#define EXIT_FAILURE 1 -#endif -#ifndef EXIT_SUCCESS -#ifdef VMS -#define EXIT_SUCCESS 1 /* VMS is very nonstandard */ -#else -#define EXIT_SUCCESS 0 -#endif -#endif - -/* Reduce this value if your malloc() can't allocate blocks up to 64K. - * On DOS, compiling in large model is usually a better solution. - */ - -#ifndef MAX_COM_LENGTH -#define MAX_COM_LENGTH 65000 /* must be < 65534 in any case */ -#endif - - -/* - * These macros are used to read the input file and write the output file. - * To reuse this code in another application, you might need to change these. - */ - -static FILE * infile; /* input JPEG file */ - -/* Return next input byte, or EOF if no more */ -#define NEXTBYTE() getc(infile) - -static FILE * outfile; /* output JPEG file */ - -/* Emit an output byte */ -#define PUTBYTE(x) putc((x), outfile) - - -/* Error exit handler */ -#define ERREXIT(msg) (fprintf(stderr, "%s\n", msg), exit(EXIT_FAILURE)) - - -/* Read one byte, testing for EOF */ -static int -read_1_byte (void) -{ - int c; - - c = NEXTBYTE(); - if (c == EOF) - ERREXIT("Premature EOF in JPEG file"); - return c; -} - -/* Read 2 bytes, convert to unsigned int */ -/* All 2-byte quantities in JPEG markers are MSB first */ -static unsigned int -read_2_bytes (void) -{ - int c1, c2; - - c1 = NEXTBYTE(); - if (c1 == EOF) - ERREXIT("Premature EOF in JPEG file"); - c2 = NEXTBYTE(); - if (c2 == EOF) - ERREXIT("Premature EOF in JPEG file"); - return (((unsigned int) c1) << 8) + ((unsigned int) c2); -} - - -/* Routines to write data to output file */ - -static void -write_1_byte (int c) -{ - PUTBYTE(c); -} - -static void -write_2_bytes (unsigned int val) -{ - PUTBYTE((val >> 8) & 0xFF); - PUTBYTE(val & 0xFF); -} - -static void -write_marker (int marker) -{ - PUTBYTE(0xFF); - PUTBYTE(marker); -} - -static void -copy_rest_of_file (void) -{ - int c; - - while ((c = NEXTBYTE()) != EOF) - PUTBYTE(c); -} - - -/* - * JPEG markers consist of one or more 0xFF bytes, followed by a marker - * code byte (which is not an FF). Here are the marker codes of interest - * in this program. (See jdmarker.c for a more complete list.) - */ - -#define M_SOF0 0xC0 /* Start Of Frame N */ -#define M_SOF1 0xC1 /* N indicates which compression process */ -#define M_SOF2 0xC2 /* Only SOF0 and SOF1 are now in common use */ -#define M_SOF3 0xC3 -#define M_SOF5 0xC5 -#define M_SOF6 0xC6 -#define M_SOF7 0xC7 -#define M_SOF9 0xC9 -#define M_SOF10 0xCA -#define M_SOF11 0xCB -#define M_SOF13 0xCD -#define M_SOF14 0xCE -#define M_SOF15 0xCF -#define M_SOI 0xD8 /* Start Of Image (beginning of datastream) */ -#define M_EOI 0xD9 /* End Of Image (end of datastream) */ -#define M_SOS 0xDA /* Start Of Scan (begins compressed data) */ -#define M_COM 0xFE /* COMment */ - - -/* - * Find the next JPEG marker and return its marker code. - * We expect at least one FF byte, possibly more if the compressor used FFs - * to pad the file. (Padding FFs will NOT be replicated in the output file.) - * There could also be non-FF garbage between markers. The treatment of such - * garbage is unspecified; we choose to skip over it but emit a warning msg. - * NB: this routine must not be used after seeing SOS marker, since it will - * not deal correctly with FF/00 sequences in the compressed image data... - */ - -static int -next_marker (void) -{ - int c; - int discarded_bytes = 0; - - /* Find 0xFF byte; count and skip any non-FFs. */ - c = read_1_byte(); - while (c != 0xFF) { - discarded_bytes++; - c = read_1_byte(); - } - /* Get marker code byte, swallowing any duplicate FF bytes. Extra FFs - * are legal as pad bytes, so don't count them in discarded_bytes. - */ - do { - c = read_1_byte(); - } while (c == 0xFF); - - if (discarded_bytes != 0) { - fprintf(stderr, "Warning: garbage data found in JPEG file\n"); - } - - return c; -} - - -/* - * Read the initial marker, which should be SOI. - * For a JFIF file, the first two bytes of the file should be literally - * 0xFF M_SOI. To be more general, we could use next_marker, but if the - * input file weren't actually JPEG at all, next_marker might read the whole - * file and then return a misleading error message... - */ - -static int -first_marker (void) -{ - int c1, c2; - - c1 = NEXTBYTE(); - c2 = NEXTBYTE(); - if (c1 != 0xFF || c2 != M_SOI) - ERREXIT("Not a JPEG file"); - return c2; -} - - -/* - * Most types of marker are followed by a variable-length parameter segment. - * This routine skips over the parameters for any marker we don't otherwise - * want to process. - * Note that we MUST skip the parameter segment explicitly in order not to - * be fooled by 0xFF bytes that might appear within the parameter segment; - * such bytes do NOT introduce new markers. - */ - -static void -copy_variable (void) -/* Copy an unknown or uninteresting variable-length marker */ -{ - unsigned int length; - - /* Get the marker parameter length count */ - length = read_2_bytes(); - write_2_bytes(length); - /* Length includes itself, so must be at least 2 */ - if (length < 2) - ERREXIT("Erroneous JPEG marker length"); - length -= 2; - /* Skip over the remaining bytes */ - while (length > 0) { - write_1_byte(read_1_byte()); - length--; - } -} - -static void -skip_variable (void) -/* Skip over an unknown or uninteresting variable-length marker */ -{ - unsigned int length; - - /* Get the marker parameter length count */ - length = read_2_bytes(); - /* Length includes itself, so must be at least 2 */ - if (length < 2) - ERREXIT("Erroneous JPEG marker length"); - length -= 2; - /* Skip over the remaining bytes */ - while (length > 0) { - (void) read_1_byte(); - length--; - } -} - - -/* - * Parse the marker stream until SOFn or EOI is seen; - * copy data to output, but discard COM markers unless keep_COM is true. - */ - -static int -scan_JPEG_header (int keep_COM) -{ - int marker; - - /* Expect SOI at start of file */ - if (first_marker() != M_SOI) - ERREXIT("Expected SOI marker first"); - write_marker(M_SOI); - - /* Scan miscellaneous markers until we reach SOFn. */ - for (;;) { - marker = next_marker(); - switch (marker) { - case M_SOF0: /* Baseline */ - case M_SOF1: /* Extended sequential, Huffman */ - case M_SOF2: /* Progressive, Huffman */ - case M_SOF3: /* Lossless, Huffman */ - case M_SOF5: /* Differential sequential, Huffman */ - case M_SOF6: /* Differential progressive, Huffman */ - case M_SOF7: /* Differential lossless, Huffman */ - case M_SOF9: /* Extended sequential, arithmetic */ - case M_SOF10: /* Progressive, arithmetic */ - case M_SOF11: /* Lossless, arithmetic */ - case M_SOF13: /* Differential sequential, arithmetic */ - case M_SOF14: /* Differential progressive, arithmetic */ - case M_SOF15: /* Differential lossless, arithmetic */ - return marker; - - case M_SOS: /* should not see compressed data before SOF */ - ERREXIT("SOS without prior SOFn"); - break; - - case M_EOI: /* in case it's a tables-only JPEG stream */ - return marker; - - case M_COM: /* Existing COM: conditionally discard */ - if (keep_COM) { - write_marker(marker); - copy_variable(); - } else { - skip_variable(); - } - break; - - default: /* Anything else just gets copied */ - write_marker(marker); - copy_variable(); /* we assume it has a parameter count... */ - break; - } - } /* end loop */ -} - - -/* Command line parsing code */ - -static const char * progname; /* program name for error messages */ - - -static void -usage (void) -/* complain about bad command line */ -{ - fprintf(stderr, "wrjpgcom inserts a textual comment in a JPEG file.\n"); - fprintf(stderr, "You can add to or replace any existing comment(s).\n"); - - fprintf(stderr, "Usage: %s [switches] ", progname); -#ifdef TWO_FILE_COMMANDLINE - fprintf(stderr, "inputfile outputfile\n"); -#else - fprintf(stderr, "[inputfile]\n"); -#endif - - fprintf(stderr, "Switches (names may be abbreviated):\n"); - fprintf(stderr, " -replace Delete any existing comments\n"); - fprintf(stderr, " -comment \"text\" Insert comment with given text\n"); - fprintf(stderr, " -cfile name Read comment from named file\n"); - fprintf(stderr, "Notice that you must put quotes around the comment text\n"); - fprintf(stderr, "when you use -comment.\n"); - fprintf(stderr, "If you do not give either -comment or -cfile on the command line,\n"); - fprintf(stderr, "then the comment text is read from standard input.\n"); - fprintf(stderr, "It can be multiple lines, up to %u characters total.\n", - (unsigned int) MAX_COM_LENGTH); -#ifndef TWO_FILE_COMMANDLINE - fprintf(stderr, "You must specify an input JPEG file name when supplying\n"); - fprintf(stderr, "comment text from standard input.\n"); -#endif - - exit(EXIT_FAILURE); -} - - -static int -keymatch (char * arg, const char * keyword, int minchars) -/* Case-insensitive matching of (possibly abbreviated) keyword switches. */ -/* keyword is the constant keyword (must be lower case already), */ -/* minchars is length of minimum legal abbreviation. */ -{ - register int ca, ck; - register int nmatched = 0; - - while ((ca = *arg++) != '\0') { - if ((ck = *keyword++) == '\0') - return 0; /* arg longer than keyword, no good */ - if (isupper(ca)) /* force arg to lcase (assume ck is already) */ - ca = tolower(ca); - if (ca != ck) - return 0; /* no good */ - nmatched++; /* count matched characters */ - } - /* reached end of argument; fail if it's too short for unique abbrev */ - if (nmatched < minchars) - return 0; - return 1; /* A-OK */ -} - - -/* - * The main program. - */ - -int -main (int argc, char **argv) -{ - int argn; - char * arg; - int keep_COM = 1; - char * comment_arg = NULL; - FILE * comment_file = NULL; - unsigned int comment_length = 0; - int marker; - - /* On Mac, fetch a command line. */ -#ifdef USE_CCOMMAND - argc = ccommand(&argv); -#endif - - progname = argv[0]; - if (progname == NULL || progname[0] == 0) - progname = "wrjpgcom"; /* in case C library doesn't provide it */ - - /* Parse switches, if any */ - for (argn = 1; argn < argc; argn++) { - arg = argv[argn]; - if (arg[0] != '-') - break; /* not switch, must be file name */ - arg++; /* advance over '-' */ - if (keymatch(arg, "replace", 1)) { - keep_COM = 0; - } else if (keymatch(arg, "cfile", 2)) { - if (++argn >= argc) usage(); - if ((comment_file = fopen(argv[argn], "r")) == NULL) { - fprintf(stderr, "%s: can't open %s\n", progname, argv[argn]); - exit(EXIT_FAILURE); - } - } else if (keymatch(arg, "comment", 1)) { - if (++argn >= argc) usage(); - comment_arg = argv[argn]; - /* If the comment text starts with '"', then we are probably running - * under MS-DOG and must parse out the quoted string ourselves. Sigh. - */ - if (comment_arg[0] == '"') { - comment_arg = (char *) malloc((size_t) MAX_COM_LENGTH); - if (comment_arg == NULL) - ERREXIT("Insufficient memory"); - strcpy(comment_arg, argv[argn]+1); - for (;;) { - comment_length = strlen(comment_arg); - if (comment_length > 0 && comment_arg[comment_length-1] == '"') { - comment_arg[comment_length-1] = '\0'; /* zap terminating quote */ - break; - } - if (++argn >= argc) - ERREXIT("Missing ending quote mark"); - strcat(comment_arg, " "); - strcat(comment_arg, argv[argn]); - } - } - comment_length = strlen(comment_arg); - } else - usage(); - } - - /* Cannot use both -comment and -cfile. */ - if (comment_arg != NULL && comment_file != NULL) - usage(); - /* If there is neither -comment nor -cfile, we will read the comment text - * from stdin; in this case there MUST be an input JPEG file name. - */ - if (comment_arg == NULL && comment_file == NULL && argn >= argc) - usage(); - - /* Open the input file. */ - if (argn < argc) { - if ((infile = fopen(argv[argn], READ_BINARY)) == NULL) { - fprintf(stderr, "%s: can't open %s\n", progname, argv[argn]); - exit(EXIT_FAILURE); - } - } else { - /* default input file is stdin */ -#ifdef USE_SETMODE /* need to hack file mode? */ - setmode(fileno(stdin), O_BINARY); -#endif -#ifdef USE_FDOPEN /* need to re-open in binary mode? */ - if ((infile = fdopen(fileno(stdin), READ_BINARY)) == NULL) { - fprintf(stderr, "%s: can't open stdin\n", progname); - exit(EXIT_FAILURE); - } -#else - infile = stdin; -#endif - } - - /* Open the output file. */ -#ifdef TWO_FILE_COMMANDLINE - /* Must have explicit output file name */ - if (argn != argc-2) { - fprintf(stderr, "%s: must name one input and one output file\n", - progname); - usage(); - } - if ((outfile = fopen(argv[argn+1], WRITE_BINARY)) == NULL) { - fprintf(stderr, "%s: can't open %s\n", progname, argv[argn+1]); - exit(EXIT_FAILURE); - } -#else - /* Unix style: expect zero or one file name */ - if (argn < argc-1) { - fprintf(stderr, "%s: only one input file\n", progname); - usage(); - } - /* default output file is stdout */ -#ifdef USE_SETMODE /* need to hack file mode? */ - setmode(fileno(stdout), O_BINARY); -#endif -#ifdef USE_FDOPEN /* need to re-open in binary mode? */ - if ((outfile = fdopen(fileno(stdout), WRITE_BINARY)) == NULL) { - fprintf(stderr, "%s: can't open stdout\n", progname); - exit(EXIT_FAILURE); - } -#else - outfile = stdout; -#endif -#endif /* TWO_FILE_COMMANDLINE */ - - /* Collect comment text from comment_file or stdin, if necessary */ - if (comment_arg == NULL) { - FILE * src_file; - int c; - - comment_arg = (char *) malloc((size_t) MAX_COM_LENGTH); - if (comment_arg == NULL) - ERREXIT("Insufficient memory"); - comment_length = 0; - src_file = (comment_file != NULL ? comment_file : stdin); - while ((c = getc(src_file)) != EOF) { - if (comment_length >= (unsigned int) MAX_COM_LENGTH) { - fprintf(stderr, "Comment text may not exceed %u bytes\n", - (unsigned int) MAX_COM_LENGTH); - exit(EXIT_FAILURE); - } - comment_arg[comment_length++] = (char) c; - } - if (comment_file != NULL) - fclose(comment_file); - } - - /* Copy JPEG headers until SOFn marker; - * we will insert the new comment marker just before SOFn. - * This (a) causes the new comment to appear after, rather than before, - * existing comments; and (b) ensures that comments come after any JFIF - * or JFXX markers, as required by the JFIF specification. - */ - marker = scan_JPEG_header(keep_COM); - /* Insert the new COM marker, but only if nonempty text has been supplied */ - if (comment_length > 0) { - write_marker(M_COM); - write_2_bytes(comment_length + 2); - while (comment_length > 0) { - write_1_byte(*comment_arg++); - comment_length--; - } - } - /* Duplicate the remainder of the source file. - * Note that any COM markers occuring after SOF will not be touched. - */ - write_marker(marker); - copy_rest_of_file(); - - /* All done. */ - exit(EXIT_SUCCESS); - return 0; /* suppress no-return-value warnings */ -} diff --git a/jpeg/wrppm.c b/jpeg/wrppm.c deleted file mode 100644 index 4f7a2cb43a..0000000000 --- a/jpeg/wrppm.c +++ /dev/null @@ -1,248 +0,0 @@ -/* - * wrppm.c - * - * Copyright (C) 1991-1994, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains routines to write output images in PPM/PGM format. - * The PBMPLUS library is NOT required to compile this software - * (but it is highly useful as a set of PPM image manipulation programs). - * - * These routines may need modification for non-Unix environments or - * specialized applications. As they stand, they assume output to - * an ordinary stdio stream. - */ - -#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ - -#ifdef PPM_SUPPORTED - - -/* - * Currently, this code only knows how to write raw PPM or PGM format, - * which can be no more than 8 bits/sample. As an expedient for testing - * 12-bit JPEG mode, we support writing 12-bit data to an 8-bit file by - * downscaling the values. Of course this implies loss of precision. - * (When the core library supports data precision reduction, a cleaner - * implementation will be to ask for that instead.) - */ - -#if BITS_IN_JSAMPLE == 8 -#define DOWNSCALE(x) (x) -#else -#define DOWNSCALE(x) ((x) >> (BITS_IN_JSAMPLE-8)) -#endif - - -/* - * When JSAMPLE is the same size as char, we can just fwrite() the - * decompressed data to the PPM or PGM file. On PCs, in order to make this - * work the output buffer must be allocated in near data space, because we are - * assuming small-data memory model wherein fwrite() can't reach far memory. - * If you need to process very wide images on a PC, you might have to compile - * in large-memory model, or else replace fwrite() with a putc() loop --- - * which will be much slower. - */ - - -/* Private version of data destination object */ - -typedef struct { - struct djpeg_dest_struct pub; /* public fields */ - - /* Usually these two pointers point to the same place: */ - char *iobuffer; /* fwrite's I/O buffer */ - JSAMPROW pixrow; /* decompressor output buffer */ - - JDIMENSION buffer_width; /* width of one row */ -} ppm_dest_struct; - -typedef ppm_dest_struct * ppm_dest_ptr; - - -/* - * Write some pixel data. - * In this module rows_supplied will always be 1. - * - * put_pixel_rows handles the "normal" 8-bit case where the decompressor - * output buffer is physically the same as the fwrite buffer. - */ - -METHODDEF void -put_pixel_rows (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo, - JDIMENSION rows_supplied) -{ - ppm_dest_ptr dest = (ppm_dest_ptr) dinfo; - - (void) JFWRITE(dest->pub.output_file, dest->iobuffer, dest->buffer_width); -} - - -/* - * This code is used when we have to copy the data because JSAMPLE is not - * the same size as char. Typically this only happens in 12-bit mode. - */ - -METHODDEF void -copy_pixel_rows (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo, - JDIMENSION rows_supplied) -{ - ppm_dest_ptr dest = (ppm_dest_ptr) dinfo; - register char * bufferptr; - register JSAMPROW ptr; - register JDIMENSION col; - - ptr = dest->pub.buffer[0]; - bufferptr = dest->iobuffer; - for (col = dest->buffer_width; col > 0; col--) { - *bufferptr++ = (char) DOWNSCALE(GETJSAMPLE(*ptr++)); - } - (void) JFWRITE(dest->pub.output_file, dest->iobuffer, dest->buffer_width); -} - - -/* - * Write some pixel data when color quantization is in effect. - * We have to demap the color index values to straight data. - */ - -METHODDEF void -put_demapped_rgb (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo, - JDIMENSION rows_supplied) -{ - ppm_dest_ptr dest = (ppm_dest_ptr) dinfo; - register char * bufferptr; - register int pixval; - register JSAMPROW ptr; - register JSAMPROW color_map0 = cinfo->colormap[0]; - register JSAMPROW color_map1 = cinfo->colormap[1]; - register JSAMPROW color_map2 = cinfo->colormap[2]; - register JDIMENSION col; - - ptr = dest->pub.buffer[0]; - bufferptr = dest->iobuffer; - for (col = cinfo->output_width; col > 0; col--) { - pixval = GETJSAMPLE(*ptr++); - *bufferptr++ = (char) DOWNSCALE(GETJSAMPLE(color_map0[pixval])); - *bufferptr++ = (char) DOWNSCALE(GETJSAMPLE(color_map1[pixval])); - *bufferptr++ = (char) DOWNSCALE(GETJSAMPLE(color_map2[pixval])); - } - (void) JFWRITE(dest->pub.output_file, dest->iobuffer, dest->buffer_width); -} - - -METHODDEF void -put_demapped_gray (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo, - JDIMENSION rows_supplied) -{ - ppm_dest_ptr dest = (ppm_dest_ptr) dinfo; - register char * bufferptr; - register JSAMPROW ptr; - register JSAMPROW color_map = cinfo->colormap[0]; - register JDIMENSION col; - - ptr = dest->pub.buffer[0]; - bufferptr = dest->iobuffer; - for (col = cinfo->output_width; col > 0; col--) { - *bufferptr++ = (char) DOWNSCALE(GETJSAMPLE(color_map[GETJSAMPLE(*ptr++)])); - } - (void) JFWRITE(dest->pub.output_file, dest->iobuffer, dest->buffer_width); -} - - -/* - * Startup: write the file header. - */ - -METHODDEF void -start_output_ppm (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo) -{ - ppm_dest_ptr dest = (ppm_dest_ptr) dinfo; - - /* Emit file header */ - switch (cinfo->out_color_space) { - case JCS_GRAYSCALE: - /* emit header for raw PGM format */ - fprintf(dest->pub.output_file, "P5\n%ld %ld\n%d\n", - (long) cinfo->output_width, (long) cinfo->output_height, 255); - break; - case JCS_RGB: - /* emit header for raw PPM format */ - fprintf(dest->pub.output_file, "P6\n%ld %ld\n%d\n", - (long) cinfo->output_width, (long) cinfo->output_height, 255); - break; - default: - ERREXIT(cinfo, JERR_PPM_COLORSPACE); - } -} - - -/* - * Finish up at the end of the file. - */ - -METHODDEF void -finish_output_ppm (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo) -{ - /* Make sure we wrote the output file OK */ - fflush(dinfo->output_file); - if (ferror(dinfo->output_file)) - ERREXIT(cinfo, JERR_FILE_WRITE); -} - - -/* - * The module selection routine for PPM format output. - */ - -GLOBAL djpeg_dest_ptr -jinit_write_ppm (j_decompress_ptr cinfo) -{ - ppm_dest_ptr dest; - - /* Create module interface object, fill in method pointers */ - dest = (ppm_dest_ptr) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - SIZEOF(ppm_dest_struct)); - dest->pub.start_output = start_output_ppm; - dest->pub.finish_output = finish_output_ppm; - - /* Calculate output image dimensions so we can allocate space */ - jpeg_calc_output_dimensions(cinfo); - - /* Create physical I/O buffer. Note we make this near on a PC. */ - dest->buffer_width = cinfo->output_width * cinfo->out_color_components; - dest->iobuffer = (char *) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - (size_t) (dest->buffer_width * SIZEOF(char))); - - if (cinfo->quantize_colors || SIZEOF(JSAMPLE) != SIZEOF(char)) { - /* When quantizing, we need an output buffer for colormap indexes - * that's separate from the physical I/O buffer. We also need a - * separate buffer if JSAMPLE and char are not the same size. - */ - dest->pub.buffer = (*cinfo->mem->alloc_sarray) - ((j_common_ptr) cinfo, JPOOL_IMAGE, - cinfo->output_width * cinfo->output_components, (JDIMENSION) 1); - dest->pub.buffer_height = 1; - if (! cinfo->quantize_colors) - dest->pub.put_pixel_rows = copy_pixel_rows; - else if (cinfo->out_color_space == JCS_GRAYSCALE) - dest->pub.put_pixel_rows = put_demapped_gray; - else - dest->pub.put_pixel_rows = put_demapped_rgb; - } else { - /* We will fwrite() directly from decompressor output buffer. */ - /* Synthesize a JSAMPARRAY pointer structure */ - /* Cast here implies near->far pointer conversion on PCs */ - dest->pixrow = (JSAMPROW) dest->iobuffer; - dest->pub.buffer = & dest->pixrow; - dest->pub.buffer_height = 1; - dest->pub.put_pixel_rows = put_pixel_rows; - } - - return (djpeg_dest_ptr) dest; -} - -#endif /* PPM_SUPPORTED */ diff --git a/jpeg/wrraw.c b/jpeg/wrraw.c deleted file mode 100644 index d54e3d5072..0000000000 --- a/jpeg/wrraw.c +++ /dev/null @@ -1,189 +0,0 @@ -/* - * wrraw.c - * - * Copyright (C) 1991-1994, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains routines to write output the raw YCC subsampled data - * read from the jpeg file. - * - * These routines may need modification for non-Unix environments or - * specialized applications. As they stand, they assume output to - * an ordinary stdio stream. - * - * Based on code contributed by James Arthur Boucher - */ - -#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ - - -#ifdef RAW_SUPPORTED - - -/* - * Haven't yet got around to making this work with text-format output, - * hence cannot handle pixels wider than 8 bits. - */ - -#if BITS_IN_JSAMPLE != 8 - Sorry, this code only copes with 8-bit JSAMPLEs. /* deliberate syntax err */ -#endif - -/* - * - * The output buffer needs to be writable by fwrite(). On PCs, we must - * allocate the buffer in near data space, because we are assuming small-data - * memory model, wherein fwrite() can't reach far memory. If you need to - * process very wide images on a PC, you might have to compile in large-memory - * model, or else replace fwrite() with a putc() loop --- which will be much - * slower. - */ - - -/* Private version of data destination object */ - -typedef struct { - struct djpeg_dest_struct pub; /* public fields */ - - JSAMPLE *iobuffer; /* non-FAR pointer to I/O buffer */ - JSAMPROW pixrow; /* FAR pointer to same */ - JDIMENSION buffer_width; /* width of one row */ -} raw_dest_struct; - -typedef raw_dest_struct * raw_dest_ptr; - - -/* - * Write some pixel data. In this module rows_supplied can be variable - */ - -METHODDEF void -put_pixel_rows (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo, - JDIMENSION rows_supplied) -{ - raw_dest_ptr dest = (raw_dest_ptr) dinfo; - int ci,cp; - JDIMENSION ncols,nrows; - jpeg_component_info *compptr; - - TRACEMS(cinfo,2,JERR_RAW_PPR); - for(cp=0,compptr = cinfo->comp_info; cp <cinfo->num_components; - cp++,compptr++){ - ncols = (JDIMENSION)((cinfo->image_width*compptr->h_samp_factor)/ - cinfo->max_h_samp_factor); - nrows = (JDIMENSION)((rows_supplied*compptr->v_samp_factor)/ - cinfo->max_v_samp_factor); - - for(ci =0;ci<nrows;ci++){ - TRACEMS1(cinfo,3,JTRC_RAW_PUTROW,ci); -(void) JFWRITE(dest->pub.output_file, dest->pub.image_buffer[cp][ci], - ncols); - } -} - TRACEMS(cinfo,2,JTRC_RAW_PUTEND); - -} - - - -/* - * Startup: write null header. - */ - -METHODDEF void -start_output (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo) -{ /* do nothing*/ -} - - -/* - * Finish up at the end of the file. - */ - -METHODDEF void -finish_output (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo) -{ - /* Make sure we wrote the output file OK */ - fflush(dinfo->output_file); - if (ferror(dinfo->output_file)) - ERREXIT(cinfo, JERR_FILE_WRITE); -} - - -/* - * The module selection routine for raw format output. - */ - -GLOBAL djpeg_dest_ptr -jinit_write_raw (j_decompress_ptr cinfo) -{ - raw_dest_ptr dest; - int cp; - JDIMENSION ncols,nrows; - jpeg_component_info *compptr; - int temp; - int h_samp[3],v_samp[3]; - - TRACEMS(cinfo,1,JTRC_RAW_INIT); - - cinfo->out_color_space = JCS_YCbCr; /* We want YCbCr or YUV output */ - cinfo->want_raw_output = TRUE; /* boolean used in main and api */ - - /* This module does not work unless JSAMPLE is a char. */ - /* Unfortunately, we can't test it at compile time. */ - if (SIZEOF(JSAMPLE) != SIZEOF(char)) - ERREXIT(cinfo, JERR_RAW_SAMPLESIZE); - - /* Create module interface object, fill in method pointers */ - dest = (raw_dest_ptr) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - SIZEOF(raw_dest_struct)); - - dest->pub.start_output = start_output; - dest->pub.finish_output = finish_output; - - /* Calculate output image dimensions so we can allocate space */ - jpeg_calc_output_dimensions(cinfo); - - /* Create I/O buffer. Note we make this near on a PC. */ - dest->buffer_width = (cinfo->output_width); - -/* calculate max_h(v)_samp_factors since not done yet */ -for(cp=0,compptr = cinfo->comp_info;cp<cinfo->num_components; - cp++,compptr++){ - h_samp[cp] = compptr->h_samp_factor; - v_samp[cp] = compptr->v_samp_factor; - } - /* assumes three components */ - temp = (h_samp[0]<h_samp[1]) ? h_samp[1] : h_samp[0]; - cinfo->max_h_samp_factor = (temp<h_samp[2]) ? h_samp[2]:temp; - temp = (v_samp[0]<v_samp[1]) ? v_samp[1]:v_samp[0]; - cinfo->max_v_samp_factor = (temp<v_samp[2]) ? v_samp[2]:temp; - -/* chose to make buffer up to 8 rows high, 2 and 4 also valid */ - dest->pub.buffer_height = 8; - - -/* allocate sample arrays for each component */ - for(cp=0,compptr = cinfo->comp_info;cp<cinfo->num_components; - cp++,compptr++){ - - ncols = (JDIMENSION)((cinfo->image_width*compptr->h_samp_factor)/ - cinfo->max_h_samp_factor); - - nrows = (JDIMENSION)((dest->pub.buffer_height*compptr->v_samp_factor)/ - cinfo->max_v_samp_factor); - - dest->pub.image_buffer[cp] = (*cinfo->mem->alloc_sarray)((j_common_ptr) - cinfo,JPOOL_IMAGE,ncols,nrows); - } - - - dest->pub.put_pixel_rows = put_pixel_rows; - TRACEMS(cinfo,1,JTRC_RAW_IEND); - - return (djpeg_dest_ptr) dest; -} - -#endif /* RAW_SUPPORTED */ diff --git a/jpeg/wrrle.c b/jpeg/wrrle.c deleted file mode 100644 index c0dae01a11..0000000000 --- a/jpeg/wrrle.c +++ /dev/null @@ -1,302 +0,0 @@ -/* - * wrrle.c - * - * Copyright (C) 1991-1994, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains routines to write output images in RLE format. - * The Utah Raster Toolkit library is required (version 3.1 or later). - * - * These routines may need modification for non-Unix environments or - * specialized applications. As they stand, they assume output to - * an ordinary stdio stream. - * - * Based on code contributed by Mike Lijewski, - * with updates from Robert Hutchinson. - */ - -#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ - -#ifdef RLE_SUPPORTED - -/* rle.h is provided by the Utah Raster Toolkit. */ - -#include <rle.h> - -/* - * We assume that JSAMPLE has the same representation as rle_pixel, - * to wit, "unsigned char". Hence we can't cope with 12- or 16-bit samples. - */ - -#if BITS_IN_JSAMPLE != 8 - Sorry, this code only copes with 8-bit JSAMPLEs. /* deliberate syntax err */ -#endif - - -/* - * Since RLE stores scanlines bottom-to-top, we have to invert the image - * from JPEG's top-to-bottom order. To do this, we save the outgoing data - * in a virtual array during put_pixel_row calls, then actually emit the - * RLE file during finish_output. - */ - - -/* - * For now, if we emit an RLE color map then it is always 256 entries long, - * though not all of the entries need be used. - */ - -#define CMAPBITS 8 -#define CMAPLENGTH (1<<(CMAPBITS)) - -typedef struct { - struct djpeg_dest_struct pub; /* public fields */ - - jvirt_sarray_ptr image; /* virtual array to store the output image */ - rle_map *colormap; /* RLE-style color map, or NULL if none */ - rle_pixel **rle_row; /* To pass rows to rle_putrow() */ - -} rle_dest_struct; - -typedef rle_dest_struct * rle_dest_ptr; - -/* Forward declarations */ -METHODDEF void rle_put_pixel_rows - JPP((j_decompress_ptr cinfo, djpeg_dest_ptr dinfo, - JDIMENSION rows_supplied)); - - -/* - * Write the file header. - * - * In this module it's easier to wait till finish_output to write anything. - */ - -METHODDEF void -start_output_rle (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo) -{ - rle_dest_ptr dest = (rle_dest_ptr) dinfo; - size_t cmapsize; - int i, ci; -#ifdef PROGRESS_REPORT - cd_progress_ptr progress = (cd_progress_ptr) cinfo->progress; -#endif - - /* - * Make sure the image can be stored in RLE format. - * - * - RLE stores image dimensions as *signed* 16 bit integers. JPEG - * uses unsigned, so we have to check the width. - * - * - Colorspace is expected to be grayscale or RGB. - * - * - The number of channels (components) is expected to be 1 (grayscale/ - * pseudocolor) or 3 (truecolor/directcolor). - * (could be 2 or 4 if using an alpha channel, but we aren't) - */ - - if (cinfo->output_width > 32767 || cinfo->output_height > 32767) - ERREXIT2(cinfo, JERR_RLE_DIMENSIONS, cinfo->output_width, - cinfo->output_height); - - if (cinfo->out_color_space != JCS_GRAYSCALE && - cinfo->out_color_space != JCS_RGB) - ERREXIT(cinfo, JERR_RLE_COLORSPACE); - - if (cinfo->output_components != 1 && cinfo->output_components != 3) - ERREXIT1(cinfo, JERR_RLE_TOOMANYCHANNELS, cinfo->num_components); - - /* Convert colormap, if any, to RLE format. */ - - dest->colormap = NULL; - - if (cinfo->quantize_colors) { - /* Allocate storage for RLE-style cmap, zero any extra entries */ - cmapsize = cinfo->out_color_components * CMAPLENGTH * SIZEOF(rle_map); - dest->colormap = (rle_map *) (*cinfo->mem->alloc_small) - ((j_common_ptr) cinfo, JPOOL_IMAGE, cmapsize); - MEMZERO(dest->colormap, cmapsize); - - /* Save away data in RLE format --- note 8-bit left shift! */ - /* Shifting would need adjustment for JSAMPLEs wider than 8 bits. */ - for (ci = 0; ci < cinfo->out_color_components; ci++) { - for (i = 0; i < cinfo->actual_number_of_colors; i++) { - dest->colormap[ci * CMAPLENGTH + i] = - GETJSAMPLE(cinfo->colormap[ci][i]) << 8; - } - } - } - - /* Set the output buffer to the first row */ - dest->pub.buffer = (*cinfo->mem->access_virt_sarray) - ((j_common_ptr) cinfo, dest->image, (JDIMENSION) 0, TRUE); - dest->pub.buffer_height = 1; - - dest->pub.put_pixel_rows = rle_put_pixel_rows; - -#ifdef PROGRESS_REPORT - if (progress != NULL) { - progress->total_extra_passes++; /* count file writing as separate pass */ - } -#endif -} - - -/* - * Write some pixel data. - * - * This routine just saves the data away in a virtual array. - */ - -METHODDEF void -rle_put_pixel_rows (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo, - JDIMENSION rows_supplied) -{ - rle_dest_ptr dest = (rle_dest_ptr) dinfo; - - if (cinfo->output_scanline < cinfo->output_height) { - dest->pub.buffer = (*cinfo->mem->access_virt_sarray) - ((j_common_ptr) cinfo, dest->image, cinfo->output_scanline, TRUE); - } -} - -/* - * Finish up at the end of the file. - * - * Here is where we really output the RLE file. - */ - -METHODDEF void -finish_output_rle (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo) -{ - rle_dest_ptr dest = (rle_dest_ptr) dinfo; - rle_hdr header; /* Output file information */ - rle_pixel **rle_row, *red, *green, *blue; - JSAMPROW output_row; - char cmapcomment[80]; - int row, col; - int ci; -#ifdef PROGRESS_REPORT - cd_progress_ptr progress = (cd_progress_ptr) cinfo->progress; -#endif - - /* Initialize the header info */ - header = *rle_hdr_init(NULL); - header.rle_file = dest->pub.output_file; - header.xmin = 0; - header.xmax = cinfo->output_width - 1; - header.ymin = 0; - header.ymax = cinfo->output_height - 1; - header.alpha = 0; - header.ncolors = cinfo->output_components; - for (ci = 0; ci < cinfo->output_components; ci++) { - RLE_SET_BIT(header, ci); - } - if (cinfo->quantize_colors) { - header.ncmap = cinfo->out_color_components; - header.cmaplen = CMAPBITS; - header.cmap = dest->colormap; - /* Add a comment to the output image with the true colormap length. */ - sprintf(cmapcomment, "color_map_length=%d", cinfo->actual_number_of_colors); - rle_putcom(cmapcomment, &header); - } - - /* Emit the RLE header and color map (if any) */ - rle_put_setup(&header); - - /* Now output the RLE data from our virtual array. - * We assume here that (a) rle_pixel is represented the same as JSAMPLE, - * and (b) we are not on a machine where FAR pointers differ from regular. - */ - -#ifdef PROGRESS_REPORT - if (progress != NULL) { - progress->pub.pass_limit = cinfo->output_height; - progress->pub.pass_counter = 0; - (*progress->pub.progress_monitor) ((j_common_ptr) cinfo); - } -#endif - - if (cinfo->output_components == 1) { - for (row = cinfo->output_height-1; row >= 0; row--) { - rle_row = (rle_pixel **) (*cinfo->mem->access_virt_sarray) - ((j_common_ptr) cinfo, dest->image, (JDIMENSION) row, FALSE); - rle_putrow(rle_row, (int) cinfo->output_width, &header); -#ifdef PROGRESS_REPORT - if (progress != NULL) { - progress->pub.pass_counter++; - (*progress->pub.progress_monitor) ((j_common_ptr) cinfo); - } -#endif - } - } else { - for (row = cinfo->output_height-1; row >= 0; row--) { - rle_row = (rle_pixel **) dest->rle_row; - output_row = * (*cinfo->mem->access_virt_sarray) - ((j_common_ptr) cinfo, dest->image, (JDIMENSION) row, FALSE); - red = rle_row[0]; - green = rle_row[1]; - blue = rle_row[2]; - for (col = cinfo->output_width; col > 0; col--) { - *red++ = GETJSAMPLE(*output_row++); - *green++ = GETJSAMPLE(*output_row++); - *blue++ = GETJSAMPLE(*output_row++); - } - rle_putrow(rle_row, (int) cinfo->output_width, &header); -#ifdef PROGRESS_REPORT - if (progress != NULL) { - progress->pub.pass_counter++; - (*progress->pub.progress_monitor) ((j_common_ptr) cinfo); - } -#endif - } - } - -#ifdef PROGRESS_REPORT - if (progress != NULL) - progress->completed_extra_passes++; -#endif - - /* Emit file trailer */ - rle_puteof(&header); - fflush(dest->pub.output_file); - if (ferror(dest->pub.output_file)) - ERREXIT(cinfo, JERR_FILE_WRITE); -} - - -/* - * The module selection routine for RLE format output. - */ - -GLOBAL djpeg_dest_ptr -jinit_write_rle (j_decompress_ptr cinfo) -{ - rle_dest_ptr dest; - - /* Create module interface object, fill in method pointers */ - dest = (rle_dest_ptr) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - SIZEOF(rle_dest_struct)); - dest->pub.start_output = start_output_rle; - dest->pub.finish_output = finish_output_rle; - - /* Calculate output image dimensions so we can allocate space */ - jpeg_calc_output_dimensions(cinfo); - - /* Allocate a work array for output to the RLE library. */ - dest->rle_row = (*cinfo->mem->alloc_sarray) - ((j_common_ptr) cinfo, JPOOL_IMAGE, - cinfo->output_width, (JDIMENSION) cinfo->output_components); - - /* Allocate a virtual array to hold the image. */ - dest->image = (*cinfo->mem->request_virt_sarray) - ((j_common_ptr) cinfo, JPOOL_IMAGE, - (JDIMENSION) (cinfo->output_width * cinfo->output_components), - cinfo->output_height, (JDIMENSION) 1); - - return (djpeg_dest_ptr) dest; -} - -#endif /* RLE_SUPPORTED */ diff --git a/jpeg/wrtarga.c b/jpeg/wrtarga.c deleted file mode 100644 index 36987127b8..0000000000 --- a/jpeg/wrtarga.c +++ /dev/null @@ -1,253 +0,0 @@ -/* - * wrtarga.c - * - * Copyright (C) 1991-1994, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - * - * This file contains routines to write output images in Targa format. - * - * These routines may need modification for non-Unix environments or - * specialized applications. As they stand, they assume output to - * an ordinary stdio stream. - * - * Based on code contributed by Lee Daniel Crocker. - */ - -#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ - -#ifdef TARGA_SUPPORTED - - -/* - * To support 12-bit JPEG data, we'd have to scale output down to 8 bits. - * This is not yet implemented. - */ - -#if BITS_IN_JSAMPLE != 8 - Sorry, this code only copes with 8-bit JSAMPLEs. /* deliberate syntax err */ -#endif - -/* - * The output buffer needs to be writable by fwrite(). On PCs, we must - * allocate the buffer in near data space, because we are assuming small-data - * memory model, wherein fwrite() can't reach far memory. If you need to - * process very wide images on a PC, you might have to compile in large-memory - * model, or else replace fwrite() with a putc() loop --- which will be much - * slower. - */ - - -/* Private version of data destination object */ - -typedef struct { - struct djpeg_dest_struct pub; /* public fields */ - - char *iobuffer; /* physical I/O buffer */ - JDIMENSION buffer_width; /* width of one row */ -} tga_dest_struct; - -typedef tga_dest_struct * tga_dest_ptr; - - -LOCAL void -write_header (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo, int num_colors) -/* Create and write a Targa header */ -{ - char targaheader[18]; - - /* Set unused fields of header to 0 */ - MEMZERO(targaheader, SIZEOF(targaheader)); - - if (num_colors > 0) { - targaheader[1] = 1; /* color map type 1 */ - targaheader[5] = (char) (num_colors & 0xFF); - targaheader[6] = (char) (num_colors >> 8); - targaheader[7] = 24; /* 24 bits per cmap entry */ - } - - targaheader[12] = (char) (cinfo->output_width & 0xFF); - targaheader[13] = (char) (cinfo->output_width >> 8); - targaheader[14] = (char) (cinfo->output_height & 0xFF); - targaheader[15] = (char) (cinfo->output_height >> 8); - targaheader[17] = 0x20; /* Top-down, non-interlaced */ - - if (cinfo->out_color_space == JCS_GRAYSCALE) { - targaheader[2] = 3; /* image type = uncompressed gray-scale */ - targaheader[16] = 8; /* bits per pixel */ - } else { /* must be RGB */ - if (num_colors > 0) { - targaheader[2] = 1; /* image type = colormapped RGB */ - targaheader[16] = 8; - } else { - targaheader[2] = 2; /* image type = uncompressed RGB */ - targaheader[16] = 24; - } - } - - if (JFWRITE(dinfo->output_file, targaheader, 18) != (size_t) 18) - ERREXIT(cinfo, JERR_FILE_WRITE); -} - - -/* - * Write some pixel data. - * In this module rows_supplied will always be 1. - */ - -METHODDEF void -put_pixel_rows (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo, - JDIMENSION rows_supplied) -/* used for unquantized full-color output */ -{ - tga_dest_ptr dest = (tga_dest_ptr) dinfo; - register JSAMPROW inptr; - register char * outptr; - register JDIMENSION col; - - inptr = dest->pub.buffer[0]; - outptr = dest->iobuffer; - for (col = cinfo->output_width; col > 0; col--) { - outptr[0] = (char) GETJSAMPLE(inptr[2]); /* RGB to BGR order */ - outptr[1] = (char) GETJSAMPLE(inptr[1]); - outptr[2] = (char) GETJSAMPLE(inptr[0]); - inptr += 3, outptr += 3; - } - (void) JFWRITE(dest->pub.output_file, dest->iobuffer, dest->buffer_width); -} - -METHODDEF void -put_gray_rows (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo, - JDIMENSION rows_supplied) -/* used for grayscale OR quantized color output */ -{ - tga_dest_ptr dest = (tga_dest_ptr) dinfo; - register JSAMPROW inptr; - register char * outptr; - register JDIMENSION col; - - inptr = dest->pub.buffer[0]; - outptr = dest->iobuffer; - for (col = cinfo->output_width; col > 0; col--) { - *outptr++ = (char) GETJSAMPLE(*inptr++); - } - (void) JFWRITE(dest->pub.output_file, dest->iobuffer, dest->buffer_width); -} - - -/* - * Write some demapped pixel data when color quantization is in effect. - * For Targa, this is only applied to grayscale data. - */ - -METHODDEF void -put_demapped_gray (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo, - JDIMENSION rows_supplied) -{ - tga_dest_ptr dest = (tga_dest_ptr) dinfo; - register JSAMPROW inptr; - register char * outptr; - register JSAMPROW color_map0 = cinfo->colormap[0]; - register JDIMENSION col; - - inptr = dest->pub.buffer[0]; - outptr = dest->iobuffer; - for (col = cinfo->output_width; col > 0; col--) { - *outptr++ = (char) GETJSAMPLE(color_map0[GETJSAMPLE(*inptr++)]); - } - (void) JFWRITE(dest->pub.output_file, dest->iobuffer, dest->buffer_width); -} - - -/* - * Startup: write the file header. - */ - -METHODDEF void -start_output_tga (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo) -{ - tga_dest_ptr dest = (tga_dest_ptr) dinfo; - int num_colors, i; - FILE *outfile; - - if (cinfo->out_color_space == JCS_GRAYSCALE) { - /* Targa doesn't have a mapped grayscale format, so we will */ - /* demap quantized gray output. Never emit a colormap. */ - write_header(cinfo, dinfo, 0); - if (cinfo->quantize_colors) - dest->pub.put_pixel_rows = put_demapped_gray; - else - dest->pub.put_pixel_rows = put_gray_rows; - } else if (cinfo->out_color_space == JCS_RGB) { - if (cinfo->quantize_colors) { - /* We only support 8-bit colormap indexes, so only 256 colors */ - num_colors = cinfo->actual_number_of_colors; - if (num_colors > 256) - ERREXIT1(cinfo, JERR_TOO_MANY_COLORS, num_colors); - write_header(cinfo, dinfo, num_colors); - /* Write the colormap. Note Targa uses BGR byte order */ - outfile = dest->pub.output_file; - for (i = 0; i < num_colors; i++) { - putc(GETJSAMPLE(cinfo->colormap[2][i]), outfile); - putc(GETJSAMPLE(cinfo->colormap[1][i]), outfile); - putc(GETJSAMPLE(cinfo->colormap[0][i]), outfile); - } - dest->pub.put_pixel_rows = put_gray_rows; - } else { - write_header(cinfo, dinfo, 0); - dest->pub.put_pixel_rows = put_pixel_rows; - } - } else { - ERREXIT(cinfo, JERR_TGA_COLORSPACE); - } -} - - -/* - * Finish up at the end of the file. - */ - -METHODDEF void -finish_output_tga (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo) -{ - /* Make sure we wrote the output file OK */ - fflush(dinfo->output_file); - if (ferror(dinfo->output_file)) - ERREXIT(cinfo, JERR_FILE_WRITE); -} - - -/* - * The module selection routine for Targa format output. - */ - -GLOBAL djpeg_dest_ptr -jinit_write_targa (j_decompress_ptr cinfo) -{ - tga_dest_ptr dest; - - /* Create module interface object, fill in method pointers */ - dest = (tga_dest_ptr) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - SIZEOF(tga_dest_struct)); - dest->pub.start_output = start_output_tga; - dest->pub.finish_output = finish_output_tga; - - /* Calculate output image dimensions so we can allocate space */ - jpeg_calc_output_dimensions(cinfo); - - /* Create I/O buffer. Note we make this near on a PC. */ - dest->buffer_width = cinfo->output_width * cinfo->output_components; - dest->iobuffer = (char *) - (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, - (size_t) (dest->buffer_width * SIZEOF(char))); - - /* Create decompressor output buffer. */ - dest->pub.buffer = (*cinfo->mem->alloc_sarray) - ((j_common_ptr) cinfo, JPOOL_IMAGE, dest->buffer_width, (JDIMENSION) 1); - dest->pub.buffer_height = 1; - - return (djpeg_dest_ptr) dest; -} - -#endif /* TARGA_SUPPORTED */ -- GitLab