diff --git a/jpeg/Makefile b/jpeg/Makefile index 6b3e61429ff3d3f170c86323973eb2cc8e0982c5..7109131b3a148831ea833a7a55b2c417439f26d7 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 c882ffb75905a2824273cf8cd727ed3b92aed86d..0000000000000000000000000000000000000000 --- 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 be11a10e15217a149cb20c4732d4d8639d933be4..0000000000000000000000000000000000000000 --- 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 434ce8f042436aaabe216835dbc51d82e8195504..0000000000000000000000000000000000000000 --- 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 392421543e001ec73bc166000f46ad5ab9dcf99a..0000000000000000000000000000000000000000 --- 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 6479a4d6d4d9b2a76982a503b827bd8421b0d4d5..0000000000000000000000000000000000000000 --- 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 35acc355431e0c248a0abb60c2db51c640b4311d..0000000000000000000000000000000000000000 --- 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 ac2bbea2b8fa738d871a7719ae937428ce044ede..0000000000000000000000000000000000000000 --- 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 80c21103a4213368402d7df42b0ae2ee932c53fa..0000000000000000000000000000000000000000 --- 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 33347f3f425bbe8789a63536071eeadddf158789..0000000000000000000000000000000000000000 --- 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 34baf795b00957f4a48f28b0f5797fe9734d86a2..0000000000000000000000000000000000000000 --- 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 b28034eac28312b27c77c56b4f6b6c15798a6fb0..0000000000000000000000000000000000000000 --- 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 Binary files a/jpeg/coderules.doc.gz and /dev/null differ diff --git a/jpeg/config.status b/jpeg/config.status deleted file mode 100644 index 8603493b8bfbe736c8a5bbd4672edadd54dcd28b..0000000000000000000000000000000000000000 --- 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 0d62d685bd3790558debdc1d0b266c3c34c858be..0000000000000000000000000000000000000000 --- 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 b9835ccf403e7107813fe7cc1ee1525c27319ff6..0000000000000000000000000000000000000000 --- 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 08f80c5c07a83b12ce0e6feaab4e4bdeb70328b9..0000000000000000000000000000000000000000 --- 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 0df37552e805436505def5158bb842e03e2aaf1a..0000000000000000000000000000000000000000 --- 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 cb8c64a1792462486bfbe01927b0b3098d38655c..0000000000000000000000000000000000000000 --- 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 0965b7431554db5314009fc5866b666e8dc4fa69..0000000000000000000000000000000000000000 --- 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 Binary files a/jpeg/filelist.doc.gz and /dev/null differ diff --git a/jpeg/install.doc b/jpeg/install.doc deleted file mode 100644 index 289ce245669b3c36e0c7e687c5d321f602ae6020..0000000000000000000000000000000000000000 --- 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 Binary files a/jpeg/install.doc.gz and /dev/null differ diff --git a/jpeg/jconfig.auto b/jpeg/jconfig.auto deleted file mode 100644 index eb565eac20973b379b6dd393676e547c12ebc598..0000000000000000000000000000000000000000 --- 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 3271ee6b3a312b773a39dce334e853417e20c6a2..0000000000000000000000000000000000000000 --- 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 f759a9dbd6b18fc97171ca66a94e085a2821cde7..0000000000000000000000000000000000000000 --- 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 c18d1c064b77287209ab5d5d6b83e591b702df9f..0000000000000000000000000000000000000000 --- 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 Binary files a/jpeg/jconfig.doc.gz and /dev/null differ diff --git a/jpeg/jconfig.manx b/jpeg/jconfig.manx deleted file mode 100644 index 6dd0d008ea8126e6a1ec29e9b01e97201f63b05c..0000000000000000000000000000000000000000 --- 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 c55082df43544733891ca0009a5d9d57a13035c9..0000000000000000000000000000000000000000 --- 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 efdac22294fa6b84fe5e29218ffc0d645871bd35..0000000000000000000000000000000000000000 --- 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 ab3b5b4d6cd96942a0f323f0847dbbcdbbe448ec..0000000000000000000000000000000000000000 --- 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 55a6ffba5cd830e183c9114a5b7cf87169abe3c4..0000000000000000000000000000000000000000 --- 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 70010f96de6487c4c6203eb20b832a62c5867141..0000000000000000000000000000000000000000 --- 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 4db8ec574a7f4ed2b61422a7ef26a863f429e944..0000000000000000000000000000000000000000 --- 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 ecd43729fe5e286396b3d1cc4be28d27cca48867..0000000000000000000000000000000000000000 --- 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 f6c95624614b24a626f232a692634aebb1d15476..0000000000000000000000000000000000000000 --- 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 d609d90e28d928c3c08a5cc8584ff9121c9592b5..e7a1a0d2bfa39ac071aa8f8560e883f1defed8af 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 83067d1e897d1943b4e80ab1528038bc1ae34fe1..0000000000000000000000000000000000000000 --- 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 Binary files a/jpeg/libjpeg.doc.gz and /dev/null differ diff --git a/jpeg/makcjpeg.st b/jpeg/makcjpeg.st deleted file mode 100644 index f524a8f7abac5e0cbecc339d9dade7d260ae52e0..0000000000000000000000000000000000000000 --- 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 201415382ecedc453463c55ab6608911215b5c03..0000000000000000000000000000000000000000 --- 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 b69aca2266cec9a0658afa5f92ad08f17adacdb9..0000000000000000000000000000000000000000 --- 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 20a81b75a2a73f2a152bd2bc3dcdf9e9728bcede..0000000000000000000000000000000000000000 --- 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 d76b229e0866775f10d4c59ec2dae7629e96bfed..0000000000000000000000000000000000000000 --- 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 3988f80f57ea105fb08e2f53d112f23d0b7b1395..0000000000000000000000000000000000000000 --- 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 28773b3871c1c8bda6d524659f41c5ba5bc53424..0000000000000000000000000000000000000000 --- 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 8b800b789b634861ca69afba9b7e1676e65f9c0c..0000000000000000000000000000000000000000 --- 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 0866c607ab373dd0f540fb14d4603559c4a6d0b7..0000000000000000000000000000000000000000 --- 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 f9b852c4e600f5d0baac048e453d096ae541b804..0000000000000000000000000000000000000000 --- 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 d220cbf125f7d621452f27aac5b5a9f1df53a203..0000000000000000000000000000000000000000 --- 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 a2bfd554d71ebaca1018e7ca641b076cfd1d385b..0000000000000000000000000000000000000000 --- 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 e6549995930a128215498b0dde5ccedee651be29..0000000000000000000000000000000000000000 --- 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 a8dc41ae3daf9865528c93583289667ac933035e..0000000000000000000000000000000000000000 --- 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 675e8fe98a41c1689b170a4ec981df95ef21a319..0000000000000000000000000000000000000000 --- 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 f91849efc8a2647d4306b883d9bc61277bcd6c97..0000000000000000000000000000000000000000 --- 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 54f5c1de0d317d3cc79b395f7e755b579283b56b..0000000000000000000000000000000000000000 --- 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 b88660244f09393285324b739188765356bae57f..0000000000000000000000000000000000000000 --- 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 d237bb828f215b95dd95eb6db48b815abd419138..0000000000000000000000000000000000000000 --- 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 d121dc9aa95df04ff78759fe119c19c88a5224a0..0000000000000000000000000000000000000000 --- 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 6aa8e6fdf88953540bb9a02c65391aa730afc01c..0000000000000000000000000000000000000000 --- 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 4d40f7118a1cec0ee9d86ed51f5497cb09d15f0c..0000000000000000000000000000000000000000 --- 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 b58eb754bcb399b7888fcac16190800f82e58720..0000000000000000000000000000000000000000 --- 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 8c58138a3ebfdff31569833efffd6e0145bfb837..0000000000000000000000000000000000000000 --- 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 30d5828bf3036fea063ec0973bb3a5c016a9ceb6..0000000000000000000000000000000000000000 --- 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 Binary files a/jpeg/structure.doc.gz and /dev/null differ diff --git a/jpeg/testimg.gif b/jpeg/testimg.gif deleted file mode 100644 index 8c14b8d930fb7616c862266f90c4265295b2e0e4..0000000000000000000000000000000000000000 Binary files a/jpeg/testimg.gif and /dev/null differ diff --git a/jpeg/testimg.jpg b/jpeg/testimg.jpg deleted file mode 100644 index acf32dcfcec17533829c7e1d3ea97df553ee4328..0000000000000000000000000000000000000000 Binary files a/jpeg/testimg.jpg and /dev/null differ diff --git a/jpeg/testimg.ppm b/jpeg/testimg.ppm deleted file mode 100644 index 5464834943c7ccb2dd37cd68139b5861ea73d21d..0000000000000000000000000000000000000000 --- 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 Binary files a/jpeg/testorig.jpg and /dev/null differ diff --git a/jpeg/usage.doc b/jpeg/usage.doc deleted file mode 100644 index 3fc061fc3322d24141f2bdc7d52325535dd728ac..0000000000000000000000000000000000000000 --- 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 Binary files a/jpeg/usage.doc.gz and /dev/null differ diff --git a/jpeg/wrbmp.c b/jpeg/wrbmp.c deleted file mode 100644 index 06970c674241af454ef25e26d5401dfa7095193b..0000000000000000000000000000000000000000 --- 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 d61e24d076f37f398332b3d6cc79b60ee281a544..0000000000000000000000000000000000000000 --- 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 71ec4ded3dc9a5e6870d677531756b2578fec65a..0000000000000000000000000000000000000000 --- 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 0b25d69b6c981ccca44aa8bdb5ae97f30fe35ed1..0000000000000000000000000000000000000000 --- 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 4f7a2cb43a8f14833f7ddbdb606d6ad8ca56e259..0000000000000000000000000000000000000000 --- 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 d54e3d5072c94c28bec332a3a5c79614e2c732b6..0000000000000000000000000000000000000000 --- 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 c0dae01a1193fec586db754d0e1497676e57ed0d..0000000000000000000000000000000000000000 --- 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 36987127b8b5a5ba90d4055fdcf9b301915d53f0..0000000000000000000000000000000000000000 --- 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 */