OSDN Git Service

Please enter the commit message for your changes. Lines starting
authorTakuo Yasunaga <yasuanga@phys.kyutech.ac.jp>
Wed, 26 Oct 2022 09:04:35 +0000 (18:04 +0900)
committerTakuo Yasunaga <yasuanga@phys.kyutech.ac.jp>
Wed, 26 Oct 2022 09:04:35 +0000 (18:04 +0900)
 with '#' will be ignored, and an empty message aborts the commit.

 On branch master
 Changes to be committed:
new file:   bin/ARM64MAC64/Display2
new file:   bin/ARM64MAC64/ctfDisplay
new file:   bin/cjpeg
new file:   bin/djpeg
new file:   bin/jpegtran
new file:   bin/rdjpgcom
new file:   bin/tclsh8.6
new file:   bin/wish8.6
new file:   bin/wrjpgcom
new file:   include/compat/dirent.h
new file:   include/compat/dirent2.h
new file:   include/compat/dlfcn.h
new file:   include/compat/fake-rfc2553.h
new file:   include/compat/float.h
new file:   include/compat/limits.h
new file:   include/compat/stdlib.h
new file:   include/compat/string.h
new file:   include/compat/unistd.h
new file:   include/jconfig.h
new file:   include/jerror.h
new file:   include/jmorecfg.h
new file:   include/jpeglib.h
modified:   include/tclDecls.h
new file:   include/tclIntDecls.h
new file:   include/tclPort.h
new file:   include/tclUnixPort.h
modified:   lib/itcl4.0.3/libitcl4.0.3.dylib
modified:   lib/itcl4.0.3/libitclstub4.0.3.a
modified:   lib/libBLT25.a
modified:   lib/libBLTlite25.a
new file:   lib/libjpeg.9.dylib
new file:   lib/libjpeg.a
new file:   lib/libjpeg.dylib
new file:   lib/libjpeg.la
new file:   lib/libtcl8.6.dylib
modified:   lib/libtclstub8.6.a
modified:   lib/libtk8.6.dylib
modified:   lib/libtkstub8.6.a
new file:   lib/pkgconfig/libjpeg.pc
modified:   lib/sqlite3.8.8.3/libsqlite3.8.8.3.dylib
modified:   lib/tdbc1.0.3/libtdbc1.0.3.dylib
modified:   lib/tdbc1.0.3/libtdbcstub1.0.3.a
modified:   lib/tdbcmysql1.0.3/libtdbcmysql1.0.3.dylib
modified:   lib/tdbcodbc1.0.3/libtdbcodbc1.0.3.dylib
modified:   lib/tdbcpostgres1.0.3/libtdbcpostgres1.0.3.dylib
modified:   lib/thread2.7.2/libthread2.7.2.dylib
modified:   lib/tkConfig.sh
modified:   man/mann/bitmap.n
modified:   man/mann/busy.n
new file:   share/man/man1/cjpeg.1
new file:   share/man/man1/djpeg.1
new file:   share/man/man1/jpegtran.1
new file:   share/man/man1/rdjpgcom.1
new file:   share/man/man1/wrjpgcom.1
modified:   src/Tools/Integration/Display2/src/ARM64MAC64/.Depend
new file:   src/Tools/Integration/Display2/src/ARM64MAC64/Display2
modified:   src/Tools/Integration/ctfDisplay/src/ARM64MAC64/.Depend
modified:   src/Tools/Integration/ctfDisplay/src/ARM64MAC64/argCheck.o
new file:   src/Tools/Integration/ctfDisplay/src/ARM64MAC64/ctfDisplay
modified:   src/Tools/Integration/ctfDisplay/src/ARM64MAC64/ctfDisplay.o
modified:   src/Tools/Integration/ctfDisplay/src/ARM64MAC64/init.o
modified:   src/Tools/Integration/ctfDisplay/src/ARM64MAC64/usage.o
modified:   src/Tools/Integration/ctfDisplay/src/ARM64MAC64/util.o

63 files changed:
bin/ARM64MAC64/Display2 [new file with mode: 0755]
bin/ARM64MAC64/ctfDisplay [new file with mode: 0755]
bin/cjpeg [new file with mode: 0755]
bin/djpeg [new file with mode: 0755]
bin/jpegtran [new file with mode: 0755]
bin/rdjpgcom [new file with mode: 0755]
bin/tclsh8.6 [new file with mode: 0755]
bin/wish8.6 [new file with mode: 0755]
bin/wrjpgcom [new file with mode: 0755]
include/compat/dirent.h [new file with mode: 0644]
include/compat/dirent2.h [new file with mode: 0644]
include/compat/dlfcn.h [new file with mode: 0644]
include/compat/fake-rfc2553.h [new file with mode: 0644]
include/compat/float.h [new file with mode: 0644]
include/compat/limits.h [new file with mode: 0644]
include/compat/stdlib.h [new file with mode: 0644]
include/compat/string.h [new file with mode: 0644]
include/compat/unistd.h [new file with mode: 0644]
include/jconfig.h [new file with mode: 0644]
include/jerror.h [new file with mode: 0644]
include/jmorecfg.h [new file with mode: 0644]
include/jpeglib.h [new file with mode: 0644]
include/tclDecls.h
include/tclIntDecls.h [new file with mode: 0644]
include/tclPort.h [new file with mode: 0644]
include/tclUnixPort.h [new file with mode: 0644]
lib/itcl4.0.3/libitcl4.0.3.dylib
lib/itcl4.0.3/libitclstub4.0.3.a
lib/libBLT25.a
lib/libBLTlite25.a
lib/libjpeg.9.dylib [new file with mode: 0755]
lib/libjpeg.a [new file with mode: 0644]
lib/libjpeg.dylib [new symlink]
lib/libjpeg.la [new file with mode: 0755]
lib/libtcl8.6.dylib [new file with mode: 0755]
lib/libtclstub8.6.a
lib/libtk8.6.dylib
lib/libtkstub8.6.a
lib/pkgconfig/libjpeg.pc [new file with mode: 0644]
lib/sqlite3.8.8.3/libsqlite3.8.8.3.dylib
lib/tdbc1.0.3/libtdbc1.0.3.dylib
lib/tdbc1.0.3/libtdbcstub1.0.3.a
lib/tdbcmysql1.0.3/libtdbcmysql1.0.3.dylib
lib/tdbcodbc1.0.3/libtdbcodbc1.0.3.dylib
lib/tdbcpostgres1.0.3/libtdbcpostgres1.0.3.dylib
lib/thread2.7.2/libthread2.7.2.dylib
lib/tkConfig.sh
man/mann/bitmap.n
man/mann/busy.n
share/man/man1/cjpeg.1 [new file with mode: 0644]
share/man/man1/djpeg.1 [new file with mode: 0644]
share/man/man1/jpegtran.1 [new file with mode: 0644]
share/man/man1/rdjpgcom.1 [new file with mode: 0644]
share/man/man1/wrjpgcom.1 [new file with mode: 0644]
src/Tools/Integration/Display2/src/ARM64MAC64/.Depend
src/Tools/Integration/Display2/src/ARM64MAC64/Display2 [new file with mode: 0755]
src/Tools/Integration/ctfDisplay/src/ARM64MAC64/.Depend
src/Tools/Integration/ctfDisplay/src/ARM64MAC64/argCheck.o
src/Tools/Integration/ctfDisplay/src/ARM64MAC64/ctfDisplay [new file with mode: 0755]
src/Tools/Integration/ctfDisplay/src/ARM64MAC64/ctfDisplay.o
src/Tools/Integration/ctfDisplay/src/ARM64MAC64/init.o
src/Tools/Integration/ctfDisplay/src/ARM64MAC64/usage.o
src/Tools/Integration/ctfDisplay/src/ARM64MAC64/util.o

diff --git a/bin/ARM64MAC64/Display2 b/bin/ARM64MAC64/Display2
new file mode 100755 (executable)
index 0000000..a09bf64
Binary files /dev/null and b/bin/ARM64MAC64/Display2 differ
diff --git a/bin/ARM64MAC64/ctfDisplay b/bin/ARM64MAC64/ctfDisplay
new file mode 100755 (executable)
index 0000000..2d1b9e5
Binary files /dev/null and b/bin/ARM64MAC64/ctfDisplay differ
diff --git a/bin/cjpeg b/bin/cjpeg
new file mode 100755 (executable)
index 0000000..135de59
Binary files /dev/null and b/bin/cjpeg differ
diff --git a/bin/djpeg b/bin/djpeg
new file mode 100755 (executable)
index 0000000..ef47638
Binary files /dev/null and b/bin/djpeg differ
diff --git a/bin/jpegtran b/bin/jpegtran
new file mode 100755 (executable)
index 0000000..6145846
Binary files /dev/null and b/bin/jpegtran differ
diff --git a/bin/rdjpgcom b/bin/rdjpgcom
new file mode 100755 (executable)
index 0000000..91b4527
Binary files /dev/null and b/bin/rdjpgcom differ
diff --git a/bin/tclsh8.6 b/bin/tclsh8.6
new file mode 100755 (executable)
index 0000000..fa42b92
Binary files /dev/null and b/bin/tclsh8.6 differ
diff --git a/bin/wish8.6 b/bin/wish8.6
new file mode 100755 (executable)
index 0000000..bb2afbf
Binary files /dev/null and b/bin/wish8.6 differ
diff --git a/bin/wrjpgcom b/bin/wrjpgcom
new file mode 100755 (executable)
index 0000000..ce46104
Binary files /dev/null and b/bin/wrjpgcom differ
diff --git a/include/compat/dirent.h b/include/compat/dirent.h
new file mode 100644 (file)
index 0000000..fa6222a
--- /dev/null
@@ -0,0 +1,21 @@
+/*
+ * dirent.h --
+ *
+ *     This file is a replacement for <dirent.h> in systems that
+ *     support the old BSD-style <sys/dir.h> with a "struct direct".
+ *
+ * Copyright (c) 1991 The Regents of the University of California.
+ * Copyright (c) 1994 Sun Microsystems, Inc.
+ *
+ * See the file "license.terms" for information on usage and redistribution
+ * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+ */
+
+#ifndef _DIRENT
+#define _DIRENT
+
+#include <sys/dir.h>
+
+#define dirent direct
+
+#endif /* _DIRENT */
diff --git a/include/compat/dirent2.h b/include/compat/dirent2.h
new file mode 100644 (file)
index 0000000..5be08ba
--- /dev/null
@@ -0,0 +1,53 @@
+/*
+ * dirent.h --
+ *
+ *     Declarations of a library of directory-reading procedures
+ *     in the POSIX style ("struct dirent").
+ *
+ * Copyright (c) 1991 The Regents of the University of California.
+ * Copyright (c) 1994 Sun Microsystems, Inc.
+ *
+ * See the file "license.terms" for information on usage and redistribution
+ * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+ */
+
+#ifndef _DIRENT
+#define _DIRENT
+
+/*
+ * Dirent structure, which holds information about a single
+ * directory entry.
+ */
+
+#define MAXNAMLEN 255
+#define DIRBLKSIZ 512
+
+struct dirent {
+    long d_ino;                        /* Inode number of entry */
+    short d_reclen;            /* Length of this record */
+    short d_namlen;            /* Length of string in d_name */
+    char d_name[MAXNAMLEN + 1];        /* Name must be no longer than this */
+};
+
+/*
+ * State that keeps track of the reading of a directory (clients
+ * should never look inside this structure;  the fields should
+ * only be accessed by the library procedures).
+ */
+
+typedef struct _dirdesc {
+    int dd_fd;
+    long dd_loc;
+    long dd_size;
+    char dd_buf[DIRBLKSIZ];
+} DIR;
+
+/*
+ * Procedures defined for reading directories:
+ */
+
+extern void            closedir (DIR *dirp);
+extern DIR *           opendir (char *name);
+extern struct dirent * readdir (DIR *dirp);
+
+#endif /* _DIRENT */
diff --git a/include/compat/dlfcn.h b/include/compat/dlfcn.h
new file mode 100644 (file)
index 0000000..fb27ea0
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+ * dlfcn.h --
+ *
+ *     This file provides a replacement for the header file "dlfcn.h"
+ *     on systems where dlfcn.h is missing.  It's primary use is for
+ *     AIX, where Tcl emulates the dl library.
+ *
+ *     This file is subject to the following copyright notice, which is
+ *     different from the notice used elsewhere in Tcl but rougly
+ *     equivalent in meaning.
+ *
+ *     Copyright (c) 1992,1993,1995,1996, Jens-Uwe Mager, Helios Software GmbH
+ *     Not derived from licensed software.
+ *
+ *     Permission is granted to freely use, copy, modify, and redistribute
+ *     this software, provided that the author is not construed to be liable
+ *     for any results of using the software, alterations are clearly marked
+ *     as such, and this notice is not modified.
+ */
+
+/*
+ * This is an unpublished work copyright (c) 1992 HELIOS Software GmbH
+ * 30159 Hannover, Germany
+ */
+
+#ifndef __dlfcn_h__
+#define __dlfcn_h__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Mode flags for the dlopen routine.
+ */
+#define RTLD_LAZY      1       /* lazy function call binding */
+#define RTLD_NOW       2       /* immediate function call binding */
+#define RTLD_GLOBAL    0x100   /* allow symbols to be global */
+
+/*
+ * To be able to intialize, a library may provide a dl_info structure
+ * that contains functions to be called to initialize and terminate.
+ */
+struct dl_info {
+       void (*init) (void);
+       void (*fini) (void);
+};
+
+void *dlopen (const char *path, int mode);
+void *dlsym (void *handle, const char *symbol);
+char *dlerror (void);
+int dlclose (void *handle);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __dlfcn_h__ */
diff --git a/include/compat/fake-rfc2553.h b/include/compat/fake-rfc2553.h
new file mode 100644 (file)
index 0000000..cc26f55
--- /dev/null
@@ -0,0 +1,170 @@
+/*
+ * Copyright (C) 2000-2003 Damien Miller.  All rights reserved.
+ * Copyright (C) 1999 WIDE Project.  All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the project nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*
+ * Pseudo-implementation of RFC2553 name / address resolution functions
+ *
+ * But these functions are not implemented correctly. The minimum subset
+ * is implemented for ssh use only. For example, this routine assumes
+ * that ai_family is AF_INET. Don't use it for another purpose.
+ */
+
+#ifndef _FAKE_RFC2553_H
+#define _FAKE_RFC2553_H
+
+/*
+ * First, socket and INET6 related definitions 
+ */
+#ifndef HAVE_STRUCT_SOCKADDR_STORAGE
+# define       _SS_MAXSIZE     128     /* Implementation specific max size */
+# define       _SS_PADSIZE     (_SS_MAXSIZE - sizeof (struct sockaddr))
+struct sockaddr_storage {
+       struct sockaddr ss_sa;
+       char            __ss_pad2[_SS_PADSIZE];
+};
+# define ss_family ss_sa.sa_family
+#endif /* !HAVE_STRUCT_SOCKADDR_STORAGE */
+
+#ifndef IN6_IS_ADDR_LOOPBACK
+# define IN6_IS_ADDR_LOOPBACK(a) \
+       (((uint32_t *)(a))[0] == 0 && ((uint32_t *)(a))[1] == 0 && \
+        ((uint32_t *)(a))[2] == 0 && ((uint32_t *)(a))[3] == htonl(1))
+#endif /* !IN6_IS_ADDR_LOOPBACK */
+
+#ifndef HAVE_STRUCT_IN6_ADDR
+struct in6_addr {
+       uint8_t s6_addr[16];
+};
+#endif /* !HAVE_STRUCT_IN6_ADDR */
+
+#ifndef HAVE_STRUCT_SOCKADDR_IN6
+struct sockaddr_in6 {
+       unsigned short  sin6_family;
+       uint16_t        sin6_port;
+       uint32_t        sin6_flowinfo;
+       struct in6_addr sin6_addr;
+       uint32_t        sin6_scope_id;
+};
+#endif /* !HAVE_STRUCT_SOCKADDR_IN6 */
+
+#ifndef AF_INET6
+/* Define it to something that should never appear */
+#define AF_INET6 AF_MAX
+#endif
+
+/*
+ * Next, RFC2553 name / address resolution API
+ */
+
+#ifndef NI_NUMERICHOST
+# define NI_NUMERICHOST    (1)
+#endif
+#ifndef NI_NAMEREQD
+# define NI_NAMEREQD       (1<<1)
+#endif
+#ifndef NI_NUMERICSERV
+# define NI_NUMERICSERV    (1<<2)
+#endif
+
+#ifndef AI_PASSIVE
+# define AI_PASSIVE            (1)
+#endif
+#ifndef AI_CANONNAME
+# define AI_CANONNAME          (1<<1)
+#endif
+#ifndef AI_NUMERICHOST
+# define AI_NUMERICHOST                (1<<2)
+#endif
+
+#ifndef NI_MAXSERV
+# define NI_MAXSERV 32
+#endif /* !NI_MAXSERV */
+#ifndef NI_MAXHOST
+# define NI_MAXHOST 1025
+#endif /* !NI_MAXHOST */
+
+#ifndef EAI_NODATA
+# define EAI_NODATA    (INT_MAX - 1)
+#endif
+#ifndef EAI_MEMORY
+# define EAI_MEMORY    (INT_MAX - 2)
+#endif
+#ifndef EAI_NONAME
+# define EAI_NONAME    (INT_MAX - 3)
+#endif
+#ifndef EAI_SYSTEM
+# define EAI_SYSTEM    (INT_MAX - 4)
+#endif
+#ifndef EAI_FAMILY
+# define EAI_FAMILY    (INT_MAX - 5)
+#endif
+#ifndef EAI_SERVICE
+# define EAI_SERVICE      -8    /* SERVICE not supported for `ai_socktype'.  */
+#endif
+
+#ifndef HAVE_STRUCT_ADDRINFO
+struct addrinfo {
+       int     ai_flags;       /* AI_PASSIVE, AI_CANONNAME */
+       int     ai_family;      /* PF_xxx */
+       int     ai_socktype;    /* SOCK_xxx */
+       int     ai_protocol;    /* 0 or IPPROTO_xxx for IPv4 and IPv6 */
+       size_t  ai_addrlen;     /* length of ai_addr */
+       char    *ai_canonname;  /* canonical name for hostname */
+       struct sockaddr *ai_addr;       /* binary address */
+       struct addrinfo *ai_next;       /* next structure in linked list */
+};
+#endif /* !HAVE_STRUCT_ADDRINFO */
+
+#ifndef HAVE_GETADDRINFO
+#ifdef getaddrinfo
+# undef getaddrinfo
+#endif
+#define getaddrinfo(a,b,c,d)    (fake_getaddrinfo(a,b,c,d))
+int getaddrinfo(const char *, const char *, 
+    const struct addrinfo *, struct addrinfo **);
+#endif /* !HAVE_GETADDRINFO */
+
+#ifndef HAVE_GAI_STRERROR
+#define gai_strerror(a)         (fake_gai_strerror(a))
+const char *gai_strerror(int);
+#endif /* !HAVE_GAI_STRERROR */
+
+#ifndef HAVE_FREEADDRINFO
+#define freeaddrinfo(a)         (fake_freeaddrinfo(a))
+void freeaddrinfo(struct addrinfo *);
+#endif /* !HAVE_FREEADDRINFO */
+
+#ifndef HAVE_GETNAMEINFO
+#define getnameinfo(a,b,c,d,e,f,g) (fake_getnameinfo(a,b,c,d,e,f,g))
+int getnameinfo(const struct sockaddr *, size_t, char *, size_t, 
+    char *, size_t, int);
+#endif /* !HAVE_GETNAMEINFO */
+
+
+#endif /* !_FAKE_RFC2553_H */
diff --git a/include/compat/float.h b/include/compat/float.h
new file mode 100644 (file)
index 0000000..411edbf
--- /dev/null
@@ -0,0 +1,14 @@
+/*
+ * float.h --
+ *
+ *     This is a dummy header file to #include in Tcl when there
+ *     is no float.h in /usr/include.  Right now this file is empty:
+ *     Tcl contains #ifdefs to deal with the lack of definitions;
+ *     all it needs is for the #include statement to work.
+ *
+ * Copyright (c) 1993 The Regents of the University of California.
+ * Copyright (c) 1994 Sun Microsystems, Inc.
+ *
+ * See the file "license.terms" for information on usage and redistribution
+ * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+ */
diff --git a/include/compat/limits.h b/include/compat/limits.h
new file mode 100644 (file)
index 0000000..2cb082b
--- /dev/null
@@ -0,0 +1,22 @@
+/*
+ * limits.h --
+ *
+ *     This is a dummy header file to #include in Tcl when there
+ *     is no limits.h in /usr/include.  There are only a few
+ *     definitions here;  also see tclPort.h, which already
+ *     #defines some of the things here if they're not arleady
+ *     defined.
+ *
+ * Copyright (c) 1991 The Regents of the University of California.
+ * Copyright (c) 1994 Sun Microsystems, Inc.
+ *
+ * See the file "license.terms" for information on usage and redistribution
+ * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+ */
+
+#define LONG_MIN               0x80000000
+#define LONG_MAX               0x7fffffff
+#define INT_MIN                        0x80000000
+#define INT_MAX                        0x7fffffff
+#define SHRT_MIN               0x8000
+#define SHRT_MAX               0x7fff
diff --git a/include/compat/stdlib.h b/include/compat/stdlib.h
new file mode 100644 (file)
index 0000000..0ad4c1d
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+ * stdlib.h --
+ *
+ *     Declares facilities exported by the "stdlib" portion of the C library.
+ *     This file isn't complete in the ANSI-C sense; it only declares things
+ *     that are needed by Tcl. This file is needed even on many systems with
+ *     their own stdlib.h (e.g. SunOS) because not all stdlib.h files declare
+ *     all the procedures needed here (such as strtod).
+ *
+ * Copyright (c) 1991 The Regents of the University of California.
+ * Copyright (c) 1994-1998 Sun Microsystems, Inc.
+ *
+ * See the file "license.terms" for information on usage and redistribution of
+ * this file, and for a DISCLAIMER OF ALL WARRANTIES.
+ */
+
+#ifndef _STDLIB
+#define _STDLIB
+
+extern void            abort(void);
+extern double          atof(const char *string);
+extern int             atoi(const char *string);
+extern long            atol(const char *string);
+extern char *          calloc(unsigned int numElements, unsigned int size);
+extern void            exit(int status);
+extern int             free(char *blockPtr);
+extern char *          getenv(const char *name);
+extern char *          malloc(unsigned int numBytes);
+extern void            qsort(void *base, int n, int size, int (*compar)(
+                           const void *element1, const void *element2));
+extern char *          realloc(char *ptr, unsigned int numBytes);
+extern double          strtod(const char *string, char **endPtr);
+extern long            strtol(const char *string, char **endPtr, int base);
+extern unsigned long   strtoul(const char *string, char **endPtr, int base);
+
+#endif /* _STDLIB */
diff --git a/include/compat/string.h b/include/compat/string.h
new file mode 100644 (file)
index 0000000..42be10c
--- /dev/null
@@ -0,0 +1,57 @@
+/*
+ * string.h --
+ *
+ *     Declarations of ANSI C library procedures for string handling.
+ *
+ * Copyright (c) 1991-1993 The Regents of the University of California.
+ * Copyright (c) 1994-1996 Sun Microsystems, Inc.
+ *
+ * See the file "license.terms" for information on usage and redistribution of
+ * this file, and for a DISCLAIMER OF ALL WARRANTIES.
+ */
+
+#ifndef _STRING
+#define _STRING
+
+/*
+ * The following #include is needed to define size_t. (This used to include
+ * sys/stdtypes.h but that doesn't exist on older versions of SunOS, e.g.
+ * 4.0.2, so I'm trying sys/types.h now.... hopefully it exists everywhere)
+ */
+
+#include <sys/types.h>
+
+#ifdef __APPLE__
+extern void *          memchr(const void *s, int c, size_t n);
+#else
+extern char *          memchr(const void *s, int c, size_t n);
+#endif
+extern int             memcmp(const void *s1, const void *s2, size_t n);
+extern char *          memcpy(void *t, const void *f, size_t n);
+#ifdef NO_MEMMOVE
+#define memmove(d,s,n) (bcopy((s), (d), (n)))
+#else
+extern char *          memmove(void *t, const void *f, size_t n);
+#endif
+extern char *          memset(void *s, int c, size_t n);
+
+extern int             strcasecmp(const char *s1, const char *s2);
+extern char *          strcat(char *dst, const char *src);
+extern char *          strchr(const char *string, int c);
+extern int             strcmp(const char *s1, const char *s2);
+extern char *          strcpy(char *dst, const char *src);
+extern size_t          strcspn(const char *string, const char *chars);
+extern char *          strdup(const char *string);
+extern char *          strerror(int error);
+extern size_t          strlen(const char *string);
+extern int             strncasecmp(const char *s1, const char *s2, size_t n);
+extern char *          strncat(char *dst, const char *src, size_t numChars);
+extern int             strncmp(const char *s1, const char *s2, size_t nChars);
+extern char *          strncpy(char *dst, const char *src, size_t numChars);
+extern char *          strpbrk(const char *string, const char *chars);
+extern char *          strrchr(const char *string, int c);
+extern size_t          strspn(const char *string, const char *chars);
+extern char *          strstr(const char *string, const char *substring);
+extern char *          strtok(char *s, const char *delim);
+
+#endif /* _STRING */
diff --git a/include/compat/unistd.h b/include/compat/unistd.h
new file mode 100644 (file)
index 0000000..2de5bd0
--- /dev/null
@@ -0,0 +1,76 @@
+/*
+ * unistd.h --
+ *
+ *      Macros, constants and prototypes for Posix conformance.
+ *
+ * Copyright 1989 Regents of the University of California 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. The University of California makes
+ * no representations about the suitability of this software for any purpose.
+ * It is provided "as is" without express or implied warranty.
+ */
+
+#ifndef _UNISTD
+#define _UNISTD
+
+#include <sys/types.h>
+
+#ifndef NULL
+#define NULL    0
+#endif
+
+/* 
+ * Strict POSIX stuff goes here. Extensions go down below, in the ifndef
+ * _POSIX_SOURCE section.
+ */
+
+extern void            _exit(int status);
+extern int             access(const char *path, int mode);
+extern int             chdir(const char *path);
+extern int             chown(const char *path, uid_t owner, gid_t group);
+extern int             close(int fd);
+extern int             dup(int oldfd);
+extern int             dup2(int oldfd, int newfd);
+extern int             execl(const char *path, ...);
+extern int             execle(const char *path, ...);
+extern int             execlp(const char *file, ...);
+extern int             execv(const char *path, char **argv);
+extern int             execve(const char *path, char **argv, char **envp);
+extern int             execvpw(const char *file, char **argv);
+extern pid_t           fork(void);
+extern char *          getcwd(char *buf, size_t size);
+extern gid_t           getegid(void);
+extern uid_t           geteuid(void);
+extern gid_t           getgid(void);
+extern int             getgroups(int bufSize, int *buffer);
+extern pid_t           getpid(void);
+extern uid_t           getuid(void);
+extern int             isatty(int fd);
+extern long            lseek(int fd, long offset, int whence);
+extern int             pipe(int *fildes);
+extern int             read(int fd, char *buf, size_t size);
+extern int             setgid(gid_t group);
+extern int             setuid(uid_t user);
+extern unsigned                sleep(unsigned seconds);
+extern char *          ttyname(int fd);
+extern int             unlink(const char *path);
+extern int             write(int fd, const char *buf, size_t size);
+
+#ifndef        _POSIX_SOURCE
+extern char *          crypt(const char *, const char *);
+extern int             fchown(int fd, uid_t owner, gid_t group);
+extern int             flock(int fd, int operation);
+extern int             ftruncate(int fd, unsigned long length);
+extern int             ioctl(int fd, int request, ...);
+extern int             readlink(const char *path, char *buf, int bufsize);
+extern int             setegid(gid_t group);
+extern int             seteuidw(uid_t user);
+extern int             setreuid(int ruid, int euid);
+extern int             symlink(const char *, const char *);
+extern int             ttyslot(void);
+extern int             truncate(const char *path, unsigned long length);
+extern int             vfork(void);
+#endif /* _POSIX_SOURCE */
+
+#endif /* _UNISTD */
diff --git a/include/jconfig.h b/include/jconfig.h
new file mode 100644 (file)
index 0000000..2d05a3b
--- /dev/null
@@ -0,0 +1,60 @@
+/* jconfig.h.  Generated from jconfig.cfg by configure.  */
+/* jconfig.cfg --- source file edited by configure script */
+/* see jconfig.txt for explanations */
+
+#define HAVE_PROTOTYPES 1
+#define HAVE_UNSIGNED_CHAR 1
+#define HAVE_UNSIGNED_SHORT 1
+/* #undef void */
+/* #undef const */
+/* #undef CHAR_IS_UNSIGNED */
+#define HAVE_STDDEF_H 1
+#define HAVE_STDLIB_H 1
+#define HAVE_LOCALE_H 1
+/* #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 */
+
+/* Define "boolean" as unsigned char, not enum, on Windows systems. */
+#ifdef _WIN32
+#ifndef __RPCNDR_H__           /* don't conflict if rpcndr.h already read */
+typedef unsigned char boolean;
+#endif
+#ifndef FALSE                  /* in case these macros already exist */
+#define FALSE  0               /* values of boolean */
+#endif
+#ifndef TRUE
+#define TRUE   1
+#endif
+#define HAVE_BOOLEAN           /* prevent jmorecfg.h from redefining it */
+#endif
+
+#ifdef JPEG_INTERNALS
+
+/* #undef RIGHT_SHIFT_IS_UNSIGNED */
+#define INLINE __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 */
+#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/include/jerror.h b/include/jerror.h
new file mode 100644 (file)
index 0000000..db608b9
--- /dev/null
@@ -0,0 +1,304 @@
+/*
+ * jerror.h
+ *
+ * Copyright (C) 1994-1997, Thomas G. Lane.
+ * Modified 1997-2018 by Guido Vollbeding.
+ * 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 JPEG library.
+ * Edit this file to add new codes, or to translate the message strings to
+ * some other language.
+ * A set of error-reporting macros are defined too.  Some applications using
+ * the JPEG library may wish to include this file to get the error codes
+ * and/or the macros.
+ */
+
+/*
+ * To define the enum list of message codes, include this file without
+ * defining macro JMESSAGE.  To create a message string table, include it
+ * again with a suitable JMESSAGE definition (see jerror.c for an example).
+ */
+#ifndef JMESSAGE
+#ifndef JERROR_H
+/* First time through, define the enum list */
+#define JMAKE_ENUM_LIST
+#else
+/* Repeated inclusions of this file are no-ops unless JMESSAGE is defined */
+#define JMESSAGE(code,string)
+#endif /* JERROR_H */
+#endif /* JMESSAGE */
+
+#ifdef JMAKE_ENUM_LIST
+
+typedef enum {
+
+#define JMESSAGE(code,string)  code ,
+
+#endif /* JMAKE_ENUM_LIST */
+
+JMESSAGE(JMSG_NOMESSAGE, "Bogus message code %d") /* Must be first entry! */
+
+/* For maintenance convenience, list is alphabetical by message code name */
+JMESSAGE(JERR_BAD_ALIGN_TYPE, "ALIGN_TYPE is wrong, please fix")
+JMESSAGE(JERR_BAD_ALLOC_CHUNK, "MAX_ALLOC_CHUNK is wrong, please fix")
+JMESSAGE(JERR_BAD_BUFFER_MODE, "Bogus buffer control mode")
+JMESSAGE(JERR_BAD_COMPONENT_ID, "Invalid component ID %d in SOS")
+JMESSAGE(JERR_BAD_CROP_SPEC, "Invalid crop request")
+JMESSAGE(JERR_BAD_DCT_COEF, "DCT coefficient out of range")
+JMESSAGE(JERR_BAD_DCTSIZE, "DCT scaled block size %dx%d not supported")
+JMESSAGE(JERR_BAD_DROP_SAMPLING,
+        "Component index %d: mismatching sampling ratio %d:%d, %d:%d, %c")
+JMESSAGE(JERR_BAD_HUFF_TABLE, "Bogus Huffman table definition")
+JMESSAGE(JERR_BAD_IN_COLORSPACE, "Bogus input colorspace")
+JMESSAGE(JERR_BAD_J_COLORSPACE, "Bogus JPEG colorspace")
+JMESSAGE(JERR_BAD_LENGTH, "Bogus marker length")
+JMESSAGE(JERR_BAD_LIB_VERSION,
+        "Wrong JPEG library version: library is %d, caller expects %d")
+JMESSAGE(JERR_BAD_MCU_SIZE, "Sampling factors too large for interleaved scan")
+JMESSAGE(JERR_BAD_POOL_ID, "Invalid memory pool code %d")
+JMESSAGE(JERR_BAD_PRECISION, "Unsupported JPEG data precision %d")
+JMESSAGE(JERR_BAD_PROGRESSION,
+        "Invalid progressive parameters Ss=%d Se=%d Ah=%d Al=%d")
+JMESSAGE(JERR_BAD_PROG_SCRIPT,
+        "Invalid progressive parameters at scan script entry %d")
+JMESSAGE(JERR_BAD_SAMPLING, "Bogus sampling factors")
+JMESSAGE(JERR_BAD_SCAN_SCRIPT, "Invalid scan script at entry %d")
+JMESSAGE(JERR_BAD_STATE, "Improper call to JPEG library in state %d")
+JMESSAGE(JERR_BAD_STRUCT_SIZE,
+        "JPEG parameter struct mismatch: library thinks size is %u, caller expects %u")
+JMESSAGE(JERR_BAD_VIRTUAL_ACCESS, "Bogus virtual array access")
+JMESSAGE(JERR_BUFFER_SIZE, "Buffer passed to JPEG library is too small")
+JMESSAGE(JERR_CANT_SUSPEND, "Suspension not allowed here")
+JMESSAGE(JERR_CCIR601_NOTIMPL, "CCIR601 sampling not implemented yet")
+JMESSAGE(JERR_COMPONENT_COUNT, "Too many color components: %d, max %d")
+JMESSAGE(JERR_CONVERSION_NOTIMPL, "Unsupported color conversion request")
+JMESSAGE(JERR_DAC_INDEX, "Bogus DAC index %d")
+JMESSAGE(JERR_DAC_VALUE, "Bogus DAC value 0x%x")
+JMESSAGE(JERR_DHT_INDEX, "Bogus DHT index %d")
+JMESSAGE(JERR_DQT_INDEX, "Bogus DQT index %d")
+JMESSAGE(JERR_EMPTY_IMAGE, "Empty JPEG image (DNL not supported)")
+JMESSAGE(JERR_EMS_READ, "Read from EMS failed")
+JMESSAGE(JERR_EMS_WRITE, "Write to EMS failed")
+JMESSAGE(JERR_EOI_EXPECTED, "Didn't expect more than one scan")
+JMESSAGE(JERR_FILE_READ, "Input file read error")
+JMESSAGE(JERR_FILE_WRITE, "Output file write error --- out of disk space?")
+JMESSAGE(JERR_FRACT_SAMPLE_NOTIMPL, "Fractional sampling not implemented yet")
+JMESSAGE(JERR_HUFF_CLEN_OUTOFBOUNDS, "Huffman code size table out of bounds")
+JMESSAGE(JERR_HUFF_MISSING_CODE, "Missing Huffman code table entry")
+JMESSAGE(JERR_IMAGE_TOO_BIG, "Maximum supported image dimension is %u pixels")
+JMESSAGE(JERR_INPUT_EMPTY, "Empty input file")
+JMESSAGE(JERR_INPUT_EOF, "Premature end of input file")
+JMESSAGE(JERR_MISMATCHED_QUANT_TABLE,
+        "Cannot transcode due to multiple use of quantization table %d")
+JMESSAGE(JERR_MISSING_DATA, "Scan script does not transmit all data")
+JMESSAGE(JERR_MODE_CHANGE, "Invalid color quantization mode change")
+JMESSAGE(JERR_NOTIMPL, "Not implemented yet")
+JMESSAGE(JERR_NOT_COMPILED, "Requested feature was omitted at compile time")
+JMESSAGE(JERR_NO_ARITH_TABLE, "Arithmetic table 0x%02x was not defined")
+JMESSAGE(JERR_NO_BACKING_STORE, "Backing store not supported")
+JMESSAGE(JERR_NO_HUFF_TABLE, "Huffman table 0x%02x was not defined")
+JMESSAGE(JERR_NO_IMAGE, "JPEG datastream contains no image")
+JMESSAGE(JERR_NO_QUANT_TABLE, "Quantization table 0x%02x was not defined")
+JMESSAGE(JERR_NO_SOI, "Not a JPEG file: starts with 0x%02x 0x%02x")
+JMESSAGE(JERR_OUT_OF_MEMORY, "Insufficient memory (case %d)")
+JMESSAGE(JERR_QUANT_COMPONENTS,
+        "Cannot quantize more than %d color components")
+JMESSAGE(JERR_QUANT_FEW_COLORS, "Cannot quantize to fewer than %d colors")
+JMESSAGE(JERR_QUANT_MANY_COLORS, "Cannot quantize to more than %d colors")
+JMESSAGE(JERR_SOF_BEFORE, "Invalid JPEG file structure: %s before SOF")
+JMESSAGE(JERR_SOF_DUPLICATE, "Invalid JPEG file structure: two SOF markers")
+JMESSAGE(JERR_SOF_NO_SOS, "Invalid JPEG file structure: missing SOS marker")
+JMESSAGE(JERR_SOF_UNSUPPORTED, "Unsupported JPEG process: SOF type 0x%02x")
+JMESSAGE(JERR_SOI_DUPLICATE, "Invalid JPEG file structure: two SOI markers")
+JMESSAGE(JERR_TFILE_CREATE, "Failed to create temporary file %s")
+JMESSAGE(JERR_TFILE_READ, "Read failed on temporary file")
+JMESSAGE(JERR_TFILE_SEEK, "Seek failed on temporary file")
+JMESSAGE(JERR_TFILE_WRITE,
+        "Write failed on temporary file --- out of disk space?")
+JMESSAGE(JERR_TOO_LITTLE_DATA, "Application transferred too few scanlines")
+JMESSAGE(JERR_UNKNOWN_MARKER, "Unsupported marker type 0x%02x")
+JMESSAGE(JERR_VIRTUAL_BUG, "Virtual array controller messed up")
+JMESSAGE(JERR_WIDTH_OVERFLOW, "Image too wide for this implementation")
+JMESSAGE(JERR_XMS_READ, "Read from XMS failed")
+JMESSAGE(JERR_XMS_WRITE, "Write to XMS failed")
+JMESSAGE(JMSG_COPYRIGHT, JCOPYRIGHT)
+JMESSAGE(JMSG_VERSION, JVERSION)
+JMESSAGE(JTRC_16BIT_TABLES,
+        "Caution: quantization tables are too coarse for baseline JPEG")
+JMESSAGE(JTRC_ADOBE,
+        "Adobe APP14 marker: version %d, flags 0x%04x 0x%04x, transform %d")
+JMESSAGE(JTRC_APP0, "Unknown APP0 marker (not JFIF), length %u")
+JMESSAGE(JTRC_APP14, "Unknown APP14 marker (not Adobe), length %u")
+JMESSAGE(JTRC_DAC, "Define Arithmetic Table 0x%02x: 0x%02x")
+JMESSAGE(JTRC_DHT, "Define Huffman Table 0x%02x")
+JMESSAGE(JTRC_DQT, "Define Quantization Table %d  precision %d")
+JMESSAGE(JTRC_DRI, "Define Restart Interval %u")
+JMESSAGE(JTRC_EMS_CLOSE, "Freed EMS handle %u")
+JMESSAGE(JTRC_EMS_OPEN, "Obtained EMS handle %u")
+JMESSAGE(JTRC_EOI, "End Of Image")
+JMESSAGE(JTRC_HUFFBITS, "        %3d %3d %3d %3d %3d %3d %3d %3d")
+JMESSAGE(JTRC_JFIF, "JFIF APP0 marker: version %d.%02d, density %dx%d  %d")
+JMESSAGE(JTRC_JFIF_BADTHUMBNAILSIZE,
+        "Warning: thumbnail image size does not match data length %u")
+JMESSAGE(JTRC_JFIF_EXTENSION,
+        "JFIF extension marker: type 0x%02x, length %u")
+JMESSAGE(JTRC_JFIF_THUMBNAIL, "    with %d x %d thumbnail image")
+JMESSAGE(JTRC_MISC_MARKER, "Miscellaneous marker 0x%02x, length %u")
+JMESSAGE(JTRC_PARMLESS_MARKER, "Unexpected marker 0x%02x")
+JMESSAGE(JTRC_QUANTVALS, "        %4u %4u %4u %4u %4u %4u %4u %4u")
+JMESSAGE(JTRC_QUANT_3_NCOLORS, "Quantizing to %d = %d*%d*%d colors")
+JMESSAGE(JTRC_QUANT_NCOLORS, "Quantizing to %d colors")
+JMESSAGE(JTRC_QUANT_SELECTED, "Selected %d colors for quantization")
+JMESSAGE(JTRC_RECOVERY_ACTION, "At marker 0x%02x, recovery action %d")
+JMESSAGE(JTRC_RST, "RST%d")
+JMESSAGE(JTRC_SMOOTH_NOTIMPL,
+        "Smoothing not supported with nonstandard sampling ratios")
+JMESSAGE(JTRC_SOF, "Start Of Frame 0x%02x: width=%u, height=%u, components=%d")
+JMESSAGE(JTRC_SOF_COMPONENT, "    Component %d: %dhx%dv q=%d")
+JMESSAGE(JTRC_SOI, "Start of Image")
+JMESSAGE(JTRC_SOS, "Start Of Scan: %d components")
+JMESSAGE(JTRC_SOS_COMPONENT, "    Component %d: dc=%d ac=%d")
+JMESSAGE(JTRC_SOS_PARAMS, "  Ss=%d, Se=%d, Ah=%d, Al=%d")
+JMESSAGE(JTRC_TFILE_CLOSE, "Closed temporary file %s")
+JMESSAGE(JTRC_TFILE_OPEN, "Opened temporary file %s")
+JMESSAGE(JTRC_THUMB_JPEG,
+        "JFIF extension marker: JPEG-compressed thumbnail image, length %u")
+JMESSAGE(JTRC_THUMB_PALETTE,
+        "JFIF extension marker: palette thumbnail image, length %u")
+JMESSAGE(JTRC_THUMB_RGB,
+        "JFIF extension marker: RGB thumbnail image, length %u")
+JMESSAGE(JTRC_UNKNOWN_IDS,
+        "Unrecognized component IDs %d %d %d, assuming YCbCr")
+JMESSAGE(JTRC_XMS_CLOSE, "Freed XMS handle %u")
+JMESSAGE(JTRC_XMS_OPEN, "Obtained XMS handle %u")
+JMESSAGE(JWRN_ADOBE_XFORM, "Unknown Adobe color transform code %d")
+JMESSAGE(JWRN_ARITH_BAD_CODE, "Corrupt JPEG data: bad arithmetic code")
+JMESSAGE(JWRN_BOGUS_PROGRESSION,
+        "Inconsistent progression sequence for component %d coefficient %d")
+JMESSAGE(JWRN_EXTRANEOUS_DATA,
+        "Corrupt JPEG data: %u extraneous bytes before marker 0x%02x")
+JMESSAGE(JWRN_HIT_MARKER, "Corrupt JPEG data: premature end of data segment")
+JMESSAGE(JWRN_HUFF_BAD_CODE, "Corrupt JPEG data: bad Huffman code")
+JMESSAGE(JWRN_JFIF_MAJOR, "Warning: unknown JFIF revision number %d.%02d")
+JMESSAGE(JWRN_JPEG_EOF, "Premature end of JPEG file")
+JMESSAGE(JWRN_MUST_RESYNC,
+        "Corrupt JPEG data: found marker 0x%02x instead of RST%d")
+JMESSAGE(JWRN_NOT_SEQUENTIAL, "Invalid SOS parameters for sequential JPEG")
+JMESSAGE(JWRN_TOO_MUCH_DATA, "Application transferred too many scanlines")
+
+#ifdef JMAKE_ENUM_LIST
+
+  JMSG_LASTMSGCODE
+} J_MESSAGE_CODE;
+
+#undef JMAKE_ENUM_LIST
+#endif /* JMAKE_ENUM_LIST */
+
+/* Zap JMESSAGE macro so that future re-inclusions do nothing by default */
+#undef JMESSAGE
+
+
+#ifndef JERROR_H
+#define JERROR_H
+
+/* Macros to simplify using the error and trace message stuff */
+/* The first parameter is either type of cinfo pointer */
+
+/* Fatal errors (print message and exit) */
+#define ERREXIT(cinfo,code)  \
+  ((cinfo)->err->msg_code = (code), \
+   (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo)))
+#define ERREXIT1(cinfo,code,p1)  \
+  ((cinfo)->err->msg_code = (code), \
+   (cinfo)->err->msg_parm.i[0] = (p1), \
+   (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo)))
+#define ERREXIT2(cinfo,code,p1,p2)  \
+  ((cinfo)->err->msg_code = (code), \
+   (cinfo)->err->msg_parm.i[0] = (p1), \
+   (cinfo)->err->msg_parm.i[1] = (p2), \
+   (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo)))
+#define ERREXIT3(cinfo,code,p1,p2,p3)  \
+  ((cinfo)->err->msg_code = (code), \
+   (cinfo)->err->msg_parm.i[0] = (p1), \
+   (cinfo)->err->msg_parm.i[1] = (p2), \
+   (cinfo)->err->msg_parm.i[2] = (p3), \
+   (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo)))
+#define ERREXIT4(cinfo,code,p1,p2,p3,p4)  \
+  ((cinfo)->err->msg_code = (code), \
+   (cinfo)->err->msg_parm.i[0] = (p1), \
+   (cinfo)->err->msg_parm.i[1] = (p2), \
+   (cinfo)->err->msg_parm.i[2] = (p3), \
+   (cinfo)->err->msg_parm.i[3] = (p4), \
+   (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo)))
+#define ERREXIT6(cinfo,code,p1,p2,p3,p4,p5,p6)  \
+  ((cinfo)->err->msg_code = (code), \
+   (cinfo)->err->msg_parm.i[0] = (p1), \
+   (cinfo)->err->msg_parm.i[1] = (p2), \
+   (cinfo)->err->msg_parm.i[2] = (p3), \
+   (cinfo)->err->msg_parm.i[3] = (p4), \
+   (cinfo)->err->msg_parm.i[4] = (p5), \
+   (cinfo)->err->msg_parm.i[5] = (p6), \
+   (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo)))
+#define ERREXITS(cinfo,code,str)  \
+  ((cinfo)->err->msg_code = (code), \
+   strncpy((cinfo)->err->msg_parm.s, (str), JMSG_STR_PARM_MAX), \
+   (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo)))
+
+#define MAKESTMT(stuff)                do { stuff } while (0)
+
+/* Nonfatal errors (we can keep going, but the data is probably corrupt) */
+#define WARNMS(cinfo,code)  \
+  ((cinfo)->err->msg_code = (code), \
+   (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), -1))
+#define WARNMS1(cinfo,code,p1)  \
+  ((cinfo)->err->msg_code = (code), \
+   (cinfo)->err->msg_parm.i[0] = (p1), \
+   (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), -1))
+#define WARNMS2(cinfo,code,p1,p2)  \
+  ((cinfo)->err->msg_code = (code), \
+   (cinfo)->err->msg_parm.i[0] = (p1), \
+   (cinfo)->err->msg_parm.i[1] = (p2), \
+   (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), -1))
+
+/* Informational/debugging messages */
+#define TRACEMS(cinfo,lvl,code)  \
+  ((cinfo)->err->msg_code = (code), \
+   (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)))
+#define TRACEMS1(cinfo,lvl,code,p1)  \
+  ((cinfo)->err->msg_code = (code), \
+   (cinfo)->err->msg_parm.i[0] = (p1), \
+   (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)))
+#define TRACEMS2(cinfo,lvl,code,p1,p2)  \
+  ((cinfo)->err->msg_code = (code), \
+   (cinfo)->err->msg_parm.i[0] = (p1), \
+   (cinfo)->err->msg_parm.i[1] = (p2), \
+   (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)))
+#define TRACEMS3(cinfo,lvl,code,p1,p2,p3)  \
+  MAKESTMT(int * _mp = (cinfo)->err->msg_parm.i; \
+          _mp[0] = (p1); _mp[1] = (p2); _mp[2] = (p3); \
+          (cinfo)->err->msg_code = (code); \
+          (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)); )
+#define TRACEMS4(cinfo,lvl,code,p1,p2,p3,p4)  \
+  MAKESTMT(int * _mp = (cinfo)->err->msg_parm.i; \
+          _mp[0] = (p1); _mp[1] = (p2); _mp[2] = (p3); _mp[3] = (p4); \
+          (cinfo)->err->msg_code = (code); \
+          (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)); )
+#define TRACEMS5(cinfo,lvl,code,p1,p2,p3,p4,p5)  \
+  MAKESTMT(int * _mp = (cinfo)->err->msg_parm.i; \
+          _mp[0] = (p1); _mp[1] = (p2); _mp[2] = (p3); _mp[3] = (p4); \
+          _mp[4] = (p5); \
+          (cinfo)->err->msg_code = (code); \
+          (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)); )
+#define TRACEMS8(cinfo,lvl,code,p1,p2,p3,p4,p5,p6,p7,p8)  \
+  MAKESTMT(int * _mp = (cinfo)->err->msg_parm.i; \
+          _mp[0] = (p1); _mp[1] = (p2); _mp[2] = (p3); _mp[3] = (p4); \
+          _mp[4] = (p5); _mp[5] = (p6); _mp[6] = (p7); _mp[7] = (p8); \
+          (cinfo)->err->msg_code = (code); \
+          (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)); )
+#define TRACEMSS(cinfo,lvl,code,str)  \
+  ((cinfo)->err->msg_code = (code), \
+   strncpy((cinfo)->err->msg_parm.s, (str), JMSG_STR_PARM_MAX), \
+   (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)))
+
+#endif /* JERROR_H */
diff --git a/include/jmorecfg.h b/include/jmorecfg.h
new file mode 100644 (file)
index 0000000..679d68b
--- /dev/null
@@ -0,0 +1,446 @@
+/*
+ * jmorecfg.h
+ *
+ * Copyright (C) 1991-1997, Thomas G. Lane.
+ * Modified 1997-2013 by Guido Vollbeding.
+ * 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 additional configuration options that customize the
+ * JPEG software for special applications or support machine-dependent
+ * optimizations.  Most users will not need to touch this file.
+ */
+
+
+/*
+ * Define BITS_IN_JSAMPLE as either
+ *   8   for 8-bit sample values (the usual setting)
+ *   9   for 9-bit sample values
+ *   10  for 10-bit sample values
+ *   11  for 11-bit sample values
+ *   12  for 12-bit sample values
+ * Only 8, 9, 10, 11, and 12 bits sample data precision are supported for
+ * full-feature DCT processing.  Further depths up to 16-bit may be added
+ * later for the lossless modes of operation.
+ * Run-time selection and conversion of data precision will be added later
+ * and are currently not supported, sorry.
+ * Exception:  The transcoding part (jpegtran) supports all settings in a
+ * single instance, since it operates on the level of DCT coefficients and
+ * not sample values.  The DCT coefficients are of the same type (16 bits)
+ * in all cases (see below).
+ */
+
+#define BITS_IN_JSAMPLE  8     /* use 8, 9, 10, 11, or 12 */
+
+
+/*
+ * Maximum number of components (color channels) allowed in JPEG image.
+ * To meet the letter of the JPEG spec, set this to 255.  However, darn
+ * few applications need more than 4 channels (maybe 5 for CMYK + alpha
+ * mask).  We recommend 10 as a reasonable compromise; use 4 if you are
+ * really short on memory.  (Each allowed component costs a hundred or so
+ * bytes of storage, whether actually used in an image or not.)
+ */
+
+#define MAX_COMPONENTS  10     /* maximum number of image components */
+
+
+/*
+ * Basic data types.
+ * You may need to change these if you have a machine with unusual data
+ * type sizes; for example, "char" not 8 bits, "short" not 16 bits,
+ * or "long" not 32 bits.  We don't care whether "int" is 16 or 32 bits,
+ * but it had better be at least 16.
+ */
+
+/* Representation of a single sample (pixel element value).
+ * We frequently allocate large arrays of these, so it's important to keep
+ * them small.  But if you have memory to burn and access to char or short
+ * arrays is very slow on your hardware, you might want to change these.
+ */
+
+#if BITS_IN_JSAMPLE == 8
+/* JSAMPLE should be the smallest type that will hold the values 0..255.
+ * You can use a signed char by having GETJSAMPLE mask it with 0xFF.
+ */
+
+#ifdef HAVE_UNSIGNED_CHAR
+
+typedef unsigned char JSAMPLE;
+#define GETJSAMPLE(value)  ((int) (value))
+
+#else /* not HAVE_UNSIGNED_CHAR */
+
+typedef char JSAMPLE;
+#ifdef CHAR_IS_UNSIGNED
+#define GETJSAMPLE(value)  ((int) (value))
+#else
+#define GETJSAMPLE(value)  ((int) (value) & 0xFF)
+#endif /* CHAR_IS_UNSIGNED */
+
+#endif /* HAVE_UNSIGNED_CHAR */
+
+#define MAXJSAMPLE     255
+#define CENTERJSAMPLE  128
+
+#endif /* BITS_IN_JSAMPLE == 8 */
+
+
+#if BITS_IN_JSAMPLE == 9
+/* JSAMPLE should be the smallest type that will hold the values 0..511.
+ * On nearly all machines "short" will do nicely.
+ */
+
+typedef short JSAMPLE;
+#define GETJSAMPLE(value)  ((int) (value))
+
+#define MAXJSAMPLE     511
+#define CENTERJSAMPLE  256
+
+#endif /* BITS_IN_JSAMPLE == 9 */
+
+
+#if BITS_IN_JSAMPLE == 10
+/* JSAMPLE should be the smallest type that will hold the values 0..1023.
+ * On nearly all machines "short" will do nicely.
+ */
+
+typedef short JSAMPLE;
+#define GETJSAMPLE(value)  ((int) (value))
+
+#define MAXJSAMPLE     1023
+#define CENTERJSAMPLE  512
+
+#endif /* BITS_IN_JSAMPLE == 10 */
+
+
+#if BITS_IN_JSAMPLE == 11
+/* JSAMPLE should be the smallest type that will hold the values 0..2047.
+ * On nearly all machines "short" will do nicely.
+ */
+
+typedef short JSAMPLE;
+#define GETJSAMPLE(value)  ((int) (value))
+
+#define MAXJSAMPLE     2047
+#define CENTERJSAMPLE  1024
+
+#endif /* BITS_IN_JSAMPLE == 11 */
+
+
+#if BITS_IN_JSAMPLE == 12
+/* JSAMPLE should be the smallest type that will hold the values 0..4095.
+ * On nearly all machines "short" will do nicely.
+ */
+
+typedef short JSAMPLE;
+#define GETJSAMPLE(value)  ((int) (value))
+
+#define MAXJSAMPLE     4095
+#define CENTERJSAMPLE  2048
+
+#endif /* BITS_IN_JSAMPLE == 12 */
+
+
+/* Representation of a DCT frequency coefficient.
+ * This should be a signed value of at least 16 bits; "short" is usually OK.
+ * Again, we allocate large arrays of these, but you can change to int
+ * if you have memory to burn and "short" is really slow.
+ */
+
+typedef short JCOEF;
+
+
+/* Compressed datastreams are represented as arrays of JOCTET.
+ * These must be EXACTLY 8 bits wide, at least once they are written to
+ * external storage.  Note that when using the stdio data source/destination
+ * managers, this is also the data type passed to fread/fwrite.
+ */
+
+#ifdef HAVE_UNSIGNED_CHAR
+
+typedef unsigned char JOCTET;
+#define GETJOCTET(value)  (value)
+
+#else /* not HAVE_UNSIGNED_CHAR */
+
+typedef char JOCTET;
+#ifdef CHAR_IS_UNSIGNED
+#define GETJOCTET(value)  (value)
+#else
+#define GETJOCTET(value)  ((value) & 0xFF)
+#endif /* CHAR_IS_UNSIGNED */
+
+#endif /* HAVE_UNSIGNED_CHAR */
+
+
+/* These typedefs are used for various table entries and so forth.
+ * They must be at least as wide as specified; but making them too big
+ * won't cost a huge amount of memory, so we don't provide special
+ * extraction code like we did for JSAMPLE.  (In other words, these
+ * typedefs live at a different point on the speed/space tradeoff curve.)
+ */
+
+/* UINT8 must hold at least the values 0..255. */
+
+#ifdef HAVE_UNSIGNED_CHAR
+typedef unsigned char UINT8;
+#else /* not HAVE_UNSIGNED_CHAR */
+#ifdef CHAR_IS_UNSIGNED
+typedef char UINT8;
+#else /* not CHAR_IS_UNSIGNED */
+typedef short UINT8;
+#endif /* CHAR_IS_UNSIGNED */
+#endif /* HAVE_UNSIGNED_CHAR */
+
+/* UINT16 must hold at least the values 0..65535. */
+
+#ifdef HAVE_UNSIGNED_SHORT
+typedef unsigned short UINT16;
+#else /* not HAVE_UNSIGNED_SHORT */
+typedef unsigned int UINT16;
+#endif /* HAVE_UNSIGNED_SHORT */
+
+/* INT16 must hold at least the values -32768..32767. */
+
+#ifndef XMD_H                  /* X11/xmd.h correctly defines INT16 */
+typedef short INT16;
+#endif
+
+/* INT32 must hold at least signed 32-bit values. */
+
+#ifndef XMD_H                  /* X11/xmd.h correctly defines INT32 */
+#ifndef _BASETSD_H_            /* Microsoft defines it in basetsd.h */
+#ifndef _BASETSD_H             /* MinGW is slightly different */
+#ifndef QGLOBAL_H              /* Qt defines it in qglobal.h */
+typedef long INT32;
+#endif
+#endif
+#endif
+#endif
+
+/* Datatype used for image dimensions.  The JPEG standard only supports
+ * images up to 64K*64K due to 16-bit fields in SOF markers.  Therefore
+ * "unsigned int" is sufficient on all machines.  However, if you need to
+ * handle larger images and you don't mind deviating from the spec, you
+ * can change this datatype.
+ */
+
+typedef unsigned int JDIMENSION;
+
+#define JPEG_MAX_DIMENSION  65500L  /* a tad under 64K to prevent overflows */
+
+
+/* These macros are used in all function definitions and extern declarations.
+ * You could modify them if you need to change function linkage conventions;
+ * in particular, you'll need to do that to make the library a Windows DLL.
+ * Another application is to make all functions global for use with debuggers
+ * or code profilers that require it.
+ */
+
+/* a function called through method pointers: */
+#define METHODDEF(type)                static type
+/* a function used only in its module: */
+#define LOCAL(type)            static type
+/* a function referenced thru EXTERNs: */
+#define GLOBAL(type)           type
+/* a reference to a GLOBAL function: */
+#define EXTERN(type)           extern type
+
+
+/* This macro is used to declare a "method", that is, a function pointer.
+ * We want to supply prototype parameters if the compiler can cope.
+ * Note that the arglist parameter must be parenthesized!
+ * Again, you can customize this if you need special linkage keywords.
+ */
+
+#ifdef HAVE_PROTOTYPES
+#define JMETHOD(type,methodname,arglist)  type (*methodname) arglist
+#else
+#define JMETHOD(type,methodname,arglist)  type (*methodname) ()
+#endif
+
+
+/* The noreturn type identifier is used to declare functions
+ * which cannot return.
+ * Compilers can thus create more optimized code and perform
+ * better checks for warnings and errors.
+ * Static analyzer tools can make improved inferences about
+ * execution paths and are prevented from giving false alerts.
+ *
+ * Unfortunately, the proposed specifications of corresponding
+ * extensions in the Dec 2011 ISO C standard revision (C11),
+ * GCC, MSVC, etc. are not viable.
+ * Thus we introduce a user defined type to declare noreturn
+ * functions at least for clarity.  A proper compiler would
+ * have a suitable noreturn type to match in place of void.
+ */
+
+#ifndef HAVE_NORETURN_T
+typedef void noreturn_t;
+#endif
+
+
+/* Here is the pseudo-keyword for declaring pointers that must be "far"
+ * on 80x86 machines.  Most of the specialized coding for 80x86 is handled
+ * by just saying "FAR *" where such a pointer is needed.  In a few places
+ * explicit coding is needed; see uses of the NEED_FAR_POINTERS symbol.
+ */
+
+#ifndef FAR
+#ifdef NEED_FAR_POINTERS
+#define FAR  far
+#else
+#define FAR
+#endif
+#endif
+
+
+/*
+ * On a few systems, type boolean and/or its values FALSE, TRUE may appear
+ * in standard header files.  Or you may have conflicts with application-
+ * specific header files that you want to include together with these files.
+ * Defining HAVE_BOOLEAN before including jpeglib.h should make it work.
+ */
+
+#ifndef HAVE_BOOLEAN
+#if defined FALSE || defined TRUE || defined QGLOBAL_H
+/* Qt3 defines FALSE and TRUE as "const" variables in qglobal.h */
+typedef int boolean;
+#ifndef FALSE                  /* in case these macros already exist */
+#define FALSE  0               /* values of boolean */
+#endif
+#ifndef TRUE
+#define TRUE   1
+#endif
+#else
+typedef enum { FALSE = 0, TRUE = 1 } boolean;
+#endif
+#endif
+
+
+/*
+ * The remaining options affect code selection within the JPEG library,
+ * but they don't need to be visible to most applications using the library.
+ * To minimize application namespace pollution, the symbols won't be
+ * defined unless JPEG_INTERNALS or JPEG_INTERNAL_OPTIONS has been defined.
+ */
+
+#ifdef JPEG_INTERNALS
+#define JPEG_INTERNAL_OPTIONS
+#endif
+
+#ifdef JPEG_INTERNAL_OPTIONS
+
+
+/*
+ * These defines indicate whether to include various optional functions.
+ * Undefining some of these symbols will produce a smaller but less capable
+ * library.  Note that you can leave certain source files out of the
+ * compilation/linking process if you've #undef'd the corresponding symbols.
+ * (You may HAVE to do that if your compiler doesn't like null source files.)
+ */
+
+/* Capability options common to encoder and decoder: */
+
+#define DCT_ISLOW_SUPPORTED    /* slow but accurate integer algorithm */
+#define DCT_IFAST_SUPPORTED    /* faster, less accurate integer method */
+#define DCT_FLOAT_SUPPORTED    /* floating-point: accurate, fast on fast HW */
+
+/* Encoder capability options: */
+
+#define C_ARITH_CODING_SUPPORTED    /* Arithmetic coding back end? */
+#define C_MULTISCAN_FILES_SUPPORTED /* Multiple-scan JPEG files? */
+#define C_PROGRESSIVE_SUPPORTED            /* Progressive JPEG? (Requires MULTISCAN)*/
+#define DCT_SCALING_SUPPORTED      /* Input rescaling via DCT? (Requires DCT_ISLOW)*/
+#define ENTROPY_OPT_SUPPORTED      /* Optimization of entropy coding parms? */
+/* Note: if you selected more than 8-bit data precision, it is dangerous to
+ * turn off ENTROPY_OPT_SUPPORTED.  The standard Huffman tables are only
+ * good for 8-bit precision, so arithmetic coding is recommended for higher
+ * precision.  The Huffman encoder normally uses entropy optimization to
+ * compute usable tables for higher precision.  Otherwise, you'll have to
+ * supply different default Huffman tables.
+ * The exact same statements apply for progressive JPEG: the default tables
+ * don't work for progressive mode.  (This may get fixed, however.)
+ */
+#define INPUT_SMOOTHING_SUPPORTED   /* Input image smoothing option? */
+
+/* Decoder capability options: */
+
+#define D_ARITH_CODING_SUPPORTED    /* Arithmetic coding back end? */
+#define D_MULTISCAN_FILES_SUPPORTED /* Multiple-scan JPEG files? */
+#define D_PROGRESSIVE_SUPPORTED            /* Progressive JPEG? (Requires MULTISCAN)*/
+#define IDCT_SCALING_SUPPORTED     /* Output rescaling via IDCT? (Requires DCT_ISLOW)*/
+#define SAVE_MARKERS_SUPPORTED     /* jpeg_save_markers() needed? */
+#define BLOCK_SMOOTHING_SUPPORTED   /* Block smoothing? (Progressive only) */
+#undef  UPSAMPLE_SCALING_SUPPORTED  /* Output rescaling at upsample stage? */
+#define UPSAMPLE_MERGING_SUPPORTED  /* Fast path for sloppy upsampling? */
+#define QUANT_1PASS_SUPPORTED      /* 1-pass color quantization? */
+#define QUANT_2PASS_SUPPORTED      /* 2-pass color quantization? */
+
+/* more capability options later, no doubt */
+
+
+/*
+ * Ordering of RGB data in scanlines passed to or from the application.
+ * If your application wants to deal with data in the order B,G,R, just
+ * change these macros.  You can also deal with formats such as R,G,B,X
+ * (one extra byte per pixel) by changing RGB_PIXELSIZE.  Note that changing
+ * the offsets will also change the order in which colormap data is organized.
+ * RESTRICTIONS:
+ * 1. The sample applications cjpeg,djpeg do NOT support modified RGB formats.
+ * 2. The color quantizer modules will not behave desirably if RGB_PIXELSIZE
+ *    is not 3 (they don't understand about dummy color components!).  So you
+ *    can't use color quantization if you change that value.
+ */
+
+#define RGB_RED                0       /* Offset of Red in an RGB scanline element */
+#define RGB_GREEN      1       /* Offset of Green */
+#define RGB_BLUE       2       /* Offset of Blue */
+#define RGB_PIXELSIZE  3       /* JSAMPLEs per RGB scanline element */
+
+
+/* Definitions for speed-related optimizations. */
+
+
+/* If your compiler supports inline functions, define INLINE
+ * as the inline keyword; otherwise define it as empty.
+ */
+
+#ifndef INLINE
+#ifdef __GNUC__                        /* for instance, GNU C knows about inline */
+#define INLINE __inline__
+#endif
+#ifndef INLINE
+#define INLINE                 /* default is to define it as empty */
+#endif
+#endif
+
+
+/* On some machines (notably 68000 series) "int" is 32 bits, but multiplying
+ * two 16-bit shorts is faster than multiplying two ints.  Define MULTIPLIER
+ * as short on such a machine.  MULTIPLIER must be at least 16 bits wide.
+ */
+
+#ifndef MULTIPLIER
+#define MULTIPLIER  int                /* type for fastest integer multiply */
+#endif
+
+
+/* FAST_FLOAT should be either float or double, whichever is done faster
+ * by your compiler.  (Note that this type is only used in the floating point
+ * DCT routines, so it only matters if you've defined DCT_FLOAT_SUPPORTED.)
+ * Typically, float is faster in ANSI C compilers, while double is faster in
+ * pre-ANSI compilers (because they insist on converting to double anyway).
+ * The code below therefore chooses float if we have ANSI-style prototypes.
+ */
+
+#ifndef FAST_FLOAT
+#ifdef HAVE_PROTOTYPES
+#define FAST_FLOAT  float
+#else
+#define FAST_FLOAT  double
+#endif
+#endif
+
+#endif /* JPEG_INTERNAL_OPTIONS */
diff --git a/include/jpeglib.h b/include/jpeglib.h
new file mode 100644 (file)
index 0000000..b1fa8ea
--- /dev/null
@@ -0,0 +1,1183 @@
+/*
+ * jpeglib.h
+ *
+ * Copyright (C) 1991-1998, Thomas G. Lane.
+ * Modified 2002-2020 by Guido Vollbeding.
+ * 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 application interface for the JPEG library.
+ * Most applications using the library need only include this file,
+ * and perhaps jerror.h if they want to know the exact error codes.
+ */
+
+#ifndef JPEGLIB_H
+#define JPEGLIB_H
+
+/*
+ * First we include the configuration files that record how this
+ * installation of the JPEG library is set up.  jconfig.h can be
+ * generated automatically for many systems.  jmorecfg.h contains
+ * manual configuration options that most people need not worry about.
+ */
+
+#ifndef JCONFIG_INCLUDED       /* in case jinclude.h already did */
+#include "jconfig.h"           /* widely used configuration options */
+#endif
+#include "jmorecfg.h"          /* seldom changed options */
+
+
+#ifdef __cplusplus
+#ifndef DONT_USE_EXTERN_C
+extern "C" {
+#endif
+#endif
+
+/* Version IDs for the JPEG library.
+ * Might be useful for tests like "#if JPEG_LIB_VERSION >= 90".
+ */
+
+#define JPEG_LIB_VERSION        90     /* Compatibility version 9.0 */
+#define JPEG_LIB_VERSION_MAJOR  9
+#define JPEG_LIB_VERSION_MINOR  5
+
+
+/* Various constants determining the sizes of things.
+ * All of these are specified by the JPEG standard,
+ * so don't change them if you want to be compatible.
+ */
+
+#define DCTSIZE                    8   /* The basic DCT block is 8x8 coefficients */
+#define DCTSIZE2           64  /* DCTSIZE squared; # of elements in a block */
+#define NUM_QUANT_TBLS      4  /* Quantization tables are numbered 0..3 */
+#define NUM_HUFF_TBLS       4  /* Huffman tables are numbered 0..3 */
+#define NUM_ARITH_TBLS      16 /* Arith-coding tables are numbered 0..15 */
+#define MAX_COMPS_IN_SCAN   4  /* JPEG limit on # of components in one scan */
+#define MAX_SAMP_FACTOR     4  /* JPEG limit on sampling factors */
+/* Unfortunately, some bozo at Adobe saw no reason to be bound by the standard;
+ * the PostScript DCT filter can emit files with many more than 10 blocks/MCU.
+ * If you happen to run across such a file, you can up D_MAX_BLOCKS_IN_MCU
+ * to handle it.  We even let you do this from the jconfig.h file.  However,
+ * we strongly discourage changing C_MAX_BLOCKS_IN_MCU; just because Adobe
+ * sometimes emits noncompliant files doesn't mean you should too.
+ */
+#define C_MAX_BLOCKS_IN_MCU   10 /* compressor's limit on blocks per MCU */
+#ifndef D_MAX_BLOCKS_IN_MCU
+#define D_MAX_BLOCKS_IN_MCU   10 /* decompressor's limit on blocks per MCU */
+#endif
+
+
+/* Data structures for images (arrays of samples and of DCT coefficients).
+ * On 80x86 machines, the image arrays are too big for near pointers,
+ * but the pointer arrays can fit in near memory.
+ */
+
+typedef JSAMPLE FAR *JSAMPROW; /* ptr to one image row of pixel samples. */
+typedef JSAMPROW *JSAMPARRAY;  /* ptr to some rows (a 2-D sample array) */
+typedef JSAMPARRAY *JSAMPIMAGE;        /* a 3-D sample array: top index is color */
+
+typedef JCOEF JBLOCK[DCTSIZE2];        /* one block of coefficients */
+typedef JBLOCK FAR *JBLOCKROW; /* pointer to one row of coefficient blocks */
+typedef JBLOCKROW *JBLOCKARRAY;                /* a 2-D array of coefficient blocks */
+typedef JBLOCKARRAY *JBLOCKIMAGE;      /* a 3-D array of coefficient blocks */
+
+typedef JCOEF FAR *JCOEFPTR;   /* useful in a couple of places */
+
+
+/* Types for JPEG compression parameters and working tables. */
+
+
+/* DCT coefficient quantization tables. */
+
+typedef struct {
+  /* This array gives the coefficient quantizers in natural array order
+   * (not the zigzag order in which they are stored in a JPEG DQT marker).
+   * CAUTION: IJG versions prior to v6a kept this array in zigzag order.
+   */
+  UINT16 quantval[DCTSIZE2];   /* quantization step for each coefficient */
+  /* This field is used only during compression.  It's initialized FALSE when
+   * the table is created, and set TRUE when it's been output to the file.
+   * You could suppress output of a table by setting this to TRUE.
+   * (See jpeg_suppress_tables for an example.)
+   */
+  boolean sent_table;          /* TRUE when table has been output */
+} JQUANT_TBL;
+
+
+/* Huffman coding tables. */
+
+typedef struct {
+  /* These two fields directly represent the contents of a JPEG DHT marker */
+  UINT8 bits[17];              /* bits[k] = # of symbols with codes of */
+                               /* length k bits; bits[0] is unused */
+  UINT8 huffval[256];          /* The symbols, in order of incr code length */
+  /* This field is used only during compression.  It's initialized FALSE when
+   * the table is created, and set TRUE when it's been output to the file.
+   * You could suppress output of a table by setting this to TRUE.
+   * (See jpeg_suppress_tables for an example.)
+   */
+  boolean sent_table;          /* TRUE when table has been output */
+} JHUFF_TBL;
+
+
+/* Basic info about one component (color channel). */
+
+typedef struct {
+  /* These values are fixed over the whole image. */
+  /* For compression, they must be supplied by parameter setup; */
+  /* for decompression, they are read from the SOF marker. */
+  int component_id;            /* identifier for this component (0..255) */
+  int component_index;         /* its index in SOF or cinfo->comp_info[] */
+  int h_samp_factor;           /* horizontal sampling factor (1..4) */
+  int v_samp_factor;           /* vertical sampling factor (1..4) */
+  int quant_tbl_no;            /* quantization table selector (0..3) */
+  /* These values may vary between scans. */
+  /* For compression, they must be supplied by parameter setup; */
+  /* for decompression, they are read from the SOS marker. */
+  /* The decompressor output side may not use these variables. */
+  int dc_tbl_no;               /* DC entropy table selector (0..3) */
+  int ac_tbl_no;               /* AC entropy table selector (0..3) */
+
+  /* Remaining fields should be treated as private by applications. */
+
+  /* These values are computed during compression or decompression startup: */
+  /* Component's size in DCT blocks.
+   * Any dummy blocks added to complete an MCU are not counted; therefore
+   * these values do not depend on whether a scan is interleaved or not.
+   */
+  JDIMENSION width_in_blocks;
+  JDIMENSION height_in_blocks;
+  /* Size of a DCT block in samples,
+   * reflecting any scaling we choose to apply during the DCT step.
+   * Values from 1 to 16 are supported.
+   * Note that different components may receive different DCT scalings.
+   */
+  int DCT_h_scaled_size;
+  int DCT_v_scaled_size;
+  /* The downsampled dimensions are the component's actual, unpadded number
+   * of samples at the main buffer (preprocessing/compression interface);
+   * DCT scaling is included, so
+   * downsampled_width =
+   *   ceil(image_width * Hi/Hmax * DCT_h_scaled_size/block_size)
+   * and similarly for height.
+   */
+  JDIMENSION downsampled_width;         /* actual width in samples */
+  JDIMENSION downsampled_height; /* actual height in samples */
+  /* For decompression, in cases where some of the components will be
+   * ignored (eg grayscale output from YCbCr image), we can skip most
+   * computations for the unused components.
+   * For compression, some of the components will need further quantization
+   * scale by factor of 2 after DCT (eg BG_YCC output from normal RGB input).
+   * The field is first set TRUE for decompression, FALSE for compression
+   * in initial_setup, and then adapted in color conversion setup.
+   */
+  boolean component_needed;
+
+  /* These values are computed before starting a scan of the component. */
+  /* The decompressor output side may not use these variables. */
+  int MCU_width;               /* number of blocks per MCU, horizontally */
+  int MCU_height;              /* number of blocks per MCU, vertically */
+  int MCU_blocks;              /* MCU_width * MCU_height */
+  int MCU_sample_width;        /* MCU width in samples: MCU_width * DCT_h_scaled_size */
+  int last_col_width;          /* # of non-dummy blocks across in last MCU */
+  int last_row_height;         /* # of non-dummy blocks down in last MCU */
+
+  /* Saved quantization table for component; NULL if none yet saved.
+   * See jdinput.c comments about the need for this information.
+   * This field is currently used only for decompression.
+   */
+  JQUANT_TBL * quant_table;
+
+  /* Private per-component storage for DCT or IDCT subsystem. */
+  void * dct_table;
+} jpeg_component_info;
+
+
+/* The script for encoding a multiple-scan file is an array of these: */
+
+typedef struct {
+  int comps_in_scan;           /* number of components encoded in this scan */
+  int component_index[MAX_COMPS_IN_SCAN]; /* their SOF/comp_info[] indexes */
+  int Ss, Se;                  /* progressive JPEG spectral selection parms */
+  int Ah, Al;                  /* progressive JPEG successive approx. parms */
+} jpeg_scan_info;
+
+/* The decompressor can save APPn and COM markers in a list of these: */
+
+typedef struct jpeg_marker_struct FAR * jpeg_saved_marker_ptr;
+
+struct jpeg_marker_struct {
+  jpeg_saved_marker_ptr next;  /* next in list, or NULL */
+  UINT8 marker;                        /* marker code: JPEG_COM, or JPEG_APP0+n */
+  unsigned int original_length;        /* # bytes of data in the file */
+  unsigned int data_length;    /* # bytes of data saved at data[] */
+  JOCTET FAR * data;           /* the data contained in the marker */
+  /* the marker length word is not counted in data_length or original_length */
+};
+
+/* Known color spaces. */
+
+typedef enum {
+       JCS_UNKNOWN,            /* error/unspecified */
+       JCS_GRAYSCALE,          /* monochrome */
+       JCS_RGB,                /* red/green/blue, standard RGB (sRGB) */
+       JCS_YCbCr,              /* Y/Cb/Cr (also known as YUV), standard YCC */
+       JCS_CMYK,               /* C/M/Y/K */
+       JCS_YCCK,               /* Y/Cb/Cr/K */
+       JCS_BG_RGB,             /* big gamut red/green/blue, bg-sRGB */
+       JCS_BG_YCC              /* big gamut Y/Cb/Cr, bg-sYCC */
+} J_COLOR_SPACE;
+
+/* Supported color transforms. */
+
+typedef enum {
+       JCT_NONE           = 0,
+       JCT_SUBTRACT_GREEN = 1
+} J_COLOR_TRANSFORM;
+
+/* DCT/IDCT algorithm options. */
+
+typedef enum {
+       JDCT_ISLOW,             /* slow but accurate integer algorithm */
+       JDCT_IFAST,             /* faster, less accurate integer method */
+       JDCT_FLOAT              /* floating-point: accurate, fast on fast HW */
+} J_DCT_METHOD;
+
+#ifndef JDCT_DEFAULT           /* may be overridden in jconfig.h */
+#define JDCT_DEFAULT  JDCT_ISLOW
+#endif
+#ifndef JDCT_FASTEST           /* may be overridden in jconfig.h */
+#define JDCT_FASTEST  JDCT_IFAST
+#endif
+
+/* Dithering options for decompression. */
+
+typedef enum {
+       JDITHER_NONE,           /* no dithering */
+       JDITHER_ORDERED,        /* simple ordered dither */
+       JDITHER_FS              /* Floyd-Steinberg error diffusion dither */
+} J_DITHER_MODE;
+
+
+/* Common fields between JPEG compression and decompression master structs. */
+
+#define jpeg_common_fields \
+  struct jpeg_error_mgr * err; /* Error handler module */\
+  struct jpeg_memory_mgr * mem;        /* Memory manager module */\
+  struct jpeg_progress_mgr * progress; /* Progress monitor, or NULL if none */\
+  void * client_data;          /* Available for use by application */\
+  boolean is_decompressor;     /* So common code can tell which is which */\
+  int global_state             /* For checking call sequence validity */
+
+/* Routines that are to be used by both halves of the library are declared
+ * to receive a pointer to this structure.  There are no actual instances of
+ * jpeg_common_struct, only of jpeg_compress_struct and jpeg_decompress_struct.
+ */
+struct jpeg_common_struct {
+  jpeg_common_fields;          /* Fields common to both master struct types */
+  /* Additional fields follow in an actual jpeg_compress_struct or
+   * jpeg_decompress_struct.  All three structs must agree on these
+   * initial fields!  (This would be a lot cleaner in C++.)
+   */
+};
+
+typedef struct jpeg_common_struct * j_common_ptr;
+typedef struct jpeg_compress_struct * j_compress_ptr;
+typedef struct jpeg_decompress_struct * j_decompress_ptr;
+
+
+/* Master record for a compression instance */
+
+struct jpeg_compress_struct {
+  jpeg_common_fields;          /* Fields shared with jpeg_decompress_struct */
+
+  /* Destination for compressed data */
+  struct jpeg_destination_mgr * dest;
+
+  /* Description of source image --- these fields must be filled in by
+   * outer application before starting compression.  in_color_space must
+   * be correct before you can even call jpeg_set_defaults().
+   */
+
+  JDIMENSION image_width;      /* input image width */
+  JDIMENSION image_height;     /* input image height */
+  int input_components;                /* # of color components in input image */
+  J_COLOR_SPACE in_color_space;        /* colorspace of input image */
+
+  double input_gamma;          /* image gamma of input image */
+
+  /* Compression parameters --- these fields must be set before calling
+   * jpeg_start_compress().  We recommend calling jpeg_set_defaults() to
+   * initialize everything to reasonable defaults, then changing anything
+   * the application specifically wants to change.  That way you won't get
+   * burnt when new parameters are added.  Also note that there are several
+   * helper routines to simplify changing parameters.
+   */
+
+  unsigned int scale_num, scale_denom; /* fraction by which to scale image */
+
+  JDIMENSION jpeg_width;       /* scaled JPEG image width */
+  JDIMENSION jpeg_height;      /* scaled JPEG image height */
+  /* Dimensions of actual JPEG image that will be written to file,
+   * derived from input dimensions by scaling factors above.
+   * These fields are computed by jpeg_start_compress().
+   * You can also use jpeg_calc_jpeg_dimensions() to determine these values
+   * in advance of calling jpeg_start_compress().
+   */
+
+  int data_precision;          /* bits of precision in image data */
+
+  int num_components;          /* # of color components in JPEG image */
+  J_COLOR_SPACE jpeg_color_space; /* colorspace of JPEG image */
+
+  jpeg_component_info * comp_info;
+  /* comp_info[i] describes component that appears i'th in SOF */
+
+  JQUANT_TBL * quant_tbl_ptrs[NUM_QUANT_TBLS];
+  int q_scale_factor[NUM_QUANT_TBLS];
+  /* ptrs to coefficient quantization tables, or NULL if not defined,
+   * and corresponding scale factors (percentage, initialized 100).
+   */
+
+  JHUFF_TBL * dc_huff_tbl_ptrs[NUM_HUFF_TBLS];
+  JHUFF_TBL * ac_huff_tbl_ptrs[NUM_HUFF_TBLS];
+  /* ptrs to Huffman coding tables, or NULL if not defined */
+
+  UINT8 arith_dc_L[NUM_ARITH_TBLS]; /* L values for DC arith-coding tables */
+  UINT8 arith_dc_U[NUM_ARITH_TBLS]; /* U values for DC arith-coding tables */
+  UINT8 arith_ac_K[NUM_ARITH_TBLS]; /* Kx values for AC arith-coding tables */
+
+  int num_scans;               /* # of entries in scan_info array */
+  const jpeg_scan_info * scan_info; /* script for multi-scan file, or NULL */
+  /* The default value of scan_info is NULL, which causes a single-scan
+   * sequential JPEG file to be emitted.  To create a multi-scan file,
+   * set num_scans and scan_info to point to an array of scan definitions.
+   */
+
+  boolean raw_data_in;         /* TRUE=caller supplies downsampled data */
+  boolean arith_code;          /* TRUE=arithmetic coding, FALSE=Huffman */
+  boolean optimize_coding;     /* TRUE=optimize entropy encoding parms */
+  boolean CCIR601_sampling;    /* TRUE=first samples are cosited */
+  boolean do_fancy_downsampling; /* TRUE=apply fancy downsampling */
+  int smoothing_factor;                /* 1..100, or 0 for no input smoothing */
+  J_DCT_METHOD dct_method;     /* DCT algorithm selector */
+
+  /* The restart interval can be specified in absolute MCUs by setting
+   * restart_interval, or in MCU rows by setting restart_in_rows
+   * (in which case the correct restart_interval will be figured
+   * for each scan).
+   */
+  unsigned int restart_interval; /* MCUs per restart, or 0 for no restart */
+  int restart_in_rows;         /* if > 0, MCU rows per restart interval */
+
+  /* Parameters controlling emission of special markers. */
+
+  boolean write_JFIF_header;   /* should a JFIF marker be written? */
+  UINT8 JFIF_major_version;    /* What to write for the JFIF version number */
+  UINT8 JFIF_minor_version;
+  /* These three values are not used by the JPEG code, merely copied */
+  /* into the JFIF APP0 marker.  density_unit can be 0 for unknown, */
+  /* 1 for dots/inch, or 2 for dots/cm.  Note that the pixel aspect */
+  /* ratio is defined by X_density/Y_density even when density_unit=0. */
+  UINT8 density_unit;          /* JFIF code for pixel size units */
+  UINT16 X_density;            /* Horizontal pixel density */
+  UINT16 Y_density;            /* Vertical pixel density */
+  boolean write_Adobe_marker;  /* should an Adobe marker be written? */
+
+  J_COLOR_TRANSFORM color_transform;
+  /* Color transform identifier, writes LSE marker if nonzero */
+
+  /* State variable: index of next scanline to be written to
+   * jpeg_write_scanlines().  Application may use this to control its
+   * processing loop, e.g., "while (next_scanline < image_height)".
+   */
+
+  JDIMENSION next_scanline;    /* 0 .. image_height-1  */
+
+  /* Remaining fields are known throughout compressor, but generally
+   * should not be touched by a surrounding application.
+   */
+
+  /*
+   * These fields are computed during compression startup
+   */
+  boolean progressive_mode;    /* TRUE if scan script uses progressive mode */
+  int max_h_samp_factor;       /* largest h_samp_factor */
+  int max_v_samp_factor;       /* largest v_samp_factor */
+
+  int min_DCT_h_scaled_size;   /* smallest DCT_h_scaled_size of any component */
+  int min_DCT_v_scaled_size;   /* smallest DCT_v_scaled_size of any component */
+
+  JDIMENSION total_iMCU_rows;  /* # of iMCU rows to be input to coef ctlr */
+  /* The coefficient controller receives data in units of MCU rows as defined
+   * for fully interleaved scans (whether the JPEG file is interleaved or not).
+   * There are v_samp_factor * DCT_v_scaled_size sample rows of each component
+   * in an "iMCU" (interleaved MCU) row.
+   */
+
+  /*
+   * These fields are valid during any one scan.
+   * They describe the components and MCUs actually appearing in the scan.
+   */
+  int comps_in_scan;           /* # of JPEG components in this scan */
+  jpeg_component_info * cur_comp_info[MAX_COMPS_IN_SCAN];
+  /* *cur_comp_info[i] describes component that appears i'th in SOS */
+
+  JDIMENSION MCUs_per_row;     /* # of MCUs across the image */
+  JDIMENSION MCU_rows_in_scan; /* # of MCU rows in the image */
+
+  int blocks_in_MCU;           /* # of DCT blocks per MCU */
+  int MCU_membership[C_MAX_BLOCKS_IN_MCU];
+  /* MCU_membership[i] is index in cur_comp_info of component owning */
+  /* i'th block in an MCU */
+
+  int Ss, Se, Ah, Al;          /* progressive JPEG parameters for scan */
+
+  int block_size;              /* the basic DCT block size: 1..16 */
+  const int * natural_order;   /* natural-order position array */
+  int lim_Se;                  /* min( Se, DCTSIZE2-1 ) */
+
+  /*
+   * Links to compression subobjects (methods and private variables of modules)
+   */
+  struct jpeg_comp_master * master;
+  struct jpeg_c_main_controller * main;
+  struct jpeg_c_prep_controller * prep;
+  struct jpeg_c_coef_controller * coef;
+  struct jpeg_marker_writer * marker;
+  struct jpeg_color_converter * cconvert;
+  struct jpeg_downsampler * downsample;
+  struct jpeg_forward_dct * fdct;
+  struct jpeg_entropy_encoder * entropy;
+  jpeg_scan_info * script_space; /* workspace for jpeg_simple_progression */
+  int script_space_size;
+};
+
+
+/* Master record for a decompression instance */
+
+struct jpeg_decompress_struct {
+  jpeg_common_fields;          /* Fields shared with jpeg_compress_struct */
+
+  /* Source of compressed data */
+  struct jpeg_source_mgr * src;
+
+  /* Basic description of image --- filled in by jpeg_read_header(). */
+  /* Application may inspect these values to decide how to process image. */
+
+  JDIMENSION image_width;      /* nominal image width (from SOF marker) */
+  JDIMENSION image_height;     /* nominal image height */
+  int num_components;          /* # of color components in JPEG image */
+  J_COLOR_SPACE jpeg_color_space; /* colorspace of JPEG image */
+
+  /* Decompression processing parameters --- these fields must be set before
+   * calling jpeg_start_decompress().  Note that jpeg_read_header() initializes
+   * them to default values.
+   */
+
+  J_COLOR_SPACE out_color_space; /* colorspace for output */
+
+  unsigned int scale_num, scale_denom; /* fraction by which to scale image */
+
+  double output_gamma;         /* image gamma wanted in output */
+
+  boolean buffered_image;      /* TRUE=multiple output passes */
+  boolean raw_data_out;                /* TRUE=downsampled data wanted */
+
+  J_DCT_METHOD dct_method;     /* IDCT algorithm selector */
+  boolean do_fancy_upsampling; /* TRUE=apply fancy upsampling */
+  boolean do_block_smoothing;  /* TRUE=apply interblock smoothing */
+
+  boolean quantize_colors;     /* TRUE=colormapped output wanted */
+  /* the following are ignored if not quantize_colors: */
+  J_DITHER_MODE dither_mode;   /* type of color dithering to use */
+  boolean two_pass_quantize;   /* TRUE=use two-pass color quantization */
+  int desired_number_of_colors;        /* max # colors to use in created colormap */
+  /* these are significant only in buffered-image mode: */
+  boolean enable_1pass_quant;  /* enable future use of 1-pass quantizer */
+  boolean enable_external_quant;/* enable future use of external colormap */
+  boolean enable_2pass_quant;  /* enable future use of 2-pass quantizer */
+
+  /* Description of actual output image that will be returned to application.
+   * These fields are computed by jpeg_start_decompress().
+   * You can also use jpeg_calc_output_dimensions() to determine these values
+   * in advance of calling jpeg_start_decompress().
+   */
+
+  JDIMENSION output_width;     /* scaled image width */
+  JDIMENSION output_height;    /* scaled image height */
+  int out_color_components;    /* # of color components in out_color_space */
+  int output_components;       /* # of color components returned */
+  /* output_components is 1 (a colormap index) when quantizing colors;
+   * otherwise it equals out_color_components.
+   */
+  int rec_outbuf_height;       /* min recommended height of scanline buffer */
+  /* If the buffer passed to jpeg_read_scanlines() is less than this many rows
+   * high, space and time will be wasted due to unnecessary data copying.
+   * Usually rec_outbuf_height will be 1 or 2, at most 4.
+   */
+
+  /* When quantizing colors, the output colormap is described by these fields.
+   * The application can supply a colormap by setting colormap non-NULL before
+   * calling jpeg_start_decompress; otherwise a colormap is created during
+   * jpeg_start_decompress or jpeg_start_output.
+   * The map has out_color_components rows and actual_number_of_colors columns.
+   */
+  int actual_number_of_colors; /* number of entries in use */
+  JSAMPARRAY colormap;         /* The color map as a 2-D pixel array */
+
+  /* State variables: these variables indicate the progress of decompression.
+   * The application may examine these but must not modify them.
+   */
+
+  /* Row index of next scanline to be read from jpeg_read_scanlines().
+   * Application may use this to control its processing loop, e.g.,
+   * "while (output_scanline < output_height)".
+   */
+  JDIMENSION output_scanline;  /* 0 .. output_height-1  */
+
+  /* Current input scan number and number of iMCU rows completed in scan.
+   * These indicate the progress of the decompressor input side.
+   */
+  int input_scan_number;       /* Number of SOS markers seen so far */
+  JDIMENSION input_iMCU_row;   /* Number of iMCU rows completed */
+
+  /* The "output scan number" is the notional scan being displayed by the
+   * output side.  The decompressor will not allow output scan/row number
+   * to get ahead of input scan/row, but it can fall arbitrarily far behind.
+   */
+  int output_scan_number;      /* Nominal scan number being displayed */
+  JDIMENSION output_iMCU_row;  /* Number of iMCU rows read */
+
+  /* Current progression status.  coef_bits[c][i] indicates the precision
+   * with which component c's DCT coefficient i (in zigzag order) is known.
+   * It is -1 when no data has yet been received, otherwise it is the point
+   * transform (shift) value for the most recent scan of the coefficient
+   * (thus, 0 at completion of the progression).
+   * This pointer is NULL when reading a non-progressive file.
+   */
+  int (*coef_bits)[DCTSIZE2];  /* -1 or current Al value for each coef */
+
+  /* Internal JPEG parameters --- the application usually need not look at
+   * these fields.  Note that the decompressor output side may not use
+   * any parameters that can change between scans.
+   */
+
+  /* Quantization and Huffman tables are carried forward across input
+   * datastreams when processing abbreviated JPEG datastreams.
+   */
+
+  JQUANT_TBL * quant_tbl_ptrs[NUM_QUANT_TBLS];
+  /* ptrs to coefficient quantization tables, or NULL if not defined */
+
+  JHUFF_TBL * dc_huff_tbl_ptrs[NUM_HUFF_TBLS];
+  JHUFF_TBL * ac_huff_tbl_ptrs[NUM_HUFF_TBLS];
+  /* ptrs to Huffman coding tables, or NULL if not defined */
+
+  /* These parameters are never carried across datastreams, since they
+   * are given in SOF/SOS markers or defined to be reset by SOI.
+   */
+
+  int data_precision;          /* bits of precision in image data */
+
+  jpeg_component_info * comp_info;
+  /* comp_info[i] describes component that appears i'th in SOF */
+
+  boolean is_baseline;         /* TRUE if Baseline SOF0 encountered */
+  boolean progressive_mode;    /* TRUE if SOFn specifies progressive mode */
+  boolean arith_code;          /* TRUE=arithmetic coding, FALSE=Huffman */
+
+  UINT8 arith_dc_L[NUM_ARITH_TBLS]; /* L values for DC arith-coding tables */
+  UINT8 arith_dc_U[NUM_ARITH_TBLS]; /* U values for DC arith-coding tables */
+  UINT8 arith_ac_K[NUM_ARITH_TBLS]; /* Kx values for AC arith-coding tables */
+
+  unsigned int restart_interval; /* MCUs per restart interval, or 0 for no restart */
+
+  /* These fields record data obtained from optional markers recognized by
+   * the JPEG library.
+   */
+  boolean saw_JFIF_marker;     /* TRUE iff a JFIF APP0 marker was found */
+  /* Data copied from JFIF marker; only valid if saw_JFIF_marker is TRUE: */
+  UINT8 JFIF_major_version;    /* JFIF version number */
+  UINT8 JFIF_minor_version;
+  UINT8 density_unit;          /* JFIF code for pixel size units */
+  UINT16 X_density;            /* Horizontal pixel density */
+  UINT16 Y_density;            /* Vertical pixel density */
+  boolean saw_Adobe_marker;    /* TRUE iff an Adobe APP14 marker was found */
+  UINT8 Adobe_transform;       /* Color transform code from Adobe marker */
+
+  J_COLOR_TRANSFORM color_transform;
+  /* Color transform identifier derived from LSE marker, otherwise zero */
+
+  boolean CCIR601_sampling;    /* TRUE=first samples are cosited */
+
+  /* Aside from the specific data retained from APPn markers known to the
+   * library, the uninterpreted contents of any or all APPn and COM markers
+   * can be saved in a list for examination by the application.
+   */
+  jpeg_saved_marker_ptr marker_list; /* Head of list of saved markers */
+
+  /* Remaining fields are known throughout decompressor, but generally
+   * should not be touched by a surrounding application.
+   */
+
+  /*
+   * These fields are computed during decompression startup
+   */
+  int max_h_samp_factor;       /* largest h_samp_factor */
+  int max_v_samp_factor;       /* largest v_samp_factor */
+
+  int min_DCT_h_scaled_size;   /* smallest DCT_h_scaled_size of any component */
+  int min_DCT_v_scaled_size;   /* smallest DCT_v_scaled_size of any component */
+
+  JDIMENSION total_iMCU_rows;  /* # of iMCU rows in image */
+  /* The coefficient controller's input and output progress is measured in
+   * units of "iMCU" (interleaved MCU) rows.  These are the same as MCU rows
+   * in fully interleaved JPEG scans, but are used whether the scan is
+   * interleaved or not.  We define an iMCU row as v_samp_factor DCT block
+   * rows of each component.  Therefore, the IDCT output contains
+   * v_samp_factor * DCT_v_scaled_size sample rows of a component per iMCU row.
+   */
+
+  JSAMPLE * sample_range_limit; /* table for fast range-limiting */
+
+  /*
+   * These fields are valid during any one scan.
+   * They describe the components and MCUs actually appearing in the scan.
+   * Note that the decompressor output side must not use these fields.
+   */
+  int comps_in_scan;           /* # of JPEG components in this scan */
+  jpeg_component_info * cur_comp_info[MAX_COMPS_IN_SCAN];
+  /* *cur_comp_info[i] describes component that appears i'th in SOS */
+
+  JDIMENSION MCUs_per_row;     /* # of MCUs across the image */
+  JDIMENSION MCU_rows_in_scan; /* # of MCU rows in the image */
+
+  int blocks_in_MCU;           /* # of DCT blocks per MCU */
+  int MCU_membership[D_MAX_BLOCKS_IN_MCU];
+  /* MCU_membership[i] is index in cur_comp_info of component owning */
+  /* i'th block in an MCU */
+
+  int Ss, Se, Ah, Al;          /* progressive JPEG parameters for scan */
+
+  /* These fields are derived from Se of first SOS marker.
+   */
+  int block_size;              /* the basic DCT block size: 1..16 */
+  const int * natural_order; /* natural-order position array for entropy decode */
+  int lim_Se;                  /* min( Se, DCTSIZE2-1 ) for entropy decode */
+
+  /* This field is shared between entropy decoder and marker parser.
+   * It is either zero or the code of a JPEG marker that has been
+   * read from the data source, but has not yet been processed.
+   */
+  int unread_marker;
+
+  /*
+   * Links to decompression subobjects (methods, private variables of modules)
+   */
+  struct jpeg_decomp_master * master;
+  struct jpeg_d_main_controller * main;
+  struct jpeg_d_coef_controller * coef;
+  struct jpeg_d_post_controller * post;
+  struct jpeg_input_controller * inputctl;
+  struct jpeg_marker_reader * marker;
+  struct jpeg_entropy_decoder * entropy;
+  struct jpeg_inverse_dct * idct;
+  struct jpeg_upsampler * upsample;
+  struct jpeg_color_deconverter * cconvert;
+  struct jpeg_color_quantizer * cquantize;
+};
+
+
+/* "Object" declarations for JPEG modules that may be supplied or called
+ * directly by the surrounding application.
+ * As with all objects in the JPEG library, these structs only define the
+ * publicly visible methods and state variables of a module.  Additional
+ * private fields may exist after the public ones.
+ */
+
+
+/* Error handler object */
+
+struct jpeg_error_mgr {
+  /* Error exit handler: does not return to caller */
+  JMETHOD(noreturn_t, error_exit, (j_common_ptr cinfo));
+  /* Conditionally emit a trace or warning message */
+  JMETHOD(void, emit_message, (j_common_ptr cinfo, int msg_level));
+  /* Routine that actually outputs a trace or error message */
+  JMETHOD(void, output_message, (j_common_ptr cinfo));
+  /* Format a message string for the most recent JPEG error or message */
+  JMETHOD(void, format_message, (j_common_ptr cinfo, char * buffer));
+#define JMSG_LENGTH_MAX  200   /* recommended size of format_message buffer */
+  /* Reset error state variables at start of a new image */
+  JMETHOD(void, reset_error_mgr, (j_common_ptr cinfo));
+
+  /* The message ID code and any parameters are saved here.
+   * A message can have one string parameter or up to 8 int parameters.
+   */
+  int msg_code;
+#define JMSG_STR_PARM_MAX  80
+  union {
+    int i[8];
+    char s[JMSG_STR_PARM_MAX];
+  } msg_parm;
+
+  /* Standard state variables for error facility */
+
+  int trace_level;             /* max msg_level that will be displayed */
+
+  /* For recoverable corrupt-data errors, we emit a warning message,
+   * but keep going unless emit_message chooses to abort.  emit_message
+   * should count warnings in num_warnings.  The surrounding application
+   * can check for bad data by seeing if num_warnings is nonzero at the
+   * end of processing.
+   */
+  long num_warnings;           /* number of corrupt-data warnings */
+
+  /* These fields point to the table(s) of error message strings.
+   * An application can change the table pointer to switch to a different
+   * message list (typically, to change the language in which errors are
+   * reported).  Some applications may wish to add additional error codes
+   * that will be handled by the JPEG library error mechanism; the second
+   * table pointer is used for this purpose.
+   *
+   * First table includes all errors generated by JPEG library itself.
+   * Error code 0 is reserved for a "no such error string" message.
+   */
+  const char * const * jpeg_message_table; /* Library errors */
+  int last_jpeg_message;    /* Table contains strings 0..last_jpeg_message */
+  /* Second table can be added by application (see cjpeg/djpeg for example).
+   * It contains strings numbered first_addon_message..last_addon_message.
+   */
+  const char * const * addon_message_table; /* Non-library errors */
+  int first_addon_message;     /* code for first string in addon table */
+  int last_addon_message;      /* code for last string in addon table */
+};
+
+
+/* Progress monitor object */
+
+struct jpeg_progress_mgr {
+  JMETHOD(void, progress_monitor, (j_common_ptr cinfo));
+
+  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 */
+};
+
+
+/* Data destination object for compression */
+
+struct jpeg_destination_mgr {
+  JOCTET * next_output_byte;   /* => next byte to write in buffer */
+  size_t free_in_buffer;       /* # of byte spaces remaining in buffer */
+
+  JMETHOD(void, init_destination, (j_compress_ptr cinfo));
+  JMETHOD(boolean, empty_output_buffer, (j_compress_ptr cinfo));
+  JMETHOD(void, term_destination, (j_compress_ptr cinfo));
+};
+
+
+/* Data source object for decompression */
+
+struct jpeg_source_mgr {
+  const JOCTET * next_input_byte; /* => next byte to read from buffer */
+  size_t bytes_in_buffer;      /* # of bytes remaining in buffer */
+
+  JMETHOD(void, init_source, (j_decompress_ptr cinfo));
+  JMETHOD(boolean, fill_input_buffer, (j_decompress_ptr cinfo));
+  JMETHOD(void, skip_input_data, (j_decompress_ptr cinfo, long num_bytes));
+  JMETHOD(boolean, resync_to_restart, (j_decompress_ptr cinfo, int desired));
+  JMETHOD(void, term_source, (j_decompress_ptr cinfo));
+};
+
+
+/* Memory manager object.
+ * Allocates "small" objects (a few K total), "large" objects (tens of K),
+ * and "really big" objects (virtual arrays with backing store if needed).
+ * The memory manager does not allow individual objects to be freed; rather,
+ * each created object is assigned to a pool, and whole pools can be freed
+ * at once.  This is faster and more convenient than remembering exactly what
+ * to free, especially where malloc()/free() are not too speedy.
+ * NB: alloc routines never return NULL.  They exit to error_exit if not
+ * successful.
+ */
+
+#define JPOOL_PERMANENT        0       /* lasts until master record is destroyed */
+#define JPOOL_IMAGE    1       /* lasts until done with image/datastream */
+#define JPOOL_NUMPOOLS 2
+
+typedef struct jvirt_sarray_control * jvirt_sarray_ptr;
+typedef struct jvirt_barray_control * jvirt_barray_ptr;
+
+
+struct jpeg_memory_mgr {
+  /* Method pointers */
+  JMETHOD(void *, alloc_small, (j_common_ptr cinfo, int pool_id,
+                               size_t sizeofobject));
+  JMETHOD(void FAR *, alloc_large, (j_common_ptr cinfo, int pool_id,
+                                    size_t sizeofobject));
+  JMETHOD(JSAMPARRAY, alloc_sarray, (j_common_ptr cinfo, int pool_id,
+                                    JDIMENSION samplesperrow,
+                                    JDIMENSION numrows));
+  JMETHOD(JBLOCKARRAY, alloc_barray, (j_common_ptr cinfo, int pool_id,
+                                     JDIMENSION blocksperrow,
+                                     JDIMENSION numrows));
+  JMETHOD(jvirt_sarray_ptr, request_virt_sarray, (j_common_ptr cinfo,
+                                                 int pool_id,
+                                                 boolean pre_zero,
+                                                 JDIMENSION samplesperrow,
+                                                 JDIMENSION numrows,
+                                                 JDIMENSION maxaccess));
+  JMETHOD(jvirt_barray_ptr, request_virt_barray, (j_common_ptr cinfo,
+                                                 int pool_id,
+                                                 boolean pre_zero,
+                                                 JDIMENSION blocksperrow,
+                                                 JDIMENSION numrows,
+                                                 JDIMENSION maxaccess));
+  JMETHOD(void, realize_virt_arrays, (j_common_ptr cinfo));
+  JMETHOD(JSAMPARRAY, access_virt_sarray, (j_common_ptr cinfo,
+                                          jvirt_sarray_ptr ptr,
+                                          JDIMENSION start_row,
+                                          JDIMENSION num_rows,
+                                          boolean writable));
+  JMETHOD(JBLOCKARRAY, access_virt_barray, (j_common_ptr cinfo,
+                                           jvirt_barray_ptr ptr,
+                                           JDIMENSION start_row,
+                                           JDIMENSION num_rows,
+                                           boolean writable));
+  JMETHOD(void, free_pool, (j_common_ptr cinfo, int pool_id));
+  JMETHOD(void, self_destruct, (j_common_ptr cinfo));
+
+  /* Limit on memory allocation for this JPEG object.  (Note that this is
+   * merely advisory, not a guaranteed maximum; it only affects the space
+   * used for virtual-array buffers.)  May be changed by outer application
+   * after creating the JPEG object.
+   */
+  long max_memory_to_use;
+
+  /* Maximum allocation request accepted by alloc_large. */
+  long max_alloc_chunk;
+};
+
+
+/* Routine signature for application-supplied marker processing methods.
+ * Need not pass marker code since it is stored in cinfo->unread_marker.
+ */
+typedef JMETHOD(boolean, jpeg_marker_parser_method, (j_decompress_ptr cinfo));
+
+
+/* Declarations for routines called by application.
+ * The JPP macro hides prototype parameters from compilers that can't cope.
+ * Note JPP requires double parentheses.
+ */
+
+#ifdef HAVE_PROTOTYPES
+#define JPP(arglist)   arglist
+#else
+#define JPP(arglist)   ()
+#endif
+
+
+/* Short forms of external names for systems with brain-damaged linkers.
+ * We shorten external names to be unique in the first six letters, which
+ * is good enough for all known systems.
+ * (If your compiler itself needs names to be unique in less than 15 
+ * characters, you are out of luck.  Get a better compiler.)
+ */
+
+#ifdef NEED_SHORT_EXTERNAL_NAMES
+#define jpeg_std_error         jStdError
+#define jpeg_CreateCompress    jCreaCompress
+#define jpeg_CreateDecompress  jCreaDecompress
+#define jpeg_destroy_compress  jDestCompress
+#define jpeg_destroy_decompress        jDestDecompress
+#define jpeg_stdio_dest                jStdDest
+#define jpeg_stdio_src         jStdSrc
+#define jpeg_mem_dest          jMemDest
+#define jpeg_mem_src           jMemSrc
+#define jpeg_set_defaults      jSetDefaults
+#define jpeg_set_colorspace    jSetColorspace
+#define jpeg_default_colorspace        jDefColorspace
+#define jpeg_set_quality       jSetQuality
+#define jpeg_set_linear_quality        jSetLQuality
+#define jpeg_default_qtables   jDefQTables
+#define jpeg_add_quant_table   jAddQuantTable
+#define jpeg_quality_scaling   jQualityScaling
+#define jpeg_simple_progression        jSimProgress
+#define jpeg_suppress_tables   jSuppressTables
+#define jpeg_alloc_quant_table jAlcQTable
+#define jpeg_alloc_huff_table  jAlcHTable
+#define jpeg_std_huff_table    jStdHTable
+#define jpeg_start_compress    jStrtCompress
+#define jpeg_write_scanlines   jWrtScanlines
+#define jpeg_finish_compress   jFinCompress
+#define jpeg_calc_jpeg_dimensions      jCjpegDimensions
+#define jpeg_write_raw_data    jWrtRawData
+#define jpeg_write_marker      jWrtMarker
+#define jpeg_write_m_header    jWrtMHeader
+#define jpeg_write_m_byte      jWrtMByte
+#define jpeg_write_tables      jWrtTables
+#define jpeg_read_header       jReadHeader
+#define jpeg_start_decompress  jStrtDecompress
+#define jpeg_read_scanlines    jReadScanlines
+#define jpeg_finish_decompress jFinDecompress
+#define jpeg_read_raw_data     jReadRawData
+#define jpeg_has_multiple_scans        jHasMultScn
+#define jpeg_start_output      jStrtOutput
+#define jpeg_finish_output     jFinOutput
+#define jpeg_input_complete    jInComplete
+#define jpeg_new_colormap      jNewCMap
+#define jpeg_consume_input     jConsumeInput
+#define jpeg_core_output_dimensions    jCoreDimensions
+#define jpeg_calc_output_dimensions    jCalcDimensions
+#define jpeg_save_markers      jSaveMarkers
+#define jpeg_set_marker_processor      jSetMarker
+#define jpeg_read_coefficients jReadCoefs
+#define jpeg_write_coefficients        jWrtCoefs
+#define jpeg_copy_critical_parameters  jCopyCrit
+#define jpeg_abort_compress    jAbrtCompress
+#define jpeg_abort_decompress  jAbrtDecompress
+#define jpeg_abort             jAbort
+#define jpeg_destroy           jDestroy
+#define jpeg_resync_to_restart jResyncRestart
+#endif /* NEED_SHORT_EXTERNAL_NAMES */
+
+
+/* Default error-management setup */
+EXTERN(struct jpeg_error_mgr *) jpeg_std_error
+       JPP((struct jpeg_error_mgr * err));
+
+/* Initialization of JPEG compression objects.
+ * jpeg_create_compress() and jpeg_create_decompress() are the exported
+ * names that applications should call.  These expand to calls on
+ * jpeg_CreateCompress and jpeg_CreateDecompress with additional information
+ * passed for version mismatch checking.
+ * NB: you must set up the error-manager BEFORE calling jpeg_create_xxx.
+ */
+#define jpeg_create_compress(cinfo) \
+    jpeg_CreateCompress((cinfo), JPEG_LIB_VERSION, \
+                       (size_t) sizeof(struct jpeg_compress_struct))
+#define jpeg_create_decompress(cinfo) \
+    jpeg_CreateDecompress((cinfo), JPEG_LIB_VERSION, \
+                         (size_t) sizeof(struct jpeg_decompress_struct))
+EXTERN(void) jpeg_CreateCompress JPP((j_compress_ptr cinfo,
+                                     int version, size_t structsize));
+EXTERN(void) jpeg_CreateDecompress JPP((j_decompress_ptr cinfo,
+                                       int version, size_t structsize));
+/* Destruction of JPEG compression objects */
+EXTERN(void) jpeg_destroy_compress JPP((j_compress_ptr cinfo));
+EXTERN(void) jpeg_destroy_decompress JPP((j_decompress_ptr cinfo));
+
+/* Standard data source and destination managers: stdio streams. */
+/* Caller is responsible for opening the file before and closing after. */
+EXTERN(void) jpeg_stdio_dest JPP((j_compress_ptr cinfo, FILE * outfile));
+EXTERN(void) jpeg_stdio_src JPP((j_decompress_ptr cinfo, FILE * infile));
+
+/* Data source and destination managers: memory buffers. */
+EXTERN(void) jpeg_mem_dest JPP((j_compress_ptr cinfo,
+                              unsigned char ** outbuffer,
+                              size_t * outsize));
+EXTERN(void) jpeg_mem_src JPP((j_decompress_ptr cinfo,
+                             const unsigned char * inbuffer,
+                             size_t insize));
+
+/* Default parameter setup for compression */
+EXTERN(void) jpeg_set_defaults JPP((j_compress_ptr cinfo));
+/* Compression parameter setup aids */
+EXTERN(void) jpeg_set_colorspace JPP((j_compress_ptr cinfo,
+                                     J_COLOR_SPACE colorspace));
+EXTERN(void) jpeg_default_colorspace JPP((j_compress_ptr cinfo));
+EXTERN(void) jpeg_set_quality JPP((j_compress_ptr cinfo, int quality,
+                                  boolean force_baseline));
+EXTERN(void) jpeg_set_linear_quality JPP((j_compress_ptr cinfo,
+                                         int scale_factor,
+                                         boolean force_baseline));
+EXTERN(void) jpeg_default_qtables JPP((j_compress_ptr cinfo,
+                                      boolean force_baseline));
+EXTERN(void) jpeg_add_quant_table JPP((j_compress_ptr cinfo, int which_tbl,
+                                      const unsigned int *basic_table,
+                                      int scale_factor,
+                                      boolean force_baseline));
+EXTERN(int) jpeg_quality_scaling JPP((int quality));
+EXTERN(void) jpeg_simple_progression JPP((j_compress_ptr cinfo));
+EXTERN(void) jpeg_suppress_tables JPP((j_compress_ptr cinfo,
+                                      boolean suppress));
+EXTERN(JQUANT_TBL *) jpeg_alloc_quant_table JPP((j_common_ptr cinfo));
+EXTERN(JHUFF_TBL *) jpeg_alloc_huff_table JPP((j_common_ptr cinfo));
+EXTERN(JHUFF_TBL *) jpeg_std_huff_table JPP((j_common_ptr cinfo,
+                                            boolean isDC, int tblno));
+
+/* Main entry points for compression */
+EXTERN(void) jpeg_start_compress JPP((j_compress_ptr cinfo,
+                                     boolean write_all_tables));
+EXTERN(JDIMENSION) jpeg_write_scanlines JPP((j_compress_ptr cinfo,
+                                            JSAMPARRAY scanlines,
+                                            JDIMENSION num_lines));
+EXTERN(void) jpeg_finish_compress JPP((j_compress_ptr cinfo));
+
+/* Precalculate JPEG dimensions for current compression parameters. */
+EXTERN(void) jpeg_calc_jpeg_dimensions JPP((j_compress_ptr cinfo));
+
+/* Replaces jpeg_write_scanlines when writing raw downsampled data. */
+EXTERN(JDIMENSION) jpeg_write_raw_data JPP((j_compress_ptr cinfo,
+                                           JSAMPIMAGE data,
+                                           JDIMENSION num_lines));
+
+/* Write a special marker.  See libjpeg.txt concerning safe usage. */
+EXTERN(void) jpeg_write_marker
+       JPP((j_compress_ptr cinfo, int marker,
+            const JOCTET * dataptr, unsigned int datalen));
+/* Same, but piecemeal. */
+EXTERN(void) jpeg_write_m_header
+       JPP((j_compress_ptr cinfo, int marker, unsigned int datalen));
+EXTERN(void) jpeg_write_m_byte
+       JPP((j_compress_ptr cinfo, int val));
+
+/* Alternate compression function: just write an abbreviated table file */
+EXTERN(void) jpeg_write_tables JPP((j_compress_ptr cinfo));
+
+/* Decompression startup: read start of JPEG datastream to see what's there */
+EXTERN(int) jpeg_read_header JPP((j_decompress_ptr cinfo,
+                                 boolean require_image));
+/* Return value is one of: */
+#define JPEG_SUSPENDED         0 /* Suspended due to lack of input data */
+#define JPEG_HEADER_OK         1 /* Found valid image datastream */
+#define JPEG_HEADER_TABLES_ONLY        2 /* Found valid table-specs-only datastream */
+/* If you pass require_image = TRUE (normal case), you need not check for
+ * a TABLES_ONLY return code; an abbreviated file will cause an error exit.
+ * JPEG_SUSPENDED is only possible if you use a data source module that can
+ * give a suspension return (the stdio source module doesn't).
+ */
+
+/* Main entry points for decompression */
+EXTERN(boolean) jpeg_start_decompress JPP((j_decompress_ptr cinfo));
+EXTERN(JDIMENSION) jpeg_read_scanlines JPP((j_decompress_ptr cinfo,
+                                           JSAMPARRAY scanlines,
+                                           JDIMENSION max_lines));
+EXTERN(boolean) jpeg_finish_decompress JPP((j_decompress_ptr cinfo));
+
+/* Replaces jpeg_read_scanlines when reading raw downsampled data. */
+EXTERN(JDIMENSION) jpeg_read_raw_data JPP((j_decompress_ptr cinfo,
+                                          JSAMPIMAGE data,
+                                          JDIMENSION max_lines));
+
+/* Additional entry points for buffered-image mode. */
+EXTERN(boolean) jpeg_has_multiple_scans JPP((j_decompress_ptr cinfo));
+EXTERN(boolean) jpeg_start_output JPP((j_decompress_ptr cinfo,
+                                      int scan_number));
+EXTERN(boolean) jpeg_finish_output JPP((j_decompress_ptr cinfo));
+EXTERN(boolean) jpeg_input_complete JPP((j_decompress_ptr cinfo));
+EXTERN(void) jpeg_new_colormap JPP((j_decompress_ptr cinfo));
+EXTERN(int) jpeg_consume_input JPP((j_decompress_ptr cinfo));
+/* Return value is one of: */
+/* #define JPEG_SUSPENDED      0    Suspended due to lack of input data */
+#define JPEG_REACHED_SOS       1 /* Reached start of new scan */
+#define JPEG_REACHED_EOI       2 /* Reached end of image */
+#define JPEG_ROW_COMPLETED     3 /* Completed one iMCU row */
+#define JPEG_SCAN_COMPLETED    4 /* Completed last iMCU row of a scan */
+
+/* Precalculate output dimensions for current decompression parameters. */
+EXTERN(void) jpeg_core_output_dimensions JPP((j_decompress_ptr cinfo));
+EXTERN(void) jpeg_calc_output_dimensions JPP((j_decompress_ptr cinfo));
+
+/* Control saving of COM and APPn markers into marker_list. */
+EXTERN(void) jpeg_save_markers
+       JPP((j_decompress_ptr cinfo, int marker_code,
+            unsigned int length_limit));
+
+/* Install a special processing method for COM or APPn markers. */
+EXTERN(void) jpeg_set_marker_processor
+       JPP((j_decompress_ptr cinfo, int marker_code,
+            jpeg_marker_parser_method routine));
+
+/* Read or write raw DCT coefficients --- useful for lossless transcoding. */
+EXTERN(jvirt_barray_ptr *) jpeg_read_coefficients JPP((j_decompress_ptr cinfo));
+EXTERN(void) jpeg_write_coefficients JPP((j_compress_ptr cinfo,
+                                         jvirt_barray_ptr * coef_arrays));
+EXTERN(void) jpeg_copy_critical_parameters JPP((j_decompress_ptr srcinfo,
+                                               j_compress_ptr dstinfo));
+
+/* If you choose to abort compression or decompression before completing
+ * jpeg_finish_(de)compress, then you need to clean up to release memory,
+ * temporary files, etc.  You can just call jpeg_destroy_(de)compress
+ * if you're done with the JPEG object, but if you want to clean it up and
+ * reuse it, call this:
+ */
+EXTERN(void) jpeg_abort_compress JPP((j_compress_ptr cinfo));
+EXTERN(void) jpeg_abort_decompress JPP((j_decompress_ptr cinfo));
+
+/* Generic versions of jpeg_abort and jpeg_destroy that work on either
+ * flavor of JPEG object.  These may be more convenient in some places.
+ */
+EXTERN(void) jpeg_abort JPP((j_common_ptr cinfo));
+EXTERN(void) jpeg_destroy JPP((j_common_ptr cinfo));
+
+/* Default restart-marker-resync procedure for use by data source modules */
+EXTERN(boolean) jpeg_resync_to_restart JPP((j_decompress_ptr cinfo,
+                                           int desired));
+
+
+/* These marker codes are exported since applications and data source modules
+ * are likely to want to use them.
+ */
+
+#define JPEG_RST0      0xD0    /* RST0 marker code */
+#define JPEG_EOI       0xD9    /* EOI marker code */
+#define JPEG_APP0      0xE0    /* APP0 marker code */
+#define JPEG_COM       0xFE    /* COM marker code */
+
+
+/* If we have a brain-damaged compiler that emits warnings (or worse, errors)
+ * for structure definitions that are never filled in, keep it quiet by
+ * supplying dummy definitions for the various substructures.
+ */
+
+#ifdef INCOMPLETE_TYPES_BROKEN
+#ifndef JPEG_INTERNALS         /* will be defined in jpegint.h */
+struct jvirt_sarray_control { long dummy; };
+struct jvirt_barray_control { long dummy; };
+struct jpeg_comp_master { long dummy; };
+struct jpeg_c_main_controller { long dummy; };
+struct jpeg_c_prep_controller { long dummy; };
+struct jpeg_c_coef_controller { long dummy; };
+struct jpeg_marker_writer { long dummy; };
+struct jpeg_color_converter { long dummy; };
+struct jpeg_downsampler { long dummy; };
+struct jpeg_forward_dct { long dummy; };
+struct jpeg_entropy_encoder { long dummy; };
+struct jpeg_decomp_master { long dummy; };
+struct jpeg_d_main_controller { long dummy; };
+struct jpeg_d_coef_controller { long dummy; };
+struct jpeg_d_post_controller { long dummy; };
+struct jpeg_input_controller { long dummy; };
+struct jpeg_marker_reader { long dummy; };
+struct jpeg_entropy_decoder { long dummy; };
+struct jpeg_inverse_dct { long dummy; };
+struct jpeg_upsampler { long dummy; };
+struct jpeg_color_deconverter { long dummy; };
+struct jpeg_color_quantizer { long dummy; };
+#endif /* JPEG_INTERNALS */
+#endif /* INCOMPLETE_TYPES_BROKEN */
+
+
+/*
+ * The JPEG library modules define JPEG_INTERNALS before including this file.
+ * The internal structure declarations are read only when that is true.
+ * Applications using the library should not include jpegint.h, but may wish
+ * to include jerror.h.
+ */
+
+#ifdef JPEG_INTERNALS
+#include "jpegint.h"           /* fetch private declarations */
+#include "jerror.h"            /* fetch error codes too */
+#endif
+
+#ifdef __cplusplus
+#ifndef DONT_USE_EXTERN_C
+}
+#endif
+#endif
+
+#endif /* JPEGLIB_H */
index 91c0add..1aac034 100644 (file)
@@ -23,6 +23,7 @@
 #   endif
 #endif
 
+
 /*
  * WARNING: This file is automatically generated by the tools/genStubs.tcl
  * script.  Any modifications to the function declarations below should be made
 #ifdef __cplusplus
 extern "C" {
 #endif
-
 /*
  * Exported function declarations:
  */
-
+EXTERN Tcl_Var Tcl_FindNamespaceVar(Tcl_Interp *interp, const char *name, Tcl_Namespace *contextNsPtr, int flags);
+EXTERN void Tcl_GetVariableFullName(Tcl_Interp *interp, Tcl_Var variable, Tcl_Obj *objPtr);
+EXTERN void Tcl_PopCallFrame(Tcl_Interp *interp); /* 129 */            
+EXTERN int Tcl_PushCallFrame(Tcl_Interp *interp, Tcl_CallFrame *framePtr, Tcl_Namespace *nsPtr, int isProcCallFrame);
 /* 0 */
 EXTERN int             Tcl_PkgProvideEx(Tcl_Interp *interp,
                                const char *name, const char *version,
diff --git a/include/tclIntDecls.h b/include/tclIntDecls.h
new file mode 100644 (file)
index 0000000..f95f999
--- /dev/null
@@ -0,0 +1,1370 @@
+/*
+ * tclIntDecls.h --
+ *
+ *     This file contains the declarations for all unsupported
+ *     functions that are exported by the Tcl library.  These
+ *     interfaces are not guaranteed to remain the same between
+ *     versions.  Use at your own risk.
+ *
+ * Copyright (c) 1998-1999 by Scriptics Corporation.
+ *
+ * See the file "license.terms" for information on usage and redistribution
+ * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+ */
+
+#ifndef _TCLINTDECLS
+#define _TCLINTDECLS
+
+#include "tclPort.h"
+
+#undef TCL_STORAGE_CLASS
+#ifdef BUILD_tcl
+#   define TCL_STORAGE_CLASS DLLEXPORT
+#else
+#   ifdef USE_TCL_STUBS
+#      define TCL_STORAGE_CLASS
+#   else
+#      define TCL_STORAGE_CLASS DLLIMPORT
+#   endif
+#endif
+
+/* [Bug #803489] Tcl_FindNamespace problem in the Stubs table */
+#undef Tcl_CreateNamespace
+#undef Tcl_DeleteNamespace
+#undef Tcl_AppendExportList
+#undef Tcl_Export
+#undef Tcl_Import
+#undef Tcl_ForgetImport
+#undef Tcl_GetCurrentNamespace
+#undef Tcl_GetGlobalNamespace
+#undef Tcl_FindNamespace
+#undef Tcl_FindCommand
+#undef Tcl_GetCommandFromObj
+#undef Tcl_GetCommandFullName
+#undef Tcl_SetStartupScript
+#undef Tcl_GetStartupScript
+
+/*
+ * WARNING: This file is automatically generated by the tools/genStubs.tcl
+ * script.  Any modifications to the function declarations below should be made
+ * in the generic/tclInt.decls script.
+ */
+
+/* !BEGIN!: Do not edit below this line. */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Exported function declarations:
+ */
+
+/* Slot 0 is reserved */
+/* Slot 1 is reserved */
+/* Slot 2 is reserved */
+/* 3 */
+EXTERN void            TclAllocateFreeObjects(void);
+/* Slot 4 is reserved */
+/* 5 */
+EXTERN int             TclCleanupChildren(Tcl_Interp *interp, int numPids,
+                               Tcl_Pid *pidPtr, Tcl_Channel errorChan);
+/* 6 */
+EXTERN void            TclCleanupCommand(Command *cmdPtr);
+/* 7 */
+EXTERN int             TclCopyAndCollapse(int count, const char *src,
+                               char *dst);
+/* 8 */
+EXTERN int             TclCopyChannelOld(Tcl_Interp *interp,
+                               Tcl_Channel inChan, Tcl_Channel outChan,
+                               int toRead, Tcl_Obj *cmdPtr);
+/* 9 */
+EXTERN int             TclCreatePipeline(Tcl_Interp *interp, int argc,
+                               const char **argv, Tcl_Pid **pidArrayPtr,
+                               TclFile *inPipePtr, TclFile *outPipePtr,
+                               TclFile *errFilePtr);
+/* 10 */
+EXTERN int             TclCreateProc(Tcl_Interp *interp, Namespace *nsPtr,
+                               const char *procName, Tcl_Obj *argsPtr,
+                               Tcl_Obj *bodyPtr, Proc **procPtrPtr);
+/* 11 */
+EXTERN void            TclDeleteCompiledLocalVars(Interp *iPtr,
+                               CallFrame *framePtr);
+/* 12 */
+EXTERN void            TclDeleteVars(Interp *iPtr,
+                               TclVarHashTable *tablePtr);
+/* Slot 13 is reserved */
+/* 14 */
+EXTERN int             TclDumpMemoryInfo(ClientData clientData, int flags);
+/* Slot 15 is reserved */
+/* 16 */
+EXTERN void            TclExprFloatError(Tcl_Interp *interp, double value);
+/* Slot 17 is reserved */
+/* Slot 18 is reserved */
+/* Slot 19 is reserved */
+/* Slot 20 is reserved */
+/* Slot 21 is reserved */
+/* 22 */
+EXTERN int             TclFindElement(Tcl_Interp *interp,
+                               const char *listStr, int listLength,
+                               const char **elementPtr,
+                               const char **nextPtr, int *sizePtr,
+                               int *bracePtr);
+/* 23 */
+EXTERN Proc *          TclFindProc(Interp *iPtr, const char *procName);
+/* 24 */
+EXTERN int             TclFormatInt(char *buffer, long n);
+/* 25 */
+EXTERN void            TclFreePackageInfo(Interp *iPtr);
+/* Slot 26 is reserved */
+/* Slot 27 is reserved */
+/* 28 */
+EXTERN Tcl_Channel     TclpGetDefaultStdChannel(int type);
+/* Slot 29 is reserved */
+/* Slot 30 is reserved */
+/* 31 */
+EXTERN const char *    TclGetExtension(const char *name);
+/* 32 */
+EXTERN int             TclGetFrame(Tcl_Interp *interp, const char *str,
+                               CallFrame **framePtrPtr);
+/* Slot 33 is reserved */
+/* 34 */
+EXTERN int             TclGetIntForIndex(Tcl_Interp *interp,
+                               Tcl_Obj *objPtr, int endValue, int *indexPtr);
+/* Slot 35 is reserved */
+/* Slot 36 is reserved */
+/* 37 */
+EXTERN int             TclGetLoadedPackages(Tcl_Interp *interp,
+                               const char *targetName);
+/* 38 */
+EXTERN int             TclGetNamespaceForQualName(Tcl_Interp *interp,
+                               const char *qualName, Namespace *cxtNsPtr,
+                               int flags, Namespace **nsPtrPtr,
+                               Namespace **altNsPtrPtr,
+                               Namespace **actualCxtPtrPtr,
+                               const char **simpleNamePtr);
+/* 39 */
+EXTERN TclObjCmdProcType TclGetObjInterpProc(void);
+/* 40 */
+EXTERN int             TclGetOpenMode(Tcl_Interp *interp, const char *str,
+                               int *seekFlagPtr);
+/* 41 */
+EXTERN Tcl_Command     TclGetOriginalCommand(Tcl_Command command);
+/* 42 */
+EXTERN CONST86 char *  TclpGetUserHome(const char *name,
+                               Tcl_DString *bufferPtr);
+/* Slot 43 is reserved */
+/* 44 */
+EXTERN int             TclGuessPackageName(const char *fileName,
+                               Tcl_DString *bufPtr);
+/* 45 */
+EXTERN int             TclHideUnsafeCommands(Tcl_Interp *interp);
+/* 46 */
+EXTERN int             TclInExit(void);
+/* Slot 47 is reserved */
+/* Slot 48 is reserved */
+/* Slot 49 is reserved */
+/* 50 */
+EXTERN void            TclInitCompiledLocals(Tcl_Interp *interp,
+                               CallFrame *framePtr, Namespace *nsPtr);
+/* 51 */
+EXTERN int             TclInterpInit(Tcl_Interp *interp);
+/* Slot 52 is reserved */
+/* 53 */
+EXTERN int             TclInvokeObjectCommand(ClientData clientData,
+                               Tcl_Interp *interp, int argc,
+                               CONST84 char **argv);
+/* 54 */
+EXTERN int             TclInvokeStringCommand(ClientData clientData,
+                               Tcl_Interp *interp, int objc,
+                               Tcl_Obj *const objv[]);
+/* 55 */
+EXTERN Proc *          TclIsProc(Command *cmdPtr);
+/* Slot 56 is reserved */
+/* Slot 57 is reserved */
+/* 58 */
+EXTERN Var *           TclLookupVar(Tcl_Interp *interp, const char *part1,
+                               const char *part2, int flags,
+                               const char *msg, int createPart1,
+                               int createPart2, Var **arrayPtrPtr);
+/* Slot 59 is reserved */
+/* 60 */
+EXTERN int             TclNeedSpace(const char *start, const char *end);
+/* 61 */
+EXTERN Tcl_Obj *       TclNewProcBodyObj(Proc *procPtr);
+/* 62 */
+EXTERN int             TclObjCommandComplete(Tcl_Obj *cmdPtr);
+/* 63 */
+EXTERN int             TclObjInterpProc(ClientData clientData,
+                               Tcl_Interp *interp, int objc,
+                               Tcl_Obj *const objv[]);
+/* 64 */
+EXTERN int             TclObjInvoke(Tcl_Interp *interp, int objc,
+                               Tcl_Obj *const objv[], int flags);
+/* Slot 65 is reserved */
+/* Slot 66 is reserved */
+/* Slot 67 is reserved */
+/* Slot 68 is reserved */
+/* 69 */
+EXTERN char *          TclpAlloc(unsigned int size);
+/* Slot 70 is reserved */
+/* Slot 71 is reserved */
+/* Slot 72 is reserved */
+/* Slot 73 is reserved */
+/* 74 */
+EXTERN void            TclpFree(char *ptr);
+/* 75 */
+EXTERN unsigned long   TclpGetClicks(void);
+/* 76 */
+EXTERN unsigned long   TclpGetSeconds(void);
+/* 77 */
+EXTERN void            TclpGetTime(Tcl_Time *time);
+/* Slot 78 is reserved */
+/* Slot 79 is reserved */
+/* Slot 80 is reserved */
+/* 81 */
+EXTERN char *          TclpRealloc(char *ptr, unsigned int size);
+/* Slot 82 is reserved */
+/* Slot 83 is reserved */
+/* Slot 84 is reserved */
+/* Slot 85 is reserved */
+/* Slot 86 is reserved */
+/* Slot 87 is reserved */
+/* 88 */
+EXTERN char *          TclPrecTraceProc(ClientData clientData,
+                               Tcl_Interp *interp, const char *name1,
+                               const char *name2, int flags);
+/* 89 */
+EXTERN int             TclPreventAliasLoop(Tcl_Interp *interp,
+                               Tcl_Interp *cmdInterp, Tcl_Command cmd);
+/* Slot 90 is reserved */
+/* 91 */
+EXTERN void            TclProcCleanupProc(Proc *procPtr);
+/* 92 */
+EXTERN int             TclProcCompileProc(Tcl_Interp *interp, Proc *procPtr,
+                               Tcl_Obj *bodyPtr, Namespace *nsPtr,
+                               const char *description,
+                               const char *procName);
+/* 93 */
+EXTERN void            TclProcDeleteProc(ClientData clientData);
+/* Slot 94 is reserved */
+/* Slot 95 is reserved */
+/* 96 */
+EXTERN int             TclRenameCommand(Tcl_Interp *interp,
+                               const char *oldName, const char *newName);
+/* 97 */
+EXTERN void            TclResetShadowedCmdRefs(Tcl_Interp *interp,
+                               Command *newCmdPtr);
+/* 98 */
+EXTERN int             TclServiceIdle(void);
+/* Slot 99 is reserved */
+/* Slot 100 is reserved */
+/* 101 */
+EXTERN CONST86 char *  TclSetPreInitScript(const char *string);
+/* 102 */
+EXTERN void            TclSetupEnv(Tcl_Interp *interp);
+/* 103 */
+EXTERN int             TclSockGetPort(Tcl_Interp *interp, const char *str,
+                               const char *proto, int *portPtr);
+/* 104 */
+EXTERN int             TclSockMinimumBuffersOld(int sock, int size);
+/* Slot 105 is reserved */
+/* Slot 106 is reserved */
+/* Slot 107 is reserved */
+/* 108 */
+EXTERN void            TclTeardownNamespace(Namespace *nsPtr);
+/* 109 */
+EXTERN int             TclUpdateReturnInfo(Interp *iPtr);
+/* 110 */
+EXTERN int             TclSockMinimumBuffers(void *sock, int size);
+/* 111 */
+EXTERN void            Tcl_AddInterpResolvers(Tcl_Interp *interp,
+                               const char *name,
+                               Tcl_ResolveCmdProc *cmdProc,
+                               Tcl_ResolveVarProc *varProc,
+                               Tcl_ResolveCompiledVarProc *compiledVarProc);
+/* 112 */
+EXTERN int             Tcl_AppendExportList(Tcl_Interp *interp,
+                               Tcl_Namespace *nsPtr, Tcl_Obj *objPtr);
+/* 113 */
+EXTERN Tcl_Namespace * Tcl_CreateNamespace(Tcl_Interp *interp,
+                               const char *name, ClientData clientData,
+                               Tcl_NamespaceDeleteProc *deleteProc);
+/* 114 */
+EXTERN void            Tcl_DeleteNamespace(Tcl_Namespace *nsPtr);
+/* 115 */
+EXTERN int             Tcl_Export(Tcl_Interp *interp, Tcl_Namespace *nsPtr,
+                               const char *pattern, int resetListFirst);
+/* 116 */
+EXTERN Tcl_Command     Tcl_FindCommand(Tcl_Interp *interp, const char *name,
+                               Tcl_Namespace *contextNsPtr, int flags);
+/* 117 */
+EXTERN Tcl_Namespace * Tcl_FindNamespace(Tcl_Interp *interp,
+                               const char *name,
+                               Tcl_Namespace *contextNsPtr, int flags);
+/* 118 */
+EXTERN int             Tcl_GetInterpResolvers(Tcl_Interp *interp,
+                               const char *name, Tcl_ResolverInfo *resInfo);
+/* 119 */
+EXTERN int             Tcl_GetNamespaceResolvers(
+                               Tcl_Namespace *namespacePtr,
+                               Tcl_ResolverInfo *resInfo);
+/* 120 */
+EXTERN Tcl_Var         Tcl_FindNamespaceVar(Tcl_Interp *interp,
+                               const char *name,
+                               Tcl_Namespace *contextNsPtr, int flags);
+/* 121 */
+EXTERN int             Tcl_ForgetImport(Tcl_Interp *interp,
+                               Tcl_Namespace *nsPtr, const char *pattern);
+/* 122 */
+EXTERN Tcl_Command     Tcl_GetCommandFromObj(Tcl_Interp *interp,
+                               Tcl_Obj *objPtr);
+/* 123 */
+EXTERN void            Tcl_GetCommandFullName(Tcl_Interp *interp,
+                               Tcl_Command command, Tcl_Obj *objPtr);
+/* 124 */
+EXTERN Tcl_Namespace * Tcl_GetCurrentNamespace(Tcl_Interp *interp);
+/* 125 */
+EXTERN Tcl_Namespace * Tcl_GetGlobalNamespace(Tcl_Interp *interp);
+/* 126 */
+EXTERN void            Tcl_GetVariableFullName(Tcl_Interp *interp,
+                               Tcl_Var variable, Tcl_Obj *objPtr);
+/* 127 */
+EXTERN int             Tcl_Import(Tcl_Interp *interp, Tcl_Namespace *nsPtr,
+                               const char *pattern, int allowOverwrite);
+/* 128 */
+EXTERN void            Tcl_PopCallFrame(Tcl_Interp *interp);
+/* 129 */
+EXTERN int             Tcl_PushCallFrame(Tcl_Interp *interp,
+                               Tcl_CallFrame *framePtr,
+                               Tcl_Namespace *nsPtr, int isProcCallFrame);
+/* 130 */
+EXTERN int             Tcl_RemoveInterpResolvers(Tcl_Interp *interp,
+                               const char *name);
+/* 131 */
+EXTERN void            Tcl_SetNamespaceResolvers(
+                               Tcl_Namespace *namespacePtr,
+                               Tcl_ResolveCmdProc *cmdProc,
+                               Tcl_ResolveVarProc *varProc,
+                               Tcl_ResolveCompiledVarProc *compiledVarProc);
+/* 132 */
+EXTERN int             TclpHasSockets(Tcl_Interp *interp);
+/* 133 */
+EXTERN struct tm *     TclpGetDate(const time_t *time, int useGMT);
+/* Slot 134 is reserved */
+/* Slot 135 is reserved */
+/* Slot 136 is reserved */
+/* Slot 137 is reserved */
+/* 138 */
+EXTERN CONST84_RETURN char * TclGetEnv(const char *name,
+                               Tcl_DString *valuePtr);
+/* Slot 139 is reserved */
+/* Slot 140 is reserved */
+/* 141 */
+EXTERN CONST84_RETURN char * TclpGetCwd(Tcl_Interp *interp,
+                               Tcl_DString *cwdPtr);
+/* 142 */
+EXTERN int             TclSetByteCodeFromAny(Tcl_Interp *interp,
+                               Tcl_Obj *objPtr, CompileHookProc *hookProc,
+                               ClientData clientData);
+/* 143 */
+EXTERN int             TclAddLiteralObj(struct CompileEnv *envPtr,
+                               Tcl_Obj *objPtr, LiteralEntry **litPtrPtr);
+/* 144 */
+EXTERN void            TclHideLiteral(Tcl_Interp *interp,
+                               struct CompileEnv *envPtr, int index);
+/* 145 */
+EXTERN const struct AuxDataType * TclGetAuxDataType(const char *typeName);
+/* 146 */
+EXTERN TclHandle       TclHandleCreate(void *ptr);
+/* 147 */
+EXTERN void            TclHandleFree(TclHandle handle);
+/* 148 */
+EXTERN TclHandle       TclHandlePreserve(TclHandle handle);
+/* 149 */
+EXTERN void            TclHandleRelease(TclHandle handle);
+/* 150 */
+EXTERN int             TclRegAbout(Tcl_Interp *interp, Tcl_RegExp re);
+/* 151 */
+EXTERN void            TclRegExpRangeUniChar(Tcl_RegExp re, int index,
+                               int *startPtr, int *endPtr);
+/* 152 */
+EXTERN void            TclSetLibraryPath(Tcl_Obj *pathPtr);
+/* 153 */
+EXTERN Tcl_Obj *       TclGetLibraryPath(void);
+/* Slot 154 is reserved */
+/* Slot 155 is reserved */
+/* 156 */
+EXTERN void            TclRegError(Tcl_Interp *interp, const char *msg,
+                               int status);
+/* 157 */
+EXTERN Var *           TclVarTraceExists(Tcl_Interp *interp,
+                               const char *varName);
+/* 158 */
+EXTERN void            TclSetStartupScriptFileName(const char *filename);
+/* 159 */
+EXTERN const char *    TclGetStartupScriptFileName(void);
+/* Slot 160 is reserved */
+/* 161 */
+EXTERN int             TclChannelTransform(Tcl_Interp *interp,
+                               Tcl_Channel chan, Tcl_Obj *cmdObjPtr);
+/* 162 */
+EXTERN void            TclChannelEventScriptInvoker(ClientData clientData,
+                               int flags);
+/* 163 */
+EXTERN const void *    TclGetInstructionTable(void);
+/* 164 */
+EXTERN void            TclExpandCodeArray(void *envPtr);
+/* 165 */
+EXTERN void            TclpSetInitialEncodings(void);
+/* 166 */
+EXTERN int             TclListObjSetElement(Tcl_Interp *interp,
+                               Tcl_Obj *listPtr, int index,
+                               Tcl_Obj *valuePtr);
+/* 167 */
+EXTERN void            TclSetStartupScriptPath(Tcl_Obj *pathPtr);
+/* 168 */
+EXTERN Tcl_Obj *       TclGetStartupScriptPath(void);
+/* 169 */
+EXTERN int             TclpUtfNcmp2(const char *s1, const char *s2,
+                               unsigned long n);
+/* 170 */
+EXTERN int             TclCheckInterpTraces(Tcl_Interp *interp,
+                               const char *command, int numChars,
+                               Command *cmdPtr, int result, int traceFlags,
+                               int objc, Tcl_Obj *const objv[]);
+/* 171 */
+EXTERN int             TclCheckExecutionTraces(Tcl_Interp *interp,
+                               const char *command, int numChars,
+                               Command *cmdPtr, int result, int traceFlags,
+                               int objc, Tcl_Obj *const objv[]);
+/* 172 */
+EXTERN int             TclInThreadExit(void);
+/* 173 */
+EXTERN int             TclUniCharMatch(const Tcl_UniChar *string,
+                               int strLen, const Tcl_UniChar *pattern,
+                               int ptnLen, int flags);
+/* Slot 174 is reserved */
+/* 175 */
+EXTERN int             TclCallVarTraces(Interp *iPtr, Var *arrayPtr,
+                               Var *varPtr, const char *part1,
+                               const char *part2, int flags,
+                               int leaveErrMsg);
+/* 176 */
+EXTERN void            TclCleanupVar(Var *varPtr, Var *arrayPtr);
+/* 177 */
+EXTERN void            TclVarErrMsg(Tcl_Interp *interp, const char *part1,
+                               const char *part2, const char *operation,
+                               const char *reason);
+/* 178 */
+EXTERN void            Tcl_SetStartupScript(Tcl_Obj *pathPtr,
+                               const char *encodingName);
+/* 179 */
+EXTERN Tcl_Obj *       Tcl_GetStartupScript(const char **encodingNamePtr);
+/* Slot 180 is reserved */
+/* Slot 181 is reserved */
+/* 182 */
+EXTERN struct tm *     TclpLocaltime(const time_t *clock);
+/* 183 */
+EXTERN struct tm *     TclpGmtime(const time_t *clock);
+/* Slot 184 is reserved */
+/* Slot 185 is reserved */
+/* Slot 186 is reserved */
+/* Slot 187 is reserved */
+/* Slot 188 is reserved */
+/* Slot 189 is reserved */
+/* Slot 190 is reserved */
+/* Slot 191 is reserved */
+/* Slot 192 is reserved */
+/* Slot 193 is reserved */
+/* Slot 194 is reserved */
+/* Slot 195 is reserved */
+/* Slot 196 is reserved */
+/* Slot 197 is reserved */
+/* 198 */
+EXTERN int             TclObjGetFrame(Tcl_Interp *interp, Tcl_Obj *objPtr,
+                               CallFrame **framePtrPtr);
+/* Slot 199 is reserved */
+/* 200 */
+EXTERN int             TclpObjRemoveDirectory(Tcl_Obj *pathPtr,
+                               int recursive, Tcl_Obj **errorPtr);
+/* 201 */
+EXTERN int             TclpObjCopyDirectory(Tcl_Obj *srcPathPtr,
+                               Tcl_Obj *destPathPtr, Tcl_Obj **errorPtr);
+/* 202 */
+EXTERN int             TclpObjCreateDirectory(Tcl_Obj *pathPtr);
+/* 203 */
+EXTERN int             TclpObjDeleteFile(Tcl_Obj *pathPtr);
+/* 204 */
+EXTERN int             TclpObjCopyFile(Tcl_Obj *srcPathPtr,
+                               Tcl_Obj *destPathPtr);
+/* 205 */
+EXTERN int             TclpObjRenameFile(Tcl_Obj *srcPathPtr,
+                               Tcl_Obj *destPathPtr);
+/* 206 */
+EXTERN int             TclpObjStat(Tcl_Obj *pathPtr, Tcl_StatBuf *buf);
+/* 207 */
+EXTERN int             TclpObjAccess(Tcl_Obj *pathPtr, int mode);
+/* 208 */
+EXTERN Tcl_Channel     TclpOpenFileChannel(Tcl_Interp *interp,
+                               Tcl_Obj *pathPtr, int mode, int permissions);
+/* Slot 209 is reserved */
+/* Slot 210 is reserved */
+/* Slot 211 is reserved */
+/* 212 */
+EXTERN void            TclpFindExecutable(const char *argv0);
+/* 213 */
+EXTERN Tcl_Obj *       TclGetObjNameOfExecutable(void);
+/* 214 */
+EXTERN void            TclSetObjNameOfExecutable(Tcl_Obj *name,
+                               Tcl_Encoding encoding);
+/* 215 */
+EXTERN void *          TclStackAlloc(Tcl_Interp *interp, int numBytes);
+/* 216 */
+EXTERN void            TclStackFree(Tcl_Interp *interp, void *freePtr);
+/* 217 */
+EXTERN int             TclPushStackFrame(Tcl_Interp *interp,
+                               Tcl_CallFrame **framePtrPtr,
+                               Tcl_Namespace *namespacePtr,
+                               int isProcCallFrame);
+/* 218 */
+EXTERN void            TclPopStackFrame(Tcl_Interp *interp);
+/* Slot 219 is reserved */
+/* Slot 220 is reserved */
+/* Slot 221 is reserved */
+/* Slot 222 is reserved */
+/* Slot 223 is reserved */
+/* 224 */
+EXTERN TclPlatformType * TclGetPlatform(void);
+/* 225 */
+EXTERN Tcl_Obj *       TclTraceDictPath(Tcl_Interp *interp,
+                               Tcl_Obj *rootPtr, int keyc,
+                               Tcl_Obj *const keyv[], int flags);
+/* 226 */
+EXTERN int             TclObjBeingDeleted(Tcl_Obj *objPtr);
+/* 227 */
+EXTERN void            TclSetNsPath(Namespace *nsPtr, int pathLength,
+                               Tcl_Namespace *pathAry[]);
+/* Slot 228 is reserved */
+/* 229 */
+EXTERN int             TclPtrMakeUpvar(Tcl_Interp *interp, Var *otherP1Ptr,
+                               const char *myName, int myFlags, int index);
+/* 230 */
+EXTERN Var *           TclObjLookupVar(Tcl_Interp *interp,
+                               Tcl_Obj *part1Ptr, const char *part2,
+                               int flags, const char *msg,
+                               const int createPart1, const int createPart2,
+                               Var **arrayPtrPtr);
+/* 231 */
+EXTERN int             TclGetNamespaceFromObj(Tcl_Interp *interp,
+                               Tcl_Obj *objPtr, Tcl_Namespace **nsPtrPtr);
+/* 232 */
+EXTERN int             TclEvalObjEx(Tcl_Interp *interp, Tcl_Obj *objPtr,
+                               int flags, const CmdFrame *invoker, int word);
+/* 233 */
+EXTERN void            TclGetSrcInfoForPc(CmdFrame *contextPtr);
+/* 234 */
+EXTERN Var *           TclVarHashCreateVar(TclVarHashTable *tablePtr,
+                               const char *key, int *newPtr);
+/* 235 */
+EXTERN void            TclInitVarHashTable(TclVarHashTable *tablePtr,
+                               Namespace *nsPtr);
+/* 236 */
+EXTERN void            TclBackgroundException(Tcl_Interp *interp, int code);
+/* 237 */
+EXTERN int             TclResetCancellation(Tcl_Interp *interp, int force);
+/* 238 */
+EXTERN int             TclNRInterpProc(ClientData clientData,
+                               Tcl_Interp *interp, int objc,
+                               Tcl_Obj *const objv[]);
+/* 239 */
+EXTERN int             TclNRInterpProcCore(Tcl_Interp *interp,
+                               Tcl_Obj *procNameObj, int skip,
+                               ProcErrorProc *errorProc);
+/* 240 */
+EXTERN int             TclNRRunCallbacks(Tcl_Interp *interp, int result,
+                               struct NRE_callback *rootPtr);
+/* 241 */
+EXTERN int             TclNREvalObjEx(Tcl_Interp *interp, Tcl_Obj *objPtr,
+                               int flags, const CmdFrame *invoker, int word);
+/* 242 */
+EXTERN int             TclNREvalObjv(Tcl_Interp *interp, int objc,
+                               Tcl_Obj *const objv[], int flags,
+                               Command *cmdPtr);
+/* 243 */
+EXTERN void            TclDbDumpActiveObjects(FILE *outFile);
+/* 244 */
+EXTERN Tcl_HashTable * TclGetNamespaceChildTable(Tcl_Namespace *nsPtr);
+/* 245 */
+EXTERN Tcl_HashTable * TclGetNamespaceCommandTable(Tcl_Namespace *nsPtr);
+/* 246 */
+EXTERN int             TclInitRewriteEnsemble(Tcl_Interp *interp,
+                               int numRemoved, int numInserted,
+                               Tcl_Obj *const *objv);
+/* 247 */
+EXTERN void            TclResetRewriteEnsemble(Tcl_Interp *interp,
+                               int isRootEnsemble);
+/* 248 */
+EXTERN int             TclCopyChannel(Tcl_Interp *interp,
+                               Tcl_Channel inChan, Tcl_Channel outChan,
+                               Tcl_WideInt toRead, Tcl_Obj *cmdPtr);
+/* 249 */
+EXTERN char *          TclDoubleDigits(double dv, int ndigits, int flags,
+                               int *decpt, int *signum, char **endPtr);
+/* 250 */
+EXTERN void            TclSetSlaveCancelFlags(Tcl_Interp *interp, int flags,
+                               int force);
+/* 251 */
+EXTERN int             TclRegisterLiteral(void *envPtr, char *bytes,
+                               int length, int flags);
+
+typedef struct TclIntStubs {
+    int magic;
+    void *hooks;
+
+    void (*reserved0)(void);
+    void (*reserved1)(void);
+    void (*reserved2)(void);
+    void (*tclAllocateFreeObjects) (void); /* 3 */
+    void (*reserved4)(void);
+    int (*tclCleanupChildren) (Tcl_Interp *interp, int numPids, Tcl_Pid *pidPtr, Tcl_Channel errorChan); /* 5 */
+    void (*tclCleanupCommand) (Command *cmdPtr); /* 6 */
+    int (*tclCopyAndCollapse) (int count, const char *src, char *dst); /* 7 */
+    int (*tclCopyChannelOld) (Tcl_Interp *interp, Tcl_Channel inChan, Tcl_Channel outChan, int toRead, Tcl_Obj *cmdPtr); /* 8 */
+    int (*tclCreatePipeline) (Tcl_Interp *interp, int argc, const char **argv, Tcl_Pid **pidArrayPtr, TclFile *inPipePtr, TclFile *outPipePtr, TclFile *errFilePtr); /* 9 */
+    int (*tclCreateProc) (Tcl_Interp *interp, Namespace *nsPtr, const char *procName, Tcl_Obj *argsPtr, Tcl_Obj *bodyPtr, Proc **procPtrPtr); /* 10 */
+    void (*tclDeleteCompiledLocalVars) (Interp *iPtr, CallFrame *framePtr); /* 11 */
+    void (*tclDeleteVars) (Interp *iPtr, TclVarHashTable *tablePtr); /* 12 */
+    void (*reserved13)(void);
+    int (*tclDumpMemoryInfo) (ClientData clientData, int flags); /* 14 */
+    void (*reserved15)(void);
+    void (*tclExprFloatError) (Tcl_Interp *interp, double value); /* 16 */
+    void (*reserved17)(void);
+    void (*reserved18)(void);
+    void (*reserved19)(void);
+    void (*reserved20)(void);
+    void (*reserved21)(void);
+    int (*tclFindElement) (Tcl_Interp *interp, const char *listStr, int listLength, const char **elementPtr, const char **nextPtr, int *sizePtr, int *bracePtr); /* 22 */
+    Proc * (*tclFindProc) (Interp *iPtr, const char *procName); /* 23 */
+    int (*tclFormatInt) (char *buffer, long n); /* 24 */
+    void (*tclFreePackageInfo) (Interp *iPtr); /* 25 */
+    void (*reserved26)(void);
+    void (*reserved27)(void);
+    Tcl_Channel (*tclpGetDefaultStdChannel) (int type); /* 28 */
+    void (*reserved29)(void);
+    void (*reserved30)(void);
+    const char * (*tclGetExtension) (const char *name); /* 31 */
+    int (*tclGetFrame) (Tcl_Interp *interp, const char *str, CallFrame **framePtrPtr); /* 32 */
+    void (*reserved33)(void);
+    int (*tclGetIntForIndex) (Tcl_Interp *interp, Tcl_Obj *objPtr, int endValue, int *indexPtr); /* 34 */
+    void (*reserved35)(void);
+    void (*reserved36)(void);
+    int (*tclGetLoadedPackages) (Tcl_Interp *interp, const char *targetName); /* 37 */
+    int (*tclGetNamespaceForQualName) (Tcl_Interp *interp, const char *qualName, Namespace *cxtNsPtr, int flags, Namespace **nsPtrPtr, Namespace **altNsPtrPtr, Namespace **actualCxtPtrPtr, const char **simpleNamePtr); /* 38 */
+    TclObjCmdProcType (*tclGetObjInterpProc) (void); /* 39 */
+    int (*tclGetOpenMode) (Tcl_Interp *interp, const char *str, int *seekFlagPtr); /* 40 */
+    Tcl_Command (*tclGetOriginalCommand) (Tcl_Command command); /* 41 */
+    CONST86 char * (*tclpGetUserHome) (const char *name, Tcl_DString *bufferPtr); /* 42 */
+    void (*reserved43)(void);
+    int (*tclGuessPackageName) (const char *fileName, Tcl_DString *bufPtr); /* 44 */
+    int (*tclHideUnsafeCommands) (Tcl_Interp *interp); /* 45 */
+    int (*tclInExit) (void); /* 46 */
+    void (*reserved47)(void);
+    void (*reserved48)(void);
+    void (*reserved49)(void);
+    void (*tclInitCompiledLocals) (Tcl_Interp *interp, CallFrame *framePtr, Namespace *nsPtr); /* 50 */
+    int (*tclInterpInit) (Tcl_Interp *interp); /* 51 */
+    void (*reserved52)(void);
+    int (*tclInvokeObjectCommand) (ClientData clientData, Tcl_Interp *interp, int argc, CONST84 char **argv); /* 53 */
+    int (*tclInvokeStringCommand) (ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]); /* 54 */
+    Proc * (*tclIsProc) (Command *cmdPtr); /* 55 */
+    void (*reserved56)(void);
+    void (*reserved57)(void);
+    Var * (*tclLookupVar) (Tcl_Interp *interp, const char *part1, const char *part2, int flags, const char *msg, int createPart1, int createPart2, Var **arrayPtrPtr); /* 58 */
+    void (*reserved59)(void);
+    int (*tclNeedSpace) (const char *start, const char *end); /* 60 */
+    Tcl_Obj * (*tclNewProcBodyObj) (Proc *procPtr); /* 61 */
+    int (*tclObjCommandComplete) (Tcl_Obj *cmdPtr); /* 62 */
+    int (*tclObjInterpProc) (ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]); /* 63 */
+    int (*tclObjInvoke) (Tcl_Interp *interp, int objc, Tcl_Obj *const objv[], int flags); /* 64 */
+    void (*reserved65)(void);
+    void (*reserved66)(void);
+    void (*reserved67)(void);
+    void (*reserved68)(void);
+    char * (*tclpAlloc) (unsigned int size); /* 69 */
+    void (*reserved70)(void);
+    void (*reserved71)(void);
+    void (*reserved72)(void);
+    void (*reserved73)(void);
+    void (*tclpFree) (char *ptr); /* 74 */
+    unsigned long (*tclpGetClicks) (void); /* 75 */
+    unsigned long (*tclpGetSeconds) (void); /* 76 */
+    void (*tclpGetTime) (Tcl_Time *time); /* 77 */
+    void (*reserved78)(void);
+    void (*reserved79)(void);
+    void (*reserved80)(void);
+    char * (*tclpRealloc) (char *ptr, unsigned int size); /* 81 */
+    void (*reserved82)(void);
+    void (*reserved83)(void);
+    void (*reserved84)(void);
+    void (*reserved85)(void);
+    void (*reserved86)(void);
+    void (*reserved87)(void);
+    char * (*tclPrecTraceProc) (ClientData clientData, Tcl_Interp *interp, const char *name1, const char *name2, int flags); /* 88 */
+    int (*tclPreventAliasLoop) (Tcl_Interp *interp, Tcl_Interp *cmdInterp, Tcl_Command cmd); /* 89 */
+    void (*reserved90)(void);
+    void (*tclProcCleanupProc) (Proc *procPtr); /* 91 */
+    int (*tclProcCompileProc) (Tcl_Interp *interp, Proc *procPtr, Tcl_Obj *bodyPtr, Namespace *nsPtr, const char *description, const char *procName); /* 92 */
+    void (*tclProcDeleteProc) (ClientData clientData); /* 93 */
+    void (*reserved94)(void);
+    void (*reserved95)(void);
+    int (*tclRenameCommand) (Tcl_Interp *interp, const char *oldName, const char *newName); /* 96 */
+    void (*tclResetShadowedCmdRefs) (Tcl_Interp *interp, Command *newCmdPtr); /* 97 */
+    int (*tclServiceIdle) (void); /* 98 */
+    void (*reserved99)(void);
+    void (*reserved100)(void);
+    CONST86 char * (*tclSetPreInitScript) (const char *string); /* 101 */
+    void (*tclSetupEnv) (Tcl_Interp *interp); /* 102 */
+    int (*tclSockGetPort) (Tcl_Interp *interp, const char *str, const char *proto, int *portPtr); /* 103 */
+    int (*tclSockMinimumBuffersOld) (int sock, int size); /* 104 */
+    void (*reserved105)(void);
+    void (*reserved106)(void);
+    void (*reserved107)(void);
+    void (*tclTeardownNamespace) (Namespace *nsPtr); /* 108 */
+    int (*tclUpdateReturnInfo) (Interp *iPtr); /* 109 */
+    int (*tclSockMinimumBuffers) (void *sock, int size); /* 110 */
+    void (*tcl_AddInterpResolvers) (Tcl_Interp *interp, const char *name, Tcl_ResolveCmdProc *cmdProc, Tcl_ResolveVarProc *varProc, Tcl_ResolveCompiledVarProc *compiledVarProc); /* 111 */
+    int (*tcl_AppendExportList) (Tcl_Interp *interp, Tcl_Namespace *nsPtr, Tcl_Obj *objPtr); /* 112 */
+    Tcl_Namespace * (*tcl_CreateNamespace) (Tcl_Interp *interp, const char *name, ClientData clientData, Tcl_NamespaceDeleteProc *deleteProc); /* 113 */
+    void (*tcl_DeleteNamespace) (Tcl_Namespace *nsPtr); /* 114 */
+    int (*tcl_Export) (Tcl_Interp *interp, Tcl_Namespace *nsPtr, const char *pattern, int resetListFirst); /* 115 */
+    Tcl_Command (*tcl_FindCommand) (Tcl_Interp *interp, const char *name, Tcl_Namespace *contextNsPtr, int flags); /* 116 */
+    Tcl_Namespace * (*tcl_FindNamespace) (Tcl_Interp *interp, const char *name, Tcl_Namespace *contextNsPtr, int flags); /* 117 */
+    int (*tcl_GetInterpResolvers) (Tcl_Interp *interp, const char *name, Tcl_ResolverInfo *resInfo); /* 118 */
+    int (*tcl_GetNamespaceResolvers) (Tcl_Namespace *namespacePtr, Tcl_ResolverInfo *resInfo); /* 119 */
+    Tcl_Var (*tcl_FindNamespaceVar) (Tcl_Interp *interp, const char *name, Tcl_Namespace *contextNsPtr, int flags); /* 120 */
+    int (*tcl_ForgetImport) (Tcl_Interp *interp, Tcl_Namespace *nsPtr, const char *pattern); /* 121 */
+    Tcl_Command (*tcl_GetCommandFromObj) (Tcl_Interp *interp, Tcl_Obj *objPtr); /* 122 */
+    void (*tcl_GetCommandFullName) (Tcl_Interp *interp, Tcl_Command command, Tcl_Obj *objPtr); /* 123 */
+    Tcl_Namespace * (*tcl_GetCurrentNamespace) (Tcl_Interp *interp); /* 124 */
+    Tcl_Namespace * (*tcl_GetGlobalNamespace) (Tcl_Interp *interp); /* 125 */
+    void (*tcl_GetVariableFullName) (Tcl_Interp *interp, Tcl_Var variable, Tcl_Obj *objPtr); /* 126 */
+    int (*tcl_Import) (Tcl_Interp *interp, Tcl_Namespace *nsPtr, const char *pattern, int allowOverwrite); /* 127 */
+    void (*tcl_PopCallFrame) (Tcl_Interp *interp); /* 128 */
+    int (*tcl_PushCallFrame) (Tcl_Interp *interp, Tcl_CallFrame *framePtr, Tcl_Namespace *nsPtr, int isProcCallFrame); /* 129 */
+    int (*tcl_RemoveInterpResolvers) (Tcl_Interp *interp, const char *name); /* 130 */
+    void (*tcl_SetNamespaceResolvers) (Tcl_Namespace *namespacePtr, Tcl_ResolveCmdProc *cmdProc, Tcl_ResolveVarProc *varProc, Tcl_ResolveCompiledVarProc *compiledVarProc); /* 131 */
+    int (*tclpHasSockets) (Tcl_Interp *interp); /* 132 */
+    struct tm * (*tclpGetDate) (const time_t *time, int useGMT); /* 133 */
+    void (*reserved134)(void);
+    void (*reserved135)(void);
+    void (*reserved136)(void);
+    void (*reserved137)(void);
+    CONST84_RETURN char * (*tclGetEnv) (const char *name, Tcl_DString *valuePtr); /* 138 */
+    void (*reserved139)(void);
+    void (*reserved140)(void);
+    CONST84_RETURN char * (*tclpGetCwd) (Tcl_Interp *interp, Tcl_DString *cwdPtr); /* 141 */
+    int (*tclSetByteCodeFromAny) (Tcl_Interp *interp, Tcl_Obj *objPtr, CompileHookProc *hookProc, ClientData clientData); /* 142 */
+    int (*tclAddLiteralObj) (struct CompileEnv *envPtr, Tcl_Obj *objPtr, LiteralEntry **litPtrPtr); /* 143 */
+    void (*tclHideLiteral) (Tcl_Interp *interp, struct CompileEnv *envPtr, int index); /* 144 */
+    const struct AuxDataType * (*tclGetAuxDataType) (const char *typeName); /* 145 */
+    TclHandle (*tclHandleCreate) (void *ptr); /* 146 */
+    void (*tclHandleFree) (TclHandle handle); /* 147 */
+    TclHandle (*tclHandlePreserve) (TclHandle handle); /* 148 */
+    void (*tclHandleRelease) (TclHandle handle); /* 149 */
+    int (*tclRegAbout) (Tcl_Interp *interp, Tcl_RegExp re); /* 150 */
+    void (*tclRegExpRangeUniChar) (Tcl_RegExp re, int index, int *startPtr, int *endPtr); /* 151 */
+    void (*tclSetLibraryPath) (Tcl_Obj *pathPtr); /* 152 */
+    Tcl_Obj * (*tclGetLibraryPath) (void); /* 153 */
+    void (*reserved154)(void);
+    void (*reserved155)(void);
+    void (*tclRegError) (Tcl_Interp *interp, const char *msg, int status); /* 156 */
+    Var * (*tclVarTraceExists) (Tcl_Interp *interp, const char *varName); /* 157 */
+    void (*tclSetStartupScriptFileName) (const char *filename); /* 158 */
+    const char * (*tclGetStartupScriptFileName) (void); /* 159 */
+    void (*reserved160)(void);
+    int (*tclChannelTransform) (Tcl_Interp *interp, Tcl_Channel chan, Tcl_Obj *cmdObjPtr); /* 161 */
+    void (*tclChannelEventScriptInvoker) (ClientData clientData, int flags); /* 162 */
+    const void * (*tclGetInstructionTable) (void); /* 163 */
+    void (*tclExpandCodeArray) (void *envPtr); /* 164 */
+    void (*tclpSetInitialEncodings) (void); /* 165 */
+    int (*tclListObjSetElement) (Tcl_Interp *interp, Tcl_Obj *listPtr, int index, Tcl_Obj *valuePtr); /* 166 */
+    void (*tclSetStartupScriptPath) (Tcl_Obj *pathPtr); /* 167 */
+    Tcl_Obj * (*tclGetStartupScriptPath) (void); /* 168 */
+    int (*tclpUtfNcmp2) (const char *s1, const char *s2, unsigned long n); /* 169 */
+    int (*tclCheckInterpTraces) (Tcl_Interp *interp, const char *command, int numChars, Command *cmdPtr, int result, int traceFlags, int objc, Tcl_Obj *const objv[]); /* 170 */
+    int (*tclCheckExecutionTraces) (Tcl_Interp *interp, const char *command, int numChars, Command *cmdPtr, int result, int traceFlags, int objc, Tcl_Obj *const objv[]); /* 171 */
+    int (*tclInThreadExit) (void); /* 172 */
+    int (*tclUniCharMatch) (const Tcl_UniChar *string, int strLen, const Tcl_UniChar *pattern, int ptnLen, int flags); /* 173 */
+    void (*reserved174)(void);
+    int (*tclCallVarTraces) (Interp *iPtr, Var *arrayPtr, Var *varPtr, const char *part1, const char *part2, int flags, int leaveErrMsg); /* 175 */
+    void (*tclCleanupVar) (Var *varPtr, Var *arrayPtr); /* 176 */
+    void (*tclVarErrMsg) (Tcl_Interp *interp, const char *part1, const char *part2, const char *operation, const char *reason); /* 177 */
+    void (*tcl_SetStartupScript) (Tcl_Obj *pathPtr, const char *encodingName); /* 178 */
+    Tcl_Obj * (*tcl_GetStartupScript) (const char **encodingNamePtr); /* 179 */
+    void (*reserved180)(void);
+    void (*reserved181)(void);
+    struct tm * (*tclpLocaltime) (const time_t *clock); /* 182 */
+    struct tm * (*tclpGmtime) (const time_t *clock); /* 183 */
+    void (*reserved184)(void);
+    void (*reserved185)(void);
+    void (*reserved186)(void);
+    void (*reserved187)(void);
+    void (*reserved188)(void);
+    void (*reserved189)(void);
+    void (*reserved190)(void);
+    void (*reserved191)(void);
+    void (*reserved192)(void);
+    void (*reserved193)(void);
+    void (*reserved194)(void);
+    void (*reserved195)(void);
+    void (*reserved196)(void);
+    void (*reserved197)(void);
+    int (*tclObjGetFrame) (Tcl_Interp *interp, Tcl_Obj *objPtr, CallFrame **framePtrPtr); /* 198 */
+    void (*reserved199)(void);
+    int (*tclpObjRemoveDirectory) (Tcl_Obj *pathPtr, int recursive, Tcl_Obj **errorPtr); /* 200 */
+    int (*tclpObjCopyDirectory) (Tcl_Obj *srcPathPtr, Tcl_Obj *destPathPtr, Tcl_Obj **errorPtr); /* 201 */
+    int (*tclpObjCreateDirectory) (Tcl_Obj *pathPtr); /* 202 */
+    int (*tclpObjDeleteFile) (Tcl_Obj *pathPtr); /* 203 */
+    int (*tclpObjCopyFile) (Tcl_Obj *srcPathPtr, Tcl_Obj *destPathPtr); /* 204 */
+    int (*tclpObjRenameFile) (Tcl_Obj *srcPathPtr, Tcl_Obj *destPathPtr); /* 205 */
+    int (*tclpObjStat) (Tcl_Obj *pathPtr, Tcl_StatBuf *buf); /* 206 */
+    int (*tclpObjAccess) (Tcl_Obj *pathPtr, int mode); /* 207 */
+    Tcl_Channel (*tclpOpenFileChannel) (Tcl_Interp *interp, Tcl_Obj *pathPtr, int mode, int permissions); /* 208 */
+    void (*reserved209)(void);
+    void (*reserved210)(void);
+    void (*reserved211)(void);
+    void (*tclpFindExecutable) (const char *argv0); /* 212 */
+    Tcl_Obj * (*tclGetObjNameOfExecutable) (void); /* 213 */
+    void (*tclSetObjNameOfExecutable) (Tcl_Obj *name, Tcl_Encoding encoding); /* 214 */
+    void * (*tclStackAlloc) (Tcl_Interp *interp, int numBytes); /* 215 */
+    void (*tclStackFree) (Tcl_Interp *interp, void *freePtr); /* 216 */
+    int (*tclPushStackFrame) (Tcl_Interp *interp, Tcl_CallFrame **framePtrPtr, Tcl_Namespace *namespacePtr, int isProcCallFrame); /* 217 */
+    void (*tclPopStackFrame) (Tcl_Interp *interp); /* 218 */
+    void (*reserved219)(void);
+    void (*reserved220)(void);
+    void (*reserved221)(void);
+    void (*reserved222)(void);
+    void (*reserved223)(void);
+    TclPlatformType * (*tclGetPlatform) (void); /* 224 */
+    Tcl_Obj * (*tclTraceDictPath) (Tcl_Interp *interp, Tcl_Obj *rootPtr, int keyc, Tcl_Obj *const keyv[], int flags); /* 225 */
+    int (*tclObjBeingDeleted) (Tcl_Obj *objPtr); /* 226 */
+    void (*tclSetNsPath) (Namespace *nsPtr, int pathLength, Tcl_Namespace *pathAry[]); /* 227 */
+    void (*reserved228)(void);
+    int (*tclPtrMakeUpvar) (Tcl_Interp *interp, Var *otherP1Ptr, const char *myName, int myFlags, int index); /* 229 */
+    Var * (*tclObjLookupVar) (Tcl_Interp *interp, Tcl_Obj *part1Ptr, const char *part2, int flags, const char *msg, const int createPart1, const int createPart2, Var **arrayPtrPtr); /* 230 */
+    int (*tclGetNamespaceFromObj) (Tcl_Interp *interp, Tcl_Obj *objPtr, Tcl_Namespace **nsPtrPtr); /* 231 */
+    int (*tclEvalObjEx) (Tcl_Interp *interp, Tcl_Obj *objPtr, int flags, const CmdFrame *invoker, int word); /* 232 */
+    void (*tclGetSrcInfoForPc) (CmdFrame *contextPtr); /* 233 */
+    Var * (*tclVarHashCreateVar) (TclVarHashTable *tablePtr, const char *key, int *newPtr); /* 234 */
+    void (*tclInitVarHashTable) (TclVarHashTable *tablePtr, Namespace *nsPtr); /* 235 */
+    void (*tclBackgroundException) (Tcl_Interp *interp, int code); /* 236 */
+    int (*tclResetCancellation) (Tcl_Interp *interp, int force); /* 237 */
+    int (*tclNRInterpProc) (ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]); /* 238 */
+    int (*tclNRInterpProcCore) (Tcl_Interp *interp, Tcl_Obj *procNameObj, int skip, ProcErrorProc *errorProc); /* 239 */
+    int (*tclNRRunCallbacks) (Tcl_Interp *interp, int result, struct NRE_callback *rootPtr); /* 240 */
+    int (*tclNREvalObjEx) (Tcl_Interp *interp, Tcl_Obj *objPtr, int flags, const CmdFrame *invoker, int word); /* 241 */
+    int (*tclNREvalObjv) (Tcl_Interp *interp, int objc, Tcl_Obj *const objv[], int flags, Command *cmdPtr); /* 242 */
+    void (*tclDbDumpActiveObjects) (FILE *outFile); /* 243 */
+    Tcl_HashTable * (*tclGetNamespaceChildTable) (Tcl_Namespace *nsPtr); /* 244 */
+    Tcl_HashTable * (*tclGetNamespaceCommandTable) (Tcl_Namespace *nsPtr); /* 245 */
+    int (*tclInitRewriteEnsemble) (Tcl_Interp *interp, int numRemoved, int numInserted, Tcl_Obj *const *objv); /* 246 */
+    void (*tclResetRewriteEnsemble) (Tcl_Interp *interp, int isRootEnsemble); /* 247 */
+    int (*tclCopyChannel) (Tcl_Interp *interp, Tcl_Channel inChan, Tcl_Channel outChan, Tcl_WideInt toRead, Tcl_Obj *cmdPtr); /* 248 */
+    char * (*tclDoubleDigits) (double dv, int ndigits, int flags, int *decpt, int *signum, char **endPtr); /* 249 */
+    void (*tclSetSlaveCancelFlags) (Tcl_Interp *interp, int flags, int force); /* 250 */
+    int (*tclRegisterLiteral) (void *envPtr, char *bytes, int length, int flags); /* 251 */
+} TclIntStubs;
+
+extern const TclIntStubs *tclIntStubsPtr;
+
+#ifdef __cplusplus
+}
+#endif
+
+#if defined(USE_TCL_STUBS)
+
+/*
+ * Inline function declarations:
+ */
+
+/* Slot 0 is reserved */
+/* Slot 1 is reserved */
+/* Slot 2 is reserved */
+#define TclAllocateFreeObjects \
+       (tclIntStubsPtr->tclAllocateFreeObjects) /* 3 */
+/* Slot 4 is reserved */
+#define TclCleanupChildren \
+       (tclIntStubsPtr->tclCleanupChildren) /* 5 */
+#define TclCleanupCommand \
+       (tclIntStubsPtr->tclCleanupCommand) /* 6 */
+#define TclCopyAndCollapse \
+       (tclIntStubsPtr->tclCopyAndCollapse) /* 7 */
+#define TclCopyChannelOld \
+       (tclIntStubsPtr->tclCopyChannelOld) /* 8 */
+#define TclCreatePipeline \
+       (tclIntStubsPtr->tclCreatePipeline) /* 9 */
+#define TclCreateProc \
+       (tclIntStubsPtr->tclCreateProc) /* 10 */
+#define TclDeleteCompiledLocalVars \
+       (tclIntStubsPtr->tclDeleteCompiledLocalVars) /* 11 */
+#define TclDeleteVars \
+       (tclIntStubsPtr->tclDeleteVars) /* 12 */
+/* Slot 13 is reserved */
+#define TclDumpMemoryInfo \
+       (tclIntStubsPtr->tclDumpMemoryInfo) /* 14 */
+/* Slot 15 is reserved */
+#define TclExprFloatError \
+       (tclIntStubsPtr->tclExprFloatError) /* 16 */
+/* Slot 17 is reserved */
+/* Slot 18 is reserved */
+/* Slot 19 is reserved */
+/* Slot 20 is reserved */
+/* Slot 21 is reserved */
+#define TclFindElement \
+       (tclIntStubsPtr->tclFindElement) /* 22 */
+#define TclFindProc \
+       (tclIntStubsPtr->tclFindProc) /* 23 */
+#define TclFormatInt \
+       (tclIntStubsPtr->tclFormatInt) /* 24 */
+#define TclFreePackageInfo \
+       (tclIntStubsPtr->tclFreePackageInfo) /* 25 */
+/* Slot 26 is reserved */
+/* Slot 27 is reserved */
+#define TclpGetDefaultStdChannel \
+       (tclIntStubsPtr->tclpGetDefaultStdChannel) /* 28 */
+/* Slot 29 is reserved */
+/* Slot 30 is reserved */
+#define TclGetExtension \
+       (tclIntStubsPtr->tclGetExtension) /* 31 */
+#define TclGetFrame \
+       (tclIntStubsPtr->tclGetFrame) /* 32 */
+/* Slot 33 is reserved */
+#define TclGetIntForIndex \
+       (tclIntStubsPtr->tclGetIntForIndex) /* 34 */
+/* Slot 35 is reserved */
+/* Slot 36 is reserved */
+#define TclGetLoadedPackages \
+       (tclIntStubsPtr->tclGetLoadedPackages) /* 37 */
+#define TclGetNamespaceForQualName \
+       (tclIntStubsPtr->tclGetNamespaceForQualName) /* 38 */
+#define TclGetObjInterpProc \
+       (tclIntStubsPtr->tclGetObjInterpProc) /* 39 */
+#define TclGetOpenMode \
+       (tclIntStubsPtr->tclGetOpenMode) /* 40 */
+#define TclGetOriginalCommand \
+       (tclIntStubsPtr->tclGetOriginalCommand) /* 41 */
+#define TclpGetUserHome \
+       (tclIntStubsPtr->tclpGetUserHome) /* 42 */
+/* Slot 43 is reserved */
+#define TclGuessPackageName \
+       (tclIntStubsPtr->tclGuessPackageName) /* 44 */
+#define TclHideUnsafeCommands \
+       (tclIntStubsPtr->tclHideUnsafeCommands) /* 45 */
+#define TclInExit \
+       (tclIntStubsPtr->tclInExit) /* 46 */
+/* Slot 47 is reserved */
+/* Slot 48 is reserved */
+/* Slot 49 is reserved */
+#define TclInitCompiledLocals \
+       (tclIntStubsPtr->tclInitCompiledLocals) /* 50 */
+#define TclInterpInit \
+       (tclIntStubsPtr->tclInterpInit) /* 51 */
+/* Slot 52 is reserved */
+#define TclInvokeObjectCommand \
+       (tclIntStubsPtr->tclInvokeObjectCommand) /* 53 */
+#define TclInvokeStringCommand \
+       (tclIntStubsPtr->tclInvokeStringCommand) /* 54 */
+#define TclIsProc \
+       (tclIntStubsPtr->tclIsProc) /* 55 */
+/* Slot 56 is reserved */
+/* Slot 57 is reserved */
+#define TclLookupVar \
+       (tclIntStubsPtr->tclLookupVar) /* 58 */
+/* Slot 59 is reserved */
+#define TclNeedSpace \
+       (tclIntStubsPtr->tclNeedSpace) /* 60 */
+#define TclNewProcBodyObj \
+       (tclIntStubsPtr->tclNewProcBodyObj) /* 61 */
+#define TclObjCommandComplete \
+       (tclIntStubsPtr->tclObjCommandComplete) /* 62 */
+#define TclObjInterpProc \
+       (tclIntStubsPtr->tclObjInterpProc) /* 63 */
+#define TclObjInvoke \
+       (tclIntStubsPtr->tclObjInvoke) /* 64 */
+/* Slot 65 is reserved */
+/* Slot 66 is reserved */
+/* Slot 67 is reserved */
+/* Slot 68 is reserved */
+#define TclpAlloc \
+       (tclIntStubsPtr->tclpAlloc) /* 69 */
+/* Slot 70 is reserved */
+/* Slot 71 is reserved */
+/* Slot 72 is reserved */
+/* Slot 73 is reserved */
+#define TclpFree \
+       (tclIntStubsPtr->tclpFree) /* 74 */
+#define TclpGetClicks \
+       (tclIntStubsPtr->tclpGetClicks) /* 75 */
+#define TclpGetSeconds \
+       (tclIntStubsPtr->tclpGetSeconds) /* 76 */
+#define TclpGetTime \
+       (tclIntStubsPtr->tclpGetTime) /* 77 */
+/* Slot 78 is reserved */
+/* Slot 79 is reserved */
+/* Slot 80 is reserved */
+#define TclpRealloc \
+       (tclIntStubsPtr->tclpRealloc) /* 81 */
+/* Slot 82 is reserved */
+/* Slot 83 is reserved */
+/* Slot 84 is reserved */
+/* Slot 85 is reserved */
+/* Slot 86 is reserved */
+/* Slot 87 is reserved */
+#define TclPrecTraceProc \
+       (tclIntStubsPtr->tclPrecTraceProc) /* 88 */
+#define TclPreventAliasLoop \
+       (tclIntStubsPtr->tclPreventAliasLoop) /* 89 */
+/* Slot 90 is reserved */
+#define TclProcCleanupProc \
+       (tclIntStubsPtr->tclProcCleanupProc) /* 91 */
+#define TclProcCompileProc \
+       (tclIntStubsPtr->tclProcCompileProc) /* 92 */
+#define TclProcDeleteProc \
+       (tclIntStubsPtr->tclProcDeleteProc) /* 93 */
+/* Slot 94 is reserved */
+/* Slot 95 is reserved */
+#define TclRenameCommand \
+       (tclIntStubsPtr->tclRenameCommand) /* 96 */
+#define TclResetShadowedCmdRefs \
+       (tclIntStubsPtr->tclResetShadowedCmdRefs) /* 97 */
+#define TclServiceIdle \
+       (tclIntStubsPtr->tclServiceIdle) /* 98 */
+/* Slot 99 is reserved */
+/* Slot 100 is reserved */
+#define TclSetPreInitScript \
+       (tclIntStubsPtr->tclSetPreInitScript) /* 101 */
+#define TclSetupEnv \
+       (tclIntStubsPtr->tclSetupEnv) /* 102 */
+#define TclSockGetPort \
+       (tclIntStubsPtr->tclSockGetPort) /* 103 */
+#define TclSockMinimumBuffersOld \
+       (tclIntStubsPtr->tclSockMinimumBuffersOld) /* 104 */
+/* Slot 105 is reserved */
+/* Slot 106 is reserved */
+/* Slot 107 is reserved */
+#define TclTeardownNamespace \
+       (tclIntStubsPtr->tclTeardownNamespace) /* 108 */
+#define TclUpdateReturnInfo \
+       (tclIntStubsPtr->tclUpdateReturnInfo) /* 109 */
+#define TclSockMinimumBuffers \
+       (tclIntStubsPtr->tclSockMinimumBuffers) /* 110 */
+#define Tcl_AddInterpResolvers \
+       (tclIntStubsPtr->tcl_AddInterpResolvers) /* 111 */
+#define Tcl_AppendExportList \
+       (tclIntStubsPtr->tcl_AppendExportList) /* 112 */
+#define Tcl_CreateNamespace \
+       (tclIntStubsPtr->tcl_CreateNamespace) /* 113 */
+#define Tcl_DeleteNamespace \
+       (tclIntStubsPtr->tcl_DeleteNamespace) /* 114 */
+#define Tcl_Export \
+       (tclIntStubsPtr->tcl_Export) /* 115 */
+#define Tcl_FindCommand \
+       (tclIntStubsPtr->tcl_FindCommand) /* 116 */
+#define Tcl_FindNamespace \
+       (tclIntStubsPtr->tcl_FindNamespace) /* 117 */
+#define Tcl_GetInterpResolvers \
+       (tclIntStubsPtr->tcl_GetInterpResolvers) /* 118 */
+#define Tcl_GetNamespaceResolvers \
+       (tclIntStubsPtr->tcl_GetNamespaceResolvers) /* 119 */
+#define Tcl_FindNamespaceVar \
+       (tclIntStubsPtr->tcl_FindNamespaceVar) /* 120 */
+#define Tcl_ForgetImport \
+       (tclIntStubsPtr->tcl_ForgetImport) /* 121 */
+#define Tcl_GetCommandFromObj \
+       (tclIntStubsPtr->tcl_GetCommandFromObj) /* 122 */
+#define Tcl_GetCommandFullName \
+       (tclIntStubsPtr->tcl_GetCommandFullName) /* 123 */
+#define Tcl_GetCurrentNamespace \
+       (tclIntStubsPtr->tcl_GetCurrentNamespace) /* 124 */
+#define Tcl_GetGlobalNamespace \
+       (tclIntStubsPtr->tcl_GetGlobalNamespace) /* 125 */
+#define Tcl_GetVariableFullName \
+       (tclIntStubsPtr->tcl_GetVariableFullName) /* 126 */
+#define Tcl_Import \
+       (tclIntStubsPtr->tcl_Import) /* 127 */
+#define Tcl_PopCallFrame \
+       (tclIntStubsPtr->tcl_PopCallFrame) /* 128 */
+#define Tcl_PushCallFrame \
+       (tclIntStubsPtr->tcl_PushCallFrame) /* 129 */
+#define Tcl_RemoveInterpResolvers \
+       (tclIntStubsPtr->tcl_RemoveInterpResolvers) /* 130 */
+#define Tcl_SetNamespaceResolvers \
+       (tclIntStubsPtr->tcl_SetNamespaceResolvers) /* 131 */
+#define TclpHasSockets \
+       (tclIntStubsPtr->tclpHasSockets) /* 132 */
+#define TclpGetDate \
+       (tclIntStubsPtr->tclpGetDate) /* 133 */
+/* Slot 134 is reserved */
+/* Slot 135 is reserved */
+/* Slot 136 is reserved */
+/* Slot 137 is reserved */
+#define TclGetEnv \
+       (tclIntStubsPtr->tclGetEnv) /* 138 */
+/* Slot 139 is reserved */
+/* Slot 140 is reserved */
+#define TclpGetCwd \
+       (tclIntStubsPtr->tclpGetCwd) /* 141 */
+#define TclSetByteCodeFromAny \
+       (tclIntStubsPtr->tclSetByteCodeFromAny) /* 142 */
+#define TclAddLiteralObj \
+       (tclIntStubsPtr->tclAddLiteralObj) /* 143 */
+#define TclHideLiteral \
+       (tclIntStubsPtr->tclHideLiteral) /* 144 */
+#define TclGetAuxDataType \
+       (tclIntStubsPtr->tclGetAuxDataType) /* 145 */
+#define TclHandleCreate \
+       (tclIntStubsPtr->tclHandleCreate) /* 146 */
+#define TclHandleFree \
+       (tclIntStubsPtr->tclHandleFree) /* 147 */
+#define TclHandlePreserve \
+       (tclIntStubsPtr->tclHandlePreserve) /* 148 */
+#define TclHandleRelease \
+       (tclIntStubsPtr->tclHandleRelease) /* 149 */
+#define TclRegAbout \
+       (tclIntStubsPtr->tclRegAbout) /* 150 */
+#define TclRegExpRangeUniChar \
+       (tclIntStubsPtr->tclRegExpRangeUniChar) /* 151 */
+#define TclSetLibraryPath \
+       (tclIntStubsPtr->tclSetLibraryPath) /* 152 */
+#define TclGetLibraryPath \
+       (tclIntStubsPtr->tclGetLibraryPath) /* 153 */
+/* Slot 154 is reserved */
+/* Slot 155 is reserved */
+#define TclRegError \
+       (tclIntStubsPtr->tclRegError) /* 156 */
+#define TclVarTraceExists \
+       (tclIntStubsPtr->tclVarTraceExists) /* 157 */
+#define TclSetStartupScriptFileName \
+       (tclIntStubsPtr->tclSetStartupScriptFileName) /* 158 */
+#define TclGetStartupScriptFileName \
+       (tclIntStubsPtr->tclGetStartupScriptFileName) /* 159 */
+/* Slot 160 is reserved */
+#define TclChannelTransform \
+       (tclIntStubsPtr->tclChannelTransform) /* 161 */
+#define TclChannelEventScriptInvoker \
+       (tclIntStubsPtr->tclChannelEventScriptInvoker) /* 162 */
+#define TclGetInstructionTable \
+       (tclIntStubsPtr->tclGetInstructionTable) /* 163 */
+#define TclExpandCodeArray \
+       (tclIntStubsPtr->tclExpandCodeArray) /* 164 */
+#define TclpSetInitialEncodings \
+       (tclIntStubsPtr->tclpSetInitialEncodings) /* 165 */
+#define TclListObjSetElement \
+       (tclIntStubsPtr->tclListObjSetElement) /* 166 */
+#define TclSetStartupScriptPath \
+       (tclIntStubsPtr->tclSetStartupScriptPath) /* 167 */
+#define TclGetStartupScriptPath \
+       (tclIntStubsPtr->tclGetStartupScriptPath) /* 168 */
+#define TclpUtfNcmp2 \
+       (tclIntStubsPtr->tclpUtfNcmp2) /* 169 */
+#define TclCheckInterpTraces \
+       (tclIntStubsPtr->tclCheckInterpTraces) /* 170 */
+#define TclCheckExecutionTraces \
+       (tclIntStubsPtr->tclCheckExecutionTraces) /* 171 */
+#define TclInThreadExit \
+       (tclIntStubsPtr->tclInThreadExit) /* 172 */
+#define TclUniCharMatch \
+       (tclIntStubsPtr->tclUniCharMatch) /* 173 */
+/* Slot 174 is reserved */
+#define TclCallVarTraces \
+       (tclIntStubsPtr->tclCallVarTraces) /* 175 */
+#define TclCleanupVar \
+       (tclIntStubsPtr->tclCleanupVar) /* 176 */
+#define TclVarErrMsg \
+       (tclIntStubsPtr->tclVarErrMsg) /* 177 */
+#define Tcl_SetStartupScript \
+       (tclIntStubsPtr->tcl_SetStartupScript) /* 178 */
+#define Tcl_GetStartupScript \
+       (tclIntStubsPtr->tcl_GetStartupScript) /* 179 */
+/* Slot 180 is reserved */
+/* Slot 181 is reserved */
+#define TclpLocaltime \
+       (tclIntStubsPtr->tclpLocaltime) /* 182 */
+#define TclpGmtime \
+       (tclIntStubsPtr->tclpGmtime) /* 183 */
+/* Slot 184 is reserved */
+/* Slot 185 is reserved */
+/* Slot 186 is reserved */
+/* Slot 187 is reserved */
+/* Slot 188 is reserved */
+/* Slot 189 is reserved */
+/* Slot 190 is reserved */
+/* Slot 191 is reserved */
+/* Slot 192 is reserved */
+/* Slot 193 is reserved */
+/* Slot 194 is reserved */
+/* Slot 195 is reserved */
+/* Slot 196 is reserved */
+/* Slot 197 is reserved */
+#define TclObjGetFrame \
+       (tclIntStubsPtr->tclObjGetFrame) /* 198 */
+/* Slot 199 is reserved */
+#define TclpObjRemoveDirectory \
+       (tclIntStubsPtr->tclpObjRemoveDirectory) /* 200 */
+#define TclpObjCopyDirectory \
+       (tclIntStubsPtr->tclpObjCopyDirectory) /* 201 */
+#define TclpObjCreateDirectory \
+       (tclIntStubsPtr->tclpObjCreateDirectory) /* 202 */
+#define TclpObjDeleteFile \
+       (tclIntStubsPtr->tclpObjDeleteFile) /* 203 */
+#define TclpObjCopyFile \
+       (tclIntStubsPtr->tclpObjCopyFile) /* 204 */
+#define TclpObjRenameFile \
+       (tclIntStubsPtr->tclpObjRenameFile) /* 205 */
+#define TclpObjStat \
+       (tclIntStubsPtr->tclpObjStat) /* 206 */
+#define TclpObjAccess \
+       (tclIntStubsPtr->tclpObjAccess) /* 207 */
+#define TclpOpenFileChannel \
+       (tclIntStubsPtr->tclpOpenFileChannel) /* 208 */
+/* Slot 209 is reserved */
+/* Slot 210 is reserved */
+/* Slot 211 is reserved */
+#define TclpFindExecutable \
+       (tclIntStubsPtr->tclpFindExecutable) /* 212 */
+#define TclGetObjNameOfExecutable \
+       (tclIntStubsPtr->tclGetObjNameOfExecutable) /* 213 */
+#define TclSetObjNameOfExecutable \
+       (tclIntStubsPtr->tclSetObjNameOfExecutable) /* 214 */
+#define TclStackAlloc \
+       (tclIntStubsPtr->tclStackAlloc) /* 215 */
+#define TclStackFree \
+       (tclIntStubsPtr->tclStackFree) /* 216 */
+#define TclPushStackFrame \
+       (tclIntStubsPtr->tclPushStackFrame) /* 217 */
+#define TclPopStackFrame \
+       (tclIntStubsPtr->tclPopStackFrame) /* 218 */
+/* Slot 219 is reserved */
+/* Slot 220 is reserved */
+/* Slot 221 is reserved */
+/* Slot 222 is reserved */
+/* Slot 223 is reserved */
+#define TclGetPlatform \
+       (tclIntStubsPtr->tclGetPlatform) /* 224 */
+#define TclTraceDictPath \
+       (tclIntStubsPtr->tclTraceDictPath) /* 225 */
+#define TclObjBeingDeleted \
+       (tclIntStubsPtr->tclObjBeingDeleted) /* 226 */
+#define TclSetNsPath \
+       (tclIntStubsPtr->tclSetNsPath) /* 227 */
+/* Slot 228 is reserved */
+#define TclPtrMakeUpvar \
+       (tclIntStubsPtr->tclPtrMakeUpvar) /* 229 */
+#define TclObjLookupVar \
+       (tclIntStubsPtr->tclObjLookupVar) /* 230 */
+#define TclGetNamespaceFromObj \
+       (tclIntStubsPtr->tclGetNamespaceFromObj) /* 231 */
+#define TclEvalObjEx \
+       (tclIntStubsPtr->tclEvalObjEx) /* 232 */
+#define TclGetSrcInfoForPc \
+       (tclIntStubsPtr->tclGetSrcInfoForPc) /* 233 */
+#define TclVarHashCreateVar \
+       (tclIntStubsPtr->tclVarHashCreateVar) /* 234 */
+#define TclInitVarHashTable \
+       (tclIntStubsPtr->tclInitVarHashTable) /* 235 */
+#define TclBackgroundException \
+       (tclIntStubsPtr->tclBackgroundException) /* 236 */
+#define TclResetCancellation \
+       (tclIntStubsPtr->tclResetCancellation) /* 237 */
+#define TclNRInterpProc \
+       (tclIntStubsPtr->tclNRInterpProc) /* 238 */
+#define TclNRInterpProcCore \
+       (tclIntStubsPtr->tclNRInterpProcCore) /* 239 */
+#define TclNRRunCallbacks \
+       (tclIntStubsPtr->tclNRRunCallbacks) /* 240 */
+#define TclNREvalObjEx \
+       (tclIntStubsPtr->tclNREvalObjEx) /* 241 */
+#define TclNREvalObjv \
+       (tclIntStubsPtr->tclNREvalObjv) /* 242 */
+#define TclDbDumpActiveObjects \
+       (tclIntStubsPtr->tclDbDumpActiveObjects) /* 243 */
+#define TclGetNamespaceChildTable \
+       (tclIntStubsPtr->tclGetNamespaceChildTable) /* 244 */
+#define TclGetNamespaceCommandTable \
+       (tclIntStubsPtr->tclGetNamespaceCommandTable) /* 245 */
+#define TclInitRewriteEnsemble \
+       (tclIntStubsPtr->tclInitRewriteEnsemble) /* 246 */
+#define TclResetRewriteEnsemble \
+       (tclIntStubsPtr->tclResetRewriteEnsemble) /* 247 */
+#define TclCopyChannel \
+       (tclIntStubsPtr->tclCopyChannel) /* 248 */
+#define TclDoubleDigits \
+       (tclIntStubsPtr->tclDoubleDigits) /* 249 */
+#define TclSetSlaveCancelFlags \
+       (tclIntStubsPtr->tclSetSlaveCancelFlags) /* 250 */
+#define TclRegisterLiteral \
+       (tclIntStubsPtr->tclRegisterLiteral) /* 251 */
+
+#endif /* defined(USE_TCL_STUBS) */
+
+/* !END!: Do not edit above this line. */
+
+#undef TCL_STORAGE_CLASS
+#define TCL_STORAGE_CLASS DLLIMPORT
+
+#undef TclGetStartupScriptFileName
+#undef TclSetStartupScriptFileName
+#undef TclGetStartupScriptPath
+#undef TclSetStartupScriptPath
+#undef TclBackgroundException
+
+#if defined(USE_TCL_STUBS) && defined(TCL_NO_DEPRECATED)
+#   undef Tcl_SetStartupScript
+#   define Tcl_SetStartupScript \
+           (tclStubsPtr->tcl_SetStartupScript) /* 622 */
+#   undef Tcl_GetStartupScript
+#   define Tcl_GetStartupScript \
+           (tclStubsPtr->tcl_GetStartupScript) /* 623 */
+#   undef Tcl_CreateNamespace
+#   define Tcl_CreateNamespace \
+          (tclStubsPtr->tcl_CreateNamespace) /* 506 */
+#   undef Tcl_DeleteNamespace
+#   define Tcl_DeleteNamespace \
+          (tclStubsPtr->tcl_DeleteNamespace) /* 507 */
+#   undef Tcl_AppendExportList
+#   define Tcl_AppendExportList \
+          (tclStubsPtr->tcl_AppendExportList) /* 508 */
+#   undef Tcl_Export
+#   define Tcl_Export \
+          (tclStubsPtr->tcl_Export) /* 509 */
+#   undef Tcl_Import
+#   define Tcl_Import \
+          (tclStubsPtr->tcl_Import) /* 510 */
+#   undef Tcl_ForgetImport
+#   define Tcl_ForgetImport \
+          (tclStubsPtr->tcl_ForgetImport) /* 511 */
+#   undef Tcl_GetCurrentNamespace
+#   define Tcl_GetCurrentNamespace \
+          (tclStubsPtr->tcl_GetCurrentNamespace) /* 512 */
+#   undef Tcl_GetGlobalNamespace
+#   define Tcl_GetGlobalNamespace \
+          (tclStubsPtr->tcl_GetGlobalNamespace) /* 513 */
+#   undef Tcl_FindNamespace
+#   define Tcl_FindNamespace \
+          (tclStubsPtr->tcl_FindNamespace) /* 514 */
+#   undef Tcl_FindCommand
+#   define Tcl_FindCommand \
+          (tclStubsPtr->tcl_FindCommand) /* 515 */
+#   undef Tcl_GetCommandFromObj
+#   define Tcl_GetCommandFromObj \
+          (tclStubsPtr->tcl_GetCommandFromObj) /* 516 */
+#   undef Tcl_GetCommandFullName
+#   define Tcl_GetCommandFullName \
+          (tclStubsPtr->tcl_GetCommandFullName) /* 517 */
+#endif
+
+#undef TclCopyChannelOld
+#undef TclSockMinimumBuffersOld
+
+#endif /* _TCLINTDECLS */
diff --git a/include/tclPort.h b/include/tclPort.h
new file mode 100644 (file)
index 0000000..0e4df71
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+ * tclPort.h --
+ *
+ *     This header file handles porting issues that occur because
+ *     of differences between systems.  It reads in platform specific
+ *     portability files.
+ *
+ * Copyright (c) 1994-1995 Sun Microsystems, Inc.
+ *
+ * See the file "license.terms" for information on usage and redistribution
+ * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+ */
+
+#ifndef _TCLPORT
+#define _TCLPORT
+
+#ifdef HAVE_TCL_CONFIG_H
+#include "tclConfig.h"
+#endif
+#if defined(_WIN32)
+#   include "tclWinPort.h"
+#else
+#   include <tclUnixPort.h>
+#endif
+#include "tcl.h"
+
+#if !defined(LLONG_MIN)
+#   ifdef TCL_WIDE_INT_IS_LONG
+#      define LLONG_MIN LONG_MIN
+#   else
+#      ifdef LLONG_BIT
+#         define LLONG_MIN ((Tcl_WideInt)(Tcl_LongAsWide(1)<<(LLONG_BIT-1)))
+#      else
+/* Assume we're on a system with a 64-bit 'long long' type */
+#         define LLONG_MIN ((Tcl_WideInt)(Tcl_LongAsWide(1)<<63))
+#      endif
+#   endif
+/* Assume that if LLONG_MIN is undefined, then so is LLONG_MAX */
+#   define LLONG_MAX (~LLONG_MIN)
+#endif
+
+
+#endif /* _TCLPORT */
diff --git a/include/tclUnixPort.h b/include/tclUnixPort.h
new file mode 100644 (file)
index 0000000..f64d453
--- /dev/null
@@ -0,0 +1,742 @@
+/*
+ * tclUnixPort.h --
+ *
+ *     This header file handles porting issues that occur because of
+ *     differences between systems. It reads in UNIX-related header files and
+ *     sets up UNIX-related macros for Tcl's UNIX core. It should be the only
+ *     file that contains #ifdefs to handle different flavors of UNIX. This
+ *     file sets up the union of all UNIX-related things needed by any of the
+ *     Tcl core files. This file depends on configuration #defines such as
+ *     NO_DIRENT_H that are set up by the "configure" script.
+ *
+ *     Much of the material in this file was originally contributed by Karl
+ *     Lehenbauer, Mark Diekhans and Peter da Silva.
+ *
+ * Copyright (c) 1991-1994 The Regents of the University of California.
+ * Copyright (c) 1994-1997 Sun Microsystems, Inc.
+ *
+ * See the file "license.terms" for information on usage and redistribution of
+ * this file, and for a DISCLAIMER OF ALL WARRANTIES.
+ */
+
+#ifndef _TCLUNIXPORT
+#define _TCLUNIXPORT
+\f
+/*
+ *---------------------------------------------------------------------------
+ * The following sets of #includes and #ifdefs are required to get Tcl to
+ * compile under the various flavors of unix.
+ *---------------------------------------------------------------------------
+ */
+
+#include <errno.h>
+#include <fcntl.h>
+#ifdef HAVE_NET_ERRNO_H
+#   include <net/errno.h>
+#endif
+#include <pwd.h>
+#include <signal.h>
+#ifdef HAVE_SYS_PARAM_H
+#   include <sys/param.h>
+#endif
+#include <sys/types.h>
+#ifdef USE_DIRENT2_H
+#   include "../compat/dirent2.h"
+#else
+#ifdef NO_DIRENT_H
+#   include "../compat/dirent.h"
+#else
+#   include <dirent.h>
+#endif
+#endif
+\f
+/*
+ *---------------------------------------------------------------------------
+ * Parameterize for 64-bit filesystem support.
+ *---------------------------------------------------------------------------
+ */
+
+#ifdef HAVE_STRUCT_DIRENT64
+typedef struct dirent64        Tcl_DirEntry;
+#   define TclOSreaddir                readdir64
+#else
+typedef struct dirent  Tcl_DirEntry;
+#   define TclOSreaddir                readdir
+#endif
+
+#ifdef HAVE_TYPE_OFF64_T
+typedef off64_t                Tcl_SeekOffset;
+#   define TclOSseek           lseek64
+#   define TclOSopen           open64
+#else
+typedef off_t          Tcl_SeekOffset;
+#   define TclOSseek           lseek
+#   define TclOSopen           open
+#endif
+
+#ifdef __CYGWIN__
+
+    /* Make some symbols available without including <windows.h> */
+#   define DWORD unsigned int
+#   define CP_UTF8 65001
+#   define GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS 0x00000004
+#   define HANDLE void *
+#   define HINSTANCE void *
+#   define SOCKET unsigned int
+#   define WSAEWOULDBLOCK 10035
+    typedef unsigned short WCHAR;
+    __declspec(dllimport) extern __stdcall int GetModuleHandleExW(unsigned int, const char *, void *);
+    __declspec(dllimport) extern __stdcall int GetModuleFileNameW(void *, const char *, int);
+    __declspec(dllimport) extern __stdcall int WideCharToMultiByte(int, int, const char *, int,
+           const char *, int, const char *, const char *);
+    __declspec(dllimport) extern __stdcall int MultiByteToWideChar(int, int, const char *, int,
+           WCHAR *, int);
+    __declspec(dllimport) extern __stdcall void OutputDebugStringW(const WCHAR *);
+    __declspec(dllimport) extern __stdcall int IsDebuggerPresent();
+    __declspec(dllimport) extern __stdcall int GetLastError();
+    __declspec(dllimport) extern __stdcall int GetFileAttributesW(const WCHAR *);
+    __declspec(dllimport) extern __stdcall int SetFileAttributesW(const WCHAR *, int);
+
+    __declspec(dllimport) extern int cygwin_conv_path(int, const void *, void *, int);
+    __declspec(dllimport) extern int cygwin_conv_path_list(int, const void *, void *, int);
+#   define USE_PUTENV 1
+#   define USE_PUTENV_FOR_UNSET 1
+/* On Cygwin, the environment is imported from the Cygwin DLL. */
+#ifndef __x86_64__
+#   define environ __cygwin_environ
+    extern char **__cygwin_environ;
+#endif
+#   define timezone _timezone
+    extern int TclOSstat(const char *name, void *statBuf);
+    extern int TclOSlstat(const char *name, void *statBuf);
+#elif defined(HAVE_STRUCT_STAT64) && !defined(__APPLE__)
+#   define TclOSstat           stat64
+#   define TclOSlstat          lstat64
+#else
+#   define TclOSstat           stat
+#   define TclOSlstat          lstat
+#endif
+\f
+/*
+ *---------------------------------------------------------------------------
+ * Miscellaneous includes that might be missing.
+ *---------------------------------------------------------------------------
+ */
+
+#include <sys/file.h>
+#ifdef HAVE_SYS_SELECT_H
+#   include <sys/select.h>
+#endif
+#include <sys/stat.h>
+#if TIME_WITH_SYS_TIME
+#   include <sys/time.h>
+#   include <time.h>
+#else
+#if HAVE_SYS_TIME_H
+#   include <sys/time.h>
+#else
+#   include <time.h>
+#endif
+#endif
+#ifndef NO_SYS_WAIT_H
+#   include <sys/wait.h>
+#endif
+#if HAVE_INTTYPES_H
+#   include <inttypes.h>
+#endif
+#ifdef NO_LIMITS_H
+#   include "../compat/limits.h"
+#else
+#   include <limits.h>
+#endif
+#if HAVE_STDINT_H
+#   include <stdint.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#   include <unistd.h>
+#else
+#   include "../compat/unistd.h"
+#endif
+
+extern int TclUnixSetBlockingMode(int fd, int mode);
+
+#include <utime.h>
+\f
+/*
+ *---------------------------------------------------------------------------
+ * Socket support stuff: This likely needs more work to parameterize for each
+ * system.
+ *---------------------------------------------------------------------------
+ */
+
+#include <sys/socket.h>                /* struct sockaddr, SOCK_STREAM, ... */
+#ifndef NO_UNAME
+#   include <sys/utsname.h>    /* uname system call. */
+#endif
+#include <netinet/in.h>                /* struct in_addr, struct sockaddr_in */
+#include <arpa/inet.h>         /* inet_ntoa() */
+#include <netdb.h>             /* getaddrinfo() */
+#ifdef NEED_FAKE_RFC2553
+# include "../compat/fake-rfc2553.h"
+#endif
+\f
+/*
+ *---------------------------------------------------------------------------
+ * Some platforms (e.g. SunOS) don't define FLT_MAX and FLT_MIN, so we look
+ * for an alternative definition. If no other alternative is available we use
+ * a reasonable guess.
+ *---------------------------------------------------------------------------
+ */
+
+#ifndef NO_FLOAT_H
+#   include <float.h>
+#else
+#ifndef NO_VALUES_H
+#   include <values.h>
+#endif
+#endif
+
+#ifndef FLT_MAX
+#   ifdef MAXFLOAT
+#      define FLT_MAX  MAXFLOAT
+#   else
+#      define FLT_MAX  3.402823466E+38F
+#   endif
+#endif
+#ifndef FLT_MIN
+#   ifdef MINFLOAT
+#      define FLT_MIN  MINFLOAT
+#   else
+#      define FLT_MIN  1.175494351E-38F
+#   endif
+#endif
+\f
+/*
+ *---------------------------------------------------------------------------
+ * NeXT doesn't define O_NONBLOCK, so #define it here if necessary.
+ *---------------------------------------------------------------------------
+ */
+
+#ifndef O_NONBLOCK
+#   define O_NONBLOCK 0x80
+#endif
+\f
+/*
+ *---------------------------------------------------------------------------
+ * The type of the status returned by wait varies from UNIX system to UNIX
+ * system. The macro below defines it:
+ *---------------------------------------------------------------------------
+ */
+
+#ifdef _AIX
+#   define WAIT_STATUS_TYPE    pid_t
+#else
+#ifndef NO_UNION_WAIT
+#   define WAIT_STATUS_TYPE    union wait
+#else
+#   define WAIT_STATUS_TYPE    int
+#endif
+#endif
+\f
+/*
+ *---------------------------------------------------------------------------
+ * Supply definitions for macros to query wait status, if not already defined
+ * in header files above.
+ *---------------------------------------------------------------------------
+ */
+
+#ifndef WIFEXITED
+#   define WIFEXITED(stat)     (((*((int *) &(stat))) & 0xff) == 0)
+#endif
+
+#ifndef WEXITSTATUS
+#   define WEXITSTATUS(stat)   (((*((int *) &(stat))) >> 8) & 0xff)
+#endif
+
+#ifndef WIFSIGNALED
+#   define WIFSIGNALED(stat) \
+       (((*((int *) &(stat)))) && ((*((int *) &(stat))) \
+               == ((*((int *) &(stat))) & 0x00ff)))
+#endif
+
+#ifndef WTERMSIG
+#   define WTERMSIG(stat)      ((*((int *) &(stat))) & 0x7f)
+#endif
+
+#ifndef WIFSTOPPED
+#   define WIFSTOPPED(stat)    (((*((int *) &(stat))) & 0xff) == 0177)
+#endif
+
+#ifndef WSTOPSIG
+#   define WSTOPSIG(stat)      (((*((int *) &(stat))) >> 8) & 0xff)
+#endif
+\f
+/*
+ *---------------------------------------------------------------------------
+ * Define constants for waitpid() system call if they aren't defined by a
+ * system header file.
+ *---------------------------------------------------------------------------
+ */
+
+#ifndef WNOHANG
+#   define WNOHANG 1
+#endif
+#ifndef WUNTRACED
+#   define WUNTRACED 2
+#endif
+\f
+/*
+ *---------------------------------------------------------------------------
+ * Supply macros for seek offsets, if they're not already provided by an
+ * include file.
+ *---------------------------------------------------------------------------
+ */
+
+#ifndef SEEK_SET
+#   define SEEK_SET 0
+#endif
+#ifndef SEEK_CUR
+#   define SEEK_CUR 1
+#endif
+#ifndef SEEK_END
+#   define SEEK_END 2
+#endif
+\f
+/*
+ *---------------------------------------------------------------------------
+ * The stuff below is needed by the "time" command. If this system has no
+ * gettimeofday call, then must use times() instead.
+ *---------------------------------------------------------------------------
+ */
+
+#ifdef NO_GETTOD
+#   include <sys/times.h>
+#else
+#   ifdef HAVE_BSDGETTIMEOFDAY
+#      define gettimeofday BSDgettimeofday
+#   endif
+#endif
+
+#ifdef GETTOD_NOT_DECLARED
+extern int     gettimeofday(struct timeval *tp,
+                           struct timezone *tzp);
+#endif
+\f
+/*
+ *---------------------------------------------------------------------------
+ * Define access mode constants if they aren't already defined.
+ *---------------------------------------------------------------------------
+ */
+
+#ifndef F_OK
+#   define F_OK                00
+#endif
+#ifndef X_OK
+#   define X_OK                01
+#endif
+#ifndef W_OK
+#   define W_OK                02
+#endif
+#ifndef R_OK
+#   define R_OK                04
+#endif
+\f
+/*
+ *---------------------------------------------------------------------------
+ * Define FD_CLOEEXEC (the close-on-exec flag bit) if it isn't already
+ * defined.
+ *---------------------------------------------------------------------------
+ */
+
+#ifndef FD_CLOEXEC
+#   define FD_CLOEXEC  1
+#endif
+\f
+/*
+ *---------------------------------------------------------------------------
+ * On systems without symbolic links (i.e. S_IFLNK isn't defined) define
+ * "lstat" to use "stat" instead.
+ *---------------------------------------------------------------------------
+ */
+
+#ifndef S_IFLNK
+#   undef TclOSlstat
+#   define lstat       stat
+#   define lstat64     stat64
+#   define TclOSlstat  TclOSstat
+#endif
+\f
+/*
+ *---------------------------------------------------------------------------
+ * Define macros to query file type bits, if they're not already defined.
+ *---------------------------------------------------------------------------
+ */
+
+#ifndef S_ISREG
+#   ifdef S_IFREG
+#      define S_ISREG(m)       (((m) & S_IFMT) == S_IFREG)
+#   else
+#      define S_ISREG(m)       0
+#   endif
+#endif /* !S_ISREG */
+#ifndef S_ISDIR
+#   ifdef S_IFDIR
+#      define S_ISDIR(m)       (((m) & S_IFMT) == S_IFDIR)
+#   else
+#      define S_ISDIR(m)       0
+#   endif
+#endif /* !S_ISDIR */
+#ifndef S_ISCHR
+#   ifdef S_IFCHR
+#      define S_ISCHR(m)       (((m) & S_IFMT) == S_IFCHR)
+#   else
+#      define S_ISCHR(m)       0
+#   endif
+#endif /* !S_ISCHR */
+
+#ifndef S_ISBLK
+#   ifdef S_IFBLK
+#      define S_ISBLK(m)       (((m) & S_IFMT) == S_IFBLK)
+#   else
+#      define S_ISBLK(m)       0
+#   endif
+#endif /* !S_ISBLK */
+
+#ifndef S_ISFIFO
+#   ifdef S_IFIFO
+#      define S_ISFIFO(m)      (((m) & S_IFMT) == S_IFIFO)
+#   else
+#      define S_ISFIFO(m)      0
+#   endif
+#endif /* !S_ISFIFO */
+
+#ifndef S_ISLNK
+#   ifdef S_IFLNK
+#      define S_ISLNK(m)       (((m) & S_IFMT) == S_IFLNK)
+#   else
+#      define S_ISLNK(m)       0
+#   endif
+#endif /* !S_ISLNK */
+
+#ifndef S_ISSOCK
+#   ifdef S_IFSOCK
+#      define S_ISSOCK(m)      (((m) & S_IFMT) == S_IFSOCK)
+#   else
+#      define S_ISSOCK(m)      0
+#   endif
+#endif /* !S_ISSOCK */
+\f
+/*
+ *---------------------------------------------------------------------------
+ * Make sure that MAXPATHLEN and MAXNAMLEN are defined.
+ *---------------------------------------------------------------------------
+ */
+
+#ifndef MAXPATHLEN
+#   ifdef PATH_MAX
+#      define MAXPATHLEN       PATH_MAX
+#   else
+#      define MAXPATHLEN       2048
+#   endif
+#endif
+
+#ifndef MAXNAMLEN
+#   ifdef NAME_MAX
+#      define MAXNAMLEN        NAME_MAX
+#   else
+#      define MAXNAMLEN        255
+#   endif
+#endif
+\f
+/*
+ *---------------------------------------------------------------------------
+ * Make sure that L_tmpnam is defined.
+ *---------------------------------------------------------------------------
+ */
+
+#ifndef L_tmpnam
+#   define L_tmpnam    100
+#endif
+\f
+/*
+ *---------------------------------------------------------------------------
+ * The following macro defines the type of the mask arguments to select:
+ *---------------------------------------------------------------------------
+ */
+
+#ifndef NO_FD_SET
+#   define SELECT_MASK fd_set
+#else /* NO_FD_SET */
+#   ifndef _AIX
+       typedef long    fd_mask;
+#   endif /* !AIX */
+#   if defined(_IBMR2)
+#      define SELECT_MASK      void
+#   else /* !defined(_IBMR2) */
+#      define SELECT_MASK      int
+#   endif /* defined(_IBMR2) */
+#endif /* !NO_FD_SET */
+\f
+/*
+ *---------------------------------------------------------------------------
+ * Define "NBBY" (number of bits per byte) if it's not already defined.
+ *---------------------------------------------------------------------------
+ */
+
+#ifndef NBBY
+#   define NBBY                8
+#endif
+\f
+/*
+ *---------------------------------------------------------------------------
+ * The following macro defines the number of fd_masks in an fd_set:
+ *---------------------------------------------------------------------------
+ */
+
+#ifndef FD_SETSIZE
+#   ifdef OPEN_MAX
+#      define FD_SETSIZE       OPEN_MAX
+#   else
+#      define FD_SETSIZE       256
+#   endif
+#endif /* FD_SETSIZE */
+
+#ifndef howmany
+#   define howmany(x, y)       (((x)+((y)-1))/(y))
+#endif /* !defined(howmany) */
+
+#ifndef NFDBITS
+#   define NFDBITS     NBBY*sizeof(fd_mask)
+#endif /* NFDBITS */
+
+#define MASK_SIZE      howmany(FD_SETSIZE, NFDBITS)
+\f
+/*
+ *---------------------------------------------------------------------------
+ * Not all systems declare the errno variable in errno.h. so this file does it
+ * explicitly. The list of system error messages also isn't generally declared
+ * in a header file anywhere.
+ *---------------------------------------------------------------------------
+ */
+
+#ifdef NO_ERRNO
+extern int errno;
+#endif /* NO_ERRNO */
+\f
+/*
+ *---------------------------------------------------------------------------
+ * Not all systems declare all the errors that Tcl uses! Provide some
+ * work-arounds...
+ *---------------------------------------------------------------------------
+ */
+
+#ifndef EOVERFLOW
+#   ifdef EFBIG
+#      define EOVERFLOW        EFBIG
+#   else /* !EFBIG */
+#      define EOVERFLOW        EINVAL
+#   endif /* EFBIG */
+#endif /* EOVERFLOW */
+\f
+/*
+ *---------------------------------------------------------------------------
+ * Variables provided by the C library:
+ *---------------------------------------------------------------------------
+ */
+
+#if defined(__APPLE__) && defined(__DYNAMIC__)
+#   include <crt_externs.h>
+#   define environ     (*_NSGetEnviron())
+#   define USE_PUTENV  1
+#else
+#   if defined(_sgi) || defined(__sgi)
+#      define environ  _environ
+#   endif
+extern char **         environ;
+#endif
+\f
+/*
+ *---------------------------------------------------------------------------
+ * Darwin specifc configure overrides.
+ *---------------------------------------------------------------------------
+ */
+
+#ifdef __APPLE__
+
+/*
+ *---------------------------------------------------------------------------
+ * Support for fat compiles: configure runs only once for multiple architectures
+ *---------------------------------------------------------------------------
+ */
+
+#   if defined(__LP64__) && defined (NO_COREFOUNDATION_64)
+#      undef HAVE_COREFOUNDATION
+#   endif /* __LP64__ && NO_COREFOUNDATION_64 */
+#   include <sys/cdefs.h>
+#   ifdef __DARWIN_UNIX03
+#      if __DARWIN_UNIX03
+#          undef HAVE_PUTENV_THAT_COPIES
+#      else
+#          define HAVE_PUTENV_THAT_COPIES      1
+#      endif
+#   endif /* __DARWIN_UNIX03 */
+
+/*
+ *---------------------------------------------------------------------------
+ * Include AvailabilityMacros.h here (when available) to ensure any symbolic
+ * MAC_OS_X_VERSION_* constants passed on the command line are translated.
+ *---------------------------------------------------------------------------
+ */
+
+#   ifdef HAVE_AVAILABILITYMACROS_H
+#      include <AvailabilityMacros.h>
+#   endif
+
+/*
+ *---------------------------------------------------------------------------
+ * Support for weak import.
+ *---------------------------------------------------------------------------
+ */
+
+#   ifdef HAVE_WEAK_IMPORT
+#      if !defined(HAVE_AVAILABILITYMACROS_H) || !defined(MAC_OS_X_VERSION_MIN_REQUIRED)
+#          undef HAVE_WEAK_IMPORT
+#      else
+#          ifndef WEAK_IMPORT_ATTRIBUTE
+#              define WEAK_IMPORT_ATTRIBUTE    __attribute__((weak_import))
+#          endif
+#      endif
+#   endif /* HAVE_WEAK_IMPORT */
+
+/*
+ *---------------------------------------------------------------------------
+ * Support for MAC_OS_X_VERSION_MAX_ALLOWED define from AvailabilityMacros.h:
+ * only use API available in the indicated OS version or earlier.
+ *---------------------------------------------------------------------------
+ */
+
+#   ifdef MAC_OS_X_VERSION_MAX_ALLOWED
+#      if MAC_OS_X_VERSION_MAX_ALLOWED < 1050 && defined(__LP64__)
+#          undef HAVE_COREFOUNDATION
+#      endif
+#      if MAC_OS_X_VERSION_MAX_ALLOWED < 1040
+#          undef HAVE_OSSPINLOCKLOCK
+#          undef HAVE_PTHREAD_ATFORK
+#          undef HAVE_COPYFILE
+#      endif
+#      if MAC_OS_X_VERSION_MAX_ALLOWED < 1030
+#          ifdef TCL_THREADS
+               /* prior to 10.3, realpath is not threadsafe, c.f. bug 711232 */
+#              define NO_REALPATH 1
+#          endif
+#          undef HAVE_LANGINFO
+#      endif
+#   endif /* MAC_OS_X_VERSION_MAX_ALLOWED */
+#   if defined(HAVE_COREFOUNDATION) && defined(__LP64__) && \
+           defined(HAVE_WEAK_IMPORT) && MAC_OS_X_VERSION_MIN_REQUIRED < 1050
+#      warning "Weak import of 64-bit CoreFoundation is not supported, will not run on Mac OS X < 10.5."
+#   endif
+
+/*
+ *---------------------------------------------------------------------------
+ * At present, using vfork() instead of fork() causes execve() to fail
+ * intermittently on Darwin x86_64. rdar://4685553
+ *---------------------------------------------------------------------------
+ */
+
+#   if defined(__x86_64__) && !defined(FIXED_RDAR_4685553)
+#      undef USE_VFORK
+#   endif /* __x86_64__ */
+/* Workaround problems with vfork() when building with llvm-gcc-4.2 */
+#   if defined (__llvm__) && \
+           (__GNUC__ > 4 || (__GNUC__ == 4 && (__GNUC_MINOR__ > 2 || \
+           (__GNUC_MINOR__ == 2 && __GNUC_PATCHLEVEL__ > 0))))
+#      undef USE_VFORK
+#   endif /* __llvm__ */
+#endif /* __APPLE__ */
+\f
+/*
+ *---------------------------------------------------------------------------
+ * The following macros and declarations represent the interface between
+ * generic and unix-specific parts of Tcl. Some of the macros may override
+ * functions declared in tclInt.h.
+ *---------------------------------------------------------------------------
+ */
+
+/*
+ * The default platform eol translation on Unix is TCL_TRANSLATE_LF.
+ */
+
+#ifdef DJGPP
+#define        TCL_PLATFORM_TRANSLATION        TCL_TRANSLATE_CRLF
+typedef int socklen_t;
+#else
+#define        TCL_PLATFORM_TRANSLATION        TCL_TRANSLATE_LF
+#endif
+\f
+/*
+ *---------------------------------------------------------------------------
+ * The following macros have trivial definitions, allowing generic code to
+ * address platform-specific issues.
+ *---------------------------------------------------------------------------
+ */
+
+#define TclpReleaseFile(file)  /* Nothing. */
+\f
+/*
+ *---------------------------------------------------------------------------
+ * The following defines wrap the system memory allocation routines.
+ *---------------------------------------------------------------------------
+ */
+
+#define TclpSysAlloc(size, isBin)      malloc((size_t)(size))
+#define TclpSysFree(ptr)               free((char *)(ptr))
+#define TclpSysRealloc(ptr, size)      realloc((char *)(ptr), (size_t)(size))
+\f
+/*
+ *---------------------------------------------------------------------------
+ * The following macros and declaration wrap the C runtime library functions.
+ *---------------------------------------------------------------------------
+ */
+
+#define TclpExit       exit
+
+#ifdef TCL_THREADS
+#   include <pthread.h>
+#endif /* TCL_THREADS */
+
+/* FIXME - Hyper-enormous platform assumption! */
+#ifndef AF_INET6
+#   define AF_INET6    10
+#endif
+\f
+/*
+ *---------------------------------------------------------------------------
+ * Set of MT-safe implementations of some known-to-be-MT-unsafe library calls.
+ * Instead of returning pointers to the static storage, those return pointers
+ * to the TSD data.
+ *---------------------------------------------------------------------------
+ */
+
+#include <pwd.h>
+#include <grp.h>
+
+extern struct passwd * TclpGetPwNam(const char *name);
+extern struct group *  TclpGetGrNam(const char *name);
+extern struct passwd * TclpGetPwUid(uid_t uid);
+extern struct group *  TclpGetGrGid(gid_t gid);
+extern struct hostent *        TclpGetHostByName(const char *name);
+extern struct hostent *        TclpGetHostByAddr(const char *addr,
+                                   int length, int type);
+extern void *TclpMakeTcpClientChannelMode(
+                                   void *tcpSocket, int mode);
+
+#endif /* _TCLUNIXPORT */
+\f
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 4
+ * fill-column: 78
+ * End:
+ */
index 4f00dc5..9f1da96 100644 (file)
Binary files a/lib/itcl4.0.3/libitcl4.0.3.dylib and b/lib/itcl4.0.3/libitcl4.0.3.dylib differ
index c19ee17..b0a2953 100644 (file)
Binary files a/lib/itcl4.0.3/libitclstub4.0.3.a and b/lib/itcl4.0.3/libitclstub4.0.3.a differ
index c8b86d3..4ec921a 100644 (file)
Binary files a/lib/libBLT25.a and b/lib/libBLT25.a differ
index c9616b2..893db4d 100644 (file)
Binary files a/lib/libBLTlite25.a and b/lib/libBLTlite25.a differ
diff --git a/lib/libjpeg.9.dylib b/lib/libjpeg.9.dylib
new file mode 100755 (executable)
index 0000000..3fdcf43
Binary files /dev/null and b/lib/libjpeg.9.dylib differ
diff --git a/lib/libjpeg.a b/lib/libjpeg.a
new file mode 100644 (file)
index 0000000..9c19d9e
Binary files /dev/null and b/lib/libjpeg.a differ
diff --git a/lib/libjpeg.dylib b/lib/libjpeg.dylib
new file mode 120000 (symlink)
index 0000000..5a73cde
--- /dev/null
@@ -0,0 +1 @@
+libjpeg.9.dylib
\ No newline at end of file
diff --git a/lib/libjpeg.la b/lib/libjpeg.la
new file mode 100755 (executable)
index 0000000..cec75a0
--- /dev/null
@@ -0,0 +1,41 @@
+# libjpeg.la - a libtool library file
+# Generated by libtool (GNU libtool) 2.4.6
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# The name that we can dlopen(3).
+dlname='libjpeg.9.dylib'
+
+# Names of this library.
+library_names='libjpeg.9.dylib libjpeg.dylib'
+
+# The name of the static archive.
+old_library='libjpeg.a'
+
+# Linker flags that cannot go in dependency_libs.
+inherited_linker_flags=' '
+
+# Libraries that this one depends upon.
+dependency_libs=''
+
+# Names of additional weak libraries provided by this library
+weak_library_names=''
+
+# Version information for libjpeg.
+current=14
+age=5
+revision=0
+
+# Is this an already installed library?
+installed=yes
+
+# Should we warn about portability when linking against -modules?
+shouldnotlink=no
+
+# Files to dlopen/dlpreopen
+dlopen=''
+dlpreopen=''
+
+# Directory that this library needs to be installed in:
+libdir='/Users/tacyas/Eos/hostdepend/ARM64MAC64/lib'
diff --git a/lib/libtcl8.6.dylib b/lib/libtcl8.6.dylib
new file mode 100755 (executable)
index 0000000..f8d0abd
Binary files /dev/null and b/lib/libtcl8.6.dylib differ
index 9b5f505..ba293be 100644 (file)
Binary files a/lib/libtclstub8.6.a and b/lib/libtclstub8.6.a differ
index f2d7c86..c249e1f 100755 (executable)
Binary files a/lib/libtk8.6.dylib and b/lib/libtk8.6.dylib differ
index 17d6cb4..d0485f8 100644 (file)
Binary files a/lib/libtkstub8.6.a and b/lib/libtkstub8.6.a differ
diff --git a/lib/pkgconfig/libjpeg.pc b/lib/pkgconfig/libjpeg.pc
new file mode 100644 (file)
index 0000000..072d819
--- /dev/null
@@ -0,0 +1,10 @@
+prefix=/Users/tacyas/Eos/hostdepend/ARM64MAC64
+exec_prefix=${prefix}
+libdir=${exec_prefix}/lib
+includedir=${prefix}/include
+
+Name: libjpeg
+Description: Reads and writes JPEG files
+Version: 9.5.0
+Libs: -L${libdir} -ljpeg
+Cflags: -I${includedir}
index 71af517..36ee990 100755 (executable)
Binary files a/lib/sqlite3.8.8.3/libsqlite3.8.8.3.dylib and b/lib/sqlite3.8.8.3/libsqlite3.8.8.3.dylib differ
index 7dfe1d2..96ab06d 100755 (executable)
Binary files a/lib/tdbc1.0.3/libtdbc1.0.3.dylib and b/lib/tdbc1.0.3/libtdbc1.0.3.dylib differ
index 7d1cc98..4fa2a4c 100644 (file)
Binary files a/lib/tdbc1.0.3/libtdbcstub1.0.3.a and b/lib/tdbc1.0.3/libtdbcstub1.0.3.a differ
index 22201ad..f3e86a5 100755 (executable)
Binary files a/lib/tdbcmysql1.0.3/libtdbcmysql1.0.3.dylib and b/lib/tdbcmysql1.0.3/libtdbcmysql1.0.3.dylib differ
index 9d2a307..65bd44c 100755 (executable)
Binary files a/lib/tdbcodbc1.0.3/libtdbcodbc1.0.3.dylib and b/lib/tdbcodbc1.0.3/libtdbcodbc1.0.3.dylib differ
index 501622e..a9dab50 100755 (executable)
Binary files a/lib/tdbcpostgres1.0.3/libtdbcpostgres1.0.3.dylib and b/lib/tdbcpostgres1.0.3/libtdbcpostgres1.0.3.dylib differ
index 18bd964..635e40e 100644 (file)
Binary files a/lib/thread2.7.2/libthread2.7.2.dylib and b/lib/thread2.7.2/libthread2.7.2.dylib differ
index dfef14b..c1e3b1e 100644 (file)
@@ -32,7 +32,7 @@ TK_DBGX=
 TK_LIB_FILE='libtk8.6.dylib'
 
 # Additional libraries to use when linking Tk.
-TK_LIBS='-L/opt/X11/lib -lX11 -Wl,-weak-lXss -lXext   -lpthread -framework CoreFoundation  -lz  -framework CoreFoundation '
+TK_LIBS='-L/opt/X11/lib -lX11 -Wl,-weak-lXss -lXext   -lpthread -framework CoreFoundation  -lz  -lpthread -framework CoreFoundation '
 
 # Top-level directory in which Tk's platform-independent files are
 # installed.
index 4325785..4768ce1 100644 (file)
@@ -1,92 +1,85 @@
 '\"
-'\" Copyright 1991-2001 by Bell Labs Innovations for Lucent Technologies.
+'\" Copyright (c) 1994 The Regents of the University of California.
+'\" Copyright (c) 1994-1996 Sun Microsystems, Inc.
 '\"
-'\" 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 the
-'\" copyright notice and warranty disclaimer appear in supporting documentation,
-'\" and that the names of Lucent Technologies any of their entities not be used
-'\" in advertising or publicity pertaining to distribution of the software
-'\" without specific, written prior permission.
-'\"
-'\" Lucent Technologies disclaims all warranties with regard to this software,
-'\" including all implied warranties of merchantability and fitness.  In no event
-'\" shall Lucent Technologies be liable for any special, indirect or
-'\" consequential damages or any damages whatsoever resulting from loss of use,
-'\" data or profits, whether in an action of contract, negligence or other
-'\" tortuous action, arising out of or in connection with the use or performance
-'\" of this software.  
-'\"
-'\" Bitmap command created by George Howlett.
-'\"
-'\" The definitions below are for supplemental macros used in Tcl/Tk
-'\" manual entries.
-'\"
-'\" .AP type name in/out ?indent?
-'\"    Start paragraph describing an argument to a library procedure.
-'\"    type is type of argument (int, etc.), in/out is either "in", "out",
-'\"    or "in/out" to describe whether procedure reads or modifies arg,
-'\"    and indent is equivalent to second arg of .IP (shouldn't ever be
-'\"    needed;  use .AS below instead)
-'\"
-'\" .AS ?type? ?name?
-'\"    Give maximum sizes of arguments for setting tab stops.  Type and
-'\"    name are examples of largest possible arguments that will be passed
-'\"    to .AP later.  If args are omitted, default tab stops are used.
-'\"
-'\" .BS
-'\"    Start box enclosure.  From here until next .BE, everything will be
-'\"    enclosed in one large box.
-'\"
-'\" .BE
-'\"    End of box enclosure.
-'\"
-'\" .CS
-'\"    Begin code excerpt.
-'\"
-'\" .CE
-'\"    End code excerpt.
-'\"
-'\" .VS ?version? ?br?
-'\"    Begin vertical sidebar, for use in marking newly-changed parts
-'\"    of man pages.  The first argument is ignored and used for recording
-'\"    the version when the .VS was added, so that the sidebars can be
-'\"    found and removed when they reach a certain age.  If another argument
-'\"    is present, then a line break is forced before starting the sidebar.
-'\"
-'\" .VE
-'\"    End of vertical sidebar.
-'\"
-'\" .DS
-'\"    Begin an indented unfilled display.
-'\"
-'\" .DE
-'\"    End of indented unfilled display.
-'\"
-'\" .SO
-'\"    Start of list of standard options for a Tk widget.  The
-'\"    options follow on successive lines, in four columns separated
-'\"    by tabs.
-'\"
-'\" .SE
-'\"    End of list of standard options for a Tk widget.
-'\"
-'\" .OP cmdName dbName dbClass
-'\"    Start of description of a specific option.  cmdName gives the
-'\"    option's name as specified in the class command, dbName gives
-'\"    the option's name in the option database, and dbClass gives
-'\"    the option's class in the option database.
-'\"
-'\" .UL arg1 arg2
-'\"    Print arg1 underlined, then print arg2 normally.
-'\"
-'\" RCS: @(#) $Id: man.macros,v 1.1.1.1 2009/05/09 16:27:42 pcmacdon Exp $
-'\"
-'\"    # Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
+'\" See the file "license.terms" for information on usage and redistribution
+'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+'\" 
+.TH bitmap n 4.0 Tk "Tk Built-In Commands"
+.\" The -*- nroff -*- definitions below are for supplemental macros used
+.\" in Tcl/Tk manual entries.
+.\"
+.\" .AP type name in/out ?indent?
+.\"    Start paragraph describing an argument to a library procedure.
+.\"    type is type of argument (int, etc.), in/out is either "in", "out",
+.\"    or "in/out" to describe whether procedure reads or modifies arg,
+.\"    and indent is equivalent to second arg of .IP (shouldn't ever be
+.\"    needed;  use .AS below instead)
+.\"
+.\" .AS ?type? ?name?
+.\"    Give maximum sizes of arguments for setting tab stops.  Type and
+.\"    name are examples of largest possible arguments that will be passed
+.\"    to .AP later.  If args are omitted, default tab stops are used.
+.\"
+.\" .BS
+.\"    Start box enclosure.  From here until next .BE, everything will be
+.\"    enclosed in one large box.
+.\"
+.\" .BE
+.\"    End of box enclosure.
+.\"
+.\" .CS
+.\"    Begin code excerpt.
+.\"
+.\" .CE
+.\"    End code excerpt.
+.\"
+.\" .VS ?version? ?br?
+.\"    Begin vertical sidebar, for use in marking newly-changed parts
+.\"    of man pages.  The first argument is ignored and used for recording
+.\"    the version when the .VS was added, so that the sidebars can be
+.\"    found and removed when they reach a certain age.  If another argument
+.\"    is present, then a line break is forced before starting the sidebar.
+.\"
+.\" .VE
+.\"    End of vertical sidebar.
+.\"
+.\" .DS
+.\"    Begin an indented unfilled display.
+.\"
+.\" .DE
+.\"    End of indented unfilled display.
+.\"
+.\" .SO ?manpage?
+.\"    Start of list of standard options for a Tk widget. The manpage
+.\"    argument defines where to look up the standard options; if
+.\"    omitted, defaults to "options". The options follow on successive
+.\"    lines, in three columns separated by tabs.
+.\"
+.\" .SE
+.\"    End of list of standard options for a Tk widget.
+.\"
+.\" .OP cmdName dbName dbClass
+.\"    Start of description of a specific option.  cmdName gives the
+.\"    option's name as specified in the class command, dbName gives
+.\"    the option's name in the option database, and dbClass gives
+.\"    the option's class in the option database.
+.\"
+.\" .UL arg1 arg2
+.\"    Print arg1 underlined, then print arg2 normally.
+.\"
+.\" .QW arg1 ?arg2?
+.\"    Print arg1 in quotes, then arg2 normally (for trailing punctuation).
+.\"
+.\" .PQ arg1 ?arg2?
+.\"    Print an open parenthesis, arg1 in quotes, then arg2 normally
+.\"    (for trailing punctuation) and then a closing parenthesis.
+.\"
+.\"    # Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
 .if t .wh -1.3i ^B
 .nr ^l \n(.l
 .ad b
-'\"    # Start an argument description
+.\"    # Start an argument description
 .de AP
 .ie !"\\$4"" .TP \\$4
 .el \{\
@@ -95,7 +88,7 @@
 .\}
 .ta \\n()Au \\n()Bu
 .ie !"\\$3"" \{\
-\&\\$1 \\fI\\$2\\fP    (\\$3)
+\&\\$1 \\fI\\$2\\fP (\\$3)
 .\".b
 .\}
 .el \{\
 .\}
 .\}
 ..
-'\"    # define tabbing values for .AP
+.\"    # define tabbing values for .AP
 .de AS
 .nr )A 10n
 .if !"\\$1"" .nr )A \\w'\\$1'u+3n
 .nr )C \\n()Bu+\\w'(in/out)'u+2n
 ..
 .AS Tcl_Interp Tcl_CreateInterp in/out
-'\"    # BS - start boxed text
-'\"    # ^y = starting y location
-'\"    # ^b = 1
+.\"    # BS - start boxed text
+.\"    # ^y = starting y location
+.\"    # ^b = 1
 .de BS
 .br
 .mk ^y
 .if n \l'\\n(.lu\(ul'
 .if n .fi
 ..
-'\"    # BE - end boxed text (draw box now)
+.\"    # BE - end boxed text (draw box now)
 .de BE
 .nf
 .ti 0
 .br
 .nr ^b 0
 ..
-'\"    # VS - start vertical sidebar
-'\"    # ^Y = starting y location
-'\"    # ^v = 1 (for troff;  for nroff this doesn't matter)
+.\"    # VS - start vertical sidebar
+.\"    # ^Y = starting y location
+.\"    # ^v = 1 (for troff;  for nroff this doesn't matter)
 .de VS
 .if !"\\$2"" .br
 .mk ^Y
 .ie n 'mc \s12\(br\s0
 .el .nr ^v 1u
 ..
-'\"    # VE - end of vertical sidebar
+.\"    # VE - end of vertical sidebar
 .de VE
 .ie n 'mc
 .el \{\
 .\}
 .nr ^v 0
 ..
-'\"    # Special macro to handle page bottom:  finish off current
-'\"    # box/sidebar if in box/sidebar mode, then invoked standard
-'\"    # page bottom macro.
+.\"    # Special macro to handle page bottom:  finish off current
+.\"    # box/sidebar if in box/sidebar mode, then invoked standard
+.\"    # page bottom macro.
 .de ^B
 .ev 2
 'ti 0
 .mk ^Y
 .\}
 ..
-'\"    # DS - begin display
+.\"    # DS - begin display
 .de DS
 .RS
 .nf
 .sp
 ..
-'\"    # DE - end display
+.\"    # DE - end display
 .de DE
 .fi
 .RE
 .sp
 ..
-'\"    # SO - start of list of standard options
+.\"    # SO - start of list of standard options
 .de SO
+'ie '\\$1'' .ds So \\fBoptions\\fR
+'el .ds So \\fB\\$1\\fR
 .SH "STANDARD OPTIONS"
 .LP
 .nf
-.ta 4c 8c 12c
+.ta 5.5c 11c
 .ft B
 ..
-'\"    # SE - end of list of standard options
+.\"    # SE - end of list of standard options
 .de SE
 .fi
 .ft R
 .LP
-See the \\fBoptions\\fR manual entry for details on the standard options.
+See the \\*(So manual entry for details on the standard options.
 ..
-'\"    # OP - start of full description for a single option
+.\"    # OP - start of full description for a single option
 .de OP
 .LP
 .nf
@@ -241,219 +236,155 @@ Database Class: \\fB\\$3\\fR
 .fi
 .IP
 ..
-'\"    # CS - begin code excerpt
+.\"    # CS - begin code excerpt
 .de CS
 .RS
 .nf
 .ta .25i .5i .75i 1i
-.ft CW
-.sp
 ..
-'\"    # CE - end code excerpt
+.\"    # CE - end code excerpt
 .de CE
 .fi
 .RE
-.ft R
-.sp
 ..
+.\"    # UL - underline word
 .de UL
 \\$1\l'|0\(ul'\\$2
 ..
-.TH bitmap n 2.5 BLT "BLT Built-In Commands"
+.\"    # QW - apply quotation marks to word
+.de QW
+.ie '\\*(lq'"' ``\\$1''\\$2
+.\"" fix emacs highlighting
+.el \\*(lq\\$1\\*(rq\\$2
+..
+.\"    # PQ - apply parens and quotation marks to word
+.de PQ
+.ie '\\*(lq'"' (``\\$1''\\$2)\\$3
+.\"" fix emacs highlighting
+.el (\\*(lq\\$1\\*(rq\\$2)\\$3
+..
+.\"    # QR - quoted range
+.de QR
+.ie '\\*(lq'"' ``\\$1''\\-``\\$2''\\$3
+.\"" fix emacs highlighting
+.el \\*(lq\\$1\\*(rq\\-\\*(lq\\$2\\*(rq\\$3
+..
+.\"    # MT - "empty" string
+.de MT
+.QW ""
+..
 .BS
 '\" Note:  do not modify the .SH NAME line immediately below!
 .SH NAME
-bitmap \- Define a new bitmap from a Tcl script
+bitmap \- Images that display two colors
 .SH SYNOPSIS
-\fBbitmap define \fIbitmapName data\fR ?\fIoption value\fR?...
-.sp
-\fBbitmap compose \fIbitmapName text\fR ?\fIoption value\fR?...
-.sp
-\fBbitmap exists \fIbitmapName\fR
-.sp
-\fBbitmap source \fIbitmapName\fR
-.sp
-\fBbitmap data \fIbitmapName\fR
-.sp
-\fBbitmap height \fIbitmapName\fR
-.sp
-\fBbitmap width \fIbitmapName\fR
+.nf
+\fBimage create bitmap \fR?\fIname\fR? ?\fIoptions\fR?
+
+\fIimageName \fBcget\fR \fIoption\fR
+\fIimageName \fBconfigure\fR ?\fIoption\fR? ?\fIvalue option value ...\fR?
+.fi
 .BE
 .SH DESCRIPTION
-The \fBbitmap\fR command lets you create new bitmaps directly from your
-Tcl script.  The bitmap can be specified as a list of data or a text string
-which is converted into a bitmap.  You can arbitrarily scale
-or rotate the bitmap too.
-.SH INTRODUCTION
-Bitmaps are commonly used within Tk.  In label and button widgets, you
-display bitmaps them instead of text strings and in the canvas and
-text widgets, they're used for stippling.  But Tk let's you can create
-new bitmaps only by reading the bitmap data from a file.  This makes
-bitmaps cumbersome to manage, especially in packaging the program as a
-\fBwish\fR script, since each bitmap must be its own file.  It would
-be nicer if you could create new bitmaps directly from your Tcl script.
 .PP
-The \fBbitmap\fR command lets you do just that.  You can specify the
-bitmap as in various formats (such as the X11 bitmap format).  You can
-also compose a bitmap from a text string.  The \fBbitmap\fR command
-also lets you and arbitrarily rotate or scale the bitmap.  For example, you
-could use this to create button widgets with the text label rotated 90
-degrees.
-.SH EXAMPLE
-<<<<<<< bitmap.mann
-You can define a new bitmap with the \fBdefine\fR operation.  For
-example, let's say you are using the X11 bitmap "gray1".  Normally to
-use it, you would specify the location of the file.
-.CS
-label .l -bitmap @/usr/X11R6/include/X11/bitmaps/gray1
-.CE
-But you can simply cut and paste the contents of "gray1" into the 
-\fBbitmap\fR command.
-.CS
-bitmap define gray1 {
-    #define gray1_width 2
-    #define gray1_height 2
-    static char gray1_bits[] = {
-       0x01, 0x02};
-}
-label .l -bitmap gray1
-.CE
-Tk will recognize "gray1" as a bitmap which can now be used with any
-widget that accepts bitmaps.
-.CS
-.barchart element configure elem1 -stipple gray1
-.CE
-The bitmap data can be specified in a mulitude of forms.
-The following commands are all equivalent.
-.CS
-bitmap define gray1 {
-    #define gray1_width 2
-    #define gray1_height 2
-    static char gray1_bits[] = {
-       0x01, 0x02};
-}
-bitmap define gray1 { { 2 2 } { 0x01, 0x02 } }
-bitmap define gray1 { { 2 2 } { 0x01 0x02 } }
-bitmap define gray1 { { 2 2 } { 1 2 } }
-.CE
-Either the data is in the standard X11 bitmap form, or it's a list of
-two lists. The first list contains the height and width of the bitmap.
-The second list is the bitmap source data.  Each element of that list
-is an hexadecimal number specifying which pixels are foreground (1)
-and which are background (0) of the bitmap.  Note that the format of
-the source data is exactly that of the XBM format. 
-.P
-You can scale or rotate the bitmap as you create it, by using the
-\fB-scale\fR or\fB-rotate\fR options.
-.CS
-bitmap define gray1 {
-    #define gray1_width 2
-    #define gray1_height 2
-    static char gray1_bits[] = {
-       0x01, 0x02};
-} -scale 2.0 -rotate 90.0
-.CE
-In addition, you can compose bitmaps from text strings.  This makes it
-easy to create rotated buttons or labels.  The text string can have
-multi-line.  
-.CS
-bitmap compose rot_text "This is rotated\\ntext" \\
-       -rotate 90.0 -font fixed
-.CE
-There are also a number of ways to query bitmaps.  This isn't limited
-to bitmaps that you create, but any bitmap.
-.CS
-bitmap exists rot_text
-bitmap width rot_text
-bitmap height rot_text
-bitmap data rot_text
-bitmap source rot_text
-.CE
-The \fBexists\fR operation indicates if a bitmap by that name is
-defined.  You can query the dimensions of the bitmap using the
-\fBwidth\fR and \fBheight\fR operations. The \fBdata\fR operation
-returns the list of the data used to create the bitmap.  
-For example, you could query the data of a bitmap and \fBsend\fR 
-it across the network to another Tk application.
-.CS
-set data [bitmap data @/usr/X11R6/include/X11/bitmaps/ghost.xbm]
-send {wish #2} bitmap define ghost $data
-.CE
-.SH OPERATIONS
-The following operations are available for \fBbitmap\fR:
-.TP
-\fBbitmap compose \fIbitmapName text \fR?\fIoption value\fR?...
-Creates a bitmap \fIbitmapName\fR from the text string \fItext\fR.
-A bitmap \fIbitmapName\fR can not already exist.  
-The following options are available.
-.RS
-.TP
-\fB\-font \fIfontName\fR 
-Specifies a font to use when drawing text into the bitmap.
-If this option isn't specified then \fIfontName\fR defaults to 
-\fB*-Helvetica-Bold-R-Normal-*-140-*\fR.
+A bitmap is an image whose pixels can display either of two colors
+or be transparent.
+A bitmap image is defined by four things:  a background color,
+a foreground color, and two bitmaps, called the \fIsource\fR
+and the \fImask\fR.
+Each of the bitmaps specifies 0/1 values for a rectangular
+array of pixels, and the two bitmaps must have the same
+dimensions.
+For pixels where the mask is zero, the image displays nothing,
+producing a transparent effect.
+For other pixels, the image displays the foreground color if
+the source data is one and the background color if the source
+data is zero.
+.SH "CREATING BITMAPS"
+.PP
+Like all images, bitmaps are created using the \fBimage create\fR
+command.
+Bitmaps support the following \fIoptions\fR:
 .TP
-\fB\-rotate \fItheta\fR
-Specifies the angle of rotation of the text in the bitmap.
-\fITheta\fR is a real number representing the angle in degrees.
-It defaults to \fB0.0\fR degrees.
+\fB\-background \fIcolor\fR
+.
+Specifies a background color for the image in any of the standard
+ways accepted by Tk.  If this option is set to an empty string
+then the background pixels will be transparent.  This effect
+is achieved by using the source bitmap as the mask bitmap, ignoring
+any \fB\-maskdata\fR or \fB\-maskfile\fR options.
 .TP
-\fB\-scale \fIvalue\fR
-Specifies the scale of the bitmap.
-\fIValue\fR is a real number representing the scale.  A scale
-of 1.0 indicates no scaling is necessary, while 2.0 would
-double the size of the bitmap.  There is no way to specify
-differents scales for the width and height of the bitmap.
-The default scale is \fB1.0\fR.
-.RE
+\fB\-data \fIstring\fR
+.
+Specifies the contents of the source bitmap as a string.
+The string must adhere to X11 bitmap format (e.g., as generated
+by the \fBbitmap\fR program).
+If both the \fB\-data\fR and \fB\-file\fR options are specified,
+the \fB\-data\fR option takes precedence.
 .TP
-\fBbitmap data \fIbitmapName\fR 
-Returns a list of both the
-dimensions of the bitmap \fIbitmapName\fR and its source data.
+\fB\-file \fIname\fR
+.
+\fIname\fR gives the name of a file whose contents define the
+source bitmap.
+The file must adhere to X11 bitmap format (e.g., as generated
+by the \fBbitmap\fR program).
 .TP
-\fBbitmap define \fIbitmapName data\fR \fR?\fIoption value\fR?...
-Associates \fIbitmapName\fR with in-memory bitmap data so that
-\fIbitmapName\fR can be used in later calls to \fBTk_GetBitmap\fR.
-The \fIbitmapName\fR argument is the name of the bitmap; it must not
-previously have been defined in either a call to Tk_DefineBitmap or
-\fBbitmap\fR.  The argument \fIdata\fP describes the bitmap to
-be created.  It is either the X11 bitmap format (a C structure) or
-a list of two lists: the dimensions and source data.  The dimensions 
-are a list of two numbers which are the width
-and height of the bitmap.  The source data is a list of hexadecimal
-values in a format similar to the X11 or X10 bitmap format.  The
-values may be optionally separated by commas and do not need to be
-prefixed with "0x".  The following options are available.
-.RS
+\fB\-foreground \fIcolor\fR
+.
+Specifies a foreground color for the image in any of the standard
+ways accepted by Tk.
 .TP
-\fB\-rotate \fItheta\fR
-Specifies how many degrees to rotate the bitmap.
-\fITheta\fR is a real number representing the angle.
-The default is \fB0.0\fR degrees.
-.TP
-\fB\-scale \fIvalue\fR
-Specifies how to scale the bitmap.
-\fIValue\fR is a real number representing the scale.  A scale
-of 1.0 indicates no scaling is necessary, while 2.0 would
-double the size of the bitmap.  There is no way to specify
-differents scales for the width and height of the bitmap.
-The default scale is \fB1.0\fR.
-.RE
+\fB\-maskdata \fIstring\fR
+.
+Specifies the contents of the mask as a string.
+The string must adhere to X11 bitmap format (e.g., as generated
+by the \fBbitmap\fR program).
+If both the \fB\-maskdata\fR and \fB\-maskfile\fR options are specified,
+the \fB\-maskdata\fR option takes precedence.
 .TP
-\fBbitmap exists \fIbitmapName\fR 
-Returns \fB1\fR if a bitmap \fIbitmapName\fR exists, otherwise \fB0\fR. 
-.TP
-\fBbitmap height \fIbitmapName\fR 
-Returns the height in pixels of the bitmap \fIbitmapName\fR.
+\fB\-maskfile \fIname\fR
+.
+\fIname\fR gives the name of a file whose contents define the
+mask.
+The file must adhere to X11 bitmap format (e.g., as generated
+by the \fBbitmap\fR program).
+.SH "IMAGE COMMAND"
+.PP
+When a bitmap image is created, Tk also creates a new command
+whose name is the same as the image.
+This command may be used to invoke various operations
+on the image.
+It has the following general form:
+.CS
+\fIimageName option \fR?\fIarg arg ...\fR?
+.CE
+\fIOption\fR and the \fIarg\fRs
+determine the exact behavior of the command.  The following
+commands are possible for bitmap images:
 .TP
-\fBbitmap source \fIbitmapName\fR 
-Returns the source data of the bitmap \fIbitmapName\fR. The source data is a 
-list of the hexadecimal values.  
+\fIimageName \fBcget\fR \fIoption\fR
+.
+Returns the current value of the configuration option given
+by \fIoption\fR.
+\fIOption\fR may have any of the values accepted by the
+\fBimage create\fR \fBbitmap\fR command.
 .TP
-\fBbitmap width \fIbitmapName\fR 
-Returns the width in pixels of the bitmap \fIbitmapName\fR.
-.SH LIMITATIONS
-Tk currently offers no way of destroying bitmaps.  Once a bitmap is
-created, it exists until the application terminates.
+\fIimageName \fBconfigure\fR ?\fIoption\fR? ?\fIvalue option value ...\fR?
+.
+Query or modify the configuration options for the image.
+If no \fIoption\fR is specified, returns a list describing all of
+the available options for \fIimageName\fR (see \fBTk_ConfigureInfo\fR for
+information on the format of this list).  If \fIoption\fR is specified
+with no \fIvalue\fR, then the command returns a list describing the
+one named option (this list will be identical to the corresponding
+sublist of the value returned if no \fIoption\fR is specified).  If
+one or more \fIoption\-value\fR pairs are specified, then the command
+modifies the given option(s) to have the given value(s);  in
+this case the command returns an empty string.
+\fIOption\fR may have any of the values accepted by the
+\fBimage create\fR \fBbitmap\fR command.
 .SH KEYWORDS
-bitmap
+bitmap, image
+'\" Local Variables:
+'\" mode: nroff
+'\" End:
index 35b7e3c..83e02c9 100644 (file)
 '\"
-'\" Copyright 1991-1997 by Bell Labs Innovations for Lucent Technologies.
+'\" Copyright (c) 1993-1998 Lucent Technologies, Inc.
+'\" Copyright (c) 2008 Jos Decoster
 '\"
 '\" 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 the
-'\" copyright notice and warranty disclaimer appear in supporting documentation,
-'\" and that the names of Lucent Technologies any of their entities not be used
-'\" in advertising or publicity pertaining to distribution of the software
-'\" without specific, written prior permission.
+'\" that the above copyright notice appear in all copies and that both that
+'\" the copyright notice and warranty disclaimer appear in supporting
+'\" documentation, and that the names of Lucent Technologies any of their
+'\" entities not be used in advertising or publicity pertaining to
+'\" distribution of the software without specific, written prior permission.
 '\"
 '\" Lucent Technologies disclaims all warranties with regard to this software,
-'\" including all implied warranties of merchantability and fitness.  In no event
-'\" shall Lucent Technologies be liable for any special, indirect or
-'\" consequential damages or any damages whatsoever resulting from loss of use,
-'\" data or profits, whether in an action of contract, negligence or other
-'\" tortuous action, arising out of or in connection with the use or performance
-'\" of this software.  
+'\" including all implied warranties of merchantability and fitness. In no
+'\" event shall Lucent Technologies be liable for any special, indirect or
+'\" consequential damages or any damages whatsoever resulting from loss of
+'\" use, data or profits, whether in an action of contract, negligence or
+'\" other tortuous action, arising out of or in connection with the use or
+'\" performance of this software.
 '\"
-'\" Busy command created by George Howlett.
+'\" BLT::busy command created by George Howlett.
 '\"
-'\" The definitions below are for supplemental macros used in Tcl/Tk
-'\" manual entries.
+'\" See the file "license.terms" for information on usage and redistribution
+'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
 '\"
-'\" .AP type name in/out ?indent?
-'\"    Start paragraph describing an argument to a library procedure.
-'\"    type is type of argument (int, etc.), in/out is either "in", "out",
-'\"    or "in/out" to describe whether procedure reads or modifies arg,
-'\"    and indent is equivalent to second arg of .IP (shouldn't ever be
-'\"    needed;  use .AS below instead)
-'\"
-'\" .AS ?type? ?name?
-'\"    Give maximum sizes of arguments for setting tab stops.  Type and
-'\"    name are examples of largest possible arguments that will be passed
-'\"    to .AP later.  If args are omitted, default tab stops are used.
-'\"
-'\" .BS
-'\"    Start box enclosure.  From here until next .BE, everything will be
-'\"    enclosed in one large box.
-'\"
-'\" .BE
-'\"    End of box enclosure.
-'\"
-'\" .CS
-'\"    Begin code excerpt.
-'\"
-'\" .CE
-'\"    End code excerpt.
-'\"
-'\" .VS ?version? ?br?
-'\"    Begin vertical sidebar, for use in marking newly-changed parts
-'\"    of man pages.  The first argument is ignored and used for recording
-'\"    the version when the .VS was added, so that the sidebars can be
-'\"    found and removed when they reach a certain age.  If another argument
-'\"    is present, then a line break is forced before starting the sidebar.
-'\"
-'\" .VE
-'\"    End of vertical sidebar.
-'\"
-'\" .DS
-'\"    Begin an indented unfilled display.
-'\"
-'\" .DE
-'\"    End of indented unfilled display.
-'\"
-'\" .SO
-'\"    Start of list of standard options for a Tk widget.  The
-'\"    options follow on successive lines, in four columns separated
-'\"    by tabs.
-'\"
-'\" .SE
-'\"    End of list of standard options for a Tk widget.
-'\"
-'\" .OP cmdName dbName dbClass
-'\"    Start of description of a specific option.  cmdName gives the
-'\"    option's name as specified in the class command, dbName gives
-'\"    the option's name in the option database, and dbClass gives
-'\"    the option's class in the option database.
-'\"
-'\" .UL arg1 arg2
-'\"    Print arg1 underlined, then print arg2 normally.
-'\"
-'\" RCS: @(#) $Id: man.macros,v 1.1.1.1 2009/05/09 16:27:42 pcmacdon Exp $
-'\"
-'\"    # Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
+.TH busy n "" Tk "Tk Built-In Commands"
+.\" The -*- nroff -*- definitions below are for supplemental macros used
+.\" in Tcl/Tk manual entries.
+.\"
+.\" .AP type name in/out ?indent?
+.\"    Start paragraph describing an argument to a library procedure.
+.\"    type is type of argument (int, etc.), in/out is either "in", "out",
+.\"    or "in/out" to describe whether procedure reads or modifies arg,
+.\"    and indent is equivalent to second arg of .IP (shouldn't ever be
+.\"    needed;  use .AS below instead)
+.\"
+.\" .AS ?type? ?name?
+.\"    Give maximum sizes of arguments for setting tab stops.  Type and
+.\"    name are examples of largest possible arguments that will be passed
+.\"    to .AP later.  If args are omitted, default tab stops are used.
+.\"
+.\" .BS
+.\"    Start box enclosure.  From here until next .BE, everything will be
+.\"    enclosed in one large box.
+.\"
+.\" .BE
+.\"    End of box enclosure.
+.\"
+.\" .CS
+.\"    Begin code excerpt.
+.\"
+.\" .CE
+.\"    End code excerpt.
+.\"
+.\" .VS ?version? ?br?
+.\"    Begin vertical sidebar, for use in marking newly-changed parts
+.\"    of man pages.  The first argument is ignored and used for recording
+.\"    the version when the .VS was added, so that the sidebars can be
+.\"    found and removed when they reach a certain age.  If another argument
+.\"    is present, then a line break is forced before starting the sidebar.
+.\"
+.\" .VE
+.\"    End of vertical sidebar.
+.\"
+.\" .DS
+.\"    Begin an indented unfilled display.
+.\"
+.\" .DE
+.\"    End of indented unfilled display.
+.\"
+.\" .SO ?manpage?
+.\"    Start of list of standard options for a Tk widget. The manpage
+.\"    argument defines where to look up the standard options; if
+.\"    omitted, defaults to "options". The options follow on successive
+.\"    lines, in three columns separated by tabs.
+.\"
+.\" .SE
+.\"    End of list of standard options for a Tk widget.
+.\"
+.\" .OP cmdName dbName dbClass
+.\"    Start of description of a specific option.  cmdName gives the
+.\"    option's name as specified in the class command, dbName gives
+.\"    the option's name in the option database, and dbClass gives
+.\"    the option's class in the option database.
+.\"
+.\" .UL arg1 arg2
+.\"    Print arg1 underlined, then print arg2 normally.
+.\"
+.\" .QW arg1 ?arg2?
+.\"    Print arg1 in quotes, then arg2 normally (for trailing punctuation).
+.\"
+.\" .PQ arg1 ?arg2?
+.\"    Print an open parenthesis, arg1 in quotes, then arg2 normally
+.\"    (for trailing punctuation) and then a closing parenthesis.
+.\"
+.\"    # Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
 .if t .wh -1.3i ^B
 .nr ^l \n(.l
 .ad b
-'\"    # Start an argument description
+.\"    # Start an argument description
 .de AP
 .ie !"\\$4"" .TP \\$4
 .el \{\
 .\}
 .ta \\n()Au \\n()Bu
 .ie !"\\$3"" \{\
-\&\\$1 \\fI\\$2\\fP    (\\$3)
+\&\\$1 \\fI\\$2\\fP (\\$3)
 .\".b
 .\}
 .el \{\
 .\}
 .\}
 ..
-'\"    # define tabbing values for .AP
+.\"    # define tabbing values for .AP
 .de AS
 .nr )A 10n
 .if !"\\$1"" .nr )A \\w'\\$1'u+3n
 .nr )C \\n()Bu+\\w'(in/out)'u+2n
 ..
 .AS Tcl_Interp Tcl_CreateInterp in/out
-'\"    # BS - start boxed text
-'\"    # ^y = starting y location
-'\"    # ^b = 1
+.\"    # BS - start boxed text
+.\"    # ^y = starting y location
+.\"    # ^b = 1
 .de BS
 .br
 .mk ^y
 .if n \l'\\n(.lu\(ul'
 .if n .fi
 ..
-'\"    # BE - end boxed text (draw box now)
+.\"    # BE - end boxed text (draw box now)
 .de BE
 .nf
 .ti 0
 .br
 .nr ^b 0
 ..
-'\"    # VS - start vertical sidebar
-'\"    # ^Y = starting y location
-'\"    # ^v = 1 (for troff;  for nroff this doesn't matter)
+.\"    # VS - start vertical sidebar
+.\"    # ^Y = starting y location
+.\"    # ^v = 1 (for troff;  for nroff this doesn't matter)
 .de VS
 .if !"\\$2"" .br
 .mk ^Y
 .ie n 'mc \s12\(br\s0
 .el .nr ^v 1u
 ..
-'\"    # VE - end of vertical sidebar
+.\"    # VE - end of vertical sidebar
 .de VE
 .ie n 'mc
 .el \{\
 .\}
 .nr ^v 0
 ..
-'\"    # Special macro to handle page bottom:  finish off current
-'\"    # box/sidebar if in box/sidebar mode, then invoked standard
-'\"    # page bottom macro.
+.\"    # Special macro to handle page bottom:  finish off current
+.\"    # box/sidebar if in box/sidebar mode, then invoked standard
+.\"    # page bottom macro.
 .de ^B
 .ev 2
 'ti 0
 .mk ^Y
 .\}
 ..
-'\"    # DS - begin display
+.\"    # DS - begin display
 .de DS
 .RS
 .nf
 .sp
 ..
-'\"    # DE - end display
+.\"    # DE - end display
 .de DE
 .fi
 .RE
 .sp
 ..
-'\"    # SO - start of list of standard options
+.\"    # SO - start of list of standard options
 .de SO
+'ie '\\$1'' .ds So \\fBoptions\\fR
+'el .ds So \\fB\\$1\\fR
 .SH "STANDARD OPTIONS"
 .LP
 .nf
-.ta 4c 8c 12c
+.ta 5.5c 11c
 .ft B
 ..
-'\"    # SE - end of list of standard options
+.\"    # SE - end of list of standard options
 .de SE
 .fi
 .ft R
 .LP
-See the \\fBoptions\\fR manual entry for details on the standard options.
+See the \\*(So manual entry for details on the standard options.
 ..
-'\"    # OP - start of full description for a single option
+.\"    # OP - start of full description for a single option
 .de OP
 .LP
 .nf
@@ -241,240 +254,280 @@ Database Class: \\fB\\$3\\fR
 .fi
 .IP
 ..
-'\"    # CS - begin code excerpt
+.\"    # CS - begin code excerpt
 .de CS
 .RS
 .nf
 .ta .25i .5i .75i 1i
-.ft CW
-.sp
 ..
-'\"    # CE - end code excerpt
+.\"    # CE - end code excerpt
 .de CE
 .fi
 .RE
-.ft R
-.sp
 ..
+.\"    # UL - underline word
 .de UL
 \\$1\l'|0\(ul'\\$2
 ..
-.TH busy n 2.5 BLT "BLT Built-In Commands"
-.BS 
+.\"    # QW - apply quotation marks to word
+.de QW
+.ie '\\*(lq'"' ``\\$1''\\$2
+.\"" fix emacs highlighting
+.el \\*(lq\\$1\\*(rq\\$2
+..
+.\"    # PQ - apply parens and quotation marks to word
+.de PQ
+.ie '\\*(lq'"' (``\\$1''\\$2)\\$3
+.\"" fix emacs highlighting
+.el (\\*(lq\\$1\\*(rq\\$2)\\$3
+..
+.\"    # QR - quoted range
+.de QR
+.ie '\\*(lq'"' ``\\$1''\\-``\\$2''\\$3
+.\"" fix emacs highlighting
+.el \\*(lq\\$1\\*(rq\\-\\*(lq\\$2\\*(rq\\$3
+..
+.\"    # MT - "empty" string
+.de MT
+.QW ""
+..
+.BS
 '\" Note:  do not modify the .SH NAME line immediately below!
 .SH NAME
-busy \- Make Tk widgets busy, temporarily blocking user interactions.
+busy \- confine pointer and keyboard events to a window sub-tree
 .SH SYNOPSIS
-\fBbusy hold \fIwindow\fR ?\fIoption value\fR?...
+\fBtk busy\fR \fIwindow \fR?\fIoptions\fR?
 .sp
-\fBbusy release \fIwindow\fR ?\fIwindow\fR?...
+\fBtk busy hold\fR \fIwindow \fR?\fIoptions\fR?
 .sp
-\fBbusy configure \fIwindow\fR ?\fIoption value\fR?...
+\fBtk busy configure \fIwindow\fR ?\fIoption value\fR?...
 .sp
-\fBbusy forget \fIwindow\fR ?\fIwindow\fR?...
+\fBtk busy forget\fR \fIwindow \fR?\fIwindow \fR?...
 .sp
-\fBbusy isbusy \fR?\fIpattern\fR?
+\fBtk busy current\fR ?\fIpattern\fR?
 .sp
-\fBbusy names \fR?\fIpattern\fR?
-.sp
-\fBbusy status \fIwindow\fR 
+\fBtk busy status \fIwindow\fR
 .BE
 .SH DESCRIPTION
 .PP
-The \fBbusy\fR command provides a simple means to block
-keyboard, button, and pointer events from Tk widgets, while overriding
-the widget's cursor with a configurable busy cursor.
+The \fBtk busy\fR command provides a simple means to block keyboard, button,
+and pointer events from Tk widgets, while overriding the widget's cursor with
+a configurable busy cursor.
 .SH INTRODUCTION
 .PP
-There are many times in applications where you want to temporarily
-restrict what actions the user can take.  For example, an application
-could have a "run" button that when pressed causes some processing to
-occur.  But while the application is busy processing, you probably don't
-want the the user to be able to click the "run" button again.  You
-may also want restrict the user from other tasks such as clicking a
-"print" button.
+There are many times in applications where you want to temporarily restrict
+what actions the user can take. For example, an application could have a
+.QW Run
+button that when pressed causes some processing to occur. However, while the
+application is busy processing, you probably don't want the user to be
+able to click the
+.QW Run
+button again. You may also want restrict the user from other tasks such as
+clicking a
+.QW Print
+button.
+.PP
+The \fBtk busy\fR command lets you make Tk widgets busy. This means that user
+interactions such as button clicks, moving the mouse, typing at the keyboard,
+etc.\0are ignored by the widget. You can set a special cursor (like a watch)
+that overrides the widget's normal cursor, providing feedback that the
+application (widget) is temporarily busy.
+.PP
+When a widget is made busy, the widget and all of its descendants will ignore
+events. It's easy to make an entire panel of widgets busy. You can simply make
+the toplevel widget (such as
+.QW . )
+busy. This is easier and far much more efficient than recursively traversing
+the widget hierarchy, disabling each widget and re-configuring its cursor.
 .PP
-The \fBbusy\fR command lets you make Tk widgets busy. This means
-that user interactions such as button clicks, moving the mouse, typing
-at the keyboard, etc. are ignored by the widget.  You can set a
-special cursor (like a watch) that overrides the widget's normal
-cursor, providing feedback that the application (widget) is
-temporarily busy.
+Often, the \fBtk busy\fR command can be used instead of Tk's \fBgrab\fR
+command. Unlike \fBgrab\fR which restricts all user interactions to one
+widget, with the \fBtk busy\fR command you can have more than one widget
+active (for example, a
+.QW Cancel
+dialog and a
+.QW Help
+button).
+.SS EXAMPLE
 .PP
-When a widget is made busy, the widget and all of its descendents will
-ignore events.  It's easy to make an entire panel of widgets busy. You
-can simply make the toplevel widget (such as ".") busy.  This is
-easier and far much more efficient than recursively traversing the
-widget hierarchy, disabling each widget and re-configuring its cursor.
+You can make several widgets busy by simply making its ancestor widget busy
+using the \fBhold\fR operation.
 .PP
-Often, the busy command can be used instead of Tk's \fBgrab\fR
-command.  Unlike \fBgrab\fR which restricts all user interactions to
-one widget, with the busy command you can have more than one widget
-active (for example, a "cancel" dialog and a "help" button).
-.SH EXAMPLE
-You can make several widgets busy by simply making its ancestor widget
-busy using the \fBhold\fR operation.
 .CS
 frame .top
 button .top.button; canvas .top.canvas
 pack .top.button .top.canvas
 pack .top
-  . . .
-busy hold .top
+# . . .
+\fBtk busy\fR hold .top
 update
 .CE
-All the widgets within \fB.top\fR (including \fB.top\fR) are now busy.  
-Using \fBupdate\fR insures that \fBbusy\fR command will take effect before
-any other user events can occur.
+.PP
+All the widgets within \fB.top\fR (including \fB.top\fR) are now busy. Using
+\fBupdate\fR insures that \fBtk busy\fR command will take effect before any
+other user events can occur.
 .PP
 When the application is no longer busy processing, you can allow user
-interactions again by the \fBrelease\fR operation.
-.nf
-
-\fB    busy release .top \fR
-
-.fi
-The busy window has a configurable cursor.  You can change the busy
-cursor using the \fBconfigure\fR operation.
-.nf
-
-\fB    busy configure .top -cursor "watch"\fR
-
-.fi
-Finally, when you no longer need to the busy window, 
-invoke the \fBforget\fR operation to free any resources it allocated.
-.nf
-
-\fB    busy forget .top \fR
-
-.fi
-Destroying the widget will also clean up any resources allocated by
-the busy command.
+interactions again and free any resources it allocated by the \fBforget\fR
+operation.
+.PP
+.CS
+\fBtk busy\fR forget .top
+.CE
+.PP
+The busy window has a configurable cursor. You can change the busy cursor
+using the \fBconfigure\fR operation.
+.PP
+.CS
+\fBtk busy\fR configure .top \-cursor "watch"
+.CE
+.PP
+Destroying the widget will also clean up any resources allocated by the \fBtk
+busy\fR command.
 .PP
 .SH OPERATIONS
-The following operations are available for the \fBbusy\fR command:
+.PP
+The following operations are available for the \fBtk busy\fR command:
 .TP
-\fBbusy hold \fIwindow\fR ?\fIoption value\fR?...
-Makes the widget \fIwindow\fR (and its descendants in the Tk window
-hierarchy) busy.  \fIWindow\fR must be a valid path name of a Tk
-widget.  The busy window is mapped the next time idle tasks are
-processed, and the widget and its descendants will be blocked from
-user interactions. All events in the widget window and its
-descendants are ignored.  Normally \fBupdate\fR should be called
-immediately afterward to insure that the \fBhold\fR operation is in
-effect \fIbefore\fR the application starts its processing. The
+\fBtk busy \fIwindow\fR ?\fIoption value\fR?...
+.
+Shortcut for \fBtk busy hold\fR command.
+.TP
+\fBtk busy hold \fIwindow\fR ?\fIoption value\fR?...
+.
+Makes the specified \fIwindow\fR (and its descendants in the Tk window
+hierarchy) appear busy. \fIWindow\fR must be a valid path name of a Tk widget.
+A transparent window is put in front of the specified window. This transparent
+window is mapped the next time idle tasks are processed, and the specified
+window and its descendants will be blocked from user interactions. Normally
+\fBupdate\fR should be called immediately afterward to insure that the hold
+operation is in effect before the application starts its processing. The
 following configuration options are valid:
 .RS
 .TP
 \fB\-cursor \fIcursorName\fR
+.
 Specifies the cursor to be displayed when the widget is made busy.
-\fICursorName\fR can be in any form accepted by \fBTk_GetCursor\fR.
-The default cursor is \fBwatch\fR.
+\fICursorName\fR can be in any form accepted by \fBTk_GetCursor\fR. The
+default cursor is \fBwait\fR on Windows and \fBwatch\fR on other platforms.
 .RE
 .TP
-\fBbusy configure \fIwindow\fR ?\fIoption value\fR?...
-Queries or modifies the \fBbusy\fR command configuration options for 
-\fIwindow\fR. \fIWindow\fR must be the path name of a widget previously
-made busy by the \fBhold\fR operation.  If no options are
-specified, a list describing all of the available options for
-\fIwindow\fR (see \fBTk_ConfigureInfo\fR for information on the format
-of this list) is returned.  If \fIoption\fR is specified with no
-\fIvalue\fR, then the command returns a list describing the one named
-option (this list will be identical to the corresponding sublist of
-the value returned if no \fIoption\fR is specified).  If one or more
-\fIoption\-value\fR pairs are specified, then the command modifies the
-given widget option(s) to have the given value(s); in this case the
-command returns the empty string.  \fIOption\fR may have any of the
-values accepted by the \fBhold\fR operation.  
-.sp
-Please note that the
-option database is referenced through \fIwindow\fR.  For example, if 
-the widget \fB.frame\fR is to be made busy, the busy 
-cursor can be specified for it by either \fBoption\fR command:
-.nf
-
-       \fBoption add *frame.busyCursor gumby\fR
-       \fBoption add *Frame.BusyCursor gumby\fR
-
-.fi
-.TP
-\fBbusy forget \fIwindow\fR ?\fIwindow\fR?...
-Releases resources allocated by the busy command for \fIwindow\fR,
-including the busy window.  User events will again be received again 
-by \fIwindow\fR.  Resources are also released when \fIwindow\fR
-is destroyed. \fIWindow\fR must be the name of a widget specified 
-in the \fBhold\fR operation, otherwise an error is reported.
+\fBtk busy cget \fIwindow\fR \fIoption\fR
+.
+Queries the \fBtk busy\fR command configuration options for \fIwindow\fR.
+\fIWindow\fR must be the path name of a widget previously made busy by the
+\fBhold\fR operation. The command returns the present value of the specified
+\fIoption\fR. \fIOption\fR may have any of the values accepted by the
+\fBhold\fR operation.
 .TP
-\fBbusy isbusy \fR?\fIpattern\fR?
-Returns the pathnames of all widgets that are currently busy.
-If a \fIpattern\fR is given, the path names of busy widgets 
-matching \fIpattern\fR are returned.
+\fBtk busy configure \fIwindow\fR ?\fIoption value\fR?...
+.
+Queries or modifies the \fBtk busy\fR command configuration options for
+\fIwindow\fR. \fIWindow\fR must be the path name of a widget previously made
+busy by the \fBhold\fR operation.  If no options are specified, a list
+describing all of the available options for \fIwindow\fR (see
+\fBTk_ConfigureInfo\fR for information on the format of this list) is
+returned. If \fIoption\fR is specified with no \fIvalue\fR, then the command
+returns a list describing the one named option (this list will be identical to
+the corresponding sublist of the value returned if no \fIoption\fR is
+specified). If one or more \fIoption\-value\fR pairs are specified, then the
+command modifies the given widget option(s) to have the given value(s); in
+this case the command returns the empty string. \fIOption\fR may have any of
+the values accepted by the \fBhold\fR operation.
+.RS
+.PP
+Please note that the option database is referenced through \fIwindow\fR. For
+example, if the widget \fB.frame\fR is to be made busy, the busy cursor can be
+specified for it by either \fBoption\fR command:
+.PP
+.CS
+option add *frame.busyCursor gumby
+option add *Frame.BusyCursor gumby
+.CE
+.RE
 .TP
-\fBbusy names \fR?\fIpattern\fR?
-Returns the pathnames of all widgets that have previously been
-made busy (i.e. a busy window is allocated and associated with the
-widget).  It makes no difference if the window is currently busy or
-not.  If a \fIpattern\fR is given, the path names of busy widgets
-matching \fIpattern\fR are returned.
+\fBtk busy forget \fIwindow\fR ?\fIwindow\fR?...
+.
+Releases resources allocated by the \fBtk busy\fR command for \fIwindow\fR,
+including the transparent window. User events will again be received by
+\fIwindow\fR. Resources are also released when \fIwindow\fR is destroyed.
+\fIWindow\fR must be the name of a widget specified in the \fBhold\fR
+operation, otherwise an error is reported.
 .TP
-\fBbusy release \fIwindow\fR ?\fIwindow\fR?...
-Restores user interactions to the widget \fIwindow\fR again. 
-This differs from the \fBforget\fR operation in that the busy window 
-is not destroyed, but simply unmapped.  
-\fIWindow\fR must be the name of a widget specified 
-in a \fBhold\fR operation, otherwise an error is reported.
+\fBtk busy current \fR?\fIpattern\fR?
+.
+Returns the pathnames of all widgets that are currently busy. If a
+\fIpattern\fR is given, only the path names of busy widgets matching
+\fIpattern\fR are returned.
 .TP
-\fBbusy status \fIwindow\fR
-Returns the status of a widget \fIwindow\fR previously made busy.
-An error is reported if \fIwindow\fR was never made busy, or
-the \fBforget\fR operation was invoked (i.e. does not currently have a
-busy window associated with it).  If \fIwindow\fR is presently can
-not receive user interactions, \fB1\fR is returned, otherwise \fB0\fR.
-.sp 1
-.SH BINDINGS
+\fBtk busy status \fIwindow\fR
+.
+Returns the status of a widget \fIwindow\fR. If \fIwindow\fR presently can not
+receive user interactions, \fB1\fR is returned, otherwise \fB0\fR.
+.SH "EVENT HANDLING"
+.SS BINDINGS
+.PP
 The event blocking feature is implemented by creating and mapping a
-transparent window that completely covers the widget.  When the busy
-window is mapped, it invisibly shields the widget and its hierarchy
-from all events that may be sent.  Like Tk widgets, busy windows have
-widget names in the Tk window hierarchy.  This means that you can use
-the \fBbind\fR command, to handle events in the busy window.
+transparent window that completely covers the widget. When the busy window is
+mapped, it invisibly shields the widget and its hierarchy from all events that
+may be sent. Like Tk widgets, busy windows have widget names in the Tk window
+hierarchy. This means that you can use the \fBbind\fR command, to handle
+events in the busy window.
+.PP
 .CS
-busy hold .frame.canvas
-bind .frame.canvas_Busy <Enter> { ... } 
+\fBtk busy\fR hold .frame.canvas
+bind .frame.canvas_Busy <Enter> { ... }
 .CE
 .PP
-Normally the busy window is a sibling of the widget.  The
-name of the busy window is "\fIwidget\fB_Busy\fR" where \fIwidget\fR
-is the name of the widget to be made busy.  In the previous example, the
-pathname of the busy window is "\fB.frame.canvas_Busy\fR" The
-exception is when the widget is a toplevel widget (such as ".")  where
-the busy window can't be made a sibling.  The busy window is then a
-child of the widget named "\fIwidget\fB._Busy\fR" where \fIwidget\fR
-is the name of the toplevel widget.  In the following example, the
-pathname of the busy window is "\fB._Busy\fR"
+Normally the busy window is a sibling of the widget. The name of the busy
+window is
+.QW \fIwidget\fB_Busy\fR
+where \fIwidget\fR is the name of the widget to be made busy. In the previous
+example, the pathname of the busy window is
+.QW \fB.frame.canvas_Busy\fR .
+The exception is when the widget is a toplevel widget (such as
+.QW . )
+where the busy window can't be made a sibling. The busy window is then a child
+of the widget named
+.QW \fIwidget\fB._Busy\fR
+where \fIwidget\fR is the name of the toplevel widget. In the following
+example, the pathname of the busy window is
+.QW \fB._Busy\fR .
+.PP
 .CS
-busy hold .
-bind ._Busy <Enter> { ... } 
+\fBtk busy\fR hold .
+bind ._Busy <Enter> { ... }
 .CE
-.SH ENTER/LEAVE EVENTS
-Mapping and unmapping busy windows generates Enter/Leave events for
-all widgets they cover.  Please note this if you are tracking
-Enter/Leave events in widgets.
-.SH KEYBOARD EVENTS
-When a widget is made busy, the widget is prevented from gaining the
-keyboard focus by the busy window. But if the widget already had
-focus, it still may received keyboard events.  To prevent this, you
-must move focus to another window.
+.SS "ENTER/LEAVE EVENTS"
+.PP
+Mapping and unmapping busy windows generates Enter/Leave events for all
+widgets they cover. Please note this if you are tracking Enter/Leave events in
+widgets.
+.SS "KEYBOARD EVENTS"
+.PP
+When a widget is made busy, the widget is prevented from gaining the keyboard
+focus by the busy window. But if the widget already had focus, it still may
+received keyboard events. To prevent this, you must move focus to another
+window.
+.PP
 .CS
-busy hold .frame
+\fBtk busy\fR hold .frame
 label .dummy
 focus .dummy
 update
 .CE
-The above example moves the focus from .frame immediately after
-invoking the \fBhold\fR so that no keyboard events will be sent to
-\fB.frame\fR or any of its descendants.
+.PP
+The above example moves the focus from .frame immediately after invoking the
+\fBhold\fR so that no keyboard events will be sent to \fB.frame\fR or any of
+its descendants.
+.SH PORTABILITY
+.PP
+Note that the \fBtk busy\fR command does not currently have any effect on OSX
+when Tk is built using Aqua support.
+.SH "SEE ALSO"
+grab(n)
 .SH KEYWORDS
-busy, keyboard events, pointer events, window, cursor
-
-
+busy, keyboard events, pointer events, window
+'\" Local Variables:
+'\" mode: nroff
+'\" End:
diff --git a/share/man/man1/cjpeg.1 b/share/man/man1/cjpeg.1
new file mode 100644 (file)
index 0000000..355d340
--- /dev/null
@@ -0,0 +1,384 @@
+.TH CJPEG 1 "28 April 2019"
+.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 grayscale format), BMP, GIF, Targa, and RLE (Utah Raster
+Toolkit format).  (RLE is supported only if the URT library is available,
+which it isn't on most non-Unix systems.)
+.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 \-BMP
+is the same as
+.BR \-bmp ).
+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 BMP or GIF file, because
+.B cjpeg
+isn't bright enough to notice whether a BMP or 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 \-rgb
+Create RGB JPEG file.
+Using this switch suppresses the conversion from RGB
+colorspace input to the default YCbCr JPEG colorspace.
+You can use this switch in combination with the
+.BI \-block " N"
+switch (see below) for lossless JPEG coding.
+See also the
+.B \-rgb1
+switch below.
+.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 \-progressive
+Create progressive JPEG file (see below).
+.TP
+.BI \-scale " M/N"
+Scale the output image by a factor M/N.  Currently supported scale factors are
+M/N with all N from 1 to 16, where M is the destination DCT size, which is 8
+by default (see
+.BI \-block " N"
+switch below).
+.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, minimizing 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
+other JPEG programs may be unable to decode the resulting file.  Use
+.B \-baseline
+if you need to ensure compatibility at low quality values.)
+.PP
+The
+.B \-quality
+option has been extended in IJG version 7 for support of separate quality
+settings for luminance and chrominance (or in general, for every provided
+quantization table slot).  This feature is useful for high-quality
+applications which cannot accept the damage of color data by coarse
+subsampling settings.  You can now easily reduce the color data amount more
+smoothly with finer control without separate subsampling.  The resulting file
+is fully compliant with standard JPEG decoders.
+Note that the
+.B \-quality
+ratings refer to the quantization table slots, and that the last value is
+replicated if there are more q-table slots than parameters.  The default
+q-table slots are 0 for luminance and 1 for chrominance with default tables as
+given in the JPEG standard.  This is compatible with the old behaviour in case
+that only one parameter is given, which is then used for both luminance and
+chrominance (slots 0 and 1).  More or custom quantization tables can be set
+with
+.B \-qtables
+and assigned to components with
+.B \-qslots
+parameter (see the "wizard" switches below).
+.B Caution:
+You must explicitly add
+.BI \-sample " 1x1"
+for efficient separate color
+quality selection, since the default value used by library is 2x2!
+.PP
+The
+.B \-progressive
+switch creates a "progressive JPEG" file.  In this type of JPEG file, the data
+is stored in multiple scans of increasing quality.  If the file is being
+transmitted over a slow communications link, the decoder can use the first
+scan to display a low-quality image very quickly, and can then improve the
+display with each subsequent scan.  The final image is exactly equivalent to a
+standard JPEG file of the same quality setting, and the total file size is
+about the same --- often a little smaller.
+.PP
+Switches for advanced users:
+.TP
+.B \-arithmetic
+Use arithmetic coding.
+.B Caution:
+arithmetic coded JPEG is not yet widely implemented, so many decoders will
+be unable to view an arithmetic coded JPEG file at all.
+.TP
+.BI \-block " N"
+Set DCT block size.  All N from 1 to 16 are possible.
+Default is 8 (baseline format).
+Larger values produce higher compression,
+smaller values produce higher quality
+(exact DCT stage possible with 1 or 2; with the default quality of 75 and
+default Luminance qtable the DCT+Quantization stage is lossless for N=1).
+.B Caution:
+An implementation of the JPEG SmartScale extension is required for this
+feature.  SmartScale enabled JPEG is not yet widely implemented, so many
+decoders will be unable to view a SmartScale extended JPEG file at all.
+.TP
+.B \-rgb1
+Create RGB JPEG file with reversible color transform.
+Works like the
+.B \-rgb
+switch (see above) and inserts a simple reversible color transform
+into the processing which significantly improves the compression.
+Use this switch in combination with the
+.BI \-block " N"
+switch (see above) for lossless JPEG coding.
+.B Caution:
+A decoder with inverse color transform support is required for
+this feature.  Reversible color transform support is not yet
+widely implemented, so many decoders will be unable to view
+a reversible color transformed JPEG file at all.
+.TP
+.B \-bgycc
+Create big gamut YCC JPEG file.
+In this type of encoding the color difference components are quantized
+further by a factor of 2 compared to the normal Cb/Cr values, thus creating
+space to allow larger color values with higher saturation than the normal
+gamut limits to be encoded.  In order to compensate for the loss of color
+fidelity compared to a normal YCC encoded file, the color quantization
+tables can be adjusted accordingly.  For example,
+.B cjpeg \-bgycc \-quality
+80,90 will give similar results as
+.B cjpeg \-quality
+80.
+.B Caution:
+For correct decompression a decoder with big gamut YCC support (JFIF
+version 2) is required.  An old decoder may or may not display a big
+gamut YCC encoded JPEG file, depending on JFIF version check and
+corresponding warning/error configuration.  In case of a granted
+decompression the old decoder will display the image with half
+saturated colors.
+.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 float method is very slightly more accurate than the int method, but is
+much slower 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 \-nosmooth
+Don't use high-quality downsampling.
+.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 dithered images 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 \-baseline
+Force baseline-compatible quantization tables to be generated.  This clamps
+quantization values to 8 bits even at low quality settings.  (This switch is
+poorly named, since it does not ensure that the output is actually baseline
+JPEG.  For example, you can use
+.B \-baseline
+and
+.B \-progressive
+together.)
+.TP
+.BI \-qtables " file"
+Use the quantization tables given in the specified text file.
+.TP
+.BI \-qslots " N[,...]"
+Select which quantization table to use for each color component.
+.TP
+.BI \-sample " HxV[,...]"
+Set JPEG sampling factors for each color component.
+.TP
+.BI \-scans " file"
+Use the scan script given in the specified text file.
+.PP
+The "wizard" switches are intended for experimentation with JPEG.  If you
+don't know what you are doing, \fBdon't use them\fR.  These switches are
+documented further in the file wizard.txt.
+.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.  (At present,
+.B \-optimize
+mode is always selected when generating progressive JPEG 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 jpegtran (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
+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.)
diff --git a/share/man/man1/djpeg.1 b/share/man/man1/djpeg.1
new file mode 100644 (file)
index 0000000..1cb364f
--- /dev/null
@@ -0,0 +1,264 @@
+.TH DJPEG 1 "28 April 2019"
+.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, which it isn't
+on most non-Unix systems.)
+.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 \-BMP
+is the same as
+.BR \-bmp ).
+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 grayscale output even if JPEG file is color.
+Useful for viewing on monochrome displays; also,
+.B djpeg
+runs noticeably faster in this mode.
+.TP
+.B \-rgb
+Force RGB output even if JPEG file is grayscale.
+This is provided to support applications that don't
+want to cope with grayscale as a separate case.
+.TP
+.BI \-scale " M/N"
+Scale the output image by a factor M/N.  Currently supported scale factors are
+M/N with all M from 1 to 16, where N is the source DCT size, which is 8 for
+baseline JPEG.  If the /N part is omitted, then M specifies the DCT scaled
+size to be applied on the given input.  For baseline JPEG this is equivalent
+to M/8 scaling, since the source DCT size for baseline JPEG is 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 grayscale; otherwise, 24-bit full-color
+format is emitted.
+.TP
+.B \-gif
+Select GIF output format (LZW compressed).
+Since GIF does not support more than 256 colors,
+.B \-colors 256
+is assumed (unless you specify a smaller number of colors).  If you specify
+.BR \-fast ,
+the default number of colors is 216.
+.TP
+.B \-gif0
+Select GIF output format (uncompressed).
+Since GIF does not support more than 256 colors,
+.B \-colors 256
+is assumed (unless you specify a smaller number of colors).  If you specify
+.BR \-fast ,
+the default number of colors is 216.
+.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 grayscale; 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 grayscale 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.  Grayscale format is emitted if the JPEG file is
+grayscale 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 float method is very slightly more accurate than the int method, but is
+much slower 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
+Don't use high-quality upsampling.
+.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 grayscale 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, quantizes it to
+256 colors, and saves the output in 8-bit BMP format in foo.bmp:
+.IP
+.B djpeg \-colors 256 \-bmp
+.I foo.jpg
+.B >
+.I foo.bmp
+.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,
+\fB\-dct float\fR may be even faster than \fB\-dct fast\fR.  But on most
+machines \fB\-dct float\fR is slower than \fB\-dct int\fR; in this case it is
+not worth using, because its theoretical accuracy advantage is too small to be
+significant in practice.
+.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 jpegtran (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
diff --git a/share/man/man1/jpegtran.1 b/share/man/man1/jpegtran.1
new file mode 100644 (file)
index 0000000..7929afd
--- /dev/null
@@ -0,0 +1,328 @@
+.TH JPEGTRAN 1 "28 August 2019"
+.SH NAME
+jpegtran \- lossless transformation of JPEG files
+.SH SYNOPSIS
+.B jpegtran
+[
+.I options
+]
+[
+.I filename
+]
+.LP
+.SH DESCRIPTION
+.LP
+.B jpegtran
+performs various useful transformations of JPEG files.
+It can translate the coded representation from one variant of JPEG to another,
+for example from baseline JPEG to progressive JPEG or vice versa.  It can also
+perform some rearrangements of the image data, for example turning an image
+from landscape to portrait format by rotation.
+.PP
+For EXIF files and JPEG files containing Exif data, you may prefer to use
+.B exiftran
+instead.
+.PP
+.B jpegtran
+works by rearranging the compressed data (DCT coefficients), without
+ever fully decoding the image.  Therefore, its transformations are lossless:
+there is no image degradation at all, which would not be true if you used
+.B djpeg
+followed by
+.B cjpeg
+to accomplish the same conversion.  But by the same token,
+.B jpegtran
+cannot perform lossy operations such as changing the image quality.  However,
+while the image data is losslessly transformed, metadata can be removed.  See
+the
+.B \-copy
+option for specifics.
+.PP
+.B jpegtran
+reads the named JPEG/JFIF file, or the standard input if no file is
+named, and produces a JPEG/JFIF file on the standard output.
+.SH OPTIONS
+All switch names may be abbreviated; for example,
+.B \-optimize
+may be written
+.B \-opt
+or
+.BR \-o .
+Upper and lower case are equivalent.
+British spellings are also accepted (e.g.,
+.BR \-optimise ),
+though for brevity these are not mentioned below.
+.PP
+To specify the coded JPEG representation used in the output file,
+.B jpegtran
+accepts a subset of the switches recognized by
+.BR cjpeg :
+.TP
+.B \-optimize
+Perform optimization of entropy encoding parameters.
+.TP
+.B \-progressive
+Create progressive JPEG file.
+.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.
+.TP
+.B \-arithmetic
+Use arithmetic coding.
+.TP
+.BI \-scans " file"
+Use the scan script given in the specified text file.
+.PP
+See
+.BR cjpeg (1)
+for more details about these switches.
+If you specify none of these switches, you get a plain baseline-JPEG output
+file.  The quality setting and so forth are determined by the input file.
+.PP
+The image can be losslessly transformed by giving one of these switches:
+.TP
+.B \-flip horizontal
+Mirror image horizontally (left-right).
+.TP
+.B \-flip vertical
+Mirror image vertically (top-bottom).
+.TP
+.B \-rotate 90
+Rotate image 90 degrees clockwise.
+.TP
+.B \-rotate 180
+Rotate image 180 degrees.
+.TP
+.B \-rotate 270
+Rotate image 270 degrees clockwise (or 90 ccw).
+.TP
+.B \-transpose
+Transpose image (across UL-to-LR axis).
+.TP
+.B \-transverse
+Transverse transpose (across UR-to-LL axis).
+.IP
+The transpose transformation has no restrictions regarding image dimensions.
+The other transformations operate rather oddly if the image dimensions are not
+a multiple of the iMCU size (usually 8 or 16 pixels), because they can only
+transform complete blocks of DCT coefficient data in the desired way.
+.IP
+.BR jpegtran 's
+default behavior when transforming an odd-size image is designed
+to preserve exact reversibility and mathematical consistency of the
+transformation set.  As stated, transpose is able to flip the entire image
+area.  Horizontal mirroring leaves any partial iMCU column at the right edge
+untouched, but is able to flip all rows of the image.  Similarly, vertical
+mirroring leaves any partial iMCU row at the bottom edge untouched, but is
+able to flip all columns.  The other transforms can be built up as sequences
+of transpose and flip operations; for consistency, their actions on edge
+pixels are defined to be the same as the end result of the corresponding
+transpose-and-flip sequence.
+.IP
+For practical use, you may prefer to discard any untransformable edge pixels
+rather than having a strange-looking strip along the right and/or bottom edges
+of a transformed image.  To do this, add the
+.B \-trim
+switch:
+.TP
+.B \-trim
+Drop non-transformable edge blocks.
+.IP
+Obviously, a transformation with
+.B \-trim
+is not reversible, so strictly speaking
+.B jpegtran
+with this switch is not lossless.  Also, the expected mathematical
+equivalences between the transformations no longer hold.  For example,
+.B \-rot 270 -trim
+trims only the bottom edge, but
+.B \-rot 90 -trim
+followed by
+.B \-rot 180 -trim
+trims both edges.
+.IP
+If you are only interested in perfect transformation, add the
+.B \-perfect
+switch:
+.TP
+.B \-perfect
+Fails with an error if the transformation is not perfect.
+.IP
+For example you may want to do
+.IP
+.B (jpegtran \-rot 90 -perfect
+.I foo.jpg
+.B || djpeg
+.I foo.jpg
+.B | pnmflip \-r90 | cjpeg)
+.IP
+to do a perfect rotation if available or an approximated one if not.
+.PP
+We also offer a lossless-crop option, which discards data outside a given
+image region but losslessly preserves what is inside.  Like the rotate and
+flip transforms, lossless crop is restricted by the current JPEG format: the
+upper left corner of the selected region must fall on an iMCU boundary.  If
+this does not hold for the given crop parameters, we silently move the upper
+left corner up and/or left to make it so, simultaneously increasing the
+region dimensions to keep the lower right crop corner unchanged.  (Thus, the
+output image covers at least the requested region, but may cover more.)
+The adjustment of the region dimensions may be optionally disabled by
+attaching an 'f' character ("force") to the width or height number.
+.PP
+The image can be losslessly cropped by giving the switch:
+.TP
+.B \-crop WxH+X+Y
+Crop to a rectangular subarea of width W, height H starting at point X,Y.
+.PP
+Crop extension: The width or height parameters can be made larger than the
+source image.  In this case the extra area is filled in with zero (neutral
+gray).  A larger width parameter has two more options:  Attaching an 'f'
+character ("flatten") to the width number will fill in the extra area with
+the DC of the adjacent block, instead of gray out.  Attaching an 'r'
+character ("reflect") to the width number will fill in the extra area with
+repeated reflections of the source region, instead of gray out.
+.PP
+A complementary lossless-wipe option is provided to discard (gray out) data
+inside a given image region while losslessly preserving what is outside:
+.TP
+.B \-wipe WxH+X+Y
+Wipe (gray out) a rectangular subarea of width W, height H starting at point
+X,Y.
+.PP
+Attaching an 'f' character ("flatten") to the width number will fill the
+region with the average of adjacent blocks, instead of gray out.  In case
+the wipe region and outside area form two horizontally adjacent rectangles,
+attaching an 'r' character ("reflect") to the width number will fill the
+region with repeated reflections of the outside area, instead of gray out.
+.PP
+Another option is lossless-drop, which replaces data at a given image
+position by another image:
+.TP
+.B \-drop +X+Y filename
+Drop another image
+.PP
+Both source images must have the same subsampling values.  It is best if
+they also have the same quantization, otherwise quantization adaption occurs.
+The trim option can be used with the drop option to requantize the drop file
+to the source file.
+.PP
+Other not-strictly-lossless transformation switches are:
+.TP
+.B \-grayscale
+Force grayscale output.
+.IP
+This option discards the chrominance channels if the input image is YCbCr
+(ie, a standard color JPEG), resulting in a grayscale JPEG file.  The
+luminance channel is preserved exactly, so this is a better method of reducing
+to grayscale than decompression, conversion, and recompression.  This switch
+is particularly handy for fixing a monochrome picture that was mistakenly
+encoded as a color JPEG.  (In such a case, the space savings from getting rid
+of the near-empty chroma channels won't be large; but the decoding time for
+a grayscale JPEG is substantially less than that for a color JPEG.)
+.TP
+.BI \-scale " M/N"
+Scale the output image by a factor M/N.
+.IP
+Currently supported scale factors are M/N with all M from 1 to 16, where N is
+the source DCT size, which is 8 for baseline JPEG.  If the /N part is omitted,
+then M specifies the DCT scaled size to be applied on the given input.  For
+baseline JPEG this is equivalent to M/8 scaling, since the source DCT size
+for baseline JPEG is 8.
+.B Caution:
+An implementation of the JPEG SmartScale extension is required for this
+feature.  SmartScale enabled JPEG is not yet widely implemented, so many
+decoders will be unable to view a SmartScale extended JPEG file at all.
+.PP
+.B jpegtran
+also recognizes these switches that control what to do with "extra" markers,
+such as comment blocks:
+.TP
+.B \-copy none
+Copy no extra markers from source file.  This setting suppresses all
+comments and other metadata in the source file.
+.TP
+.B \-copy comments
+Copy only comment markers.  This setting copies comments from the source file,
+but discards any other metadata.
+.TP
+.B \-copy all
+Copy all extra markers.  This setting preserves metadata
+found in the source file, such as JFIF thumbnails, Exif data, and Photoshop
+settings.  In some files these extra markers can be sizable.  Note that this
+option will copy thumbnails as-is; they will not be transformed.
+.IP
+The default behavior is
+.BR "\-copy comments" .
+(Note: in IJG releases v6 and v6a,
+.B jpegtran
+always did the equivalent of
+.BR "\-copy none" .)
+.PP
+Additional switches recognized by jpegtran are:
+.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 converts a baseline JPEG file to progressive form:
+.IP
+.B jpegtran \-progressive
+.I foo.jpg
+.B >
+.I fooprog.jpg
+.PP
+This example rotates an image 90 degrees clockwise, discarding any
+unrotatable edge pixels:
+.IP
+.B jpegtran \-rot 90 -trim
+.I foo.jpg
+.B >
+.I foo90.jpg
+.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 djpeg (1),
+.BR rdjpgcom (1),
+.BR wrjpgcom (1)
+.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
+The transform options can't transform odd-size images perfectly.  Use
+.B \-trim
+or
+.B \-perfect
+if you don't like the results.
+.PP
+The entire image is read into memory and then written out again, even in
+cases where this isn't really necessary.  Expect swapping on large images,
+especially when using the more complex transform options.
diff --git a/share/man/man1/rdjpgcom.1 b/share/man/man1/rdjpgcom.1
new file mode 100644 (file)
index 0000000..d7741fb
--- /dev/null
@@ -0,0 +1,63 @@
+.TH RDJPGCOM 1 "13 September 2013"
+.SH NAME
+rdjpgcom \- display text comments from a JPEG file
+.SH SYNOPSIS
+.B rdjpgcom
+[
+.B \-raw
+]
+[
+.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 \-raw
+Normally
+.B rdjpgcom
+escapes non-printable characters in comments, for security reasons.
+This option avoids that.
+.PP
+.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.
+.PP
+In
+.B \-verbose
+mode,
+.B rdjpgcom
+will also attempt to print the contents of any "APP12" markers as text.
+Some digital cameras produce APP12 markers containing useful textual
+information.  If you like, you can modify the source code to print
+other APPn marker types as well.
+.SH SEE ALSO
+.BR cjpeg (1),
+.BR djpeg (1),
+.BR jpegtran (1),
+.BR wrjpgcom (1)
+.SH AUTHOR
+Independent JPEG Group
diff --git a/share/man/man1/wrjpgcom.1 b/share/man/man1/wrjpgcom.1
new file mode 100644 (file)
index 0000000..d419a99
--- /dev/null
@@ -0,0 +1,103 @@
+.TH WRJPGCOM 1 "15 June 1995"
+.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 jpegtran (1),
+.BR rdjpgcom (1)
+.SH AUTHOR
+Independent JPEG Group
index 00d554d..c16c736 100644 (file)
@@ -51,7 +51,7 @@ Display2.o: Display2.c \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/sys/_types/_sigset_t.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/sys/_types/_uid_t.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/sys/resource.h \
-  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/13.1.6/include/stdint.h \
+  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/14.0.0/include/stdint.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/stdint.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/_types/_uint8_t.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/_types/_uint16_t.h \
@@ -81,14 +81,14 @@ Display2.o: Display2.c \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/secure/_string.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/math.h \
   /Users/tacyas/Eos/util/ARM64MAC64/include/tcl.h \
-  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/13.1.6/include/stdarg.h \
+  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/14.0.0/include/stdarg.h \
   /Users/tacyas/Eos/util/ARM64MAC64/include/tclDecls.h \
   /Users/tacyas/Eos/util/ARM64MAC64/include/tclPlatDecls.h \
   /Users/tacyas/Eos/include/mrcImage.h \
   /Users/tacyas/Eos/include/genUtil.h \
-  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/13.1.6/include/float.h \
+  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/14.0.0/include/float.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/float.h \
-  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/13.1.6/include/limits.h \
+  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/14.0.0/include/limits.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/limits.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/machine/limits.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/arm/limits.h \
@@ -137,13 +137,13 @@ Display2.o: Display2.c \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/sys/_types/_fsfilcnt_t.h \
   /opt/X11/include/X11/X.h /opt/X11/include/X11/Xfuncproto.h \
   /opt/X11/include/X11/Xosdefs.h \
-  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/13.1.6/include/stddef.h \
-  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/13.1.6/include/__stddef_max_align_t.h \
+  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/14.0.0/include/stddef.h \
+  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/14.0.0/include/__stddef_max_align_t.h \
   /Users/tacyas/Eos/util/ARM64MAC64/include/tkDecls.h \
   /Users/tacyas/Eos/util/ARM64MAC64/include/blt.h \
   /Users/tacyas/Eos/util/ARM64MAC64/include/bltVector.h \
   /Users/tacyas/Eos/util/ARM64MAC64/include/bltHash.h \
-  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/13.1.6/include/inttypes.h \
+  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/14.0.0/include/inttypes.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/inttypes.h \
   /Users/tacyas/Eos/util/ARM64MAC64/include/bltPool.h \
   /Users/tacyas/Eos/util/ARM64MAC64/include/bltOldConfig.h \
@@ -205,7 +205,7 @@ argCheck.o: argCheck.c \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/sys/_types/_sigset_t.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/sys/_types/_uid_t.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/sys/resource.h \
-  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/13.1.6/include/stdint.h \
+  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/14.0.0/include/stdint.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/stdint.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/_types/_uint8_t.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/_types/_uint16_t.h \
@@ -236,9 +236,9 @@ argCheck.o: argCheck.c \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/math.h \
   ../inc/config.h ../inc/../inc/Display2.h \
   /Users/tacyas/Eos/include/genUtil.h \
-  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/13.1.6/include/float.h \
+  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/14.0.0/include/float.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/float.h \
-  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/13.1.6/include/limits.h \
+  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/14.0.0/include/limits.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/limits.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/machine/limits.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/arm/limits.h \
@@ -299,7 +299,7 @@ init.o: init.c \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/sys/_types/_sigset_t.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/sys/_types/_uid_t.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/sys/resource.h \
-  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/13.1.6/include/stdint.h \
+  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/14.0.0/include/stdint.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/stdint.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/_types/_uint8_t.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/_types/_uint16_t.h \
@@ -330,9 +330,9 @@ init.o: init.c \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/math.h \
   ../inc/config.h ../inc/../inc/Display2.h \
   /Users/tacyas/Eos/include/genUtil.h \
-  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/13.1.6/include/float.h \
+  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/14.0.0/include/float.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/float.h \
-  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/13.1.6/include/limits.h \
+  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/14.0.0/include/limits.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/limits.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/machine/limits.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/arm/limits.h \
@@ -393,7 +393,7 @@ usage.o: usage.c \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/sys/_types/_sigset_t.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/sys/_types/_uid_t.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/sys/resource.h \
-  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/13.1.6/include/stdint.h \
+  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/14.0.0/include/stdint.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/stdint.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/_types/_uint8_t.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/_types/_uint16_t.h \
@@ -469,7 +469,7 @@ util.o: util.c \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/sys/_types/_sigset_t.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/sys/_types/_uid_t.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/sys/resource.h \
-  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/13.1.6/include/stdint.h \
+  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/14.0.0/include/stdint.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/stdint.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/_types/_uint8_t.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/_types/_uint16_t.h \
diff --git a/src/Tools/Integration/Display2/src/ARM64MAC64/Display2 b/src/Tools/Integration/Display2/src/ARM64MAC64/Display2
new file mode 100755 (executable)
index 0000000..a09bf64
Binary files /dev/null and b/src/Tools/Integration/Display2/src/ARM64MAC64/Display2 differ
index e20f6d8..f5f5887 100644 (file)
@@ -51,7 +51,7 @@ argCheck.o: argCheck.c \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/sys/_types/_sigset_t.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/sys/_types/_uid_t.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/sys/resource.h \
-  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/13.1.6/include/stdint.h \
+  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/14.0.0/include/stdint.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/stdint.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/_types/_uint8_t.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/_types/_uint16_t.h \
@@ -82,9 +82,9 @@ argCheck.o: argCheck.c \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/math.h \
   ../inc/config.h ../inc/../inc/ctfDisplay.h \
   /Users/tacyas/Eos/include/genUtil.h \
-  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/13.1.6/include/float.h \
+  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/14.0.0/include/float.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/float.h \
-  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/13.1.6/include/limits.h \
+  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/14.0.0/include/limits.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/limits.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/machine/limits.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/arm/limits.h \
@@ -145,7 +145,7 @@ init.o: init.c \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/sys/_types/_sigset_t.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/sys/_types/_uid_t.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/sys/resource.h \
-  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/13.1.6/include/stdint.h \
+  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/14.0.0/include/stdint.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/stdint.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/_types/_uint8_t.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/_types/_uint16_t.h \
@@ -176,9 +176,9 @@ init.o: init.c \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/math.h \
   ../inc/config.h ../inc/../inc/ctfDisplay.h \
   /Users/tacyas/Eos/include/genUtil.h \
-  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/13.1.6/include/float.h \
+  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/14.0.0/include/float.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/float.h \
-  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/13.1.6/include/limits.h \
+  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/14.0.0/include/limits.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/limits.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/machine/limits.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/arm/limits.h \
@@ -239,7 +239,7 @@ usage.o: usage.c \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/sys/_types/_sigset_t.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/sys/_types/_uid_t.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/sys/resource.h \
-  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/13.1.6/include/stdint.h \
+  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/14.0.0/include/stdint.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/stdint.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/_types/_uint8_t.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/_types/_uint16_t.h \
@@ -315,7 +315,7 @@ util.o: util.c \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/sys/_types/_sigset_t.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/sys/_types/_uid_t.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/sys/resource.h \
-  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/13.1.6/include/stdint.h \
+  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/14.0.0/include/stdint.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/stdint.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/_types/_uint8_t.h \
   /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/_types/_uint16_t.h \
index 7980911..99e61bd 100644 (file)
Binary files a/src/Tools/Integration/ctfDisplay/src/ARM64MAC64/argCheck.o and b/src/Tools/Integration/ctfDisplay/src/ARM64MAC64/argCheck.o differ
diff --git a/src/Tools/Integration/ctfDisplay/src/ARM64MAC64/ctfDisplay b/src/Tools/Integration/ctfDisplay/src/ARM64MAC64/ctfDisplay
new file mode 100755 (executable)
index 0000000..8ddb520
Binary files /dev/null and b/src/Tools/Integration/ctfDisplay/src/ARM64MAC64/ctfDisplay differ
index 265051e..f7285ad 100644 (file)
Binary files a/src/Tools/Integration/ctfDisplay/src/ARM64MAC64/ctfDisplay.o and b/src/Tools/Integration/ctfDisplay/src/ARM64MAC64/ctfDisplay.o differ
index c353097..0f1fb13 100644 (file)
Binary files a/src/Tools/Integration/ctfDisplay/src/ARM64MAC64/init.o and b/src/Tools/Integration/ctfDisplay/src/ARM64MAC64/init.o differ
index f7c15b7..f940310 100644 (file)
Binary files a/src/Tools/Integration/ctfDisplay/src/ARM64MAC64/usage.o and b/src/Tools/Integration/ctfDisplay/src/ARM64MAC64/usage.o differ
index a82789b..9d99e34 100644 (file)
Binary files a/src/Tools/Integration/ctfDisplay/src/ARM64MAC64/util.o and b/src/Tools/Integration/ctfDisplay/src/ARM64MAC64/util.o differ