texlive[45150] Build/source/utils: t1utils 1.41

commits+kakuto at tug.org commits+kakuto at tug.org
Mon Aug 28 08:43:57 CEST 2017


Revision: 45150
          http://tug.org/svn/texlive?view=revision&revision=45150
Author:   kakuto
Date:     2017-08-28 08:43:57 +0200 (Mon, 28 Aug 2017)
Log Message:
-----------
t1utils 1.41

Modified Paths:
--------------
    trunk/Build/source/utils/README
    trunk/Build/source/utils/t1utils/ChangeLog
    trunk/Build/source/utils/t1utils/Makefile.in
    trunk/Build/source/utils/t1utils/TLpatches/ChangeLog
    trunk/Build/source/utils/t1utils/TLpatches/TL-Changes
    trunk/Build/source/utils/t1utils/TLpatches/patch-03-warnings
    trunk/Build/source/utils/t1utils/TLpatches/patch-04-TL-binary
    trunk/Build/source/utils/t1utils/TLpatches/patch-05-getopt
    trunk/Build/source/utils/t1utils/TLpatches/patch-07-warnings
    trunk/Build/source/utils/t1utils/config.h.in
    trunk/Build/source/utils/t1utils/configure
    trunk/Build/source/utils/t1utils/configure.ac
    trunk/Build/source/utils/t1utils/t1utils-src/Makefile.am
    trunk/Build/source/utils/t1utils/t1utils-src/clp.c
    trunk/Build/source/utils/t1utils/t1utils-src/config.h.in
    trunk/Build/source/utils/t1utils/t1utils-src/configure.ac
    trunk/Build/source/utils/t1utils/t1utils-src/include/lcdf/clp.h
    trunk/Build/source/utils/t1utils/t1utils-src/include/lcdf/inttypes.h
    trunk/Build/source/utils/t1utils/t1utils-src/t1ascii.1
    trunk/Build/source/utils/t1utils/t1utils-src/t1ascii.c
    trunk/Build/source/utils/t1utils/t1utils-src/t1asm.1
    trunk/Build/source/utils/t1utils/t1utils-src/t1asm.c
    trunk/Build/source/utils/t1utils/t1utils-src/t1asmhelp.h
    trunk/Build/source/utils/t1utils/t1utils-src/t1binary.1
    trunk/Build/source/utils/t1utils/t1utils-src/t1binary.c
    trunk/Build/source/utils/t1utils/t1utils-src/t1disasm.1
    trunk/Build/source/utils/t1utils/t1utils-src/t1disasm.c
    trunk/Build/source/utils/t1utils/t1utils-src/t1lib.c
    trunk/Build/source/utils/t1utils/t1utils-src/t1mac.1
    trunk/Build/source/utils/t1utils/t1utils-src/t1mac.c
    trunk/Build/source/utils/t1utils/t1utils-src/t1unmac.1
    trunk/Build/source/utils/t1utils/t1utils-src/t1unmac.c
    trunk/Build/source/utils/t1utils/version.ac

Added Paths:
-----------
    trunk/Build/source/utils/t1utils/memmem.c
    trunk/Build/source/utils/t1utils/t1utils-src/LICENSE
    trunk/Build/source/utils/t1utils/t1utils-src/NEWS.md
    trunk/Build/source/utils/t1utils/t1utils-src/README.md

Removed Paths:
-------------
    trunk/Build/source/utils/t1utils/t1utils-src/NEWS
    trunk/Build/source/utils/t1utils/t1utils-src/README
    trunk/Build/source/utils/t1utils/t1utils-src/t1utils.spec

Modified: trunk/Build/source/utils/README
===================================================================
--- trunk/Build/source/utils/README	2017-08-28 00:21:36 UTC (rev 45149)
+++ trunk/Build/source/utils/README	2017-08-28 06:43:57 UTC (rev 45150)
@@ -26,7 +26,7 @@
 ps2eps 1.68 - checked 10may12
   http://tm.uka.de/~bless/ps2eps
 
-t1utils 1.39 - checked 1mar15
+t1utils 1.41 - checked 28aug17
   http://www.lcdf.org/type/
 
 texdoctk - reluctantly maintained here in TL

Modified: trunk/Build/source/utils/t1utils/ChangeLog
===================================================================
--- trunk/Build/source/utils/t1utils/ChangeLog	2017-08-28 00:21:36 UTC (rev 45149)
+++ trunk/Build/source/utils/t1utils/ChangeLog	2017-08-28 06:43:57 UTC (rev 45150)
@@ -1,3 +1,8 @@
+2017-08-28  Akira Kakuto  <kakuto at fuk.kindai.ac.jp>
+
+	Import t1utils-1.41.
+	* version.ac, configure.ac: Adapted.
+
 2016-02-22  Akira Kakuto  <kakuto at fuk.kindai.ac.jp>
 
 	* Makefile.am, configure.ac: New convention.

Modified: trunk/Build/source/utils/t1utils/Makefile.in
===================================================================
--- trunk/Build/source/utils/t1utils/Makefile.in	2017-08-28 00:21:36 UTC (rev 45149)
+++ trunk/Build/source/utils/t1utils/Makefile.in	2017-08-28 06:43:57 UTC (rev 45150)
@@ -415,7 +415,7 @@
 	../../build-aux/depcomp ../../build-aux/install-sh \
 	../../build-aux/ltmain.sh ../../build-aux/missing \
 	../../build-aux/texinfo.tex ../../build-aux/ylwrap ChangeLog \
-	strerror.c
+	memmem.c strerror.c
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 distdir = $(PACKAGE)-$(VERSION)
 top_distdir = $(distdir)
@@ -730,6 +730,7 @@
 distclean-compile:
 	-rm -f *.tab.c
 
+ at AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/memmem.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strerror.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@@T1UTILS_TREE@/$(DEPDIR)/clp.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@@T1UTILS_TREE@/$(DEPDIR)/t1ascii.Po at am__quote@

Modified: trunk/Build/source/utils/t1utils/TLpatches/ChangeLog
===================================================================
--- trunk/Build/source/utils/t1utils/TLpatches/ChangeLog	2017-08-28 00:21:36 UTC (rev 45149)
+++ trunk/Build/source/utils/t1utils/TLpatches/ChangeLog	2017-08-28 06:43:57 UTC (rev 45150)
@@ -1,3 +1,9 @@
+2017-08-28  Akira Kakuto  <kakuto at fuk.kindai.ac.jp>
+
+	Import t1utils-1.41.
+	* patch-03-warnings, patch-04-TL-binary, patch-05-getopt,
+	patch-07-warnings: Adapded.
+
 2015-03-01  Peter Breitenlohner  <peb at mppmu.mpg.de>
 
 	Import t1utils-1.39.
@@ -53,4 +59,3 @@
 2009-06-12  Francois Charette  <firmicus at ankabut.net>
 
 	* patch-01-getline (new): Avoid getline name conflict.
-

Modified: trunk/Build/source/utils/t1utils/TLpatches/TL-Changes
===================================================================
--- trunk/Build/source/utils/t1utils/TLpatches/TL-Changes	2017-08-28 00:21:36 UTC (rev 45149)
+++ trunk/Build/source/utils/t1utils/TLpatches/TL-Changes	2017-08-28 06:43:57 UTC (rev 45150)
@@ -1,4 +1,4 @@
-Changes applied to the t1utils-1.39 tree as obtained from:
+Changes applied to the t1utils-1.41 tree as obtained from:
 	http://www.lcdf.org/type/
 
 Removed:
@@ -14,4 +14,4 @@
 
 Moved this file to ../:
 	strerror.c
-
+	memmem.c

Modified: trunk/Build/source/utils/t1utils/TLpatches/patch-03-warnings
===================================================================
--- trunk/Build/source/utils/t1utils/TLpatches/patch-03-warnings	2017-08-28 00:21:36 UTC (rev 45149)
+++ trunk/Build/source/utils/t1utils/TLpatches/patch-03-warnings	2017-08-28 06:43:57 UTC (rev 45150)
@@ -1,20 +1,21 @@
 	Avoid compiler warnings (gcc's -Wcast-qual).
 
-diff -ur t1utils-1.39.orig/clp.c t1utils-1.39/clp.c
---- t1utils-1.39.orig/clp.c	2014-12-11 18:20:22.000000000 +0100
-+++ t1utils-1.39/clp.c	2015-03-02 08:50:06.829885555 +0100
-@@ -1075,21 +1075,27 @@
- parse_int(Clp_Parser *clp, const char *arg, int complain, void *user_data)
+diff -ur t1utils-1.41.orig/clp.c t1utils-1.41/clp.c
+--- t1utils-1.41.orig/clp.c	Thu Aug 17 00:20:27 2017
++++ t1utils-1.41/clp.c	Mon Aug 28 14:14:04 2017
+@@ -1095,22 +1095,28 @@
+ parse_int(Clp_Parser* clp, const char* arg, int complain, void* user_data)
  {
      const char *val;
 +    char *temp;
+     uintptr_t type = (uintptr_t) user_data;
      if (*arg == 0 || isspace((unsigned char) *arg)
- 	|| (user_data != 0 && *arg == '-'))
+ 	|| ((type & 1) && *arg == '-'))
  	val = arg;
-     else if (user_data != 0) {	/* unsigned */
+     else if (type & 1) { /* unsigned */
  #if HAVE_STRTOUL
--	clp->val.u = strtoul(arg, (char **) &val, 0);
-+	clp->val.u = strtoul(arg, &temp, 0);
+-	clp->val.ul = strtoul(arg, (char **) &val, 0);
++	clp->val.ul = strtoul(arg, &temp, 0);
 +	val = temp;
  #else
  	/* don't bother really trying to do it right */
@@ -21,22 +22,22 @@
  	if (arg[0] == '-')
  	    val = arg;
 -	else
--	    clp->val.u = strtol(arg, (char **) &val, 0);
+-	    clp->val.l = strtol(arg, (char **) &val, 0);
 +	else {
-+	    clp->val.u = strtol(arg, &temp, 0);
++	    clp->val.l = strtol(arg, &temp, 0);
 +	    val = temp;
 +	}
  #endif
 -    } else
--	clp->val.i = strtol(arg, (char **) &val, 0);
+-	clp->val.l = strtol(arg, (char **) &val, 0);
 +    } else {
-+	clp->val.i = strtol(arg, &temp, 0);
++	clp->val.l = strtol(arg, &temp, 0);
 +	val = temp;
 +    }
+     if (type <= 1)
+         clp->val.u = (unsigned) clp->val.ul;
      if (*arg != 0 && *val == 0)
- 	return 1;
-     else if (complain) {
-@@ -1105,11 +1111,14 @@
+@@ -1130,11 +1136,14 @@
  parse_double(Clp_Parser *clp, const char *arg, int complain, void *user_data)
  {
      const char *val;
@@ -52,32 +53,4 @@
 +    }
      if (*arg != 0 && *val == 0)
  	return 1;
-     else if (complain)
-diff -ur t1utils-1.39.orig/t1disasm.c t1utils-1.39/t1disasm.c
---- t1utils-1.39.orig/t1disasm.c	2015-02-26 21:25:22.000000000 +0100
-+++ t1utils-1.39/t1disasm.c	2015-03-02 08:50:06.000000000 +0100
-@@ -302,11 +302,11 @@
- /* 23.Feb.2004 - use 'memstr', not strstr, because the strings input to
-    eexec_line aren't null terminated! Reported by Werner Lemberg. */
- 
--static const unsigned char *
--oog_memstr(const unsigned char *line, int line_len, const char *pattern, int pattern_len)
-+static unsigned char *
-+oog_memstr(unsigned char *line, int line_len, const char *pattern, int pattern_len)
- {
--    const unsigned char *try;
--    const unsigned char *last = line + line_len - pattern_len + 1;
-+    unsigned char *try;
-+    unsigned char *last = line + line_len - pattern_len + 1;
-     while (line < last
- 	   && (try = memchr(line, (unsigned char)*pattern, last - line))) {
- 	if (memcmp(try, pattern, pattern_len) == 0)
-@@ -401,7 +401,7 @@
-        badly: a charstring definition follows "/Charstrings ... begin", ON THE
-        SAME LINE. */
-     {
--	const char *CharStrings = (const char *)
-+	char *CharStrings = (char *)
- 	    oog_memstr(line, line_len, "/CharStrings ", 13);
- 	int crap, n;
- 	char should_be_slash = 0;
+     else {

Modified: trunk/Build/source/utils/t1utils/TLpatches/patch-04-TL-binary
===================================================================
--- trunk/Build/source/utils/t1utils/TLpatches/patch-04-TL-binary	2017-08-28 00:21:36 UTC (rev 45149)
+++ trunk/Build/source/utils/t1utils/TLpatches/patch-04-TL-binary	2017-08-28 06:43:57 UTC (rev 45150)
@@ -1,8 +1,8 @@
 	In TeX Live we treat all output files as binary.
 
-diff -ur t1utils-1.39.orig/t1ascii.c t1utils-1.39/t1ascii.c
---- t1utils-1.39.orig/t1ascii.c	2014-12-12 19:58:33.000000000 +0100
-+++ t1utils-1.39/t1ascii.c	2015-03-02 08:52:29.000000000 +0100
+diff -ur t1utils-1.41.orig/t1ascii.c t1utils-1.41/t1ascii.c
+--- t1utils-1.41.orig/t1ascii.c	Thu Aug 17 01:31:02 2017
++++ t1utils-1.41/t1ascii.c	Mon Aug 28 14:22:17 2017
 @@ -286,6 +286,7 @@
    /* As we are processing a PFB (binary) input */
    /* file, we must set its file mode to binary. */
@@ -11,10 +11,10 @@
  #endif
  
    /* prepare font reader */
-diff -ur t1utils-1.39.orig/t1disasm.c t1utils-1.39/t1disasm.c
---- t1utils-1.39.orig/t1disasm.c	2015-03-02 08:50:06.000000000 +0100
-+++ t1utils-1.39/t1disasm.c	2015-03-02 08:52:29.000000000 +0100
-@@ -717,6 +717,7 @@
+diff -ur t1utils-1.41.orig/t1disasm.c t1utils-1.41/t1disasm.c
+--- t1utils-1.41.orig/t1disasm.c	Thu Aug 17 01:31:24 2017
++++ t1utils-1.41/t1disasm.c	Mon Aug 28 14:23:22 2017
+@@ -727,6 +727,7 @@
    /* As we might be processing a PFB (binary) input file, we must set its file
       mode to binary. */
    _setmode(_fileno(ifp), _O_BINARY);
@@ -22,10 +22,10 @@
  #endif
  
    /* prepare font reader */
-diff -ur t1utils-1.39.orig/t1unmac.c t1utils-1.39/t1unmac.c
---- t1utils-1.39.orig/t1unmac.c	2014-12-12 19:58:33.000000000 +0100
-+++ t1utils-1.39/t1unmac.c	2015-03-02 08:52:29.000000000 +0100
-@@ -656,8 +656,7 @@
+diff -ur t1utils-1.41.orig/t1unmac.c t1utils-1.41/t1unmac.c
+--- t1utils-1.41.orig/t1unmac.c	Thu Aug 17 01:31:39 2017
++++ t1utils-1.41/t1unmac.c	Mon Aug 28 14:26:09 2017
+@@ -656,8 +655,7 @@
    _setmode(_fileno(ifp), _O_BINARY);
    /* If we are processing a PFB (binary) output */
    /* file, we must set its file mode to binary. */

Modified: trunk/Build/source/utils/t1utils/TLpatches/patch-05-getopt
===================================================================
--- trunk/Build/source/utils/t1utils/TLpatches/patch-05-getopt	2017-08-28 00:21:36 UTC (rev 45149)
+++ trunk/Build/source/utils/t1utils/TLpatches/patch-05-getopt	2017-08-28 06:43:57 UTC (rev 45150)
@@ -1,6 +1,6 @@
-diff -ur t1utils-1.39.orig/t1unmac.c t1utils-1.39/t1unmac.c
---- t1utils-1.39.orig/t1unmac.c	2015-03-02 08:52:29.000000000 +0100
-+++ t1utils-1.39/t1unmac.c	2015-03-02 08:57:05.000000000 +0100
+diff -ur t1utils-1.41.orig/t1unmac.c t1utils-1.41/t1unmac.c
+--- t1utils-1.41.orig/t1unmac.c	Thu Aug 17 01:31:39 2017
++++ t1utils-1.41/t1unmac.c	Mon Aug 28 14:26:09 2017
 @@ -41,7 +41,6 @@
  #endif
  #if defined(_MSDOS) || defined(_WIN32)

Modified: trunk/Build/source/utils/t1utils/TLpatches/patch-07-warnings
===================================================================
--- trunk/Build/source/utils/t1utils/TLpatches/patch-07-warnings	2017-08-28 00:21:36 UTC (rev 45149)
+++ trunk/Build/source/utils/t1utils/TLpatches/patch-07-warnings	2017-08-28 06:43:57 UTC (rev 45150)
@@ -1,20 +1,19 @@
 	Avoid compiler warnings (gcc's -Wcast-qual).
 
-diff -ur t1utils-1.39.orig/t1asmhelp.h t1utils-1.39/t1asmhelp.h
---- t1utils-1.39.orig/t1asmhelp.h	2015-02-26 21:31:27.000000000 +0100
-+++ t1utils-1.39/t1asmhelp.h	2015-03-02 11:09:49.000000000 +0100
-@@ -18,8 +18,8 @@
-   }
+diff -ur t1utils-1.41.orig/t1asmhelp.h t1utils-1.41/t1asmhelp.h
+--- t1utils-1.41.orig/t1asmhelp.h	Thu Aug 17 00:20:27 2017
++++ t1utils-1.41/t1asmhelp.h	Mon Aug 28 14:30:14 2017
+@@ -26,7 +26,8 @@
  }
  
--
+ 
 -static const char* cs_start = "";
 +static char cs_start_init[] = "";
 +static char *cs_start = cs_start_init;
  
  static void
- set_cs_start(const char* line)
-@@ -36,7 +36,7 @@
+ set_cs_start(const char* line, size_t line_len)
+@@ -43,7 +44,7 @@
              for (r = q; r != p && !isspace((unsigned char) *r) && *r != '{'; ++r)
                  /* nada */;
              if (cs_start_set)

Modified: trunk/Build/source/utils/t1utils/config.h.in
===================================================================
--- trunk/Build/source/utils/t1utils/config.h.in	2017-08-28 00:21:36 UTC (rev 45149)
+++ trunk/Build/source/utils/t1utils/config.h.in	2017-08-28 06:43:57 UTC (rev 45150)
@@ -9,6 +9,9 @@
 /* Define to 1 if you have the <inttypes.h> header file. */
 #undef HAVE_INTTYPES_H
 
+/* Define to 1 if you have the `memmem' function. */
+#undef HAVE_MEMMEM
+
 /* Define to 1 if you have the <memory.h> header file. */
 #undef HAVE_MEMORY_H
 
@@ -95,8 +98,16 @@
 char *strerror(int errno);
 #endif
 
+/* Prototype memmem if we don't have it. */
+#if !HAVE_MEMMEM
+void *memmem(const void* haystack, size_t haystack_len,
+             const void* needle, size_t needle_len);
+#endif
+
 #ifdef __cplusplus
 }
+/* Get rid of a possible inline macro under C++. */
+# define inline inline
 #endif
 
 #endif /* T1UTILS_CONFIG_H */

Modified: trunk/Build/source/utils/t1utils/configure
===================================================================
--- trunk/Build/source/utils/t1utils/configure	2017-08-28 00:21:36 UTC (rev 45149)
+++ trunk/Build/source/utils/t1utils/configure	2017-08-28 06:43:57 UTC (rev 45150)
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for t1utils (TeX Live) 1.39.
+# Generated by GNU Autoconf 2.69 for t1utils (TeX Live) 1.41.
 #
 # Report bugs to <tex-k at tug.org>.
 #
@@ -580,8 +580,8 @@
 # Identity of this package.
 PACKAGE_NAME='t1utils (TeX Live)'
 PACKAGE_TARNAME='t1utils--tex-live-'
-PACKAGE_VERSION='1.39'
-PACKAGE_STRING='t1utils (TeX Live) 1.39'
+PACKAGE_VERSION='1.41'
+PACKAGE_STRING='t1utils (TeX Live) 1.41'
 PACKAGE_BUGREPORT='tex-k at tug.org'
 PACKAGE_URL=''
 
@@ -1273,7 +1273,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures t1utils (TeX Live) 1.39 to adapt to many kinds of systems.
+\`configure' configures t1utils (TeX Live) 1.41 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1340,7 +1340,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of t1utils (TeX Live) 1.39:";;
+     short | recursive ) echo "Configuration of t1utils (TeX Live) 1.41:";;
    esac
   cat <<\_ACEOF
 
@@ -1437,7 +1437,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-t1utils (TeX Live) configure 1.39
+t1utils (TeX Live) configure 1.41
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2043,7 +2043,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by t1utils (TeX Live) $as_me 1.39, which was
+It was created by t1utils (TeX Live) $as_me 1.41, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -3966,7 +3966,7 @@
 
 # Define the identity of the package.
  PACKAGE='t1utils--tex-live-'
- VERSION='1.39'
+ VERSION='1.41'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -4989,8 +4989,21 @@
 
 fi
 
+ac_fn_c_check_func "$LINENO" "memmem" "ac_cv_func_memmem"
+if test "x$ac_cv_func_memmem" = xyes; then :
+  $as_echo "#define HAVE_MEMMEM 1" >>confdefs.h
 
+else
+  case " $LIBOBJS " in
+  *" memmem.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS memmem.$ac_objext"
+ ;;
+esac
 
+fi
+
+
+
 for ac_func in strtoul
 do :
   ac_fn_c_check_func "$LINENO" "strtoul" "ac_cv_func_strtoul"
@@ -6158,7 +6171,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by t1utils (TeX Live) $as_me 1.39, which was
+This file was extended by t1utils (TeX Live) $as_me 1.41, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -6224,7 +6237,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-t1utils (TeX Live) config.status 1.39
+t1utils (TeX Live) config.status 1.41
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 

Modified: trunk/Build/source/utils/t1utils/configure.ac
===================================================================
--- trunk/Build/source/utils/t1utils/configure.ac	2017-08-28 00:21:36 UTC (rev 45149)
+++ trunk/Build/source/utils/t1utils/configure.ac	2017-08-28 06:43:57 UTC (rev 45150)
@@ -28,7 +28,7 @@
 dnl strerror()?
 dnl
 
-AC_REPLACE_FUNCS([strerror])
+AC_REPLACE_FUNCS([strerror memmem])
 
 AC_CHECK_FUNCS([strtoul])
 
@@ -105,8 +105,16 @@
 char *strerror(int errno);
 #endif
 
+/* Prototype memmem if we don't have it. */
+#if !HAVE_MEMMEM
+void *memmem(const void* haystack, size_t haystack_len,
+             const void* needle, size_t needle_len);
+#endif
+
 #ifdef __cplusplus
 }
+/* Get rid of a possible inline macro under C++. */
+# define inline inline
 #endif
 
 #endif /* T1UTILS_CONFIG_H */])

Added: trunk/Build/source/utils/t1utils/memmem.c
===================================================================
--- trunk/Build/source/utils/t1utils/memmem.c	                        (rev 0)
+++ trunk/Build/source/utils/t1utils/memmem.c	2017-08-28 06:43:57 UTC (rev 45150)
@@ -0,0 +1,32 @@
+/* Some operating systems might not have memmem. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+#include <stddef.h>
+#include <string.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void*
+memmem(const void* haystack, size_t haystack_len,
+       const void* needle, size_t needle_len)
+{
+    const unsigned char* s = (const unsigned char*) haystack;
+    const unsigned char* ends = s + haystack_len - needle_len;
+    const unsigned char* p = (const unsigned char*) needle;
+    void* try;
+    if (needle_len == 0)
+        return (void*) haystack;
+    while (s <= ends && (try = memchr(s, *p, ends - s + 1)))
+        if (memcmp(try, p, needle_len) == 0)
+            return (void*) try;
+        else
+            s = (const unsigned char*) try + 1;
+    return 0;
+}
+
+#ifdef __cplusplus
+}
+#endif


Property changes on: trunk/Build/source/utils/t1utils/memmem.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Added: trunk/Build/source/utils/t1utils/t1utils-src/LICENSE
===================================================================
--- trunk/Build/source/utils/t1utils/t1utils-src/LICENSE	                        (rev 0)
+++ trunk/Build/source/utils/t1utils/t1utils-src/LICENSE	2017-08-28 06:43:57 UTC (rev 45150)
@@ -0,0 +1,30 @@
+Portions of this software are subject to the license below.  The relevant
+source files are clearly marked; they refer to this file using the phrase
+"the Click LICENSE file". This license is an MIT license, plus a clause
+(taken from the W3C license) requiring prior written permission to use our
+names in publicity.
+
+===========================================================================
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the "Software"),
+to deal in the Software without restriction, including without limitation
+the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+The name and trademarks of copyright holders may NOT be used in advertising
+or publicity pertaining to the Software without specific, written prior
+permission. Title to copyright in this Software and any associated
+documentation will at all times remain with copyright holders.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.

Modified: trunk/Build/source/utils/t1utils/t1utils-src/Makefile.am
===================================================================
--- trunk/Build/source/utils/t1utils/t1utils-src/Makefile.am	2017-08-28 00:21:36 UTC (rev 45149)
+++ trunk/Build/source/utils/t1utils/t1utils-src/Makefile.am	2017-08-28 06:43:57 UTC (rev 45150)
@@ -1,5 +1,5 @@
 ## Process this file with automake to produce Makefile.in
-AUTOMAKE_OPTIONS = foreign check-news
+AUTOMAKE_OPTIONS = foreign
 
 bin_PROGRAMS = t1ascii t1binary t1asm t1disasm t1unmac t1mac
 man_MANS = t1ascii.1 t1binary.1 t1asm.1 t1disasm.1 t1unmac.1 t1mac.1
@@ -20,23 +20,9 @@
 AM_CPPFLAGS = -I$(top_srcdir)/include
 LDADD = @LIBOBJS@
 
-EXTRA_DIST = $(man_MANS) t1utils.spec
+EXTRA_DIST = $(man_MANS) INSTALL LICENSE README.md NEWS.md
 
 versionize:
 	perl -pi -e "s/^\\.ds V.*/.ds V $(VERSION)/;" t1ascii.1 t1binary.1 t1disasm.1 t1asm.1 t1unmac.1 t1mac.1
-	perl -pi -e 's/^Version:(\s*).*/Version:$${1}$(VERSION)/; s/$(PACKAGE)-[\w.]+\.tar\.gz/$(PACKAGE)-$(VERSION).tar.gz/;' t1utils.spec
-	perl -pi -e 's/VERSION [\d.ab]+/VERSION $(VERSION)/;' README
 
-rpm: dist
-	buildarch=`rpm --showrc | awk '/^build arch/ { print $$4; }'` ; \
-	mkdir -p /tmp/rpm-t1u/SOURCES /tmp/rpm-t1u/RPMS/$$buildarch \
-	/tmp/rpm-t1u/BUILD ; \
-	echo 'include: /usr/lib/rpm/rpmrc' > /tmp/rpm-t1u/rc ; \
-	echo 'macrofiles: /usr/lib/rpm/macros:/tmp/rpm-t1u/macros' >> /tmp/rpm-t1u/rc ; \
-	echo '%_topdir /tmp/rpm-t1u' > /tmp/rpm-t1u/macros ; \
-	cp $(PACKAGE)-$(VERSION).tar.gz /tmp/rpm-t1u/SOURCES ; \
-	rpmbuild --rcfile /tmp/rpm-t1u/rc -bb t1utils.spec ; \
-	cp /tmp/rpm-t1u/RPMS/$$buildarch/*.rpm .
-	rm -rf /tmp/rpm-t1u
-
-.PHONY: srclinks versionize rpm
+.PHONY: srclinks versionize

Deleted: trunk/Build/source/utils/t1utils/t1utils-src/NEWS
===================================================================
--- trunk/Build/source/utils/t1utils/t1utils-src/NEWS	2017-08-28 00:21:36 UTC (rev 45149)
+++ trunk/Build/source/utils/t1utils/t1utils-src/NEWS	2017-08-28 06:43:57 UTC (rev 45150)
@@ -1,324 +0,0 @@
-T1utils NEWS
-

-Version 1.39   26.Feb.2015
-
-* t1disasm: Security fixes for buffer overrun reported by Jakub Wilk
-  and Niels Thykier.
-
-

-Version 1.38   29.Sep.2013
-
-* t1disasm: Fix an infinite loop on some fonts reported by Niels
-  Thykier.
-
-

-Version 1.37   29.Jun.2011
-
-* t1asm: Use a dynamically allocated buffer to handle huge characters
-  (reported by Werner Lemberg).
-
-

-Version 1.36   29.May.2010
-
-* Several minor cleanups.
-
-

-Version 1.35   22.Oct.2009
-
-* Don't use "getline" as a symbol (reported by Karl Berry and
-  C.M. Connelly).
-
-

-Version 1.34   1.Mar.2008
-
-* Add '--enable-multiplatform' (requested by Karl Berry).
-
-

-Version 1.33   8.Jan.2008
-
-* Several minor cleanups.
-
-

-Version 1.32   23.Feb.2004
-
-* t1disasm: Avoid memory corruption bug (strings passed to eexec_line are
-  not null terminated).  Reported by Werner Lemberg.
-
-

-Version 1.31   8.Feb.2004
-
-* All: Support fonts where the eexec-encrypted portion is binary, and the
-  first ciphertext byte is 0.  Reported by Werner Lemberg.
-
-

-Version 1.30   6.Jan.2004
-
-* All: Support fonts, such as those in PostScript files printed by
-  acroread, where "currentfile eexec" is not followed by a newline.
-
-

-Version 1.29   6.Oct.2003
-
-* t1disasm: Support odd fonts where a character is defined on the
-  "/CharStrings" line. Reported by Werner Lemberg.
-
-

-Version 1.28   7.Aug.2003
-
-* Address build problems reported by Nelson H.F. Beebe.
-
-

-Version 1.27   26.Mar.2003
-
-* t1ascii: Add optional warning when output lines are longer than 255
-  characters. Requested by Werner Lemberg <wl at gnu.org>.
-
-

-Version 1.26   16.Apr.2002
-
-* t1mac: Fix buglet (C++ comment, and temporary file left behind). Reported
-  by Vladimir Volovich <vvv at vsu.ru>.
-
-

-Version 1.25   3.Jan.2002
-
-* t1asm: Beware extra characters after `currentfile closefile'. Reported by
-  Luc Devroye <luc at cs.mcgill.ca>.
-
-

-Version 1.24   6.Sep.2001
-
-* Fixed compilation bugs on various platforms reported by Nelson H. F.
-  Beebe <beebe at math.utah.edu>.
-
-

-Version 1.23   18.Jun.2001
-
-* Fixed Macintosh file bugs: the MacBinary CRC was calculated incorrectly,
-  and extended finder flags were set to random values in BinHex output.
-  Reported, and patch provided, by Tom Kacvinsky <tjk at ams.org>.
-
-

-Version 1.22   6.Mar.2001
-
-* Fixed bug on processing PFA fonts with DOS line endings. The symptom was
-  t1binary producing strange/unusable fonts. Problem: the all-zeros line,
-  which signals the end of the font's binary section, was not being
-  recognized because of an extra '\r'. This has been a bug since version
-  1.13 -- chagrin! Problem reported by Han The Thanh
-  <thanh at informatics.muni.cz>.
-
-

-Version 1.21   9.Feb.2001
-
-* t1ascii, t1asm, t1unmac: Raised minimum PFA line length to 8. The Adobe
-  spec may imply that there cannot be whitespace within the first 8 bytes
-  of an ASCII-encoded eexec section; it's somewhat ambiguous. Reported by
-  Rainer Menzner <Rainer.Menzner at neuroinformatik.ruhr-uni-bochum.de>.
-
-

-Version 1.20   22.Jun.2000
-
-* t1asm: Fixed bug where `t1asm -a' would give a `warning: line length
-  raised to 4' error message. Reported by Tom Kacvinsky <tjk at ams.org>.
-
-

-Version 1.19   3.May.2000
-
-* t1mac: Generated Macintosh fonts now use a custom-drawn icon set, rather
-  than Adobe's default. They also have a t1utils-specific creator signature
-  (T1UT), and their file information mentions t1utils.
-
-* t1mac: Added the `--filename' option.
-
-

-Version 1.18   2.May.2000
-
-* t1mac: Fixed bug where generated files appeared corrupted to Macintoshes.
-  Reported by Marten Thavenius <marten.thavenius at bahnhof.se>.
-
-

-Version 1.17   27.Apr.2000
-
-* Added new program, `t1mac', which translates PFA or PFB fonts into
-  Macintosh-style fonts. T1mac can output in MacBinary, AppleSingle,
-  AppleDouble, or BinHex format. Suggested by Marten Thavenius
-  <marten.thavenius at bahnhof.se>.
-
-* t1unmac: Added support for BinHex.
-
-* t1unmac: Fixed bugs in manual page and program options.
-
-

-Version 1.16   25.Apr.2000
-
-* t1unmac: Supports AppleSingle and AppleDouble files with the
-  `--applesingle/double' option. Requested by Kent Boortz
-  <kent at erix.ericsson.se>.
-
-

-Version 1.15   4.Apr.2000
-
-* t1ascii, t1binary, and t1disasm: Fixed bad error message.
-
-* t1unmac: Generates PFB fonts by default.
-
-

-Version 1.14   25.Aug.1999
-
-* t1asm: Version 1.13 produced complete crap output. My test cases were too
-  limited to catch this. Found by Rainer Menzner
-  <Rainer.Menzner at neuroinformatik.ruhr-uni-bochum.de>.
-
-

-Version 1.13   2.Aug.1999
-
-* t1disasm: Complete rewrite. It now uses t1lib.c functions; the goal is to
-  handle PFA and PFB fonts consistently. This has been extensively tested,
-  but there may be bugs.
-
-* t1disasm, t1asm: Fixed to support fonts with multiple Subrs and
-  CharStrings sections, like some old Oblique fonts.
-
-* PFA minimum line length raised to 4.
-
-* t1ascii, t1binary, t1disasm: Changes in t1lib.c to support reading binary
-  PFA fonts. Requested by Tom Kacvinsky <tjk at ams.org>.
-
-

-Version 1.12   1.Aug.1999
-
-* t1ascii, t1binary, t1asm, t1disasm: Support fonts with whitespace
-  following the "currentfile eexec" line. Embedded fonts in PostScript
-  generated by Acrobat Reader have this property. Reported by Tom Kacvinsky
-  <tjk at ams.org>.
-
-* t1ascii, t1asm, t1unmac: Use lowercase hex digits instead of uppercase.
-
-* t1unmac: Added `--line-length' option for PFA output.
-
-

-Version 1.11   29.May.1999
-
-* Bug fix in t1asm/t1disasm: if a `readhexstring' procedure was defined, we
-  got confused. Reported by Luc Devroye <luc at CS.McGill.CA>.
-
-* t1binary now has a maximum block length of 2^32 - 1. "Feature" requested
-  by Werner Lemberg <wl at gnu.org>.
-
-* t1ascii and t1binary each accept both PFA and PFB fonts. If you pass an
-  ASCII font (PFA) to t1ascii, it will output it mostly unchanged, and
-  similarly for PFB fonts and t1binary. The `-l' options will still take
-  effect, so you can use `t1ascii -l 60' to shorten the encrypted line
-  lengths of a PFA font. t1ascii also does some newline translation
-  (changes carriage returns to newlines).
-
-

-Version 1.10.1   12.Apr.1999
-
-* t1asm: Fixed bug when `-l' option wasn't provided. Caught by Giuseppe
-  Ghib\xF2 <ghibo at caesar.polito.it>.
-
-

-Version 1.10   11.Apr.1999
-
-* t1asm/t1disasm: Provide support for Type1C (Compact Font Format) font
-  files. These fonts have unencrypted character strings, signalled by a
-  negative lenIV value. Suggestion and patch thanks to Tom Kacvinsky
-  <tjk at ams.org>.
-
-* t1ascii/t1asm: Added `-l/--line-length' option to control maximum
-  encrypted line length. Suggestion thanks to Giuseppe Ghib\xF2
-  <ghibo at caesar.polito.it>.
-
-

-Version 1.9   14.Feb.1999
-
-* t1asm/t1disasm: Be more robust on fonts that don't end in `mark
-  currentfile closefile'. John Vromans <JVromans at squirrel.nl> provided a
-  font that ended with `mark' on one line and `currentfile closefile' on
-  another; t1asm and t1disasm did not recognize the encrypted section of
-  the font had ended, and generated some garbage.
-
-

-Version 1.8   2.Jan.1999
-
-* Added some more Type 2 commands (flex, flex1, hflex, hflex1) from a
-  revision of the Type 2 spec. (I wouldn't have known about this except for
-  CurveSoft's revised t1utils package, available at
-  http://www.curvesoft.com. These t1utils are more up-to-date than theirs,
-  however.)
-
-* t1asm: Fixed one Type 2 command's translation (cntrmask was incorrectly
-  mapped to 18, not 20).
-
-

-Version 1.7.2   11.Dec.1998
-
-* Integrated patches from Jan-Jaap van der Heijden
-  <J.J.vanderHeijden at student.utwente.nl> to support building t1utils under
-  32-bit Windows.
-
-

-Version 1.7.1   5.Dec.1998
-
-* The t1utils package now uses automake.
-
-

-Version 1.7   27.Nov.1998
-
-* t1asm: Should now work with fonts that have no /Subrs sections. Previously,
-  assembling such a font would silently fail; all the character definitions
-  would be mistaken for procedures and t1asm wouldn't translate them. Problem
-  noticed and fix suggested by Tom Kacvinsky <tjk at ams.org>.
-
-* t1disasm: Removed spurious debugging output and improved warning message
-  about unknown charstring commands.
-
-* Changed fgetc/fputc into getc/putc.
-
-

-Version 1.6   27.Sep.1998
-
-* `--help' now prints to stdout, following the GNU Coding Standards.
-
-* Makefiles: Added `make uninstall' target, enabled `./configure's
-  program name transformations, made VPATH builds possible.
-
-

-Version 1.5.2   6.Aug.1998
-
-* t1asm/t1disasm: Changed unknown charstring commands at the request of
-  Werner Lemberg and LEE Chun-Yu. An unknown escape in the charstring, like
-  12 X, is translated to "escape_X" rather than "UNKNOWN_12_X".
-
-

-Version 1.5.1   31.May.1998
-
-* t1unmac did not actually understand the -r and -b options. Fixed.
-
-* t1unmac: Added better diagnostics to help you diagnose seeking problems.
-
-

-Version 1.5   5.Mar.1998
-
-* Initial release with Eddie Kohler as maintainer.
-
-* All: Updated to the GNU program behavior standards (long options, --help,
-  --version). Banners removed. Added more error messages.
-
-* t1binary: Removed fixed limit on line length.
-
-* t1binary: Supports Macintosh files, whose lines end in `\r'.
-
-* t1binary: Supports an odd number of hex digits in a line.
-
-* t1asm/t1disasm: Added support for Type 2 commands like `blend' and `add',
-  which also appear in some multiple master fonts like Adobe Jenson.
-
-* t1asm/t1disasm: Added support for unknown charstring commands. t1disasm
-  translates an unknown command #X to "UNKNOWN_X", and t1asm does the reverse.
-
-* t1asm/t1unmac: Changed default output to PFB.
-
-* t1unmac: Used to be called `unpost'. `t1unmac' is a much better name.

Added: trunk/Build/source/utils/t1utils/t1utils-src/NEWS.md
===================================================================
--- trunk/Build/source/utils/t1utils/t1utils-src/NEWS.md	                        (rev 0)
+++ trunk/Build/source/utils/t1utils/t1utils-src/NEWS.md	2017-08-28 06:43:57 UTC (rev 45150)
@@ -0,0 +1,334 @@
+T1utils NEWS
+============
+
+## Version 1.41 – 16.Aug.2017
+
+* t1asm, t1disasm: More security fixes.
+
+
+## Version 1.40 – 23.Jul.2017
+
+* t1disasm: More security fixes reported by Jakub Wilk and Niels Thykier.
+
+
+## Version 1.39 – 26.Feb.2015
+
+* t1disasm: Security fixes for buffer overrun reported by Jakub Wilk
+  and Niels Thykier.
+
+
+## Version 1.38 – 29.Sep.2013
+
+* t1disasm: Fix an infinite loop on some fonts reported by Niels
+  Thykier.
+
+
+## Version 1.37 – 29.Jun.2011
+
+* t1asm: Use a dynamically allocated buffer to handle huge characters
+  (reported by Werner Lemberg).
+
+
+## Version 1.36 – 29.May.2010
+
+* Several minor cleanups.
+
+
+## Version 1.35 – 22.Oct.2009
+
+* Don't use "getline" as a symbol (reported by Karl Berry and
+  C.M. Connelly).
+
+
+## Version 1.34 – 1.Mar.2008
+
+* Add `--enable-multiplatform` (requested by Karl Berry).
+
+
+## Version 1.33 – 8.Jan.2008
+
+* Several minor cleanups.
+
+
+## Version 1.32 – 23.Feb.2004
+
+* t1disasm: Avoid memory corruption bug (strings passed to `eexec_line` are
+  not null terminated).  Reported by Werner Lemberg.
+
+
+## Version 1.31 – 8.Feb.2004
+
+* All: Support fonts where the eexec-encrypted portion is binary, and the
+  first ciphertext byte is 0.  Reported by Werner Lemberg.
+
+
+## Version 1.30 – 6.Jan.2004
+
+* All: Support fonts, such as those in PostScript files printed by
+  acroread, where `currentfile eexec` is not followed by a newline.
+
+
+## Version 1.29 – 6.Oct.2003
+
+* t1disasm: Support odd fonts where a character is defined on the
+  "/CharStrings" line. Reported by Werner Lemberg.
+
+
+## Version 1.28 – 7.Aug.2003
+
+* Address build problems reported by Nelson H.F. Beebe.
+
+
+## Version 1.27 – 26.Mar.2003
+
+* t1ascii: Add optional warning when output lines are longer than 255
+  characters. Requested by Werner Lemberg <wl at gnu.org>.
+
+
+## Version 1.26 – 16.Apr.2002
+
+* t1mac: Fix buglet (C++ comment, and temporary file left behind). Reported
+  by Vladimir Volovich <vvv at vsu.ru>.
+
+
+## Version 1.25 – 3.Jan.2002
+
+* t1asm: Beware extra characters after `currentfile closefile`. Reported by
+  Luc Devroye <luc at cs.mcgill.ca>.
+
+
+## Version 1.24 – 6.Sep.2001
+
+* Fixed compilation bugs on various platforms reported by Nelson H. F.
+  Beebe <beebe at math.utah.edu>.
+
+
+## Version 1.23 – 18.Jun.2001
+
+* Fixed Macintosh file bugs: the MacBinary CRC was calculated incorrectly,
+  and extended finder flags were set to random values in BinHex output.
+  Reported, and patch provided, by Tom Kacvinsky <tjk at ams.org>.
+
+
+## Version 1.22 – 6.Mar.2001
+
+* Fixed bug on processing PFA fonts with DOS line endings. The symptom was
+  t1binary producing strange/unusable fonts. Problem: the all-zeros line,
+  which signals the end of the font's binary section, was not being
+  recognized because of an extra `\r`. This has been a bug since version
+  1.13 -- chagrin! Problem reported by Han The Thanh
+  <thanh at informatics.muni.cz>.
+
+
+## Version 1.21 – 9.Feb.2001
+
+* t1ascii, t1asm, t1unmac: Raised minimum PFA line length to 8. The Adobe
+  spec may imply that there cannot be whitespace within the first 8 bytes
+  of an ASCII-encoded eexec section; it's somewhat ambiguous. Reported by
+  Rainer Menzner <Rainer.Menzner at neuroinformatik.ruhr-uni-bochum.de>.
+
+
+## Version 1.20 – 22.Jun.2000
+
+* t1asm: Fixed bug where `t1asm -a` would give a “warning: line length
+  raised to 4” error message. Reported by Tom Kacvinsky <tjk at ams.org>.
+
+
+## Version 1.19 – 3.May.2000
+
+* t1mac: Generated Macintosh fonts now use a custom-drawn icon set, rather
+  than Adobe's default. They also have a t1utils-specific creator signature
+  (T1UT), and their file information mentions t1utils.
+
+* t1mac: Added the `--filename` option.
+
+
+## Version 1.18 – 2.May.2000
+
+* t1mac: Fixed bug where generated files appeared corrupted to Macintoshes.
+  Reported by Marten Thavenius <marten.thavenius at bahnhof.se>.
+
+
+## Version 1.17 – 27.Apr.2000
+
+* Added new program, `t1mac`, which translates PFA or PFB fonts into
+  Macintosh-style fonts. T1mac can output in MacBinary, AppleSingle,
+  AppleDouble, or BinHex format. Suggested by Marten Thavenius
+  <marten.thavenius at bahnhof.se>.
+
+* t1unmac: Added support for BinHex.
+
+* t1unmac: Fixed bugs in manual page and program options.
+
+
+## Version 1.16 – 25.Apr.2000
+
+* t1unmac: Supports AppleSingle and AppleDouble files with the
+  `--applesingle/double` option. Requested by Kent Boortz
+  <kent at erix.ericsson.se>.
+
+
+## Version 1.15 – 4.Apr.2000
+
+* t1ascii, t1binary, and t1disasm: Fixed bad error message.
+
+* t1unmac: Generates PFB fonts by default.
+
+
+## Version 1.14 – 25.Aug.1999
+
+* t1asm: Version 1.13 produced complete crap output. My test cases were too
+  limited to catch this. Found by Rainer Menzner
+  <Rainer.Menzner at neuroinformatik.ruhr-uni-bochum.de>.
+
+
+## Version 1.13 – 2.Aug.1999
+
+* t1disasm: Complete rewrite. It now uses t1lib.c functions; the goal is to
+  handle PFA and PFB fonts consistently. This has been extensively tested,
+  but there may be bugs.
+
+* t1disasm, t1asm: Fixed to support fonts with multiple Subrs and
+  CharStrings sections, like some old Oblique fonts.
+
+* PFA minimum line length raised to 4.
+
+* t1ascii, t1binary, t1disasm: Changes in t1lib.c to support reading binary
+  PFA fonts. Requested by Tom Kacvinsky <tjk at ams.org>.
+
+
+## Version 1.12 – 1.Aug.1999
+
+* t1ascii, t1binary, t1asm, t1disasm: Support fonts with whitespace
+  following the `currentfile eexec` line. Embedded fonts in PostScript
+  generated by Acrobat Reader have this property. Reported by Tom Kacvinsky
+  <tjk at ams.org>.
+
+* t1ascii, t1asm, t1unmac: Use lowercase hex digits instead of uppercase.
+
+* t1unmac: Added `--line-length` option for PFA output.
+
+
+## Version 1.11 – 29.May.1999
+
+* Bug fix in t1asm/t1disasm: if a `readhexstring` procedure was defined, we
+  got confused. Reported by Luc Devroye <luc at CS.McGill.CA>.
+
+* t1binary now has a maximum block length of 2^32 - 1. "Feature" requested
+  by Werner Lemberg <wl at gnu.org>.
+
+* t1ascii and t1binary each accept both PFA and PFB fonts. If you pass an
+  ASCII font (PFA) to t1ascii, it will output it mostly unchanged, and
+  similarly for PFB fonts and t1binary. The `-l` options will still take
+  effect, so you can use `t1ascii -l 60` to shorten the encrypted line
+  lengths of a PFA font. t1ascii also does some newline translation
+  (changes carriage returns to newlines).
+
+
+## Version 1.10.1 – 12.Apr.1999
+
+* t1asm: Fixed bug when `-l` option wasn't provided. Caught by Giuseppe
+  Ghibò <ghibo at caesar.polito.it>.
+
+
+## Version 1.10 – 11.Apr.1999
+
+* t1asm/t1disasm: Provide support for Type1C (Compact Font Format) font
+  files. These fonts have unencrypted character strings, signalled by a
+  negative lenIV value. Suggestion and patch thanks to Tom Kacvinsky
+  <tjk at ams.org>.
+
+* t1ascii/t1asm: Added `-l/--line-length` option to control maximum encrypted
+  line length. Suggestion thanks to Giuseppe Ghibò <ghibo at caesar.polito.it>.
+
+
+## Version 1.9 – 14.Feb.1999
+
+* t1asm/t1disasm: Be more robust on fonts that don't end in `mark
+  currentfile closefile`. John Vromans <JVromans at squirrel.nl> provided a
+  font that ended with `mark` on one line and `currentfile closefile` on
+  another; t1asm and t1disasm did not recognize the encrypted section of
+  the font had ended, and generated some garbage.
+
+
+## Version 1.8 – 2.Jan.1999
+
+* Added some more Type 2 commands (flex, flex1, hflex, hflex1) from a
+  revision of the Type 2 spec. (I wouldn't have known about this except for
+  CurveSoft's revised t1utils package, available at
+  http://www.curvesoft.com. These t1utils are more up-to-date than theirs,
+  however.)
+
+* t1asm: Fixed one Type 2 command's translation (cntrmask was incorrectly
+  mapped to 18, not 20).
+
+
+## Version 1.7.2 – 11.Dec.1998
+
+* Integrated patches from Jan-Jaap van der Heijden
+  <J.J.vanderHeijden at student.utwente.nl> to support building t1utils under
+  32-bit Windows.
+
+
+## Version 1.7.1 – 5.Dec.1998
+
+* The t1utils package now uses automake.
+
+
+## Version 1.7 – 27.Nov.1998
+
+* t1asm: Should now work with fonts that have no /Subrs sections. Previously,
+  assembling such a font would silently fail; all the character definitions
+  would be mistaken for procedures and t1asm wouldn't translate them. Problem
+  noticed and fix suggested by Tom Kacvinsky <tjk at ams.org>.
+
+* t1disasm: Removed spurious debugging output and improved warning message
+  about unknown charstring commands.
+
+* Changed fgetc/fputc into getc/putc.
+
+
+## Version 1.6 – 27.Sep.1998
+
+* `--help` now prints to stdout, following the GNU Coding Standards.
+
+* Makefiles: Added `make uninstall` target, enabled `./configure`'s
+  program name transformations, made VPATH builds possible.
+
+
+## Version 1.5.2 – 6.Aug.1998
+
+* t1asm/t1disasm: Changed unknown charstring commands at the request of
+  Werner Lemberg and LEE Chun-Yu. An unknown escape in the charstring, like
+  12 X, is translated to "escape_X" rather than "UNKNOWN_12_X".
+
+
+## Version 1.5.1 – 31.May.1998
+
+* t1unmac did not actually understand the `-r` and `-b` options. Fixed.
+
+* t1unmac: Added better diagnostics to help you diagnose seeking problems.
+
+
+## Version 1.5 – 5.Mar.1998
+
+* Initial release with Eddie Kohler as maintainer.
+
+* All: Updated to the GNU program behavior standards (long options, `--help`,
+  `--version`). Banners removed. Added more error messages.
+
+* t1binary: Removed fixed limit on line length.
+
+* t1binary: Supports Macintosh files, whose lines end in `\r`.
+
+* t1binary: Supports an odd number of hex digits in a line.
+
+* t1asm/t1disasm: Added support for Type 2 commands like `blend` and `add`,
+  which also appear in some multiple master fonts like Adobe Jenson.
+
+* t1asm/t1disasm: Added support for unknown charstring commands. t1disasm
+  translates an unknown command #X to "UNKNOWN_X", and t1asm does the reverse.
+
+* t1asm/t1unmac: Changed default output to PFB.
+
+* t1unmac: Used to be called `unpost`. `t1unmac` is a much better name.

Deleted: trunk/Build/source/utils/t1utils/t1utils-src/README
===================================================================
--- trunk/Build/source/utils/t1utils/t1utils-src/README	2017-08-28 00:21:36 UTC (rev 45149)
+++ trunk/Build/source/utils/t1utils/t1utils-src/README	2017-08-28 06:43:57 UTC (rev 45150)
@@ -1,69 +0,0 @@
-T1UTILS
-=======
-
-   t1utils is a collection of simple type-1 font manipulation
-programs. Together, they allow you to convert between PFA (ASCII) and
-PFB (binary) formats, disassemble PFA or PFB files into human-readable
-form, reassemble them into PFA or PFB format. Additionally you can
-extract font resources from a Macintosh font file or create a
-Macintosh Type 1 font file from a PFA or PFB font.
-
-There are currently six programs:
-
-t1ascii		converts PFB files to PFA format.
-
-t1binary	converts PFA files to PFB format.
-
-t1disasm	disassembles a type-1 font (PFA or PFB format) into a
-		raw, human-readable text form for subsequent hand
-		editing, tweaking, hint fixing, etc...
-
-t1asm		assembles type-1 font into PFA or PFB format from 
-		human-readable form produced by t1disasm.
-
-t1unmac		extracts POST resources from a Macintosh type-1 file
-		(ATM/Laserwriter) into PFA or PFB format for use outside
-		the Macintosh environment. The Macintosh file should be
-		stored in MacBinary, AppleSingle, AppleDouble, or BinHex
-		format, or as a raw resource fork. Note that t1unmac does
-		not have to run on a Macintosh, but makes Macintosh type-1
-		fonts available to Unix machines and PCs.
-
-t1mac		creates a Macintosh Type 1 file from a PFA or PFB-format
-		Type 1 font. Writes the Macintosh file in MacBinary,
-		AppleSingle, AppleDouble, or BinHex format, or as a raw
-		resource fork. WARNING: This will not suffice to use the
-		new font on a Macintosh, as Macintoshes cannot read raw
-		Type 1 fonts. You will need to create a font suitcase
-		containing bitmap fonts if you do not have such a suitcase
-		for the font already. T1utils cannot help you do this.
-
-Installation
-------------
-
-   You need an ANSI C compiler, such as gcc.
-
-   Just type `./configure', then `make'. `make install' will build and
-install the utilities and their manual pages.
-
-   `./configure' accepts the usual options. See `INSTALL' for more
-details. The most commonly used option is `--prefix', which can be used
-to install the utilities in a place other than /usr/local.
-
-Copyright and license
----------------------
-
-   The original t1utils were (c) 1992 I. Lee Hetherington. Changes
-since version 1.2 are (c) 1998-2013 Eddie Kohler. Distribution is
-under the Click LICENSE, a BSD-like license described in the LICENSE
-file in this directory.
-
-   Note that these tools should not be used to illegally copy type-1
-font programs. Typeface design is an intricate art that should be
-rewarded.
-
-Eddie Kohler
-ekohler at gmail.com
-
-I. Lee Hetherington
-ilh at lcs.mit.edu

Added: trunk/Build/source/utils/t1utils/t1utils-src/README.md
===================================================================
--- trunk/Build/source/utils/t1utils/t1utils-src/README.md	                        (rev 0)
+++ trunk/Build/source/utils/t1utils/t1utils-src/README.md	2017-08-28 06:43:57 UTC (rev 45150)
@@ -0,0 +1,61 @@
+T1utils
+=======
+
+T1utils is a collection of simple programs for manipulating PostScript Type 1
+fonts. Together, they allow you to convert between PFA (ASCII) and PFB
+(binary) formats, disassemble PFA or PFB files into human-readable form, and
+reassemble them into PFA or PFB format. Additionally you can extract font
+resources from a Macintosh font file or create a Macintosh Type 1 font file
+from a PFA or PFB font.
+
+There are currently six programs:
+
+* **t1ascii**: Converts PFB files to PFA format.
+
+* **t1binary**: Converts PFA files to PFB format.
+
+* **t1disasm**: Disassembles a Type 1 font (PFA or PFB format) into a
+  raw, human-readable text form for subsequent hand editing, tweaking, hint
+  fixing, and so forth.
+
+* **t1asm**: Assembles the human-readable t1disasm text form into a Type 1
+  font in PFA or PFB format.
+
+* **t1unmac**: Extracts POST resources from a Macintosh Type 1 font file into
+  PFA or PFB format for use outside the Macintosh environment. The Macintosh
+  file should be stored in MacBinary, AppleSingle, AppleDouble, or BinHex
+  format, or as a raw resource fork. Note that t1unmac does not have to run on
+  a Macintosh.
+
+* **t1mac**: Creates a Macintosh Type 1 file from a PFA or PFB-format Type 1
+  font. Writes the Macintosh file in MacBinary, AppleSingle, AppleDouble, or
+  BinHex format, or as a raw resource fork. WARNING: This will not suffice to
+  use the new font on a Macintosh, as Macintoshes cannot read raw Type 1
+  fonts. You will need to create a font suitcase containing bitmap fonts if
+  you do not have such a suitcase for the font already. T1utils cannot help
+  you do this.
+
+Installation
+------------
+
+You need an ANSI C compiler, such as gcc.
+
+Just type `./configure`, then `make`. `make install` will build and install
+the utilities and their manual pages.
+
+`./configure` accepts the usual options. See `INSTALL` for more details. The
+most commonly used option is `--prefix`, which can be used to install the
+utilities in a place other than /usr/local.
+
+Copyright and license
+---------------------
+
+The original t1utils were (c) 1992 I. Lee Hetherington, <ilh at lcs.mit.edu>.
+Changes since version 1.2 are (c) 1998-2017 Eddie Kohler. Distribution is
+under the Click LICENSE, a BSD-like license described in the LICENSE file in
+this directory.
+
+Note that these tools should not be used to illegally copy Type 1 font
+programs. Typeface design is an intricate art that should be rewarded.
+
+Eddie Kohler, ekohler at gmail.com

Modified: trunk/Build/source/utils/t1utils/t1utils-src/clp.c
===================================================================
--- trunk/Build/source/utils/t1utils/t1utils-src/clp.c	2017-08-28 00:21:36 UTC (rev 45149)
+++ trunk/Build/source/utils/t1utils/t1utils-src/clp.c	2017-08-28 06:43:57 UTC (rev 45150)
@@ -2,18 +2,22 @@
 /* clp.c - Complete source code for CLP.
  * This file is part of CLP, the command line parser package.
  *
- * Copyright (c) 1997-2012 Eddie Kohler, ekohler at gmail.com
+ * Copyright (c) 1997-2014 Eddie Kohler, ekohler at gmail.com
  *
+ * CLP is free software. It is distributed under the GNU General Public
+ * License, Version 2, or, alternatively and at your discretion, under the
+ * more permissive (BSD-like) Click LICENSE file as described below.
+ *
  * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, subject to the conditions
- * listed in the Click LICENSE file, which is available in full at
- * http://www.pdos.lcs.mit.edu/click/license.html. The conditions include: you
- * must preserve this copyright notice, and you cannot mention the copyright
- * holders in advertising related to the Software without their permission.
- * The Software is provided WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED. This
- * notice is a summary of the Click LICENSE file; the license in that file is
- * legally binding. */
+ * copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, subject to the
+ * conditions listed in the Click LICENSE file, which is available in full at
+ * http://github.com/kohler/click/blob/master/LICENSE. The conditions
+ * include: you must preserve this copyright notice, and you cannot mention
+ * the copyright holders in advertising related to the Software without
+ * their permission. The Software is provided WITHOUT ANY WARRANTY, EXPRESS
+ * OR IMPLIED. This notice is a summary of the Click LICENSE file; the
+ * license in that file is binding. */
 
 #ifdef HAVE_CONFIG_H
 # include <config.h>
@@ -25,11 +29,20 @@
 #include <assert.h>
 #include <stdarg.h>
 #include <ctype.h>
+#if HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#if HAVE_INTTYPES_H || !defined(HAVE_CONFIG_H)
+# include <inttypes.h>
+#endif
 
-/* By default, assume we have strtoul. */
-#if !defined(HAVE_STRTOUL) && !defined(HAVE_CONFIG_H)
+/* By default, assume we have inttypes.h, strtoul, and uintptr_t. */
+#if !HAVE_STRTOUL && !defined(HAVE_CONFIG_H)
 # define HAVE_STRTOUL 1
 #endif
+#if !HAVE_UINTPTR_T && !HAVE_INTTYPES_H && defined(HAVE_CONFIG_H)
+typedef unsigned long uintptr_t;
+#endif
 
 #ifdef __cplusplus
 extern "C" {
@@ -39,7 +52,7 @@
 /** @file clp.h
  * @brief Functions for parsing command line options.
  *
- * The CLP functions are used to parse command line arugments into options.
+ * The CLP functions are used to parse command line arguments into options.
  * It automatically handles value parsing, error messages, long options with
  * minimum prefix matching, short options, and negated options.
  *
@@ -222,17 +235,24 @@
 
 
 typedef struct Clp_StringList {
-
     Clp_Option *items;
     Clp_InternOption *iopt;
     int nitems;
 
-    int allow_int;
+    unsigned char allow_int;
+    unsigned char val_long;
     int nitems_invalid_report;
-
 } Clp_StringList;
 
 
+static const Clp_Option clp_option_sentinel[] = {
+    {"", 0, Clp_NotOption, 0, 0},
+    {"", 0, Clp_Done, 0, 0},
+    {"", 0, Clp_BadOption, 0, 0},
+    {"", 0, Clp_Error, 0, 0}
+};
+
+
 static int parse_string(Clp_Parser *, const char *, int, void *);
 static int parse_int(Clp_Parser *, const char *, int, void *);
 static int parse_bool(Clp_Parser *, const char *, int, void *);
@@ -430,6 +450,18 @@
     }
 }
 
+static void
+calculate_lmm(Clp_Parser *clp, const Clp_Option *opt, Clp_InternOption *iopt, int nopt)
+{
+    int i, j;
+    for (i = 0; i < nopt; ++i) {
+	iopt[i].lmmpos = iopt[i].lmmneg = 1;
+	iopt[i].lmmpos_short = iopt[i].lmmneg_short = 0;
+	for (j = 0; j < nopt; ++j)
+	    compare_options(clp, &opt[i], &iopt[i], &opt[j], &iopt[j]);
+    }
+}
+
 /** @param argc number of arguments
  * @param argv argument array
  * @param nopt number of option definitions
@@ -451,7 +483,8 @@
  * one of the substrings "UTF-8", "UTF8", or "utf8".  Override this with
  * Clp_SetUTF8().</li>
  * <li>The Clp_ValString, Clp_ValStringNotOption, Clp_ValInt, Clp_ValUnsigned,
- * Clp_ValBool, and Clp_ValDouble types are installed.</li>
+ * Clp_ValLong, Clp_ValUnsignedLong, Clp_ValBool, and Clp_ValDouble types are
+ * installed.</li>
  * <li>Errors are reported to standard error.</li>
  * </ul>
  *
@@ -476,7 +509,7 @@
     if (!clp || !cli || !iopt || !cli->valtype)
 	goto failed;
 
-    clp->opt = -1;
+    clp->option = &clp_option_sentinel[-Clp_Done];
     clp->negated = 0;
     clp->have_val = 0;
     clp->vstr = 0;
@@ -514,8 +547,10 @@
     cli->nvaltype = 0;
     Clp_AddType(clp, Clp_ValString, 0, parse_string, 0);
     Clp_AddType(clp, Clp_ValStringNotOption, Clp_DisallowOptions, parse_string, 0);
-    Clp_AddType(clp, Clp_ValInt, 0, parse_int, 0);
-    Clp_AddType(clp, Clp_ValUnsigned, 0, parse_int, (void *)cli);
+    Clp_AddType(clp, Clp_ValInt, 0, parse_int, (void*) (uintptr_t) 0);
+    Clp_AddType(clp, Clp_ValUnsigned, 0, parse_int, (void*) (uintptr_t) 1);
+    Clp_AddType(clp, Clp_ValLong, 0, parse_int, (void*) (uintptr_t) 2);
+    Clp_AddType(clp, Clp_ValUnsignedLong, 0, parse_int, (void*) (uintptr_t) 3);
     Clp_AddType(clp, Clp_ValBool, 0, parse_bool, 0);
     Clp_AddType(clp, Clp_ValDouble, 0, parse_double, 0);
 
@@ -599,15 +634,9 @@
 Clp_SetUTF8(Clp_Parser *clp, int utf8)
 {
     Clp_Internal *cli = clp->internal;
-    int i, j, old_utf8 = cli->utf8;
+    int old_utf8 = cli->utf8;
     cli->utf8 = utf8;
-    for (i = 0; i < cli->nopt; ++i) {
-	cli->iopt[i].lmmpos = cli->iopt[i].lmmneg = 1;
-	cli->iopt[i].lmmpos_short = cli->iopt[i].lmmneg_short = 0;
-	for (j = 0; j < cli->nopt; ++j)
-	    compare_options(clp, &cli->opt[i], &cli->iopt[i],
-			    &cli->opt[j], &cli->iopt[j]);
-    }
+    calculate_lmm(clp, cli->opt, cli->iopt, cli->nopt);
     return old_utf8;
 }
 
@@ -679,7 +708,7 @@
 int
 Clp_SetOptionChar(Clp_Parser *clp, int c, int type)
 {
-    int i, j, long1pos, long1neg;
+    int i, long1pos, long1neg;
     int old = Clp_OptionChar(clp, c);
     Clp_Internal *cli = clp->internal;
 
@@ -718,13 +747,7 @@
 	/* Must recheck option set */
 	cli->long1pos = long1pos;
 	cli->long1neg = long1neg;
-	for (i = 0; i < cli->nopt; ++i) {
-	    cli->iopt[i].lmmpos = cli->iopt[i].lmmneg = 1;
-	    cli->iopt[i].lmmpos_short = cli->iopt[i].lmmneg_short = 0;
-	    for (j = 0; j < cli->nopt; ++j)
-		compare_options(clp, &cli->opt[i], &cli->iopt[i],
-				&cli->opt[j], &cli->iopt[j]);
-	}
+	calculate_lmm(clp, cli->opt, cli->iopt, cli->nopt);
     }
 
     return old;
@@ -762,7 +785,7 @@
 {
     Clp_Internal *cli = clp->internal;
     Clp_InternOption *iopt;
-    int i, j;
+    int i;
     static unsigned opt_generation = 0;
 
     if (nopt > cli->nopt) {
@@ -780,7 +803,9 @@
     cli->current_option = -1;
 
     /* Massage the options to make them usable */
-    for (i = 0; i < nopt; i++) {
+    for (i = 0; i < nopt; ++i) {
+	memset(&iopt[i], 0, sizeof(iopt[i]));
+
 	/* Ignore negative option_ids, which are internal to CLP */
 	if (opt[i].option_id < 0) {
 	    Clp_OptionError(clp, "CLP internal error: option %d has negative option_id", i);
@@ -819,12 +844,7 @@
     }
 
     /* Check option set */
-    for (i = 0; i < nopt; ++i) {
-	iopt[i].lmmpos = iopt[i].lmmneg = 1;
-	iopt[i].lmmpos_short = iopt[i].lmmneg_short = 0;
-	for (j = 0; j < nopt; ++j)
-	    compare_options(clp, &opt[i], &iopt[i], &opt[j], &iopt[j]);
-    }
+    calculate_lmm(clp, opt, iopt, nopt);
 
     return 0;
 }
@@ -1072,16 +1092,17 @@
 }
 
 static int
-parse_int(Clp_Parser *clp, const char *arg, int complain, void *user_data)
+parse_int(Clp_Parser* clp, const char* arg, int complain, void* user_data)
 {
     const char *val;
     char *temp;
+    uintptr_t type = (uintptr_t) user_data;
     if (*arg == 0 || isspace((unsigned char) *arg)
-	|| (user_data != 0 && *arg == '-'))
+	|| ((type & 1) && *arg == '-'))
 	val = arg;
-    else if (user_data != 0) {	/* unsigned */
+    else if (type & 1) { /* unsigned */
 #if HAVE_STRTOUL
-	clp->val.u = strtoul(arg, &temp, 0);
+	clp->val.ul = strtoul(arg, &temp, 0);
 	val = temp;
 #else
 	/* don't bother really trying to do it right */
@@ -1088,23 +1109,27 @@
 	if (arg[0] == '-')
 	    val = arg;
 	else {
-	    clp->val.u = strtol(arg, &temp, 0);
+	    clp->val.l = strtol(arg, &temp, 0);
 	    val = temp;
 	}
 #endif
     } else {
-	clp->val.i = strtol(arg, &temp, 0);
+	clp->val.l = strtol(arg, &temp, 0);
 	val = temp;
     }
+    if (type <= 1)
+        clp->val.u = (unsigned) clp->val.ul;
     if (*arg != 0 && *val == 0)
 	return 1;
-    else if (complain) {
-	const char *message = user_data != 0
-	    ? "%<%O%> expects a nonnegative integer, not %<%s%>"
-	    : "%<%O%> expects an integer, not %<%s%>";
-	return Clp_OptionError(clp, message, arg);
-    } else
-	return 0;
+    else {
+        if (complain) {
+            const char *message = type & 1
+                ? "%<%O%> expects a nonnegative integer, not %<%s%>"
+                : "%<%O%> expects an integer, not %<%s%>";
+            Clp_OptionError(clp, message, arg);
+        }
+        return 0;
+    }
 }
 
 static int
@@ -1121,10 +1146,11 @@
     }
     if (*arg != 0 && *val == 0)
 	return 1;
-    else if (complain)
-	return Clp_OptionError(clp, "%<%O%> expects a real number, not %<%s%>", arg);
-    else
+    else {
+        if (complain)
+            Clp_OptionError(clp, "%<%O%> expects a real number, not %<%s%>", arg);
 	return 0;
+    }
 }
 
 static int
@@ -1176,20 +1202,19 @@
 	 &ambiguous, ambiguous_values);
     if (idx >= 0) {
 	clp->val.i = sl->items[idx].option_id;
-	return 1;
+        if (sl->val_long)
+            clp->val.l = clp->val.i;
+        return 1;
     }
 
     if (sl->allow_int) {
-	if (parse_int(clp, arg, 0, 0))
+	if (parse_int(clp, arg, 0, (void*) (uintptr_t) (sl->val_long ? 2 : 0)))
 	    return 1;
     }
 
     if (complain) {
-	const char *complaint;
-	if (ambiguous)
-	    complaint = "ambiguous value %<%s%> for option %<%O%>";
-	else {
-	    complaint = "unknown value %<%s%> for option %<%O%>";
+	const char *complaint = (ambiguous ? "ambiguous" : "invalid");
+	if (!ambiguous) {
 	    ambiguous = sl->nitems_invalid_report;
 	    for (idx = 0; idx < ambiguous; idx++)
 		ambiguous_values[idx] = idx;
@@ -1196,7 +1221,7 @@
 	}
 	return ambiguity_error
 	    (clp, ambiguous, ambiguous_values, sl->items, sl->iopt,
-	     "", complaint, arg);
+	     "", "option %<%V%> is %s", complaint);
     } else
 	return 0;
 }
@@ -1206,7 +1231,7 @@
 finish_string_list(Clp_Parser *clp, int val_type, int flags,
 		   Clp_Option *items, int nitems, int itemscap)
 {
-    int i, j;
+    int i;
     Clp_StringList *clsl = (Clp_StringList *)malloc(sizeof(Clp_StringList));
     Clp_InternOption *iopt = (Clp_InternOption *)malloc(sizeof(Clp_InternOption) * nitems);
     if (!clsl || !iopt)
@@ -1216,6 +1241,7 @@
     clsl->iopt = iopt;
     clsl->nitems = nitems;
     clsl->allow_int = (flags & Clp_AllowNumbers) != 0;
+    clsl->val_long = (flags & Clp_StringListLong) != 0;
 
     if (nitems < MAX_AMBIGUOUS_VALUES && nitems < itemscap && clsl->allow_int) {
 	items[nitems].long_name = "any integer";
@@ -1228,12 +1254,8 @@
     for (i = 0; i < nitems; i++) {
 	iopt[i].ilong = iopt[i].ipos = 1;
 	iopt[i].ishort = iopt[i].ineg = iopt[i].ilongoff = iopt[i].iprefmatch = 0;
-	iopt[i].lmmpos = 1;
-	iopt[i].lmmpos_short = 0;
     }
-    for (i = 0; i < nitems; i++)
-	for (j = 0; j < nitems; j++)
-	    compare_options(clp, &items[i], &iopt[i], &items[j], &iopt[j]);
+    calculate_lmm(clp, items, iopt, nitems);
 
     if (Clp_AddType(clp, val_type, 0, parse_string_list, clsl) >= 0)
 	return 0;
@@ -1290,7 +1312,12 @@
 	char *name = va_arg(val, char *);
 	if (!name)
 	    break;
-	value = va_arg(val, int);
+        if (flags & Clp_StringListLong) {
+            long lvalue = va_arg(val, long);
+            value = (int) lvalue;
+            assert(value == lvalue);
+        } else
+            value = va_arg(val, int);
 
 	if (nitems >= itemscap) {
 	    Clp_Option *new_items;
@@ -1768,8 +1795,10 @@
 
     for (i = 0; i < cli->nopt; i++)
 	if (iopt[i].ishort && opt[i].short_name == c
-	    && (clp->negated ? iopt[i].ineg : iopt[i].ipos))
+            && (!clp->negated || iopt[i].ineg)) {
+            clp->negated = clp->negated || !iopt[i].ipos;
 	    return i;
+        }
 
     return -1;
 }
@@ -1815,7 +1844,7 @@
  * </dl>
  *
  * The parsed argument is shifted off the argument list, so that sequential
- * calls to Clp_Next() step through the arugment list.
+ * calls to Clp_Next() step through the argument list.
  */
 int
 Clp_Next(Clp_Parser *clp)
@@ -1833,8 +1862,9 @@
     /* Get the next argument or option */
     if (!next_argument(clp, cli->option_processing ? 0 : 2)) {
 	clp->val.s = clp->vstr;
-	clp->opt = clp->have_val ? Clp_NotOption : Clp_Done;
-	return clp->opt;
+	optno = clp->have_val ? Clp_NotOption : Clp_Done;
+	clp->option = &clp_option_sentinel[-optno];
+	return optno;
     }
 
     clp->negated = cli->whole_negated;
@@ -1872,7 +1902,8 @@
 	    Clp_OptionError(clp, "unrecognized option %<%s%s%>",
 			    cli->option_chars, cli->xtext);
 
-	return (clp->opt = Clp_BadOption);
+	clp->option = &clp_option_sentinel[-Clp_BadOption];
+	return Clp_BadOption;
     }
 
     /* Set the current option */
@@ -1885,20 +1916,27 @@
 	|| (!cli->iopt[optno].imandatory && !cli->iopt[optno].ioptional)) {
 	if (clp->have_val) {
 	    Clp_OptionError(clp, "%<%O%> can%,t take an argument");
-	    clp->opt = Clp_BadOption;
-	} else
-	    clp->opt = cli->opt[optno].option_id;
-	return clp->opt;
+	    clp->option = &clp_option_sentinel[-Clp_BadOption];
+	    return Clp_BadOption;
+	} else {
+	    clp->option = &cli->opt[optno];
+	    return cli->opt[optno].option_id;
+	}
     }
 
     /* Get an argument if we need one, or if it's optional */
     /* Sanity-check the argument type. */
     opt = &cli->opt[optno];
-    if (opt->val_type <= 0)
-	return (clp->opt = Clp_Error);
+    if (opt->val_type <= 0) {
+	clp->option = &clp_option_sentinel[-Clp_Error];
+	return Clp_Error;
+    }
     vtpos = val_type_binsearch(cli, opt->val_type);
-    if (vtpos == cli->nvaltype || cli->valtype[vtpos].val_type != opt->val_type)
-	return (clp->opt = Clp_Error);
+    if (vtpos == cli->nvaltype
+	|| cli->valtype[vtpos].val_type != opt->val_type) {
+	clp->option = &clp_option_sentinel[-Clp_Error];
+	return Clp_Error;
+    }
 
     /* complain == 1 only if the argument was explicitly given,
        or it is mandatory. */
@@ -1918,31 +1956,34 @@
 		Clp_OptionError(clp, "%<%O%> requires a non-option argument");
 	    else
 		Clp_OptionError(clp, "%<%O%> requires an argument");
-	    return (clp->opt = Clp_BadOption);
+	    clp->option = &clp_option_sentinel[-Clp_BadOption];
+	    return Clp_BadOption;
 	}
 
     } else if (cli->is_short && !clp->have_val
-	       && cli->xtext[clp_utf8_charlen(cli, cli->xtext)]) {
+	       && cli->xtext[clp_utf8_charlen(cli, cli->xtext)])
 	/* The -[option]argument case:
 	   Assume that the rest of the current string is the argument. */
 	next_argument(clp, 1);
-	complain = 1;
-    }
 
     /* Parse the argument */
+    clp->option = opt;
     if (clp->have_val) {
 	Clp_ValType *atr = &cli->valtype[vtpos];
 	if (atr->func(clp, clp->vstr, complain, atr->user_data) <= 0) {
 	    /* parser failed */
 	    clp->have_val = 0;
-	    if (complain)
-		return (clp->opt = Clp_BadOption);
-	    else
+	    if (complain) {
+		clp->option = &clp_option_sentinel[-Clp_BadOption];
+		return Clp_BadOption;
+	    } else {
 		Clp_RestoreParser(clp, &clpsave);
+                clp->option = opt;
+            }
 	}
     }
 
-    return (clp->opt = opt->option_id);
+    return opt->option_id;
 }
 
 
@@ -1972,59 +2013,51 @@
  **/
 
 typedef struct Clp_BuildString {
-    char *text;
-    char *pos;
-    int capacity;
-    int bad;
+    char* data;
+    char* pos;
+    char* end_data;
+    char buf[256];
 } Clp_BuildString;
 
-static Clp_BuildString *
-new_build_string(void)
-{
-    Clp_BuildString *bs = (Clp_BuildString *)malloc(sizeof(Clp_BuildString));
-    if (!bs) goto bad;
-    bs->text = (char *)malloc(256);
-    if (!bs->text) goto bad;
-    bs->pos = bs->text;
-    bs->capacity = 256;
-    bs->bad = 0;
-    return bs;
+static void build_string_program_prefix(Clp_BuildString* bs,
+                                        const Clp_Parser* clp);
 
-  bad:
-    if (bs) free(bs);
-    return 0;
+static void build_string_init(Clp_BuildString* bs, Clp_Parser* clp) {
+    bs->data = bs->pos = bs->buf;
+    bs->end_data = &bs->buf[sizeof(bs->buf)];
+    if (clp)
+        build_string_program_prefix(bs, clp);
 }
 
-static void
-free_build_string(Clp_BuildString *bs)
-{
-    if (bs) free(bs->text);
-    free(bs);
+static void build_string_cleanup(Clp_BuildString* bs) {
+    if (bs->data != bs->buf)
+        free(bs->data);
 }
 
-static int
-grow_build_string(Clp_BuildString *bs, int want)
-{
-    char *new_text;
-    int ipos = bs->pos - bs->text;
-    int new_capacity = bs->capacity;
-    while (want >= new_capacity)
-	new_capacity *= 2;
-    new_text = (char *)realloc(bs->text, new_capacity);
-    if (!new_text) {
-	bs->bad = 1;
-	return 0;
+static int build_string_grow(Clp_BuildString* bs, size_t want) {
+    size_t ipos = bs->pos - bs->data, ncap;
+    if (!bs->pos)
+        return 0;
+    for (ncap = (bs->end_data - bs->data) << 1; ncap < want; ncap *= 2)
+        /* nada */;
+    if (bs->data == bs->buf) {
+        if ((bs->data = (char*) malloc(ncap)))
+            memcpy(bs->data, bs->buf, bs->pos - bs->buf);
+    } else
+        bs->data = (char*) realloc(bs->data, ncap);
+    if (!bs->data) {
+        bs->pos = bs->end_data = bs->data;
+        return 0;
     } else {
-	bs->text = new_text;
-	bs->pos = bs->text + ipos;
-	bs->capacity = new_capacity;
-	return 1;
+        bs->pos = bs->data + ipos;
+        bs->end_data = bs->data + ncap;
+        return 1;
     }
 }
 
-#define ENSURE_BUILD_STRING(bs, space) \
-  ((((bs)->pos - (bs)->text) + (space) >= (bs)->capacity)		\
-   || grow_build_string((bs), ((bs)->pos - (bs)->text) + (space)))
+#define ENSURE_BUILD_STRING(bs, space)                                  \
+    ((((bs)->end_data - (bs)->pos) >= (space))                          \
+     || build_string_grow((bs), (bs)->pos - (bs)->data + (space)))
 
 static void
 append_build_string(Clp_BuildString *bs, const char *s, int l)
@@ -2037,24 +2070,25 @@
     }
 }
 
+static void
+build_string_program_prefix(Clp_BuildString* bs, const Clp_Parser* clp)
+{
+    const Clp_Internal* cli = clp->internal;
+    if (cli->program_name && cli->program_name[0]) {
+	append_build_string(bs, cli->program_name, -1);
+	append_build_string(bs, ": ", 2);
+    }
+}
 
-static Clp_BuildString *
-Clp_VaOptionError(Clp_Parser *clp, Clp_BuildString *bs,
-		  const char *fmt, va_list val)
+
+static void
+Clp_vbsprintf(Clp_Parser *clp, Clp_BuildString *bs,
+              const char *fmt, va_list val)
 {
     Clp_Internal *cli = clp->internal;
     const char *percent;
     int c;
 
-    if (!bs)
-	bs = new_build_string();
-    if (!bs)
-	return 0;
-    if (cli->program_name && cli->program_name[0]) {
-	append_build_string(bs, cli->program_name, -1);
-	append_build_string(bs, ": ", 2);
-    }
-
     for (percent = strchr(fmt, '%'); percent; percent = strchr(fmt, '%')) {
 	append_build_string(bs, fmt, percent - fmt);
 	switch (*++percent) {
@@ -2061,10 +2095,7 @@
 
 	  case 's': {
 	      const char *s = va_arg(val, const char *);
-	      if (s)
-		  append_build_string(bs, s, -1);
-	      else
-		  append_build_string(bs, "(null)", 6);
+              append_build_string(bs, s ? s : "(null)", -1);
 	      break;
 	  }
 
@@ -2109,29 +2140,37 @@
 	      break;
 	  }
 
-	  case 'O': {
-	      int optno = cli->current_option;
-	      const Clp_Option *opt = &cli->opt[optno];
-	      if (optno < 0)
-		  append_build_string(bs, "(no current option!)", -1);
-	      else if (cli->current_short) {
-		  append_build_string(bs, cli->option_chars, -1);
-		  if (ENSURE_BUILD_STRING(bs, 5)) {
-		      if (cli->utf8)
-			  bs->pos = encode_utf8(bs->pos, 5, opt->short_name);
-		      else
-			  *bs->pos++ = opt->short_name;
-		  }
-	      } else if (cli->negated_by_no) {
-		  append_build_string(bs, cli->option_chars, -1);
-		  append_build_string(bs, "no-", 3);
-		  append_build_string(bs, opt->long_name + cli->iopt[optno].ilongoff, -1);
-	      } else {
-		  append_build_string(bs, cli->option_chars, -1);
-		  append_build_string(bs, opt->long_name + cli->iopt[optno].ilongoff, -1);
-	      }
-	      break;
-	  }
+        case 'O':
+        case 'V': {
+            int optno = cli->current_option;
+            const Clp_Option *opt = &cli->opt[optno];
+            if (optno < 0)
+                append_build_string(bs, "(no current option!)", -1);
+            else if (cli->current_short) {
+                append_build_string(bs, cli->option_chars, -1);
+                if (ENSURE_BUILD_STRING(bs, 5)) {
+                    if (cli->utf8)
+                        bs->pos = encode_utf8(bs->pos, 5, opt->short_name);
+                    else
+                        *bs->pos++ = opt->short_name;
+                }
+            } else if (cli->negated_by_no) {
+                append_build_string(bs, cli->option_chars, -1);
+                append_build_string(bs, "no-", 3);
+                append_build_string(bs, opt->long_name + cli->iopt[optno].ilongoff, -1);
+            } else {
+                append_build_string(bs, cli->option_chars, -1);
+                append_build_string(bs, opt->long_name + cli->iopt[optno].ilongoff, -1);
+            }
+            if (optno >= 0 && clp->have_val && *percent == 'V') {
+                if (cli->current_short && !cli->iopt[optno].ioptional)
+                    append_build_string(bs, " ", 1);
+                else if (!cli->current_short)
+                    append_build_string(bs, "=", 1);
+                append_build_string(bs, clp->vstr, -1);
+            }
+            break;
+        }
 
 	  case '%':
 	    if (ENSURE_BUILD_STRING(bs, 1))
@@ -2149,6 +2188,10 @@
 	    append_build_string(bs, (cli->utf8 ? "\342\200\231" : "'"), -1);
 	    break;
 
+        case 0:
+            append_build_string(bs, "%", 1);
+            goto done;
+
 	  default:
 	    if (ENSURE_BUILD_STRING(bs, 2)) {
 		*bs->pos++ = '%';
@@ -2160,22 +2203,24 @@
 	fmt = ++percent;
     }
 
+ done:
     append_build_string(bs, fmt, -1);
-    append_build_string(bs, "\n", 1);
+}
 
-    return bs;
+static const char* build_string_text(Clp_BuildString* bs, int report_oom) {
+    if (bs->pos) {
+        *bs->pos = 0;
+        return bs->data;
+    } else if (report_oom)
+        return "out of memory\n";
+    else
+        return NULL;
 }
 
 static void
 do_error(Clp_Parser *clp, Clp_BuildString *bs)
 {
-    const char *text;
-    if (bs && !bs->bad) {
-	*bs->pos = 0;
-	text = bs->text;
-    } else
-	text = "out of memory\n";
-
+    const char *text = build_string_text(bs, 1);
     if (clp->internal->error_handler != 0)
 	(*clp->internal->error_handler)(clp, text);
     else
@@ -2185,9 +2230,10 @@
 /** @param clp the parser
  * @param format error format
  *
- * Format an error message from @a format and any additional arguments in the
- * ellipsis.  The resulting error string by printing it to standard error or
- * passing it to Clp_SetErrorHandler.
+ * Format an error message from @a format and any additional arguments in
+ * the ellipsis. The resulting error string is then printed to standard
+ * error (or passed to the error handler specified by Clp_SetErrorHandler).
+ * Returns the number of characters printed.
  *
  * The following format characters are accepted:
  *
@@ -2208,6 +2254,9 @@
  * <dt><tt>%</tt><tt>O</tt></dt>
  * <dd>The current option.  No values are read from the argument list; the
  * current option is defined in the Clp_Parser object itself.</dd>
+ * <dt><tt>%</tt><tt>V</tt></dt>
+ * <dd>Like <tt>%</tt><tt>O</tt>, but also includes the current value,
+ * if any.</dd>
  * <dt><tt>%%</tt></dt>
  * <dd>Prints a percent character.</dd>
  * <dt><tt>%</tt><tt><</tt></dt>
@@ -2229,16 +2278,96 @@
 int
 Clp_OptionError(Clp_Parser *clp, const char *format, ...)
 {
-    Clp_BuildString *bs;
+    Clp_BuildString bs;
     va_list val;
     va_start(val, format);
-    bs = Clp_VaOptionError(clp, 0, format, val);
+    build_string_init(&bs, clp);
+    Clp_vbsprintf(clp, &bs, format, val);
+    append_build_string(&bs, "\n", 1);
     va_end(val);
-    do_error(clp, bs);
-    free_build_string(bs);
-    return 0;
+    do_error(clp, &bs);
+    build_string_cleanup(&bs);
+    return bs.pos - bs.data;
 }
 
+/** @param clp the parser
+ * @param f output file
+ * @param format error format
+ *
+ * Format an error message using @a format and additional arguments in the
+ * ellipsis, according to the Clp_OptionError formatting conventions. The
+ * resulting message is written to @a f.
+ *
+ * @sa Clp_OptionError */
+int
+Clp_fprintf(Clp_Parser* clp, FILE* f, const char* format, ...)
+{
+    Clp_BuildString bs;
+    va_list val;
+    va_start(val, format);
+    build_string_init(&bs, NULL);
+    Clp_vbsprintf(clp, &bs, format, val);
+    va_end(val);
+    if (bs.pos != bs.data)
+        fwrite(bs.data, 1, bs.pos - bs.data, f);
+    build_string_cleanup(&bs);
+    return bs.pos - bs.data;
+}
+
+/** @param clp the parser
+ * @param f output file
+ * @param format error format
+ * @param val arguments
+ *
+ * Format an error message using @a format and @a val, according to the
+ * Clp_OptionError formatting conventions. The resulting message is written
+ * to @a f.
+ *
+ * @sa Clp_OptionError */
+int
+Clp_vfprintf(Clp_Parser* clp, FILE* f, const char* format, va_list val)
+{
+    Clp_BuildString bs;
+    build_string_init(&bs, NULL);
+    Clp_vbsprintf(clp, &bs, format, val);
+    if (bs.pos != bs.data)
+        fwrite(bs.data, 1, bs.pos - bs.data, f);
+    build_string_cleanup(&bs);
+    return bs.pos - bs.data;
+}
+
+/** @param clp the parser
+ * @param str output string
+ * @param size size of output string
+ * @param format error format
+ *
+ * Format an error message from @a format and any additional arguments in
+ * the ellipsis, according to the Clp_OptionError formatting conventions.
+ * The resulting string is written to @a str. At most @a size characters are
+ * written to @a str, including a terminating null byte. The return value is
+ * the number of characters that would have been written (excluding the
+ * terminating null byte) if @a size were large enough to contain the entire
+ * string.
+ *
+ * @sa Clp_OptionError */
+int
+Clp_vsnprintf(Clp_Parser* clp, char* str, size_t size,
+              const char* format, va_list val)
+{
+    Clp_BuildString bs;
+    build_string_init(&bs, NULL);
+    Clp_vbsprintf(clp, &bs, format, val);
+    if ((size_t) (bs.pos - bs.data) < size) {
+        memcpy(str, bs.data, bs.pos - bs.data);
+        str[bs.pos - bs.data] = 0;
+    } else {
+        memcpy(str, bs.data, size - 1);
+        str[size - 1] = 0;
+    }
+    build_string_cleanup(&bs);
+    return bs.pos - bs.data;
+}
+
 static int
 ambiguity_error(Clp_Parser *clp, int ambiguous, int *ambiguous_values,
 		const Clp_Option *opt, const Clp_InternOption *iopt,
@@ -2245,18 +2374,17 @@
 		const char *prefix, const char *fmt, ...)
 {
     Clp_Internal *cli = clp->internal;
-    Clp_BuildString *bs;
+    Clp_BuildString bs;
     int i;
     va_list val;
+
     va_start(val, fmt);
-    bs = Clp_VaOptionError(clp, 0, fmt, val);
-    if (!bs) goto done;
+    build_string_init(&bs, clp);
+    Clp_vbsprintf(clp, &bs, fmt, val);
+    append_build_string(&bs, "\n", 1);
 
-    if (clp->internal->program_name && clp->internal->program_name[0]) {
-	append_build_string(bs, clp->internal->program_name, -1);
-	append_build_string(bs, ": ", 2);
-    }
-    append_build_string(bs, "(Possibilities are", -1);
+    build_string_program_prefix(&bs, clp);
+    append_build_string(&bs, "(Possibilities are", -1);
 
     for (i = 0; i < ambiguous && i < MAX_AMBIGUOUS_VALUES; i++) {
 	int value = ambiguous_values[i];
@@ -2264,26 +2392,25 @@
 	if (value < 0)
 	    value = -(value + 1), no_dash = "no-";
 	if (i == 0)
-	    append_build_string(bs, " ", 1);
+	    append_build_string(&bs, " ", 1);
 	else if (i == ambiguous - 1)
-	    append_build_string(bs, (i == 1 ? " and " : ", and "), -1);
+	    append_build_string(&bs, (i == 1 ? " and " : ", and "), -1);
 	else
-	    append_build_string(bs, ", ", 2);
-	append_build_string(bs, (cli->utf8 ? "\342\200\230" : "'"), -1);
-	append_build_string(bs, prefix, -1);
-	append_build_string(bs, no_dash, -1);
-	append_build_string(bs, opt[value].long_name + iopt[value].ilongoff, -1);
-	append_build_string(bs, (cli->utf8 ? "\342\200\231" : "'"), -1);
+	    append_build_string(&bs, ", ", 2);
+	append_build_string(&bs, (cli->utf8 ? "\342\200\230" : "'"), -1);
+	append_build_string(&bs, prefix, -1);
+	append_build_string(&bs, no_dash, -1);
+	append_build_string(&bs, opt[value].long_name + iopt[value].ilongoff, -1);
+	append_build_string(&bs, (cli->utf8 ? "\342\200\231" : "'"), -1);
     }
 
     if (ambiguous > MAX_AMBIGUOUS_VALUES)
-	append_build_string(bs, ", and others", -1);
-    append_build_string(bs, ".)\n", -1);
+	append_build_string(&bs, ", and others", -1);
+    append_build_string(&bs, ".)\n", -1);
     va_end(val);
 
-  done:
-    do_error(clp, bs);
-    free_build_string(bs);
+    do_error(clp, &bs);
+    build_string_cleanup(&bs);
     return 0;
 }
 
@@ -2355,6 +2482,22 @@
     return buf;
 }
 
+int
+Clp_IsLong(Clp_Parser *clp, const char *long_name)
+{
+    Clp_Internal *cli = clp->internal;
+    int optno = cli->current_option;
+    return optno >= 0 && strcmp(cli->opt[optno].long_name, long_name) == 0;
+}
+
+int
+Clp_IsShort(Clp_Parser *clp, int short_name)
+{
+    Clp_Internal *cli = clp->internal;
+    int optno = cli->current_option;
+    return optno >= 0 && cli->opt[optno].short_name == short_name;
+}
+
 #ifdef __cplusplus
 }
 #endif

Modified: trunk/Build/source/utils/t1utils/t1utils-src/config.h.in
===================================================================
--- trunk/Build/source/utils/t1utils/t1utils-src/config.h.in	2017-08-28 00:21:36 UTC (rev 45149)
+++ trunk/Build/source/utils/t1utils/t1utils-src/config.h.in	2017-08-28 06:43:57 UTC (rev 45150)
@@ -9,6 +9,9 @@
 /* Define to 1 if you have the <inttypes.h> header file. */
 #undef HAVE_INTTYPES_H
 
+/* Define to 1 if you have the `memmem' function. */
+#undef HAVE_MEMMEM
+
 /* Define to 1 if you have the <memory.h> header file. */
 #undef HAVE_MEMORY_H
 
@@ -89,9 +92,15 @@
 
 /* Prototype strerror if we don't have it. */
 #if !HAVE_STRERROR
-char *strerror(int errno);
+char* strerror(int errno);
 #endif
 
+/* Prototype memmem if we don't have it. */
+#if !HAVE_MEMMEM
+void* memmem(const void* haystack, size_t haystack_len,
+             const void* needle, size_t needle_len);
+#endif
+
 #ifdef __cplusplus
 }
 /* Get rid of a possible inline macro under C++. */

Modified: trunk/Build/source/utils/t1utils/t1utils-src/configure.ac
===================================================================
--- trunk/Build/source/utils/t1utils/t1utils-src/configure.ac	2017-08-28 00:21:36 UTC (rev 45149)
+++ trunk/Build/source/utils/t1utils/t1utils-src/configure.ac	2017-08-28 06:43:57 UTC (rev 45150)
@@ -1,9 +1,8 @@
 dnl Process this file with autoconf to produce a configure script.
-AC_INIT([t1utils], [1.39])
+AC_INIT([t1utils], [1.41])
 AC_CONFIG_SRCDIR([t1ascii.c])
 AM_INIT_AUTOMAKE
 AC_CONFIG_HEADERS([config.h])
-AM_MAINTAINER_MODE
 
 AC_PROG_CC
 AC_C_CONST
@@ -19,7 +18,7 @@
 dnl strerror()?
 dnl
 
-AC_REPLACE_FUNCS([strerror])
+AC_REPLACE_FUNCS([strerror memmem])
 
 
 dnl
@@ -85,9 +84,15 @@
 
 /* Prototype strerror if we don't have it. */
 #if !HAVE_STRERROR
-char *strerror(int errno);
+char* strerror(int errno);
 #endif
 
+/* Prototype memmem if we don't have it. */
+#if !HAVE_MEMMEM
+void* memmem(const void* haystack, size_t haystack_len,
+             const void* needle, size_t needle_len);
+#endif
+
 #ifdef __cplusplus
 }
 /* Get rid of a possible inline macro under C++. */

Modified: trunk/Build/source/utils/t1utils/t1utils-src/include/lcdf/clp.h
===================================================================
--- trunk/Build/source/utils/t1utils/t1utils-src/include/lcdf/clp.h	2017-08-28 00:21:36 UTC (rev 45149)
+++ trunk/Build/source/utils/t1utils/t1utils-src/include/lcdf/clp.h	2017-08-28 06:43:57 UTC (rev 45150)
@@ -8,19 +8,26 @@
 /* clp.h - Public interface to CLP.
  * This file is part of CLP, the command line parser package.
  *
- * Copyright (c) 1997-2012 Eddie Kohler, ekohler at gmail.com
+ * Copyright (c) 1997-2014 Eddie Kohler, ekohler at gmail.com
  *
+ * CLP is free software. It is distributed under the GNU General Public
+ * License, Version 2, or, alternatively and at your discretion, under the
+ * more permissive (BSD-like) Click LICENSE file as described below.
+ *
  * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, subject to the conditions
- * listed in the Click LICENSE file, which is available in full at
- * http://www.pdos.lcs.mit.edu/click/license.html. The conditions include: you
- * must preserve this copyright notice, and you cannot mention the copyright
- * holders in advertising related to the Software without their permission.
- * The Software is provided WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED. This
- * notice is a summary of the Click LICENSE file; the license in that file is
- * legally binding. */
+ * copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, subject to the
+ * conditions listed in the Click LICENSE file, which is available in full at
+ * http://github.com/kohler/click/blob/master/LICENSE. The conditions
+ * include: you must preserve this copyright notice, and you cannot mention
+ * the copyright holders in advertising related to the Software without
+ * their permission. The Software is provided WITHOUT ANY WARRANTY, EXPRESS
+ * OR IMPLIED. This notice is a summary of the Click LICENSE file; the
+ * license in that file is binding. */
 
+#include <stdio.h>
+#include <stdarg.h>
+
 typedef struct Clp_Option Clp_Option;
 typedef struct Clp_Parser Clp_Parser;
 typedef struct Clp_ParserState Clp_ParserState;
@@ -65,7 +72,7 @@
 
 		Accepts an optional "+" or "-" sign, followed by one or more
 		digits.  The digits may be include a "0x" or "0X" prefix, for
-		a hexidecimal number, or a "0" prefix, for an octal number;
+		a hexadecimal number, or a "0" prefix, for an octal number;
 		otherwise it is decimal. */
 #define Clp_ValUnsigned		5	/**< @brief Option value is an
 					     unsigned int.
@@ -72,9 +79,13 @@
 
 		Accepts an optional "+" sign, followed by one or more
 		digits.  The digits may be include a "0x" or "0X" prefix, for
-		a hexidecimal number, or a "0" prefix, for an octal number;
+		a hexadecimal number, or a "0" prefix, for an octal number;
 		otherwise it is decimal. */
-#define Clp_ValDouble		6	/**< @brief Option value is a
+#define Clp_ValLong             6       /**< @brief Option value is a
+                                             signed long. */
+#define Clp_ValUnsignedLong     7       /**< @brief Option value is an
+                                             unsigned long. */
+#define Clp_ValDouble		8	/**< @brief Option value is a
 					     double.
 		Accepts a real number as defined by strtod(). */
 #define Clp_ValFirstUser	10	/**< @brief Value types >=
@@ -165,7 +176,7 @@
  * value types, and current arguments.
  * @sa Clp_NewParser, Clp_SetOptions, Clp_SetArguments */
 struct Clp_Parser {
-    int opt;			/**< The last option. */
+    const Clp_Option *option;	/**< The last option. */
 
     int negated;		/**< Whether the last option was negated. */
 
@@ -176,6 +187,8 @@
     union {
 	int i;
 	unsigned u;
+        long l;
+        unsigned long ul;
 	double d;
 	const char *s;
 	void *pv;
@@ -253,9 +266,11 @@
 
 
 #define Clp_AllowNumbers	(1<<0)	/**< @brief String list flag: allow
-					   explicit numbers.
+					     explicit numbers.
 
 		See Clp_AddStringListType() and Clp_AddStringListTypeVec(). */
+#define Clp_StringListLong      (1<<1)  /**< @brief String list flag: values
+                                             have long type. */
 
 /** @brief Define a new string list value type for @a clp. */
 int Clp_AddStringListTypeVec(Clp_Parser *clp, int val_type, int flags,
@@ -290,6 +305,16 @@
 /** @brief Report a parser error. */
 int Clp_OptionError(Clp_Parser *clp, const char *format, ...);
 
+/** @brief Format a message. */
+int Clp_vsnprintf(Clp_Parser* clp, char* str, size_t size,
+                  const char* format, va_list val);
+
+/** @brief Print a message. */
+int Clp_fprintf(Clp_Parser* clp, FILE* f, const char* format, ...);
+
+/** @brief Print a message. */
+int Clp_vfprintf(Clp_Parser* clp, FILE* f, const char* format, va_list val);
+
 /** @brief Extract the current option as a string. */
 int Clp_CurOptionNameBuf(Clp_Parser *clp, char *buf, int len);
 
@@ -296,6 +321,12 @@
 /** @brief Extract the current option as a string. */
 const char *Clp_CurOptionName(Clp_Parser *clp);
 
+/** @brief Test if the current option had long name @a name. */
+int Clp_IsLong(Clp_Parser *clp, const char *long_name);
+
+/** @brief Test if the current option had short name @a name. */
+int Clp_IsShort(Clp_Parser *clp, int short_name);
+
 #undef CLP_SENTINEL
 #ifdef __cplusplus
 }

Modified: trunk/Build/source/utils/t1utils/t1utils-src/include/lcdf/inttypes.h
===================================================================
--- trunk/Build/source/utils/t1utils/t1utils-src/include/lcdf/inttypes.h	2017-08-28 00:21:36 UTC (rev 45149)
+++ trunk/Build/source/utils/t1utils/t1utils-src/include/lcdf/inttypes.h	2017-08-28 06:43:57 UTC (rev 45150)
@@ -2,6 +2,8 @@
 #define LCDF_INTTYPES_H
 /* Define known-width integer types. */
 
+#include <stddef.h>
+
 #ifdef HAVE_INTTYPES_H
 # include <inttypes.h>
 #elif defined(HAVE_SYS_TYPES_H)

Modified: trunk/Build/source/utils/t1utils/t1utils-src/t1ascii.1
===================================================================
--- trunk/Build/source/utils/t1utils/t1utils-src/t1ascii.1	2017-08-28 00:21:36 UTC (rev 45149)
+++ trunk/Build/source/utils/t1utils/t1utils-src/t1ascii.1	2017-08-28 06:43:57 UTC (rev 45150)
@@ -1,4 +1,4 @@
-.ds V 1.39
+.ds V 1.41
 .de M
 .BR "\\$1" "(\\$2)\\$3"
 ..

Modified: trunk/Build/source/utils/t1utils/t1utils-src/t1ascii.c
===================================================================
--- trunk/Build/source/utils/t1utils/t1utils-src/t1ascii.c	2017-08-28 00:21:36 UTC (rev 45149)
+++ trunk/Build/source/utils/t1utils/t1utils-src/t1ascii.c	2017-08-28 06:43:57 UTC (rev 45150)
@@ -4,7 +4,7 @@
  * converts it to ASCII (PFA) format.
  *
  * Copyright (c) 1992 by I. Lee Hetherington, all rights reserved.
- * Copyright (c) 1998-2013 Eddie Kohler
+ * Copyright (c) 1998-2017 Eddie Kohler
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the
@@ -240,7 +240,7 @@
 
      case VERSION_OPT:
       printf("t1ascii (LCDF t1utils) %s\n", VERSION);
-      printf("Copyright (C) 1992-2010 I. Lee Hetherington, Eddie Kohler et al.\n\
+      printf("Copyright (C) 1992-2017 I. Lee Hetherington, Eddie Kohler et al.\n\
 This is free software; see the source for copying conditions.\n\
 There is NO warranty, not even for merchantability or fitness for a\n\
 particular purpose.\n");

Modified: trunk/Build/source/utils/t1utils/t1utils-src/t1asm.1
===================================================================
--- trunk/Build/source/utils/t1utils/t1utils-src/t1asm.1	2017-08-28 00:21:36 UTC (rev 45149)
+++ trunk/Build/source/utils/t1utils/t1utils-src/t1asm.1	2017-08-28 06:43:57 UTC (rev 45150)
@@ -1,4 +1,4 @@
-.ds V 1.39
+.ds V 1.41
 .de M
 .BR "\\$1" "(\\$2)\\$3"
 ..

Modified: trunk/Build/source/utils/t1utils/t1utils-src/t1asm.c
===================================================================
--- trunk/Build/source/utils/t1utils/t1utils-src/t1asm.c	2017-08-28 00:21:36 UTC (rev 45149)
+++ trunk/Build/source/utils/t1utils/t1utils-src/t1asm.c	2017-08-28 06:43:57 UTC (rev 45150)
@@ -1,4 +1,4 @@
-/* t1asm	-*- c-basic-offset: 2 -*-
+/* t1asm        -*- c-basic-offset: 2 -*-
  *
  * This program `assembles' Adobe Type-1 font programs in pseudo-PostScript
  * form into either PFB or PFA format.  The human readable/editable input is
@@ -8,7 +8,7 @@
  * file.
  *
  * Copyright (c) 1992 by I. Lee Hetherington, all rights reserved.
- * Copyright (c) 1998-2013 Eddie Kohler
+ * Copyright (c) 1998-2017 Eddie Kohler
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the
@@ -97,7 +97,8 @@
 
 /* decryption stuff */
 static uint16_t er, cr;
-static uint16_t c1 = 52845, c2 = 22719;
+static const uint32_t c1 = 52845;
+static const uint32_t c2 = 22719;
 
 /* table of charstring commands */
 static struct command {
@@ -104,69 +105,69 @@
   const char *name;
   int one, two;
 } command_table[] = {
-  { "abs", 12, 9 },		/* Type 2 */
-  { "add", 12, 10 },		/* Type 2 */
-  { "and", 12, 3 },		/* Type 2 */
-  { "blend", 16, -1 },		/* Type 2 */
-  { "callgsubr", 29, -1 },	/* Type 2 */
-  { "callother", 12, 16 },	/* Type 1 ONLY */
-  { "callothersubr", 12, 16 },	/* Type 1 ONLY */
+  { "abs", 12, 9 },             /* Type 2 */
+  { "add", 12, 10 },            /* Type 2 */
+  { "and", 12, 3 },             /* Type 2 */
+  { "blend", 16, -1 },          /* Type 2 */
+  { "callgsubr", 29, -1 },      /* Type 2 */
+  { "callother", 12, 16 },      /* Type 1 ONLY */
+  { "callothersubr", 12, 16 },  /* Type 1 ONLY */
   { "callsubr", 10, -1 },
-  { "closepath", 9, -1 },	/* Type 1 ONLY */
-  { "cntrmask", 20, -1 },	/* Type 2 */
+  { "closepath", 9, -1 },       /* Type 1 ONLY */
+  { "cntrmask", 20, -1 },       /* Type 2 */
   { "div", 12, 12 },
-  { "dotsection", 12, 0 },	/* Type 1 ONLY */
-  { "drop", 12, 18 },		/* Type 2 */
-  { "dup", 12, 27 },		/* Type 2 */
+  { "dotsection", 12, 0 },      /* Type 1 ONLY */
+  { "drop", 12, 18 },           /* Type 2 */
+  { "dup", 12, 27 },            /* Type 2 */
   { "endchar", 14, -1 },
-  { "eq", 12, 15 },		/* Type 2 */
-  { "error", 0, -1 },		/* special */
-  { "escape", 12, -1 },		/* special */
-  { "exch", 12, 28 },		/* Type 2 */
-  { "flex", 12, 35 },		/* Type 2 */
-  { "flex1", 12, 37 },		/* Type 2 */
-  { "get", 12, 21 },		/* Type 2 */
-  { "hflex", 12, 34 },		/* Type 2 */
-  { "hflex1", 12, 36 },		/* Type 2 */
-  { "hhcurveto", 27, -1 },	/* Type 2 */
-  { "hintmask", 19, -1 },	/* Type 2 */
+  { "eq", 12, 15 },             /* Type 2 */
+  { "error", 0, -1 },           /* special */
+  { "escape", 12, -1 },         /* special */
+  { "exch", 12, 28 },           /* Type 2 */
+  { "flex", 12, 35 },           /* Type 2 */
+  { "flex1", 12, 37 },          /* Type 2 */
+  { "get", 12, 21 },            /* Type 2 */
+  { "hflex", 12, 34 },          /* Type 2 */
+  { "hflex1", 12, 36 },         /* Type 2 */
+  { "hhcurveto", 27, -1 },      /* Type 2 */
+  { "hintmask", 19, -1 },       /* Type 2 */
   { "hlineto", 6, -1 },
   { "hmoveto", 22, -1 },
-  { "hsbw", 13, -1 },		/* Type 1 ONLY */
+  { "hsbw", 13, -1 },           /* Type 1 ONLY */
   { "hstem", 1, -1 },
-  { "hstem3", 12, 2 },		/* Type 1 ONLY */
-  { "hstemhm", 18, -1 },	/* Type 2 */
+  { "hstem3", 12, 2 },          /* Type 1 ONLY */
+  { "hstemhm", 18, -1 },        /* Type 2 */
   { "hvcurveto", 31, -1 },
-  { "ifelse", 12, 22 },		/* Type 2 */
-  { "index", 12, 29 },		/* Type 2 */
-  { "load", 12, 13 },		/* Type 2 */
-  { "mul", 12, 24 },		/* Type 2 */
-  { "neg", 12, 14 },		/* Type 2 */
-  { "not", 12, 5 },		/* Type 2 */
-  { "or", 12, 4 },		/* Type 2 */
-  { "pop", 12, 17 },		/* Type 1 ONLY */
-  { "put", 12, 20 },		/* Type 2 */
-  { "random", 12, 23 },		/* Type 2 */
-  { "rcurveline", 24, -1 },	/* Type 2 */
+  { "ifelse", 12, 22 },         /* Type 2 */
+  { "index", 12, 29 },          /* Type 2 */
+  { "load", 12, 13 },           /* Type 2 */
+  { "mul", 12, 24 },            /* Type 2 */
+  { "neg", 12, 14 },            /* Type 2 */
+  { "not", 12, 5 },             /* Type 2 */
+  { "or", 12, 4 },              /* Type 2 */
+  { "pop", 12, 17 },            /* Type 1 ONLY */
+  { "put", 12, 20 },            /* Type 2 */
+  { "random", 12, 23 },         /* Type 2 */
+  { "rcurveline", 24, -1 },     /* Type 2 */
   { "return", 11, -1 },
-  { "rlinecurve", 25, -1 },	/* Type 2 */
+  { "rlinecurve", 25, -1 },     /* Type 2 */
   { "rlineto", 5, -1 },
   { "rmoveto", 21, -1 },
-  { "roll", 12, 30 },		/* Type 2 */
+  { "roll", 12, 30 },           /* Type 2 */
   { "rrcurveto", 8, -1 },
-  { "sbw", 12, 7 },		/* Type 1 ONLY */
-  { "seac", 12, 6 },		/* Type 1 ONLY */
+  { "sbw", 12, 7 },             /* Type 1 ONLY */
+  { "seac", 12, 6 },            /* Type 1 ONLY */
   { "setcurrentpoint", 12, 33 }, /* Type 1 ONLY */
-  { "sqrt", 12, 26 },		/* Type 2 */
-  { "store", 12, 8 },		/* Type 2 */
-  { "sub", 12, 11 },		/* Type 2 */
+  { "sqrt", 12, 26 },           /* Type 2 */
+  { "store", 12, 8 },           /* Type 2 */
+  { "sub", 12, 11 },            /* Type 2 */
   { "vhcurveto", 30, -1 },
   { "vlineto", 7, -1 },
   { "vmoveto", 4, -1 },
   { "vstem", 3, -1 },
-  { "vstem3", 12, 1 },		/* Type 1 ONLY */
-  { "vstemhm", 23, -1 },	/* Type 2 */
-  { "vvcurveto", 26, -1 },	/* Type 2 */
+  { "vstem3", 12, 1 },          /* Type 1 ONLY */
+  { "vstemhm", 23, -1 },        /* Type 2 */
+  { "vvcurveto", 26, -1 },      /* Type 2 */
 };                                                /* alphabetical */
 
 /* Two separate encryption functions because eexec and charstring encryption
@@ -211,8 +212,8 @@
     if (in_eexec) {
       /* trim hexadecimal lines to `blocklen' columns */
       if (hexcol >= blocklen) {
-	putc('\n', ofp);
-	hexcol = 0;
+        putc('\n', ofp);
+        hexcol = 0;
       }
       putc(hexchar[(b >> 4) & 0xf], ofp);
       putc(hexchar[b & 0xf], ofp);
@@ -298,10 +299,10 @@
     else if (active && !comment && c == '{') {
       /* 25.Aug.1999 -- new check for whether we should stop be active */
       if (check_line_charstring()) {
-	start_charstring = 1;
-	break;
+        start_charstring = 1;
+        break;
       } else
-	active = 0;
+        active = 0;
     }
 
     *p++ = (char) c;
@@ -310,7 +311,7 @@
     if (c == '\r') {
       c = getc(ifp);
       if (c != '\n')
-	ungetc(c, ifp);
+        ungetc(c, ifp);
       p[-1] = '\n';
       break;
     } else if (c == '\n')
@@ -465,8 +466,8 @@
       *p++ = c;
       c = getc(ifp);
       if (c == EOF || isspace(c) || c == '%' || c == '}') {
-	ungetc(c, ifp);
-	break;
+        ungetc(c, ifp);
+        break;
       }
     }
     *p = 0;
@@ -494,45 +495,45 @@
       int ok = 0;
 
       cp = (struct command *)
-	bsearch((void *) line, (void *) command_table,
-		sizeof(command_table) / sizeof(struct command),
-		sizeof(struct command),
-		command_compare);
+        bsearch((void *) line, (void *) command_table,
+                sizeof(command_table) / sizeof(struct command),
+                sizeof(struct command),
+                command_compare);
 
       if (cp) {
-	one = cp->one;
-	two = cp->two;
-	ok = 1;
+        one = cp->one;
+        two = cp->two;
+        ok = 1;
 
       } else if (strncmp(line, "escape_", 7) == 0) {
-	/* Parse the `escape' keyword requested by Lee Chun-Yu and Werner
+        /* Parse the `escape' keyword requested by Lee Chun-Yu and Werner
            Lemberg */
-	one = 12;
-	if (sscanf(line + 7, "%d", &two) == 1)
-	  ok = 1;
+        one = 12;
+        if (sscanf(line + 7, "%d", &two) == 1)
+          ok = 1;
 
       } else if (strncmp(line, "UNKNOWN_", 8) == 0) {
-	/* Allow unanticipated UNKNOWN commands. */
-	one = 12;
-	if (sscanf(line + 8, "12_%d", &two) == 1)
-	  ok = 1;
-	else if (sscanf(line + 8, "%d", &one) == 1) {
-	  two = -1;
-	  ok = 1;
-	}
+        /* Allow unanticipated UNKNOWN commands. */
+        one = 12;
+        if (sscanf(line + 8, "12_%d", &two) == 1)
+          ok = 1;
+        else if (sscanf(line + 8, "%d", &one) == 1) {
+          two = -1;
+          ok = 1;
+        }
       }
 
       if (!ok)
-	error("unknown charstring command `%s'", line);
+        error("unknown charstring command `%s'", line);
       else if (one < 0 || one > 255)
-	error("bad charstring command number `%d'", one);
+        error("bad charstring command number `%d'", one);
       else if (two > 255)
-	error("bad charstring command number `%d'", two);
+        error("bad charstring command number `%d'", two);
       else if (two < 0)
-	charstring_byte(one);
+        charstring_byte(one);
       else {
-	charstring_byte(one);
-	charstring_byte(two);
+        charstring_byte(one);
+        charstring_byte(two);
       }
     }
   }
@@ -544,12 +545,12 @@
  * Command line
  **/
 
-#define BLOCK_LEN_OPT	300
-#define OUTPUT_OPT	301
-#define VERSION_OPT	302
-#define HELP_OPT	303
-#define PFB_OPT		304
-#define PFA_OPT		305
+#define BLOCK_LEN_OPT   300
+#define OUTPUT_OPT      301
+#define VERSION_OPT     302
+#define HELP_OPT        303
+#define PFB_OPT         304
+#define PFA_OPT         305
 
 static Clp_Option options[] = {
   { "block-length", 'l', BLOCK_LEN_OPT, Clp_ValInt, 0 },
@@ -590,7 +591,7 @@
 {
   fprintf(stderr, "Usage: %s [OPTION]... [INPUT [OUTPUT]]\n\
 Try `%s --help' for more information.\n",
-	  program_name, program_name);
+          program_name, program_name);
 }
 
 static void
@@ -641,11 +642,11 @@
      output_file:
      case OUTPUT_OPT:
       if (ofp)
-	fatal_error("output file already specified");
+        fatal_error("output file already specified");
       if (strcmp(clp->vstr, "-") == 0)
-	ofp = stdout;
+        ofp = stdout;
       else if (!(ofp = fopen(clp->vstr, "w")))
-	fatal_error("%s: %s", clp->vstr, strerror(errno));
+        fatal_error("%s: %s", clp->vstr, strerror(errno));
       break;
 
      case PFB_OPT:
@@ -663,7 +664,7 @@
 
      case VERSION_OPT:
       printf("t1asm (LCDF t1utils) %s\n", VERSION);
-      printf("Copyright (C) 1992-2010 I. Lee Hetherington, Eddie Kohler et al.\n\
+      printf("Copyright (C) 1992-2017 I. Lee Hetherington, Eddie Kohler et al.\n\
 This is free software; see the source for copying conditions.\n\
 There is NO warranty, not even for merchantability or fitness for a\n\
 particular purpose.\n");
@@ -672,13 +673,13 @@
 
      case Clp_NotOption:
       if (ifp && ofp)
-	fatal_error("too many arguments");
+        fatal_error("too many arguments");
       else if (ifp)
-	goto output_file;
+        goto output_file;
       if (strcmp(clp->vstr, "-") == 0)
-	ifp = stdin;
+        ifp = stdin;
       else if (!(ifp = fopen(clp->vstr, "r")))
-	fatal_error("%s: %s", clp->vstr, strerror(errno));
+        fatal_error("%s: %s", clp->vstr, strerror(errno));
       break;
 
      case Clp_Done:
@@ -738,41 +739,41 @@
 
     if (!ever_active) {
       if (strncmp(line, "currentfile eexec", 17) == 0 && isspace((unsigned char) line[17])) {
-	/* Allow arbitrary whitespace after "currentfile eexec".
-	   Thanks to Tom Kacvinsky <tjk at ams.org> for reporting this.
-	   Note: strlen("currentfile eexec") == 17. */
-	for (p = line + 18; isspace((unsigned char) *p); p++)
-	  ;
-	eexec_start(p);
-	continue;
+        /* Allow arbitrary whitespace after "currentfile eexec".
+           Thanks to Tom Kacvinsky <tjk at ams.org> for reporting this.
+           Note: strlen("currentfile eexec") == 17. */
+        for (p = line + 18; isspace((unsigned char) *p); p++)
+          ;
+        eexec_start(p);
+        continue;
       } else if (strncmp(line, "/lenIV", 6) == 0) {
-        set_lenIV(line);
+        set_lenIV(line, strlen(line));
       } else if ((p = strstr(line, "string currentfile"))) {
-        set_cs_start(line);
+        set_cs_start(line, strlen(line));
       }
     }
 
     if (!active) {
       if ((p = strstr(line, "/Subrs")) && isdigit((unsigned char) p[7]))
-	ever_active = active = 1;
+        ever_active = active = 1;
       else if ((p = strstr(line, "/CharStrings")) && isdigit((unsigned char) p[13]))
-	ever_active = active = 1;
+        ever_active = active = 1;
     }
     if ((p = strstr(line, "currentfile closefile"))) {
       /* 2/14/99 -- happy Valentine's day! -- don't look for `mark
-	 currentfile closefile'; the `mark' might be on a different line */
+         currentfile closefile'; the `mark' might be on a different line */
       /* 1/3/2002 -- happy new year! -- Luc Devroye reports a failure with
          some printers when `currentfile closefile' is followed by space */
       p += sizeof("currentfile closefile") - 1;
       for (q = p; isspace((unsigned char) *q) && *q != '\n'; q++)
-	/* nada */;
+        /* nada */;
       if (q == p && !*q)
-	error("warning: `currentfile closefile' line too long");
+        error("warning: `currentfile closefile' line too long");
       else if (q != p) {
-	if (*q != '\n')
-	  error("text after `currentfile closefile' ignored");
-	*p++ = '\n';
-	*p++ = '\0';
+        if (*q != '\n')
+          error("text after `currentfile closefile' ignored");
+        *p++ = '\n';
+        *p++ = '\0';
       }
       eexec_string(line);
       break;
@@ -783,7 +784,7 @@
     /* output line data */
     if (start_charstring) {
       if (!cs_start[0])
-	fatal_error("couldn't find charstring start command");
+        fatal_error("couldn't find charstring start command");
       parse_charstring();
     }
   }

Modified: trunk/Build/source/utils/t1utils/t1utils-src/t1asmhelp.h
===================================================================
--- trunk/Build/source/utils/t1utils/t1utils-src/t1asmhelp.h	2017-08-28 00:21:36 UTC (rev 45149)
+++ trunk/Build/source/utils/t1utils/t1utils-src/t1asmhelp.h	2017-08-28 06:43:57 UTC (rev 45150)
@@ -8,27 +8,35 @@
    of each charstring. */
 
 static void
-set_lenIV(const char* line)
+set_lenIV(const char* line, size_t line_len)
 {
-  char *p = strstr(line, "/lenIV ");
+  char* p = memmem(line, line_len, "/lenIV ", 7);
 
   /* Allow lenIV to be negative. Thanks to Tom Kacvinsky <tjk at ams.org> */
-  if (p && (isdigit((unsigned char) p[7]) || p[7] == '+' || p[7] == '-')) {
-    lenIV = atoi(p + 7);
+  if (p && p + 7 < line + line_len) {
+    const char* x = p + 7 + (p[7] == '+' || p[7] == '-');
+    if (x < line + line_len && isdigit((unsigned char) *x)) {
+      lenIV = (unsigned char) *x - '0';
+      for (++x; x < line + line_len && isdigit((unsigned char) *x); ++x)
+        lenIV = 10 * lenIV + (unsigned char) *x - '0';
+      if (p[7] == '-')
+        lenIV = -lenIV;
+    }
   }
 }
 
+
 static char cs_start_init[] = "";
 static char *cs_start = cs_start_init;
 
 static void
-set_cs_start(const char* line)
+set_cs_start(const char* line, size_t line_len)
 {
     static int cs_start_set = 0;
     char *p, *q, *r;
 
-    if ((p = strstr(line, "string currentfile"))
-        && strstr(line, "readstring")) {
+    if ((p = memmem(line, line_len, "string currentfile", 18))
+        && memmem(line, line_len, "readstring", 10)) {
         /* locate the name of the charstring start command */
         for (q = p; q != line && q[-1] != '/'; --q)
             /* nada */;

Modified: trunk/Build/source/utils/t1utils/t1utils-src/t1binary.1
===================================================================
--- trunk/Build/source/utils/t1utils/t1utils-src/t1binary.1	2017-08-28 00:21:36 UTC (rev 45149)
+++ trunk/Build/source/utils/t1utils/t1utils-src/t1binary.1	2017-08-28 06:43:57 UTC (rev 45150)
@@ -1,4 +1,4 @@
-.ds V 1.39
+.ds V 1.41
 .de M
 .BR "\\$1" "(\\$2)\\$3"
 ..

Modified: trunk/Build/source/utils/t1utils/t1utils-src/t1binary.c
===================================================================
--- trunk/Build/source/utils/t1utils/t1utils-src/t1binary.c	2017-08-28 00:21:36 UTC (rev 45149)
+++ trunk/Build/source/utils/t1utils/t1utils-src/t1binary.c	2017-08-28 06:43:57 UTC (rev 45150)
@@ -4,7 +4,7 @@
  * converts it to binary (PFB) format.
  *
  * Copyright (c) 1992 by I. Lee Hetherington, all rights reserved.
- * Copyright (c) 1998-2013 Eddie Kohler
+ * Copyright (c) 1998-2017 Eddie Kohler
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the
@@ -215,7 +215,7 @@
 
      case VERSION_OPT:
       printf("t1binary (LCDF t1utils) %s\n", VERSION);
-      printf("Copyright (C) 1992-2010 I. Lee Hetherington, Eddie Kohler et al.\n\
+      printf("Copyright (C) 1992-2017 I. Lee Hetherington, Eddie Kohler et al.\n\
 This is free software; see the source for copying conditions.\n\
 There is NO warranty, not even for merchantability or fitness for a\n\
 particular purpose.\n");

Modified: trunk/Build/source/utils/t1utils/t1utils-src/t1disasm.1
===================================================================
--- trunk/Build/source/utils/t1utils/t1utils-src/t1disasm.1	2017-08-28 00:21:36 UTC (rev 45149)
+++ trunk/Build/source/utils/t1utils/t1utils-src/t1disasm.1	2017-08-28 06:43:57 UTC (rev 45150)
@@ -1,4 +1,4 @@
-.ds V 1.39
+.ds V 1.41
 .de M
 .BR "\\$1" "(\\$2)\\$3"
 ..

Modified: trunk/Build/source/utils/t1utils/t1utils-src/t1disasm.c
===================================================================
--- trunk/Build/source/utils/t1utils/t1utils-src/t1disasm.c	2017-08-28 00:21:36 UTC (rev 45149)
+++ trunk/Build/source/utils/t1utils/t1utils-src/t1disasm.c	2017-08-28 06:43:57 UTC (rev 45150)
@@ -8,7 +8,7 @@
  * PFA format.
  *
  * Copyright (c) 1992 by I. Lee Hetherington, all rights reserved.
- * Copyright (c) 1998-2013 Eddie Kohler
+ * Copyright (c) 1998-2017 Eddie Kohler
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the
@@ -82,7 +82,8 @@
 static int unknown = 0;
 
 /* decryption stuff */
-static uint16_t c1 = 52845, c2 = 22719;
+static const uint32_t c1 = 52845;
+static const uint32_t c2 = 22719;
 static uint16_t cr_default = 4330;
 static uint16_t er_default = 55665;
 
@@ -106,11 +107,11 @@
 {
     static int start = 1;
     if (strcmp(token, "\n") == 0) {
-	fprintf(ofp, "\n");
-	start = 1;
+        fprintf(ofp, "\n");
+        start = 1;
     } else {
-	fprintf(ofp, "%s%s", start ? "\t" : " ", token);
-	start = 0;
+        fprintf(ofp, "%s%s", start ? "\t" : " ", token);
+        start = 0;
     }
 }
 
@@ -147,24 +148,26 @@
 
     if (b >= 32) {
       if (b >= 32 && b <= 246)
-	val = b - 139;
+        val = b - 139;
       else if (b >= 247 && b <= 250) {
-	i++;
-	val = (b - 247)*256 + 108 + line[i];
+        i++;
+        val = (b - 247)*256 + 108 + line[i];
       } else if (b >= 251 && b <= 254) {
-	i++;
-	val = -(b - 251)*256 - 108 - line[i];
+        i++;
+        val = -(b - 251)*256 - 108 - line[i];
       } else {
-	val =  (line[i+1] & 0xff) << 24;
-	val |= (line[i+2] & 0xff) << 16;
-	val |= (line[i+3] & 0xff) <<  8;
-	val |= (line[i+4] & 0xff) <<  0;
-	/* in case an int32 is larger than four bytes---sign extend */
+        uint32_t uval;
+        uval =  (uint32_t) line[i+1] << 24;
+        uval |= (uint32_t) line[i+2] << 16;
+        uval |= (uint32_t) line[i+3] <<  8;
+        uval |= (uint32_t) line[i+4] <<  0;
+        /* in case an int32 is larger than four bytes---sign extend */
 #if INT_MAX > 0x7FFFFFFFUL
-	if (val & 0x80000000)
-	  val |= ~0x7FFFFFFF;
+        if (uval & 0x80000000U)
+          uval |= ~0x7FFFFFFFU;
 #endif
-	i += 4;
+        val = (int32_t) uval;
+        i += 4;
       }
       sprintf(buf, "%d", val);
       output_token(buf);
@@ -171,7 +174,7 @@
 
     } else {
       switch (b) {
-      case 0: output_token("error"); break;		/* special */
+      case 0: output_token("error"); break;             /* special */
       case 1: output_token("hstem"); break;
       case 3: output_token("vstem"); break;
       case 4: output_token("vmoveto"); break;
@@ -179,80 +182,80 @@
       case 6: output_token("hlineto"); break;
       case 7: output_token("vlineto"); break;
       case 8: output_token("rrcurveto"); break;
-      case 9: output_token("closepath"); break;		/* Type 1 ONLY */
+      case 9: output_token("closepath"); break;         /* Type 1 ONLY */
       case 10: output_token("callsubr"); break;
       case 11: output_token("return"); break;
-      case 13: output_token("hsbw"); break;		/* Type 1 ONLY */
+      case 13: output_token("hsbw"); break;             /* Type 1 ONLY */
       case 14: output_token("endchar"); break;
-      case 16: output_token("blend"); break;		/* Type 2 */
-      case 18: output_token("hstemhm"); break;		/* Type 2 */
-      case 19: output_token("hintmask"); break;		/* Type 2 */
-      case 20: output_token("cntrmask"); break;		/* Type 2 */
+      case 16: output_token("blend"); break;            /* Type 2 */
+      case 18: output_token("hstemhm"); break;          /* Type 2 */
+      case 19: output_token("hintmask"); break;         /* Type 2 */
+      case 20: output_token("cntrmask"); break;         /* Type 2 */
       case 21: output_token("rmoveto"); break;
       case 22: output_token("hmoveto"); break;
-      case 23: output_token("vstemhm"); break;		/* Type 2 */
-      case 24: output_token("rcurveline"); break;	/* Type 2 */
-      case 25: output_token("rlinecurve"); break;	/* Type 2 */
-      case 26: output_token("vvcurveto"); break;	/* Type 2 */
-      case 27: output_token("hhcurveto"); break;	/* Type 2 */
-      case 28: {		/* Type 2 */
-	/* short integer */
-	val =  (line[i+1] & 0xff) << 8;
-	val |= (line[i+2] & 0xff);
-	i += 2;
-	if (val & 0x8000)
-	  val |= ~0x7FFF;
-	sprintf(buf, "%d", val);
-	output_token(buf);
+      case 23: output_token("vstemhm"); break;          /* Type 2 */
+      case 24: output_token("rcurveline"); break;       /* Type 2 */
+      case 25: output_token("rlinecurve"); break;       /* Type 2 */
+      case 26: output_token("vvcurveto"); break;        /* Type 2 */
+      case 27: output_token("hhcurveto"); break;        /* Type 2 */
+      case 28: {                /* Type 2 */
+        /* short integer */
+        val =  (line[i+1] & 0xff) << 8;
+        val |= (line[i+2] & 0xff);
+        i += 2;
+        if (val & 0x8000)
+          val |= ~0x7FFF;
+        sprintf(buf, "%d", val);
+        output_token(buf);
       }
-      case 29: output_token("callgsubr"); break;	/* Type 2 */
+      case 29: output_token("callgsubr"); break;        /* Type 2 */
       case 30: output_token("vhcurveto"); break;
       case 31: output_token("hvcurveto"); break;
       case 12:
-	i++;
-	b = line[i];
-	switch (b) {
-	case 0: output_token("dotsection"); break;	/* Type 1 ONLY */
-	case 1: output_token("vstem3"); break;		/* Type 1 ONLY */
-	case 2: output_token("hstem3"); break;		/* Type 1 ONLY */
-	case 3: output_token("and"); break;		/* Type 2 */
-	case 4: output_token("or"); break;		/* Type 2 */
-	case 5: output_token("not"); break;		/* Type 2 */
-	case 6: output_token("seac"); break;		/* Type 1 ONLY */
-	case 7: output_token("sbw"); break;		/* Type 1 ONLY */
-	case 8: output_token("store"); break;		/* Type 2 */
-	case 9: output_token("abs"); break;		/* Type 2 */
-	case 10: output_token("add"); break;		/* Type 2 */
-	case 11: output_token("sub"); break;		/* Type 2 */
-	case 12: output_token("div"); break;
-	case 13: output_token("load"); break;		/* Type 2 */
-	case 14: output_token("neg"); break;		/* Type 2 */
-	case 15: output_token("eq"); break;		/* Type 2 */
-	case 16: output_token("callothersubr"); break;	/* Type 1 ONLY */
-	case 17: output_token("pop"); break;		/* Type 1 ONLY */
-	case 18: output_token("drop"); break;		/* Type 2 */
-	case 20: output_token("put"); break;		/* Type 2 */
-	case 21: output_token("get"); break;		/* Type 2 */
-	case 22: output_token("ifelse"); break;		/* Type 2 */
-	case 23: output_token("random"); break;		/* Type 2 */
-	case 24: output_token("mul"); break;		/* Type 2 */
-	case 26: output_token("sqrt"); break;		/* Type 2 */
-	case 27: output_token("dup"); break;		/* Type 2 */
-	case 28: output_token("exch"); break;		/* Type 2 */
-	case 29: output_token("index"); break;		/* Type 2 */
-	case 30: output_token("roll"); break;		/* Type 2 */
-	case 33: output_token("setcurrentpoint"); break;/* Type 1 ONLY */
-	case 34: output_token("hflex"); break;		/* Type 2 */
-	case 35: output_token("flex"); break;		/* Type 2 */
-	case 36: output_token("hflex1"); break;		/* Type 2 */
-	case 37: output_token("flex1"); break;		/* Type 2 */
-	default:
-	  sprintf(buf, "escape_%d", b);
-	  unknown++;
-	  output_token(buf);
-	  break;
-	}
-	break;
+        i++;
+        b = line[i];
+        switch (b) {
+        case 0: output_token("dotsection"); break;      /* Type 1 ONLY */
+        case 1: output_token("vstem3"); break;          /* Type 1 ONLY */
+        case 2: output_token("hstem3"); break;          /* Type 1 ONLY */
+        case 3: output_token("and"); break;             /* Type 2 */
+        case 4: output_token("or"); break;              /* Type 2 */
+        case 5: output_token("not"); break;             /* Type 2 */
+        case 6: output_token("seac"); break;            /* Type 1 ONLY */
+        case 7: output_token("sbw"); break;             /* Type 1 ONLY */
+        case 8: output_token("store"); break;           /* Type 2 */
+        case 9: output_token("abs"); break;             /* Type 2 */
+        case 10: output_token("add"); break;            /* Type 2 */
+        case 11: output_token("sub"); break;            /* Type 2 */
+        case 12: output_token("div"); break;
+        case 13: output_token("load"); break;           /* Type 2 */
+        case 14: output_token("neg"); break;            /* Type 2 */
+        case 15: output_token("eq"); break;             /* Type 2 */
+        case 16: output_token("callothersubr"); break;  /* Type 1 ONLY */
+        case 17: output_token("pop"); break;            /* Type 1 ONLY */
+        case 18: output_token("drop"); break;           /* Type 2 */
+        case 20: output_token("put"); break;            /* Type 2 */
+        case 21: output_token("get"); break;            /* Type 2 */
+        case 22: output_token("ifelse"); break;         /* Type 2 */
+        case 23: output_token("random"); break;         /* Type 2 */
+        case 24: output_token("mul"); break;            /* Type 2 */
+        case 26: output_token("sqrt"); break;           /* Type 2 */
+        case 27: output_token("dup"); break;            /* Type 2 */
+        case 28: output_token("exch"); break;           /* Type 2 */
+        case 29: output_token("index"); break;          /* Type 2 */
+        case 30: output_token("roll"); break;           /* Type 2 */
+        case 33: output_token("setcurrentpoint"); break;/* Type 1 ONLY */
+        case 34: output_token("hflex"); break;          /* Type 2 */
+        case 35: output_token("flex"); break;           /* Type 2 */
+        case 36: output_token("hflex1"); break;         /* Type 2 */
+        case 37: output_token("flex1"); break;          /* Type 2 */
+        default:
+          sprintf(buf, "escape_%d", b);
+          unknown++;
+          output_token(buf);
+          break;
+        }
+        break;
       default:
        sprintf(buf, "UNKNOWN_%d", b);
        unknown++;
@@ -299,24 +302,36 @@
   save_len += len;
 }
 
-/* 23.Feb.2004 - use 'memstr', not strstr, because the strings input to
-   eexec_line aren't null terminated! Reported by Werner Lemberg. */
 
-static unsigned char *
-oog_memstr(unsigned char *line, int line_len, const char *pattern, int pattern_len)
+static unsigned char*
+check_eexec_charstrings_begin(unsigned char* line, int line_len)
 {
-    unsigned char *try;
-    unsigned char *last = line + line_len - pattern_len + 1;
-    while (line < last
-	   && (try = memchr(line, (unsigned char)*pattern, last - line))) {
-	if (memcmp(try, pattern, pattern_len) == 0)
-	    return try;
-	else
-	    line = try + 1;
-    }
-    return 0;
+    unsigned char* line_end = line + line_len;
+    line = memmem(line, line_len, "/CharStrings ", 13);
+    if (!line)
+        return 0;
+    line += 13;
+    while (line < line_end && isspace(*line))
+        ++line;
+    if (line == line_end || !isdigit(*line))
+        return 0;
+    while (line < line_end && isdigit(*line))
+        ++line;
+    if (line == line_end || !isspace(*line))
+        return 0;
+    while (line < line_end && isspace(*line))
+        ++line;
+    if (line_end - line < 14 || memcmp(line, "dict dup begin", 14) != 0)
+        return 0;
+    line += 14;
+    while (line < line_end && isspace(*line))
+        ++line;
+    if (line == line_end || *line != '/')
+        return 0;
+    return line;
 }
 
+
 /* returns 1 if next \n should be deleted */
 
 static int
@@ -330,69 +345,69 @@
 
     /* append this data to the end of `save' if necessary */
     if (save_len) {
-	append_save(line, line_len);
-	line = save;
-	line_len = save_len;
+        append_save(line, line_len);
+        line = save;
+        line_len = save_len;
         save_len = 0;
     }
 
     if (!line_len)
-	return 0;
+        return 0;
 
     /* Look for charstring start */
 
     /* skip first word */
     for (pos = 0; pos < line_len && isspace(line[pos]); pos++)
-	;
+        ;
     while (pos < line_len && !isspace(line[pos]))
-	pos++;
+        pos++;
     if (pos >= line_len)
-	goto not_charstring;
+        goto not_charstring;
 
     /* skip spaces */
     first_space = pos;
     while (pos < line_len && isspace(line[pos]))
-	pos++;
+        pos++;
     if (pos >= line_len || !isdigit(line[pos]))
-	goto not_charstring;
+        goto not_charstring;
 
     /* skip number */
     digits = pos;
     while (pos < line_len && isdigit(line[pos]))
-	pos++;
+        pos++;
 
     /* check for subr (another number) */
     if (pos < line_len - 1 && isspace(line[pos]) && isdigit(line[pos+1])) {
-	first_space = pos;
-	digits = pos + 1;
-	for (pos = digits; pos < line_len && isdigit(line[pos]); pos++)
-	    ;
+        first_space = pos;
+        digits = pos + 1;
+        for (pos = digits; pos < line_len && isdigit(line[pos]); pos++)
+            ;
     }
 
     /* check for charstring start */
     if (pos + 2 + cs_start_len < line_len
-	&& pos > digits
-	&& line[pos] == ' '
-	&& strncmp((const char *)(line + pos + 1), cs_start, cs_start_len) == 0
-	&& line[pos + 1 + cs_start_len] == ' ') {
-	/* check if charstring is long enough */
-	int cs_len = atoi((const char *)(line + digits));
-	if (pos + 2 + cs_start_len + cs_len < line_len) {
-	    /* long enough! */
-	    if (line[line_len - 1] == '\r') {
-		line[line_len - 1] = '\n';
-		cut_newline = 1;
-	    }
-	    fprintf(ofp, "%.*s {\n", first_space, line);
-	    decrypt_charstring(line + pos + 2 + cs_start_len, cs_len);
-	    pos += 2 + cs_start_len + cs_len;
-	    fprintf(ofp, "\t}%.*s", line_len - pos, line + pos);
-	    return cut_newline;
-	} else {
-	    /* not long enough! */
+        && pos > digits
+        && line[pos] == ' '
+        && strncmp((const char *)(line + pos + 1), cs_start, cs_start_len) == 0
+        && line[pos + 1 + cs_start_len] == ' ') {
+        /* check if charstring is long enough */
+        int cs_len = atoi((const char *)(line + digits));
+        if (pos + 2 + cs_start_len + cs_len < line_len) {
+            /* long enough! */
+            if (line[line_len - 1] == '\r') {
+                line[line_len - 1] = '\n';
+                cut_newline = 1;
+            }
+            fprintf(ofp, "%.*s {\n", first_space, line);
+            decrypt_charstring(line + pos + 2 + cs_start_len, cs_len);
+            pos += 2 + cs_start_len + cs_len;
+            fprintf(ofp, "\t}%.*s", line_len - pos, line + pos);
+            return cut_newline;
+        } else {
+            /* not long enough! */
             append_save(line, line_len);
-	    return 0;
-	}
+            return 0;
+        }
     }
 
     /* otherwise, just output the line */
@@ -401,30 +416,25 @@
        badly: a charstring definition follows "/Charstrings ... begin", ON THE
        SAME LINE. */
     {
-	char *CharStrings = (char *)
-	    oog_memstr(line, line_len, "/CharStrings ", 13);
-	int crap, n;
-	char should_be_slash = 0;
-	if (CharStrings
-	    && sscanf(CharStrings + 12, " %d dict dup begin %c%n", &crap, &should_be_slash, &n) >= 2
-	    && should_be_slash == '/') {
-	    int len = (CharStrings + 12 + n - 1) - (char *) line;
-	    fprintf(ofp, "%.*s\n", len, line);
-	    return eexec_line((unsigned char *) (CharStrings + 12 + n - 1), line_len - len);
-	}
+        unsigned char* csbegin = check_eexec_charstrings_begin(line, line_len);
+        if (csbegin) {
+            int len = csbegin - line;
+            fprintf(ofp, "%.*s\n", len, line);
+            return eexec_line(csbegin, line_len - len);
+        }
     }
 
     if (line[line_len - 1] == '\r') {
-	line[line_len - 1] = '\n';
-	cut_newline = 1;
+        line[line_len - 1] = '\n';
+        cut_newline = 1;
     }
-    set_lenIV((char *)line);
-    set_cs_start((char *)line);
+    set_lenIV((char*) line, line_len);
+    set_cs_start((char*) line, line_len);
     fprintf(ofp, "%.*s", line_len, line);
 
     /* look for `currentfile closefile' to see if we should stop decrypting */
-    if (oog_memstr(line, line_len, "currentfile closefile", 21) != 0)
-	in_eexec = -1;
+    if (memmem(line, line_len, "currentfile closefile", 21) != 0)
+        in_eexec = -1;
 
     return cut_newline;
 }
@@ -433,9 +443,9 @@
 all_zeroes(const char *string)
 {
     if (*string != '0')
-	return 0;
+        return 0;
     while (*string == '0')
-	string++;
+        string++;
     return *string == '\0' || *string == '\n';
 }
 
@@ -443,53 +453,53 @@
 disasm_output_ascii(char *line, int len)
 {
     int was_in_eexec = in_eexec;
-    (void) len;			/* avoid warning */
+    (void) len;                 /* avoid warning */
     in_eexec = 0;
 
     /* if we came from a binary section, we need to process that too */
     if (was_in_eexec > 0) {
-	unsigned char zero = 0;
-	eexec_line(&zero, 0);
+        unsigned char zero = 0;
+        eexec_line(&zero, 0);
     }
 
     /* if we just came from the "ASCII part" of an eexec section, we need to
        process the saved lines */
     if (was_in_eexec < 0) {
-	int i = 0;
-	int save_char = 0;	/* note: save[] is unsigned char * */
+        int i = 0;
+        int save_char = 0;      /* note: save[] is unsigned char * */
 
-	while (i < save_len) {
-	    /* grab a line */
-	    int start = i;
-	    while (i < save_len && save[i] != '\r' && save[i] != '\n')
-		i++;
-	    if (i < save_len) {
-		if (i < save_len - 1 && save[i] == '\r' && save[i+1] == '\n')
-		    save_char = -1;
-		else
-		    save_char = save[i+1];
-		save[i] = '\n';
-		save[i+1] = 0;
-	    } else
-		save[i] = 0;
+        while (i < save_len) {
+            /* grab a line */
+            int start = i;
+            while (i < save_len && save[i] != '\r' && save[i] != '\n')
+                i++;
+            if (i < save_len) {
+                if (i < save_len - 1 && save[i] == '\r' && save[i+1] == '\n')
+                    save_char = -1;
+                else
+                    save_char = save[i+1];
+                save[i] = '\n';
+                save[i+1] = 0;
+            } else
+                save[i] = 0;
 
-	    /* output it */
-	    disasm_output_ascii((char *)(save + start), -1);
+            /* output it */
+            disasm_output_ascii((char *)(save + start), -1);
 
-	    /* repair damage */
-	    if (i < save_len) {
-		if (save_char >= 0) {
-		    save[i+1] = save_char;
-		    i++;
-		} else
-		    i += 2;
-	    }
-	}
-	save_len = 0;
+            /* repair damage */
+            if (i < save_len) {
+                if (save_char >= 0) {
+                    save[i+1] = save_char;
+                    i++;
+                } else
+                    i += 2;
+            }
+        }
+        save_len = 0;
     }
 
     if (!all_zeroes(line))
-	output(line);
+        output(line);
 }
 
 /* collect until '\n' or end of binary section */
@@ -505,25 +515,25 @@
 
     /* in the ASCII portion of a binary section, just save this data */
     if (in_eexec < 0) {
-	append_save(data, len);
-	return;
+        append_save(data, len);
+        return;
     }
 
     /* eexec initialization */
     if (in_eexec == 0) {
-	er = er_default;
-	ignore_newline = 0;
-	in_eexec = 0;
+        er = er_default;
+        ignore_newline = 0;
+        in_eexec = 0;
     }
     if (in_eexec < 4) {
-	for (i = 0; i < len && in_eexec < 4; i++, in_eexec++) {
-	    byte cipher = data[i];
-	    plain = (byte)(cipher ^ (er >> 8));
-	    er = (uint16_t)((cipher + er) * c1 + c2);
-	    data[i] = plain;
-	}
-	data += i;
-	len -= i;
+        for (i = 0; i < len && in_eexec < 4; i++, in_eexec++) {
+            byte cipher = data[i];
+            plain = (byte)(cipher ^ (er >> 8));
+            er = (uint16_t)((cipher + er) * c1 + c2);
+            data[i] = plain;
+        }
+        data += i;
+        len -= i;
     }
 
     /* now make lines: collect until '\n' or '\r' and pass them off to
@@ -530,36 +540,36 @@
        eexec_line. */
     i = 0;
     while (in_eexec > 0) {
-	int start = i;
+        int start = i;
 
-	for (; i < len; i++) {
-	    byte cipher = data[i];
-	    plain = (byte)(cipher ^ (er >> 8));
-	    er = (uint16_t)((cipher + er) * c1 + c2);
-	    data[i] = plain;
-	    if (plain == '\r' || plain == '\n')
-		break;
-	}
+        for (; i < len; i++) {
+            byte cipher = data[i];
+            plain = (byte)(cipher ^ (er >> 8));
+            er = (uint16_t)((cipher + er) * c1 + c2);
+            data[i] = plain;
+            if (plain == '\r' || plain == '\n')
+                break;
+        }
 
-	if (ignore_newline && start < i && data[start] == '\n') {
-	    ignore_newline = 0;
-	    continue;
-	}
+        if (ignore_newline && start < i && data[start] == '\n') {
+            ignore_newline = 0;
+            continue;
+        }
 
-	if (i >= len) {
-	    if (start < len)
-		append_save(data + start, i - start);
-	    break;
-	}
+        if (i >= len) {
+            if (start < len)
+                append_save(data + start, i - start);
+            break;
+        }
 
-	i++;
-	ignore_newline = eexec_line(data + start, i - start);
+        i++;
+        ignore_newline = eexec_line(data + start, i - start);
     }
 
     /* if in_eexec < 0, we have some plaintext lines sitting around in a binary
        section of the PFB. save them for later */
     if (in_eexec < 0 && i < len)
-	append_save(data + i, len - i);
+        append_save(data + i, len - i);
 }
 
 static void
@@ -575,9 +585,9 @@
  * Command line
  **/
 
-#define OUTPUT_OPT	301
-#define VERSION_OPT	302
-#define HELP_OPT	303
+#define OUTPUT_OPT      301
+#define VERSION_OPT     302
+#define HELP_OPT        303
 
 static Clp_Option options[] = {
   { "help", 0, HELP_OPT, 0, 0 },
@@ -615,7 +625,7 @@
 {
   fprintf(stderr, "Usage: %s [INPUT [OUTPUT]]\n\
 Try `%s --help' for more information.\n",
-	  program_name, program_name);
+          program_name, program_name);
 }
 
 static void
@@ -661,12 +671,12 @@
      output_file:
      case OUTPUT_OPT:
       if (ofp)
-	fatal_error("output file already specified");
+        fatal_error("output file already specified");
       if (strcmp(clp->vstr, "-") == 0)
-	ofp = stdout;
+        ofp = stdout;
       else {
-	ofp = fopen(clp->vstr, "w");
-	if (!ofp) fatal_error("%s: %s", clp->vstr, strerror(errno));
+        ofp = fopen(clp->vstr, "w");
+        if (!ofp) fatal_error("%s: %s", clp->vstr, strerror(errno));
       }
       break;
 
@@ -677,7 +687,7 @@
 
      case VERSION_OPT:
       printf("t1disasm (LCDF t1utils) %s\n", VERSION);
-      printf("Copyright (C) 1992-2010 I. Lee Hetherington, Eddie Kohler et al.\n\
+      printf("Copyright (C) 1992-2017 I. Lee Hetherington, Eddie Kohler et al.\n\
 This is free software; see the source for copying conditions.\n\
 There is NO warranty, not even for merchantability or fitness for a\n\
 particular purpose.\n");
@@ -686,15 +696,15 @@
 
      case Clp_NotOption:
       if (ifp && ofp)
-	fatal_error("too many arguments");
+        fatal_error("too many arguments");
       else if (ifp)
-	goto output_file;
+        goto output_file;
       if (strcmp(clp->vstr, "-") == 0)
-	ifp = stdin;
+        ifp = stdin;
       else {
-	ifp_filename = clp->vstr;
-	ifp = fopen(clp->vstr, "rb");
-	if (!ifp) fatal_error("%s: %s", clp->vstr, strerror(errno));
+        ifp_filename = clp->vstr;
+        ifp = fopen(clp->vstr, "rb");
+        if (!ifp) fatal_error("%s: %s", clp->vstr, strerror(errno));
       }
       break;
 
@@ -742,9 +752,9 @@
 
   if (unknown)
     error((unknown > 1
-	   ? "encountered %d unknown charstring commands"
-	   : "encountered %d unknown charstring command"),
-	  unknown);
+           ? "encountered %d unknown charstring commands"
+           : "encountered %d unknown charstring command"),
+          unknown);
 
   return (error_count ? 1 : 0);
 }

Modified: trunk/Build/source/utils/t1utils/t1utils-src/t1lib.c
===================================================================
--- trunk/Build/source/utils/t1utils/t1utils-src/t1lib.c	2017-08-28 00:21:36 UTC (rev 45149)
+++ trunk/Build/source/utils/t1utils/t1utils-src/t1lib.c	2017-08-28 06:43:57 UTC (rev 45150)
@@ -2,7 +2,7 @@
  *
  * This file contains functions for reading PFA and PFB files.
  *
- * Copyright (c) 1998-2013 Eddie Kohler
+ * Copyright (c) 1998-2017 Eddie Kohler
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the

Modified: trunk/Build/source/utils/t1utils/t1utils-src/t1mac.1
===================================================================
--- trunk/Build/source/utils/t1utils/t1utils-src/t1mac.1	2017-08-28 00:21:36 UTC (rev 45149)
+++ trunk/Build/source/utils/t1utils/t1utils-src/t1mac.1	2017-08-28 06:43:57 UTC (rev 45150)
@@ -1,4 +1,4 @@
-.ds V 1.39
+.ds V 1.41
 .de M
 .BR "\\$1" "(\\$2)\\$3"
 ..

Modified: trunk/Build/source/utils/t1utils/t1utils-src/t1mac.c
===================================================================
--- trunk/Build/source/utils/t1utils/t1utils-src/t1mac.c	2017-08-28 00:21:36 UTC (rev 45149)
+++ trunk/Build/source/utils/t1utils/t1utils-src/t1mac.c	2017-08-28 06:43:57 UTC (rev 45150)
@@ -4,7 +4,7 @@
  * 1 fonts stored in MacBinary (I or II), AppleSingle, AppleDouble, BinHex, or
  * raw resource fork format.
  *
- * Copyright (c) 2000-2013 Eddie Kohler
+ * Copyright (c) 2000-2017 Eddie Kohler
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the
@@ -899,7 +899,7 @@
 
      case VERSION_OPT:
       printf("t1mac (LCDF t1utils) %s\n", VERSION);
-      printf("Copyright (C) 2000-2010 Eddie Kohler et al.\n\
+      printf("Copyright (C) 2000-2017 Eddie Kohler et al.\n\
 This is free software; see the source for copying conditions.\n\
 There is NO warranty, not even for merchantability or fitness for a\n\
 particular purpose.\n");
@@ -949,7 +949,7 @@
   /* prepare resource fork file */
   rfork_f = tmpfile();
   if (!rfork_f)
-    fatal_error("cannot open temorary file: %s", strerror(errno));
+    fatal_error("cannot open temporary file: %s", strerror(errno));
   for (i = 0; i < RFORK_HEADERLEN; i++)
     putc(0, rfork_f);
   init_current_post();

Modified: trunk/Build/source/utils/t1utils/t1utils-src/t1unmac.1
===================================================================
--- trunk/Build/source/utils/t1utils/t1utils-src/t1unmac.1	2017-08-28 00:21:36 UTC (rev 45149)
+++ trunk/Build/source/utils/t1utils/t1utils-src/t1unmac.1	2017-08-28 06:43:57 UTC (rev 45150)
@@ -1,4 +1,4 @@
-.ds V 1.39
+.ds V 1.41
 .de M
 .BR "\\$1" "(\\$2)\\$3"
 ..

Modified: trunk/Build/source/utils/t1utils/t1utils-src/t1unmac.c
===================================================================
--- trunk/Build/source/utils/t1utils/t1utils-src/t1unmac.c	2017-08-28 00:21:36 UTC (rev 45149)
+++ trunk/Build/source/utils/t1utils/t1utils-src/t1unmac.c	2017-08-28 06:43:57 UTC (rev 45150)
@@ -5,7 +5,7 @@
  * PFB formats.
  *
  * Copyright (c) 1992 by I. Lee Hetherington, all rights reserved.
- * Copyright (c) 1998-2013 Eddie Kohler
+ * Copyright (c) 1998-2017 Eddie Kohler
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the
@@ -615,7 +615,7 @@
 
      case VERSION_OPT:
       printf("t1unmac (LCDF t1utils) %s\n", VERSION);
-      printf("Copyright (C) 1992-2010 I. Lee Hetherington, Eddie Kohler et al.\n\
+      printf("Copyright (C) 1992-2017 I. Lee Hetherington, Eddie Kohler et al.\n\
 This is free software; see the source for copying conditions.\n\
 There is NO warranty, not even for merchantability or fitness for a\n\
 particular purpose.\n");

Deleted: trunk/Build/source/utils/t1utils/t1utils-src/t1utils.spec
===================================================================
--- trunk/Build/source/utils/t1utils/t1utils-src/t1utils.spec	2017-08-28 00:21:36 UTC (rev 45149)
+++ trunk/Build/source/utils/t1utils/t1utils-src/t1utils.spec	2017-08-28 06:43:57 UTC (rev 45150)
@@ -1,53 +0,0 @@
-Summary:	Programs for manipulating PostScript Type 1 fonts
-
-Name:		t1utils
-Version:	1.39
-Release:	1
-Source:		http://www.lcdf.org/type/t1utils-1.39.tar.gz
-
-URL:		http://www.lcdf.org/type/
-
-Group:		Utilities/Printing
-Vendor:		Little Cambridgeport Design Factory
-Packager:	Eddie Kohler <ekohler at gmail.com>
-License:	freely modifiable and distributable
-
-BuildRoot:	/tmp/t1utils-build
-
-%description
-The t1utils package is a set of programs for
-manipulating PostScript Type 1 fonts. It contains
-programs to change between binary PFB format (for
-storage), ASCII PFA format (for printing), a
-human-readable and -editable ASCII format, and
-Macintosh resource forks.
-
-%prep
-%setup
-
-%build
-%configure
-make
-
-%install
-[ "$RPM_BUILD_ROOT" != "/" ] && [ -d $RPM_BUILD_ROOT ] && rm -rf $RPM_BUILD_ROOT
-mkdir -p $RPM_BUILD_ROOT
-make DESTDIR=$RPM_BUILD_ROOT install
-
-%clean
-[ "$RPM_BUILD_ROOT" != "/" ] && [ -d $RPM_BUILD_ROOT ] && rm -rf $RPM_BUILD_ROOT
-
-%files
-%attr(-,root,root) %doc NEWS README
-%attr(0755,root,root) %{_bindir}/t1ascii
-%attr(0755,root,root) %{_bindir}/t1binary
-%attr(0755,root,root) %{_bindir}/t1asm
-%attr(0755,root,root) %{_bindir}/t1disasm
-%attr(0755,root,root) %{_bindir}/t1unmac
-%attr(0755,root,root) %{_bindir}/t1mac
-%attr(0644,root,root) %{_mandir}/man1/t1ascii.1*
-%attr(0644,root,root) %{_mandir}/man1/t1binary.1*
-%attr(0644,root,root) %{_mandir}/man1/t1asm.1*
-%attr(0644,root,root) %{_mandir}/man1/t1disasm.1*
-%attr(0644,root,root) %{_mandir}/man1/t1unmac.1*
-%attr(0644,root,root) %{_mandir}/man1/t1mac.1*

Modified: trunk/Build/source/utils/t1utils/version.ac
===================================================================
--- trunk/Build/source/utils/t1utils/version.ac	2017-08-28 00:21:36 UTC (rev 45149)
+++ trunk/Build/source/utils/t1utils/version.ac	2017-08-28 06:43:57 UTC (rev 45150)
@@ -8,4 +8,4 @@
 dnl --------------------------------------------------------
 dnl
 dnl  m4-include this file to define the current t1utils version
-m4_define([t1utils_version], [1.39])
+m4_define([t1utils_version], [1.41])



More information about the tex-live-commits mailing list