Hello community,

here is the log from the commit of package freetype2 for openSUSE:Factory 
checked in at 2016-10-10 16:18:08
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/freetype2 (Old)
 and      /work/SRC/openSUSE:Factory/.freetype2.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "freetype2"

Changes:
--------
--- /work/SRC/openSUSE:Factory/freetype2/freetype2.changes      2016-07-20 
09:15:33.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.freetype2.new/freetype2.changes 2016-10-10 
16:18:09.000000000 +0200
@@ -1,0 +2,46 @@
+Fri Sep  9 16:10:39 UTC 2016 - [email protected]
+
+- update to version 2.7:
+  * IMPORTANT CHANGES
+    + As announced earlier, the 2.7.x series now uses the new subpixel
+      hinting  mode as  the  default, emulating  a  modern version  of
+      ClearType.
+      This change inevitably leads to different rendering results, and
+      you   might   change   the   `TT_CONFIG_OPTION_SUBPIXEL_HINTING'
+      configuration option to  adapt it to your taste (or  use the new
+      `FREETYPE_PROPERTIES'    environment    variable).    See    the
+      corresponding entry  below for  version 2.6.4, which  gives more
+      information.
+    - A new option  `FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES' has been
+      introduced.   If  set (which  is  the  default), an  environment
+      variable  `FREETYPE_PROPERTIES' can  be used  to control  driver
+      properties.  Example:
+        FREETYPE_PROPERTIES=truetype:interpreter-version=35 \
+                            cff:no-stem-darkening=1 \
+                            autofitter:warping=1
+      This allows to select, say, the subpixel hinting mode at runtime
+      for a given application.  See file `ftoption.h' for more.
+  * IMPORTANT BUG FIXES
+    + After  loading a  named instance  of  a GX  variation font,  the
+      `face_index'  value  in  the returned  `FT_Face'  structure  now
+      correctly holds the named instance  index in the upper 16bits as
+      documented.
+  * MISCELLANEOUS
+    + A new macro `FT_IS_NAMED_INSTANCE' to  test whether a given face
+      is a named instance.
+    + More fixes to GX font handling.
+    + Apple's   `GETVARIATION'  bytecode   operator  (needed   for  GX
+      variation font support) has been implemented.
+    + Another round  of fuzzer fixes,  mainly to reject  invalid fonts
+      faster.
+    + Handling of raw CID fonts  was broken (bug introduced in version
+      2.6.4).
+    + The smooth rasterizer has been streamlined  to make it faster by
+      approx. 20%.
+    + The `ftgrid'  demo program now  understands command  line option
+      `-d' to give start-up design coordinates.
+    + The `ftdump' demo program has  a new command line option `-p' to
+      dump TrueType bytecode instructions.
+- removed freetype2-subpixel.patch in favor of above 
+  FREETYPE_PROPERTIES environment variable
+-------------------------------------------------------------------
--- /work/SRC/openSUSE:Factory/freetype2/ft2demos.changes       2016-07-20 
09:15:33.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.freetype2.new/ft2demos.changes  2016-10-10 
16:18:09.000000000 +0200
@@ -1,0 +2,6 @@
+Fri Sep  9 16:14:34 UTC 2016 - [email protected]
+
+- update to version 2.7:
+  + Sync with freetype 2.7
+
+-------------------------------------------------------------------

Old:
----
  freetype-2.6.5.tar.bz2
  freetype-doc-2.6.5.tar.bz2
  freetype2-subpixel.patch
  ft2demos-2.6.5.tar.bz2

New:
----
  freetype-2.7.tar.bz2
  freetype-doc-2.7.tar.bz2
  ft2demos-2.7.tar.bz2

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ freetype2.spec ++++++
--- /var/tmp/diff_new_pack.HJxG2u/_old  2016-10-10 16:18:11.000000000 +0200
+++ /var/tmp/diff_new_pack.HJxG2u/_new  2016-10-10 16:18:11.000000000 +0200
@@ -17,9 +17,9 @@
 
 
 #
-%define doc_version 2.6.5
+%define doc_version 2.7
 Name:           freetype2
-Version:        2.6.5
+Version:        2.7
 Release:        0
 Summary:        A TrueType Font Library
 License:        SUSE-Freetype or GPL-2.0+
@@ -29,7 +29,6 @@
 Source1:        
http://download.savannah.gnu.org/releases/freetype/freetype-doc-%{doc_version}.tar.bz2
 Source3:        baselibs.conf
 Patch1:         freetype2-bitmap-foundry.patch
-Patch200:       freetype2-subpixel.patch
 # PATCH-FIX-OPENSUSE don-t-mark-libpng-as-required-library.patch -- it is 
private in .pc
 Patch202:       don-t-mark-libpng-as-required-library.patch
 Patch308961:    bugzilla-308961-cmex-workaround.patch
@@ -81,14 +80,10 @@
 
 %prep
 
-%define enable_subpixel_rendering 0
 %setup -q -n freetype-%{version} -a 1
 %patch1 -p1
 %patch308961 -p 1
 %patch202 -p1
-%if %{enable_subpixel_rendering}
-%patch200 -p1
-%endif
 
 %build
 export CFLAGS="%{optflags} -std=gnu99 -D_GNU_SOURCE $(getconf LFS_CFLAGS)"

++++++ ft2demos.spec ++++++
--- /var/tmp/diff_new_pack.HJxG2u/_old  2016-10-10 16:18:11.000000000 +0200
+++ /var/tmp/diff_new_pack.HJxG2u/_new  2016-10-10 16:18:11.000000000 +0200
@@ -16,9 +16,9 @@
 #
 
 
-%define freetype_version 2.6.5
+%define freetype_version 2.7
 Name:           ft2demos
-Version:        2.6.5
+Version:        2.7
 Release:        0
 Summary:        Freetype2 Utilities and Demo Programs
 License:        GPL-2.0+
@@ -31,7 +31,6 @@
 Source1013:     bnc633938_badbdf.0
 Source1015:     bug-641580_CVE-2010-3311.cff
 Source1016:     bug-647375_tt2.ttf
-Patch200:       freetype2-subpixel.patch
 # PATCH-FIX-UPSTREAM overflow.patch -- I: Statement is overflowing a buffer
 Patch201:       overflow.patch
 # PATCH-FIX-OPENSUSE don-t-mark-libpng-as-required-library.patch -- it is 
private in .pc
@@ -50,16 +49,12 @@
 
 %prep
 
-%define enable_subpixel_rendering 0%{?opensuse_bs}
 %setup -q -n freetype-%{freetype_version} -b 1
 %patch308961 -p 1
 pushd ../ft2demos-%{version}
 %patch201 -p1
 popd
 %patch202 -p1
-%if %{enable_subpixel_rendering}
-%patch200 -p 1 -b .subpixel
-%endif
 
 %build
 export CFLAGS="%{optflags} -std=gnu99 -D_GNU_SOURCE $(getconf LFS_CFLAGS)"






++++++ freetype-2.6.5.tar.bz2 -> freetype-2.7.tar.bz2 ++++++
++++ 19661 lines of diff (skipped)

++++++ freetype-doc-2.6.5.tar.bz2 -> freetype-doc-2.7.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/freetype-2.6.5/README.freetype-doc 
new/freetype-2.7/README.freetype-doc
--- old/freetype-2.6.5/README.freetype-doc      2016-07-12 07:41:44.000000000 
+0200
+++ new/freetype-2.7/README.freetype-doc        2016-09-08 11:06:55.000000000 
+0200
@@ -7,10 +7,10 @@
 
   mkdir src
   cd src
-  tar xzvf freetype-2.6.5.tar.gz
-  tar xzvf freetype-doc-2.6.5.tar.gz
+  tar xzvf freetype-2.7.tar.gz
+  tar xzvf freetype-doc-2.7.tar.gz
 
-Now you can move the `docs' subdirectory of `freetype-2.6.5' to any place
+Now you can move the `docs' subdirectory of `freetype-2.7' to any place
 you want.
 
 The entry point for the documentation is
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/freetype-2.6.5/docs/tutorial/example5.cpp 
new/freetype-2.7/docs/tutorial/example5.cpp
--- old/freetype-2.6.5/docs/tutorial/example5.cpp       1970-01-01 
01:00:00.000000000 +0100
+++ new/freetype-2.7/docs/tutorial/example5.cpp 2016-09-08 11:06:55.000000000 
+0200
@@ -0,0 +1,460 @@
+// example5.cpp
+
+// This program is a simple example that prints a character's outline in the
+// SVG format to stdout, demonstrating the usage of FT_Outline_Decompose().
+//
+// Developed by Static Jobs LLC and contributed to the FreeType project.
+//
+// Copyright (c) 2016 Static Jobs LLC
+//   IT and software engineering jobs in the US, Canada and the UK
+//   https://www.staticjobs.com
+//
+// License: MIT (see below)
+//
+// The source code was reformatted by Werner Lemberg, also including a few
+// minor code changes and comments for didactic purposes.
+//
+// On a Unix box like GNU/Linux or OS X, compile with
+//
+//    g++ -o example5 example5.cpp `freetype-config --cflags --libs`
+//
+// or
+//
+//    g++ -o example5 example5.cpp `pkg-config freetype2 --cflags --libs`
+//
+// on the command line.
+//
+// On other platforms that don't have the `freetype-config' shell script or
+// the `pkg-config' tool, you have to pass the necessary compiler flags
+// manually.
+
+
+// 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 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.
+
+
+#include <iostream>
+#include <sstream>
+#include <stdexcept>
+#include <cstring>
+#include <cctype>
+
+#include <ft2build.h>
+#include FT_FREETYPE_H
+#include FT_OUTLINE_H
+#include FT_BBOX_H
+
+
+using namespace std;
+
+
+struct FreeTypeLibrary
+{
+  FreeTypeLibrary();
+  ~FreeTypeLibrary();
+
+  FT_Library m_ftLibrary;
+};
+
+
+inline
+FreeTypeLibrary::FreeTypeLibrary()
+{
+  FT_Error error = FT_Init_FreeType(&m_ftLibrary);
+
+  if (error)
+    throw runtime_error("Couldn't initialize the library:"
+                        " FT_Init_FreeType() failed");
+}
+
+
+inline
+FreeTypeLibrary::~FreeTypeLibrary()
+{
+  FT_Done_FreeType(m_ftLibrary);
+}
+
+
+struct FreeTypeFace
+{
+  FreeTypeFace(const FreeTypeLibrary &library,
+               const char *filename);
+  ~FreeTypeFace();
+
+  FT_Face m_ftFace;
+};
+
+
+inline
+FreeTypeFace::FreeTypeFace(const FreeTypeLibrary &library,
+                           const char *filename)
+{
+  // For simplicity, always use the first face index.
+  FT_Error error = FT_New_Face(library.m_ftLibrary, filename, 0, &m_ftFace);
+
+  if (error)
+    throw runtime_error("Couldn't load the font file:"
+                        " FT_New_Face() failed");
+}
+
+
+inline FreeTypeFace::~FreeTypeFace()
+{
+  FT_Done_Face(m_ftFace);
+}
+
+
+class OutlinePrinter
+{
+public:
+  OutlinePrinter(const char *filename);
+  int Run(const char *symbol);
+
+private:
+  void LoadGlyph(const char *symbol) const;
+  bool OutlineExists() const;
+  void FlipOutline() const;
+  void ExtractOutline();
+  void ComputeViewBox();
+  void PrintSVG() const;
+
+  static int MoveToFunction(const FT_Vector *to,
+                            void *user);
+  static int LineToFunction(const FT_Vector *to,
+                            void *user);
+  static int ConicToFunction(const FT_Vector *control,
+                             const FT_Vector *to,
+                             void *user);
+  static int CubicToFunction(const FT_Vector *controlOne,
+                             const FT_Vector *controlTwo,
+                             const FT_Vector *to,
+                             void *user);
+
+private:
+  // These two lines initialize the library and the face;
+  // the order is important!
+  FreeTypeLibrary m_library;
+  FreeTypeFace m_face;
+
+  ostringstream m_path;
+
+  // These four variables are for the `viewBox' attribute.
+  FT_Pos m_xMin;
+  FT_Pos m_yMin;
+  FT_Pos m_width;
+  FT_Pos m_height;
+};
+
+
+inline
+OutlinePrinter::OutlinePrinter(const char *filename)
+: m_face(m_library, filename),
+  m_xMin(0),
+  m_yMin(0),
+  m_width(0),
+  m_height(0)
+{
+  // Empty body.
+}
+
+
+int
+OutlinePrinter::Run(const char *symbol)
+{
+  LoadGlyph(symbol);
+
+  // Check whether outline exists.
+  bool outlineExists = OutlineExists();
+
+  if (!outlineExists) // Outline doesn't exist.
+    throw runtime_error("Outline check failed.\n"
+                        "Please, inspect your font file or try another one,"
+                        " for example LiberationSerif-Bold.ttf");
+
+  FlipOutline();
+
+  ExtractOutline();
+
+  ComputeViewBox();
+
+  PrintSVG();
+
+  return 0;
+}
+
+
+void
+OutlinePrinter::LoadGlyph(const char *symbol) const
+{
+  FT_ULong code = symbol[0];
+
+  // For simplicity, use the charmap FreeType provides by default;
+  // in most cases this means Unicode.
+  FT_UInt index = FT_Get_Char_Index(m_face.m_ftFace, code);
+
+  FT_Error error = FT_Load_Glyph(m_face.m_ftFace,
+                                 index,
+                                 FT_LOAD_NO_SCALE | FT_LOAD_NO_BITMAP);
+
+  if (error)
+    throw runtime_error("Couldn't load the glyph: FT_Load_Glyph() failed");
+}
+
+
+// While working on this example, we found fonts with no outlines for
+// printable characters such as `A', i.e., `outline.n_contours' and
+// `outline.n_points' were zero.  FT_Outline_Check() returned `true'.
+// FT_Outline_Decompose() also returned `true' without walking the outline. 
+// That is, we had no way of knowing whether the outline existed and could
+// be (or was) decomposed.  Therefore, we implemented this workaround to
+// check whether the outline does exist and can be decomposed.
+bool
+OutlinePrinter::OutlineExists() const
+{
+  FT_Face face = m_face.m_ftFace;
+  FT_GlyphSlot slot = face->glyph;
+  FT_Outline &outline = slot->outline;
+
+  if (slot->format != FT_GLYPH_FORMAT_OUTLINE)
+    return false; // Should never happen.  Just an extra check.
+
+  if (outline.n_contours <= 0 || outline.n_points <= 0)
+    return false; // Can happen for some font files.
+
+  FT_Error error = FT_Outline_Check(&outline);
+
+  return error == 0;
+}
+
+
+// FreeType and SVG use opposite vertical directions.
+void
+OutlinePrinter::FlipOutline() const
+{
+  const FT_Fixed multiplier = 65536L;
+
+  FT_Matrix matrix;
+
+  matrix.xx = 1L * multiplier;
+  matrix.xy = 0L * multiplier;
+  matrix.yx = 0L * multiplier;
+  matrix.yy = -1L * multiplier;
+
+  FT_Face face = m_face.m_ftFace;
+  FT_GlyphSlot slot = face->glyph;
+  FT_Outline &outline = slot->outline;
+
+  FT_Outline_Transform(&outline, &matrix);
+}
+
+
+void
+OutlinePrinter::ExtractOutline()
+{
+  m_path << "  <path d='\n";
+
+  FT_Outline_Funcs callbacks;
+
+  callbacks.move_to = MoveToFunction;
+  callbacks.line_to = LineToFunction;
+  callbacks.conic_to = ConicToFunction;
+  callbacks.cubic_to = CubicToFunction;
+
+  callbacks.shift = 0;
+  callbacks.delta = 0;
+
+  FT_Face face = m_face.m_ftFace;
+  FT_GlyphSlot slot = face->glyph;
+  FT_Outline &outline = slot->outline;
+
+  FT_Error error = FT_Outline_Decompose(&outline, &callbacks, this);
+
+  if (error)
+    throw runtime_error("Couldn't extract the outline:"
+                        " FT_Outline_Decompose() failed");
+
+  m_path << "          '\n"
+            "        fill='red'/>\n";
+}
+
+
+void
+OutlinePrinter::ComputeViewBox()
+{
+  FT_Face face = m_face.m_ftFace;
+  FT_GlyphSlot slot = face->glyph;
+  FT_Outline &outline = slot->outline;
+
+  FT_BBox boundingBox;
+
+  FT_Outline_Get_BBox(&outline, &boundingBox);
+
+  FT_Pos xMin = boundingBox.xMin;
+  FT_Pos yMin = boundingBox.yMin;
+  FT_Pos xMax = boundingBox.xMax;
+  FT_Pos yMax = boundingBox.yMax;
+
+  m_xMin = xMin;
+  m_yMin = yMin;
+  m_width = xMax - xMin;
+  m_height = yMax - yMin;
+}
+
+
+void
+OutlinePrinter::PrintSVG() const
+{
+  cout << "<svg xmlns='http://www.w3.org/2000/svg'\n"
+          "     xmlns:xlink='http://www.w3.org/1999/xlink'\n"
+          "     viewBox='"
+       << m_xMin << ' ' << m_yMin << ' ' << m_width << ' ' << m_height
+       << "'>\n"
+       << m_path.str()
+       << "</svg>"
+       << endl;
+}
+
+
+int
+OutlinePrinter::MoveToFunction(const FT_Vector *to,
+                               void *user)
+{
+  OutlinePrinter *self = static_cast<OutlinePrinter *>(user);
+
+  FT_Pos x = to->x;
+  FT_Pos y = to->y;
+
+  self->m_path << "           "
+                  "M " << x << ' ' << y << '\n';
+
+  return 0;
+}
+
+
+int
+OutlinePrinter::LineToFunction(const FT_Vector *to,
+                               void *user)
+{
+  OutlinePrinter *self = static_cast<OutlinePrinter *>(user);
+
+  FT_Pos x = to->x;
+  FT_Pos y = to->y;
+
+  self->m_path << "           "
+                  "L " << x << ' ' << y << '\n';
+
+  return 0;
+}
+
+
+int
+OutlinePrinter::ConicToFunction(const FT_Vector *control,
+                                const FT_Vector *to,
+                                void *user)
+{
+  OutlinePrinter *self = static_cast<OutlinePrinter *>(user);
+
+  FT_Pos controlX = control->x;
+  FT_Pos controlY = control->y;
+
+  FT_Pos x = to->x;
+  FT_Pos y = to->y;
+
+  self->m_path << "           "
+                  "Q " << controlX << ' ' << controlY << ", "
+                       << x << ' ' << y << '\n';
+
+  return 0;
+}
+
+
+int
+OutlinePrinter::CubicToFunction(const FT_Vector *controlOne,
+                                const FT_Vector *controlTwo,
+                                const FT_Vector *to,
+                                void *user)
+{
+  OutlinePrinter *self = static_cast<OutlinePrinter *>(user);
+
+  FT_Pos controlOneX = controlOne->x;
+  FT_Pos controlOneY = controlOne->y;
+
+  FT_Pos controlTwoX = controlTwo->x;
+  FT_Pos controlTwoY = controlTwo->y;
+
+  FT_Pos x = to->x;
+  FT_Pos y = to->y;
+
+  self->m_path << "           "
+                  "C " << controlOneX << ' ' << controlOneY << ", "
+                       << controlTwoX << ' ' << controlTwoY << ", "
+                       << x << ' ' << y << '\n';
+
+  return 0;
+}
+
+
+int
+main(int argc,
+     char **argv)
+{
+  if (argc != 3)
+  {
+    const char *program = argv[0];
+
+    cerr << "This program prints a single character's outline"
+            " in the SVG format to stdout.\n"
+            "Usage: " << program << " font symbol\n"
+            "Example: " << program << " LiberationSerif-Bold.ttf A" << endl;
+
+    return 1;
+  }
+
+  const char *symbol = argv[2];
+
+  // For simplicity, only accept single-byte characters like `A'.
+  if (strlen(symbol) != 1 || isspace(*symbol))
+  {
+    cerr << "Error: '" << symbol
+         << "' is not a single printable character" << endl;
+
+    return 2;
+  }
+
+  int status;
+
+  try
+  {
+    const char *filename = argv[1];
+
+    OutlinePrinter printer(filename);
+
+    status = printer.Run(symbol);
+  }
+  catch (const exception &e)
+  {
+    cerr << "Error: " << e.what() << endl;
+
+    status = 3;
+  }
+
+  return status;
+}
+
+// EOF
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/freetype-2.6.5/docs/tutorial/example5.svg 
new/freetype-2.7/docs/tutorial/example5.svg
--- old/freetype-2.6.5/docs/tutorial/example5.svg       1970-01-01 
01:00:00.000000000 +0100
+++ new/freetype-2.7/docs/tutorial/example5.svg 2016-09-08 11:06:55.000000000 
+0200
@@ -0,0 +1,100 @@
+<svg xmlns='http://www.w3.org/2000/svg'
+     xmlns:xlink='http://www.w3.org/1999/xlink'
+     viewBox='107 -1364 1691 1753'>
+  <path d='
+           M 1798 -752
+           Q 1798 -649, 1769 -555
+           Q 1741 -461, 1691 -380
+           Q 1642 -300, 1574 -234
+           Q 1506 -168, 1427 -121
+           Q 1348 -75, 1260 -50
+           Q 1173 -25, 1085 -25
+           Q 1020 -25, 989 -59
+           Q 959 -93, 957 -150
+           Q 932 -129, 904 -106
+           Q 877 -84, 844 -66
+           Q 811 -48, 772 -36
+           Q 734 -25, 686 -25
+           Q 643 -25, 608 -43
+           Q 574 -61, 550 -94
+           Q 526 -128, 513 -175
+           Q 500 -223, 500 -283
+           Q 500 -353, 516 -426
+           Q 533 -499, 566 -567
+           Q 599 -636, 648 -697
+           Q 698 -758, 764 -805
+           Q 815 -842, 863 -865
+           Q 912 -888, 962 -901
+           Q 1013 -914, 1067 -919
+           Q 1122 -924, 1184 -924
+           Q 1232 -924, 1282 -920
+           Q 1332 -917, 1367 -913
+           L 1246 -372
+           Q 1241 -352, 1237 -330
+           Q 1233 -308, 1230 -286
+           Q 1227 -265, 1225 -246
+           Q 1223 -227, 1223 -215
+           Q 1223 -192, 1231 -175
+           Q 1240 -159, 1273 -159
+           Q 1326 -159, 1372 -183
+           Q 1418 -208, 1456 -250
+           Q 1494 -293, 1523 -350
+           Q 1553 -407, 1573 -473
+           Q 1593 -539, 1603 -610
+           Q 1614 -681, 1614 -751
+           Q 1614 -875, 1576 -970
+           Q 1539 -1066, 1469 -1131
+           Q 1399 -1196, 1300 -1229
+           Q 1202 -1263, 1079 -1263
+           Q 956 -1263, 850 -1230
+           Q 744 -1198, 656 -1138
+           Q 568 -1079, 500 -996
+           Q 433 -914, 386 -814
+           Q 339 -714, 315 -599
+           Q 291 -485, 291 -363
+           Q 291 -235, 327 -118
+           Q 364 -1, 439 88
+           Q 514 178, 627 231
+           Q 741 284, 895 284
+           Q 986 284, 1063 270
+           Q 1141 256, 1207 232
+           Q 1273 208, 1329 176
+           Q 1386 144, 1436 109
+           L 1480 173
+           Q 1424 218, 1361 257
+           Q 1298 296, 1223 325
+           Q 1148 355, 1059 372
+           Q 970 389, 864 389
+           Q 680 389, 538 330
+           Q 397 272, 301 170
+           Q 205 68, 156 -69
+           Q 107 -206, 107 -362
+           Q 107 -505, 140 -635
+           Q 173 -765, 234 -876
+           Q 296 -987, 383 -1077
+           Q 470 -1168, 578 -1231
+           Q 687 -1295, 814 -1329
+           Q 941 -1364, 1083 -1364
+           Q 1261 -1364, 1395 -1320
+           Q 1529 -1277, 1618 -1197
+           Q 1708 -1117, 1753 -1004
+           Q 1798 -891, 1798 -752
+           M 740 -316
+           Q 740 -244, 761 -206
+           Q 783 -169, 811 -169
+           Q 831 -169, 853 -175
+           Q 875 -182, 896 -192
+           Q 917 -202, 935 -214
+           Q 953 -226, 965 -237
+           L 1085 -798
+           Q 1078 -800, 1058 -801
+           Q 1039 -803, 1024 -803
+           Q 975 -803, 931 -789
+           Q 888 -776, 852 -733
+           Q 832 -709, 812 -666
+           Q 792 -623, 776 -567
+           Q 760 -512, 750 -447
+           Q 740 -383, 740 -316
+          '
+        fill='red'/>
+</svg>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/freetype-2.6.5/docs/tutorial/step3.html 
new/freetype-2.7/docs/tutorial/step3.html
--- old/freetype-2.6.5/docs/tutorial/step3.html 2016-07-12 07:41:44.000000000 
+0200
+++ new/freetype-2.7/docs/tutorial/step3.html   2016-09-08 11:06:55.000000000 
+0200
@@ -82,12 +82,27 @@
             that shows both direct rendering with a callback and
             rendering with a buffer, yielding the same result.  You
             need FreeType 2.4.3 or newer.</p>
+
+          <p><a href="example5.cpp">Here</a> is some simple C++ code
+            (contributed
+            by <a href="https://www.staticjobs.com";>Static Jobs
+            LLC</a>) that
+            uses <a 
href="../reference/ft2-outline_processing.html#FT_Outline_Decompose"><tt>FT_Outline_Decompose</tt></a>
+            to convert a glyph outline to the SVG format.  As an
+            example, here is the <a href="example5.svg">resulting
+              file</a> of the call</p>
+
+          <pre>
+example5 LiberationSerif-Bold.ttf @</pre>
+
+          <p>(you can find the Liberation font
+            family <a 
href="https://fedorahosted.org/liberation-fonts/";>here</a>).</p>
         </div>
 
         <!-- ************************************************** -->
 
         <div class="updated">
-          <p>Last update: 23-Mar-2016</p>
+          <p>Last update: 8-Sep-2016</p>
         </div>
       </div>
     </div>

++++++ ft2demos-2.6.5.tar.bz2 -> ft2demos-2.7.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ft2demos-2.6.5/ChangeLog new/ft2demos-2.7/ChangeLog
--- old/ft2demos-2.6.5/ChangeLog        2016-07-12 07:29:24.000000000 +0200
+++ new/ft2demos-2.7/ChangeLog  2016-09-08 10:03:06.000000000 +0200
@@ -1,3 +1,118 @@
+2016-09-08  Werner Lemberg  <[email protected]>
+
+       * Version 2.7 released.
+       =======================
+
+
+       Tag sources with `VER-2-7'.
+
+       * README: Updated.
+       * src/*.1: Updated.
+       * src/ftinspect.pro: Updated.
+
+2016-08-20  Alexei Podtelezhnikov  <[email protected]>
+
+       * src/ftdump.c (Print_Programs): Use fewer casts.
+
+2018-08-19  Werner Lemberg  <[email protected]>
+
+       [ftdump] Fix clang compiler warnings.
+
+       * src/ftdump.c (Print_Bytecode): Use cast instead of printf length
+       modifier – we would need `hh', which only glibc offers.
+       (Print_Programs): Use proper casts for constant strings and 16bit
+       integer types.
+
+2018-08-19  Werner Lemberg  <[email protected]>
+
+       [ftgamma] Fix compiler warnings.
+
+       * src/ftgamma.c (bit1, bit2, bit): Make them static.
+
+2016-08-18  Alexei Podtelezhnikov  <[email protected]>
+
+       [ftdump] Hexdump composite glyf instructions too.
+
+       * src/ftdump.c (Print_Programs): Updated.
+       (Print_Bytecode): Cleaned up.
+
+2016-08-18  Alexei Podtelezhnikov  <[email protected]>
+
+       [ftdump] Implement hexdump of TrueType instructions.
+
+       This is useful when searching for interesting instructions. Pushed
+       values come with underscore prefix to distinguish them from actual
+       opcodes.
+
+       * src/ftdump.c (Print_Bytecode, Print_Programs): Implement this.
+       (usage): New option `-p' described.
+       (main): Updated.
+       * src/ftdump.1: Updated.
+
+2016-08-06  Werner Lemberg  <[email protected]>
+
+       Move Mark Leisher's `getopt' implementation to a separate file.
+
+       We need this since `ftbench.c' now includes `unistd.h', which in
+       turn declares `getopt'.
+
+       * src/common.c, src/common.h: Move `getopt' stuff to...
+       * src/mlgetopt.c, src/mlgetopt.h: ... these new files.
+       Update all callers.
+
+       * src/common.c, src/common.h: Use standard C only.
+       Replace `CONST' with `const'.
+
+       * Makefile (COMMON_OBJ): Add `mlgetopt'.
+
+2016-08-02  Alexei Podtelezhnikov  <[email protected]>
+
+       * src/ftbench.c (get_time, benchmark): Clean up timers.
+
+2016-08-01  Alexei Podtelezhnikov  <[email protected]>
+
+       [ftbench] Use POSIX timers when available.
+
+       * src/ftbench.c (get_time): Use `clock_gettime' instead of obsolete
+       and less accurate `gettimeofday'.
+       (benchmark): Updated. 
+
+2016-07-14  Werner Lemberg  <[email protected]>
+
+       [ftgrid] New option `-d' to give start-up design coordinates.
+
+       This code is similar to the one from `ftmulti'.
+
+       * src/ftgrid.c: Include `stdlib.h'.
+       (GridStatusRec): Add `requested_pos' and `reqested_cnt' to hold the
+       design coordinate data from the command line.
+       (event_font_change): Handle them.
+       (parse_cmdline): Handle option `-d'.
+       (usage): Document `-d'.
+       (main): Don't load named instances if we have start-up design
+       coordinates.
+
+       * src/ftgrid.1: Updated.
+
+2016-07-14  Werner Lemberg  <[email protected]>
+
+       Prepare suppression of named instances.
+
+       No functional change.
+
+       * src/ftcommon.c (FTDemo_Install_Font): Add boolean parameter to
+       avoid loading of instances.
+       * src/ftcommon.h: Updated.
+       * src/ftgrid.c (main), src/ftstring.c (main), src/ftview.c (main):
+       Updated.
+
+2016-07-14  Werner Lemberg  <[email protected]>
+
+       [ftgrid] Properly handle named instances.
+
+       * src/ftgrid.c (event_font_change): Properly initialize the design
+       positions with the named instance's value, if appropriate.
+
 2016-07-12  Werner Lemberg  <[email protected]>
 
        * Version 2.6.5 released.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ft2demos-2.6.5/Makefile new/ft2demos-2.7/Makefile
--- old/ft2demos-2.6.5/Makefile 2016-02-03 19:09:37.000000000 +0100
+++ new/ft2demos-2.7/Makefile   2016-08-26 11:45:49.000000000 +0200
@@ -160,7 +160,7 @@
   else
     LINK_CMD = $(CC) $(subst /,$(COMPILER_SEP),$(LDFLAGS))
     ifeq ($(PLATFORM),unixdev)
-      LINK_LIBS = $(subst /,$(COMPILER_SEP),$(FTLIB) $(EFENCE)) -lm -lz -lbz2
+      LINK_LIBS = $(subst /,$(COMPILER_SEP),$(FTLIB) $(EFENCE)) -lm -lrt -lz 
-lbz2
       LINK_LIBS += $(shell pkg-config --libs libpng harfbuzz)
     else
       LINK_LIBS = $(subst /,$(COMPILER_SEP),$(FTLIB) $(EFENCE))
@@ -320,8 +320,10 @@
   #
   $(OBJ_DIR_2)/common.$(SO): $(SRC_DIR)/common.c
   $(OBJ_DIR_2)/output.$(SO): $(SRC_DIR)/output.c
+  $(OBJ_DIR_2)/mlgetopt.$(SO): $(SRC_DIR)/mlgetopt.c
   COMMON_OBJ := $(OBJ_DIR_2)/common.$(SO) \
-                $(OBJ_DIR_2)/output.$(SO)
+                $(OBJ_DIR_2)/output.$(SO) \
+                $(OBJ_DIR_2)/mlgetopt.$(SO)
 
 
   FTCOMMON_OBJ := $(OBJ_DIR_2)/ftcommon.$(SO)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ft2demos-2.6.5/README new/ft2demos-2.7/README
--- old/ft2demos-2.6.5/README   2016-07-12 07:29:55.000000000 +0200
+++ new/ft2demos-2.7/README     2016-09-08 10:06:57.000000000 +0200
@@ -8,8 +8,8 @@
   downloaded one  of the  stable FreeType 2  source packages  from our
   server, you most probably have to rename its directory, for example:
 
-    mv freetype-2.6.5 freetype2       on Unix
-    rename freetype-2.6.5 freetype2   on Windows
+    mv freetype-2.7 freetype2       on Unix
+    rename freetype-2.7 freetype2   on Windows
 
 WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
 
@@ -49,6 +49,14 @@
     If  you don't  have X11  at all,  fix the  definition of  the EXES
     variable as described in the top-level Makefile.
 
+    Recent versions of Mac OS X no longer deliver X11 by default;  you
+    have to install XQuartz, see
+
+      https://support.apple.com/en-us/HT201341
+
+    for more details.
+
+
     Using a different build directory
     ---------------------------------
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ft2demos-2.6.5/src/common.c 
new/ft2demos-2.7/src/common.c
--- old/ft2demos-2.6.5/src/common.c     2015-09-25 07:59:28.000000000 +0200
+++ new/ft2demos-2.7/src/common.c       2016-08-26 11:45:49.000000000 +0200
@@ -1,193 +1,17 @@
-/*
- *  This is a cheap replacement for getopt() because that routine is not
- *  available on some platforms and behaves differently on other platforms.
- *  This code was written from scratch without looking at any other
- *  implementation.
- *
- *  This code is hereby expressly placed in the public domain.
- *  [email protected] (Mark Leisher)
- *  10 October 1997
- *
- *  Last update 2009-03-11.
- */
+/* some utility functions */
 
 #include "common.h"
 
 #include <stdio.h>
 #include <stdarg.h>
 #include <stdlib.h>
-#include <string.h>
 
-#ifdef __STDC__
-#define CONST  const
-#else
-#define CONST
-#endif
-
-  /*
-   *  Externals visible to programs.
-   */
-
-  int    opterr = 1;
-  int    optind = 1;
-  char*  optarg;
-
-  /*
-   *  Internal variables that are used to detect when the global values
-   *  need to be reset.
-   */
-
-  static int  cmdac;
-  static CONST char*   cmdname;
-  static char* CONST*  cmdav;
-
-  int
-#ifdef __STDC__
-  getopt( int  ac, char* const*  av, const char*  pat )
-#else
-  getopt( ac, av, pat )
-    int     ac;
-    char**  av;
-    char*   pat;
-#endif
-  {
-    int  opt;
-    CONST char*  p;
-    CONST char*  pp;
-
-    /*
-     *  If there is no pattern, indicate the parsing is done.
-     */
-    if ( pat == 0 || *pat == 0 )
-      return -1;
-
-    /*
-     *  Always reset the option argument to NULL.
-     */
-    optarg = 0;
-
-    /*
-     *  If the number of arguments or argument list do not match the last
-     *  values seen, reset the internal pointers and the globals.
-     */
-    if ( ac != cmdac || av != cmdav )
-    {
-      optind = 1;
-      cmdac = ac;
-      cmdav = av;
-
-      /*
-       *  Determine the command name in case it is needed for warning
-       *  messages.
-       */
-      for ( cmdname = 0, p = av[0]; *p; p++ )
-      {
-        if ( *p == '/' || *p == '\\' )
-          cmdname = p;
-      }
-      /*
-       *  Skip the path separator if the name was assigned.
-       */
-      if ( cmdname )
-        cmdname++;
-      else
-        cmdname = av[0];
-    }
-
-    /*
-     *  If the next index is greater than or equal to the number of
-     *  arguments, then the command line is done.
-     */
-    if ( optind >= ac )
-      return -1;
-
-    /*
-     *  Test the next argument for one of three cases:
-     *    1. The next argument does not have an initial '-'.
-     *    2. The next argument is '-'.
-     *    3. The next argument is '--'.
-     *
-     *  In either of these cases, command line processing is done.
-     */
-    if ( av[optind][0] != '-'            ||
-         strcmp( av[optind], "-" ) == 0  ||
-         strcmp( av[optind], "--" ) == 0 )
-      return -1;
-
-    /*
-     *  Point at the next command line argument and increment the
-     *  command line index.
-     */
-    p = av[optind++];
-
-    /*
-     *  Look for the first character of the command line option.
-     */
-    for ( opt = *(p + 1), pp = pat; *pp && *pp != opt; pp++ )
-      ;
-
-    /*
-     *  If nothing in the pattern was recognized, then issue a warning
-     *  and return a '?'.
-     */
-    if ( *pp == 0 )
-    {
-      if ( opterr )
-        fprintf( stderr, "%s: invalid option -- %c\n", cmdname, opt );
-      return '?';
-    }
-
-    /*
-     *  If the option expects an argument, get it.
-     */
-    if ( *(pp + 1) == ':' && (optarg = av[optind]) == 0 )
-    {
-      /*
-       *  If the option argument is NULL, issue a warning and return a '?'.
-       */
-      if ( opterr )
-        fprintf( stderr, "%s: option requires an argument -- %c\n",
-                         cmdname, opt );
-      opt = '?';
-    }
-    else if ( optarg )
-    /*
-     *  Increment the option index past the argument.
-     */
-      optind++;
-
-    /*
-     *  Return the option character.
-     */
-    return opt;
-  }
-
-
-/****************************************************************************/
-/*                                                                          */
-/*  The FreeType project -- a free and portable quality TrueType renderer.  */
-/*                                                                          */
-/*  Copyright 1996-1998 by                                                  */
-/*  D. Turner, R.Wilhelm, and W. Lemberg                                    */
-/*                                                                          */
-/* ft_basename():                                                           */
-/*                                                                          */
-/* a stupid but useful function...                                          */
-/*                                                                          */
-/* rewritten by DavidT to get rid of GPLed programs in the FreeType demos.  */
-/*                                                                          */
-/****************************************************************************/
 
   char*
-#ifdef __STDC__
-  ft_basename ( const char*  name )
-#else
-  ft_basename ( name )
-    char* name;
-#endif
+  ft_basename( const char*  name )
   {
-    CONST char*  base;
-    CONST char*  current;
+    const char*  base;
+    const char*  current;
     char         c;
 
     base    = name;
@@ -213,12 +37,8 @@
 
 
   void
-#ifdef __STDC__
-  Panic( const char*  fmt, ... )
-#else
-  Panic( fmt )
-    char* fmt;
-#endif
+  Panic( const char*  fmt,
+         ... )
   {
     va_list  ap;
 
@@ -232,20 +52,14 @@
 
 
   extern int
-#ifdef __STDC__
-  utf8_next( const char** pcursor,
-             const char*  end )
-#else
-  utf8_next( pcursor, end )
-    char** pcursor;
-    char*  end;
-#endif
+  utf8_next( const char**  pcursor,
+             const char*   end )
   {
-    CONST unsigned char*  p = (CONST unsigned char*)*pcursor;
+    const unsigned char*  p = (const unsigned char*)*pcursor;
     int                   ch;
 
 
-    if ( (CONST char*)p >= end ) /* end of stream */
+    if ( (const char*)p >= end ) /* end of stream */
       return -1;
 
     ch = *p++;
@@ -274,7 +88,7 @@
 
       while ( len > 0 )
       {
-        if ( (CONST char*)p >= end || ( p[0] & 0xc0 ) != 0x80 )
+        if ( (const char*)p >= end || ( p[0] & 0xc0 ) != 0x80 )
           goto BAD_DATA;
 
         ch   = ( ch << 6 ) | ( p[0] & 0x3f );
@@ -283,11 +97,13 @@
       }
     }
 
-    *pcursor = (CONST char*) p;
+    *pcursor = (const char*)p;
+
     return ch;
 
   BAD_DATA:
     return -1;
   }
 
+
 /* End */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ft2demos-2.6.5/src/common.h 
new/ft2demos-2.7/src/common.h
--- old/ft2demos-2.6.5/src/common.h     2016-02-03 19:09:37.000000000 +0100
+++ new/ft2demos-2.7/src/common.h       2016-08-26 11:45:49.000000000 +0200
@@ -1,66 +1,30 @@
-/*
- *  This is a cheap replacement for getopt() because that routine is not
- *  available on some platforms and behaves differently on other platforms.
- *
- *  This code is hereby expressly placed in the public domain.
- *  [email protected] (Mark Leisher)
- *  10 October 1997
- */
-
 #ifndef COMMON_H_
 #define COMMON_H_
 
-/* Note that by default, both functions are implemented in common.c */
-
-#ifdef VMS
-#define getopt local_getopt
-#define optind local_optind
-#define opterr local_opterr
-#endif
 
 #ifdef __cplusplus
   extern "C" {
 #endif
 
-  extern int    opterr;
-  extern int    optind;
-  extern char*  optarg;
-
-  extern int  getopt(
-#ifdef __STDC__
-    int           argc,
-    char* const*  argv,
-    const char*   pattern
-#endif
-  );
-
-
-  extern char*  ft_basename(
-#ifdef __STDC__
-    const char*  name
-#endif
-  );
+  extern char*
+  ft_basename( const char*  name );
 
   /* print a message and exit */
-  extern void  Panic(
-#ifdef __STDC__
-    const char*  fmt, ...
-#endif
-  );
+  extern void
+  Panic( const char*  fmt,
+         ... );
 
-  /* read the next UTF-8 code from `*pcursor' and
+  /*
+   * Read the next UTF-8 code from `*pcursor' and
    * returns its value. `end' is the limit of the
    * input string.
    *
-   * return -1 if the end of the input string is
-   * reached, or in case of malformed data
+   * Return -1 if the end of the input string is
+   * reached, or in case of malformed data.
    */
-  extern int  utf8_next(
-#ifdef __STDC__
-    const char** pcursor,
-    const char*  end
-#endif
-  );
+  extern int
+  utf8_next( const char**  pcursor,
+             const char*   end );
 
 #ifdef __cplusplus
   }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ft2demos-2.6.5/src/ftbench.1 
new/ft2demos-2.7/src/ftbench.1
--- old/ft2demos-2.6.5/src/ftbench.1    2016-07-12 07:29:55.000000000 +0200
+++ new/ft2demos-2.7/src/ftbench.1      2016-09-08 10:06:57.000000000 +0200
@@ -1,5 +1,5 @@
 '\" t
-.TH FTVIEW 1 "July 2016" "Freetype 2.6.5"
+.TH FTVIEW 1 "September 2016" "Freetype 2.7"
 .
 .
 .SH NAME
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ft2demos-2.6.5/src/ftbench.c 
new/ft2demos-2.7/src/ftbench.c
--- old/ft2demos-2.6.5/src/ftbench.c    2016-05-29 10:21:19.000000000 +0200
+++ new/ft2demos-2.7/src/ftbench.c      2016-08-26 11:45:49.000000000 +0200
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*  The FreeType project -- a free and portable quality TrueType renderer.  */
 /*                                                                          */
-/*  Copyright 2002-2006, 2009, 2010, 2013, 2014 by                          */
+/*  Copyright 2002-2016 by                                                  */
 /*  D. Turner, R.Wilhelm, and W. Lemberg                                    */
 /*                                                                          */
 /*  ftbench: bench some common FreeType call paths                          */
@@ -31,7 +31,9 @@
 #include FT_TRUETYPE_DRIVER_H
 
 #ifdef UNIX
-#include <sys/time.h>
+#include <unistd.h>
+#else
+#include "mlgetopt.h"
 #endif
 
 #include "common.h"
@@ -159,22 +161,27 @@
 
 
   /*
-   * timer
+   * timer in milliseconds
    */
 
   static double
   get_time( void )
   {
-#ifdef UNIX
-    struct timeval  tv;
+#if defined _POSIX_TIMERS && _POSIX_TIMERS > 0
+    struct timespec  tv;
 
 
-    gettimeofday( &tv, NULL );
-    return (double)tv.tv_sec + (double)tv.tv_usec / 1E6;
+#ifdef _POSIX_CPUTIME
+    clock_gettime( CLOCK_PROCESS_CPUTIME_ID, &tv );
 #else
-    /* clock() has an awful precision (~10ms) under Linux 2.4 + glibc 2.2 */
-    return (double)clock() / (double)CLOCKS_PER_SEC;
-#endif
+    clock_gettime( CLOCK_REALTIME, &tv );
+#endif /* _POSIX_CPUTIME */
+
+    return 1E6 * (double)tv.tv_sec + 1E-3 * (double)tv.tv_nsec;
+#else
+    /* clock() accuracy has improved since glibc 2.18 */
+    return 1E6 * (double)clock() / (double)CLOCKS_PER_SEC;
+#endif /* _POSIX_TIMERS */
   }
 
 #define TIMER_START( timer )  ( timer )->t0 = get_time()
@@ -213,11 +220,10 @@
     printf( "  %-25s ", test->title );
     fflush( stdout );
 
-    n = done = 0;
     TIMER_RESET( &timer );
     TIMER_RESET( &elapsed );
 
-    for ( n = 0; !max_iter || n < max_iter; n++ )
+    for ( n = 0, done = 0; !max_iter || n < max_iter; n++ )
     {
       TIMER_START( &elapsed );
 
@@ -225,12 +231,12 @@
 
       TIMER_STOP( &elapsed );
 
-      if ( TIMER_GET( &elapsed ) > max_time )
+      if ( TIMER_GET( &elapsed ) > 1E6 * max_time )
         break;
     }
 
     if ( done )
-      printf( "%5.3f us/op\n", TIMER_GET( &timer ) * 1E6 / (double)done );
+      printf( "%5.3f us/op\n", TIMER_GET( &timer ) / (double)done );
     else
       printf( "no error-free calls\n" );
   }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ft2demos-2.6.5/src/ftcommon.c 
new/ft2demos-2.7/src/ftcommon.c
--- old/ft2demos-2.6.5/src/ftcommon.c   2016-05-21 11:29:30.000000000 +0200
+++ new/ft2demos-2.7/src/ftcommon.c     2016-08-26 11:45:49.000000000 +0200
@@ -352,7 +352,8 @@
   FT_Error
   FTDemo_Install_Font( FTDemo_Handle*  handle,
                        const char*     filepath,
-                       FT_Bool         outline_only )
+                       FT_Bool         outline_only,
+                       FT_Bool         no_instances )
   {
     static char   filename[1024 + 5];
     long          i, num_faces;
@@ -390,7 +391,7 @@
       error = FT_New_Face( handle->library, filename, -( i + 1 ), &face );
       if ( error )
         continue;
-      instance_count = face->style_flags >> 16;
+      instance_count = no_instances ? 0 : face->style_flags >> 16;
       FT_Done_Face( face );
 
       /* load face with and without named instances */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ft2demos-2.6.5/src/ftcommon.h 
new/ft2demos-2.7/src/ftcommon.h
--- old/ft2demos-2.6.5/src/ftcommon.h   2016-02-03 19:09:37.000000000 +0100
+++ new/ft2demos-2.7/src/ftcommon.h     2016-08-26 11:45:49.000000000 +0200
@@ -222,7 +222,8 @@
   FT_Error
   FTDemo_Install_Font( FTDemo_Handle*  handle,
                        const char*     filepath,
-                       FT_Bool         outline_only );
+                       FT_Bool         outline_only,
+                       FT_Bool         no_instances );
 
 
   void
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ft2demos-2.6.5/src/ftdiff.1 
new/ft2demos-2.7/src/ftdiff.1
--- old/ft2demos-2.6.5/src/ftdiff.1     2016-07-12 07:29:55.000000000 +0200
+++ new/ft2demos-2.7/src/ftdiff.1       2016-09-08 10:06:57.000000000 +0200
@@ -1,4 +1,4 @@
-.TH FTDIFF 1 "July 2016" "FreeType 2.6.5"
+.TH FTDIFF 1 "September 2016" "FreeType 2.7"
 .
 .
 .SH NAME
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ft2demos-2.6.5/src/ftdiff.c 
new/ft2demos-2.7/src/ftdiff.c
--- old/ft2demos-2.6.5/src/ftdiff.c     2016-05-21 16:11:53.000000000 +0200
+++ new/ft2demos-2.7/src/ftdiff.c       2016-08-26 11:45:49.000000000 +0200
@@ -15,6 +15,7 @@
 
 #include "ftcommon.h"
 #include "common.h"
+#include "mlgetopt.h"
 
 #include FT_OUTLINE_H
 #include FT_LCD_FILTER_H
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ft2demos-2.6.5/src/ftdump.1 
new/ft2demos-2.7/src/ftdump.1
--- old/ft2demos-2.6.5/src/ftdump.1     2016-07-12 07:29:55.000000000 +0200
+++ new/ft2demos-2.7/src/ftdump.1       2016-09-08 10:06:57.000000000 +0200
@@ -1,4 +1,4 @@
-.TH FTDUMP 1 "July 2016" "FreeType 2.6.5"
+.TH FTDUMP 1 "September 2016" "FreeType 2.7"
 .
 .
 .SH NAME
@@ -29,6 +29,10 @@
 Print SFNT name tables.
 .
 .TP
+.B \-p
+Print TrueType programs.
+.
+.TP
 .B \-u
 Emit UTF-8.
 .
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ft2demos-2.6.5/src/ftdump.c 
new/ft2demos-2.7/src/ftdump.c
--- old/ft2demos-2.6.5/src/ftdump.c     2016-02-03 19:09:37.000000000 +0100
+++ new/ft2demos-2.7/src/ftdump.c       2016-08-26 11:45:49.000000000 +0200
@@ -13,6 +13,7 @@
 #include FT_SFNT_NAMES_H
 #include FT_TRUETYPE_IDS_H
 #include FT_TRUETYPE_TABLES_H
+#include FT_TRUETYPE_TAGS_H
 #include FT_MULTIPLE_MASTERS_H
 
   /* the following header shouldn't be used in normal programs */
@@ -25,6 +26,7 @@
 
 #include "common.h"
 #include "output.h"
+#include "mlgetopt.h"
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -36,6 +38,7 @@
   static int  comma_flag  = 0;
   static int  verbose     = 0;
   static int  name_tables = 0;
+  static int  bytecode    = 0;
   static int  utf8        = 0;
 
 
@@ -73,6 +76,7 @@
 
     fprintf( stderr,
       "  -n        Print SFNT name tables.\n"
+      "  -p        Print TrueType programs.\n"
       "  -u        Emit UTF8.\n"
       "  -V        Be verbose.\n"
       "\n"
@@ -521,6 +525,188 @@
   }
 
 
+  static void
+  Print_Bytecode( FT_Byte*   buffer,
+                  FT_UShort  length,
+                  char*      tag )
+  {
+    FT_UShort  i;
+    int        j = 0;  /* status counter */
+
+
+    for ( i = 0; i < length; i++ )
+    {
+      if ( ( i & 15 ) == 0 )
+        printf( "\n%s:%04hx ", tag, i );
+
+      if ( j == 0 )
+      {
+        printf( " %02x", (FT_UInt)buffer[i] );
+
+        if ( buffer[i] == 0x40 )
+          j = -1;
+        else if ( buffer[i] == 0x41 )
+          j = -2;
+        else if ( 0xB0 <= buffer[i] && buffer[i] <= 0xB7 )
+          j = buffer[i] - 0xAF;
+        else if ( 0xB8 <= buffer[i] && buffer[i] <= 0xBF )
+          j = 2 * ( buffer[i] - 0xB7 );
+      }
+      else
+      {
+        printf( "_%02x", (FT_UInt)buffer[i] );
+
+        if ( j == -1 )
+          j = buffer[i];
+        else if ( j == -2 )
+          j = 2 * buffer[i];
+        else
+          j--;
+      }
+    }
+    printf( "\n" );
+  }
+
+
+  static void
+  Print_Programs( FT_Face face )
+  {
+    FT_ULong    length = 0;
+    FT_UShort   i;
+    FT_Byte*    buffer = NULL;
+    FT_Byte*    offset = NULL;
+
+    TT_Header*      head;
+    TT_MaxProfile*  maxp;
+
+
+    error = FT_Load_Sfnt_Table( face, TTAG_fpgm, 0, NULL, &length );
+    if ( error || length == 0 )
+      goto Prep;
+
+    buffer = (FT_Byte*)malloc( length );
+    if ( buffer == NULL )
+      goto Exit;
+
+    error = FT_Load_Sfnt_Table( face, TTAG_fpgm, 0, buffer, &length );
+    if ( error )
+      goto Exit;
+
+    printf( "font program" );
+    Print_Bytecode( buffer, (FT_UShort)length, (char*)"fpgm" );
+
+  Prep:
+    length = 0;
+
+    error = FT_Load_Sfnt_Table( face, TTAG_prep, 0, NULL, &length );
+    if ( error || length == 0 )
+      goto Glyf;
+
+    buffer = (FT_Byte*)realloc( buffer, length );
+    if ( buffer == NULL )
+      goto Exit;
+
+    error = FT_Load_Sfnt_Table( face, TTAG_prep, 0, buffer, &length );
+    if ( error )
+      goto Exit;
+
+    printf( "\ncontrol value program" );
+    Print_Bytecode( buffer, (FT_UShort)length, (char*)"prep" );
+
+  Glyf:
+    length = 0;
+
+    error = FT_Load_Sfnt_Table( face, TTAG_glyf, 0, NULL, &length );
+    if ( error || length == 0 )
+      goto Exit;
+
+    buffer = (FT_Byte*)realloc( buffer, length );
+    if ( buffer == NULL )
+      goto Exit;
+
+    error = FT_Load_Sfnt_Table( face, TTAG_glyf, 0, buffer, &length );
+    if ( error )
+      goto Exit;
+
+    length = 0;
+
+    error = FT_Load_Sfnt_Table( face, TTAG_loca, 0, NULL, &length );
+    if ( error || length == 0 )
+      goto Exit;
+
+    offset = (FT_Byte*)malloc( length );
+    if ( offset == NULL )
+      goto Exit;
+
+    error = FT_Load_Sfnt_Table( face, TTAG_loca, 0, offset, &length );
+    if ( error )
+      goto Exit;
+
+    head =     (TT_Header*)FT_Get_Sfnt_Table( face, FT_SFNT_HEAD );
+    maxp = (TT_MaxProfile*)FT_Get_Sfnt_Table( face, FT_SFNT_MAXP );
+
+    for ( i = 0; i < maxp->numGlyphs; i++ )
+    {
+      FT_UInt32  loc;
+      FT_UInt16  len;
+      char       tag[5];
+
+
+      if ( head->Index_To_Loc_Format )
+        loc = (FT_UInt32)offset[4 * i    ] << 24 |
+              (FT_UInt32)offset[4 * i + 1] << 16 |
+              (FT_UInt32)offset[4 * i + 2] << 8  |
+              (FT_UInt32)offset[4 * i + 3];
+      else
+        loc = (FT_UInt32)offset[2 * i    ] << 9 |
+              (FT_UInt32)offset[2 * i + 1] << 1;
+
+      len = (FT_UInt16)( buffer[loc] << 8 | buffer[loc + 1] );
+
+      loc += 10;
+
+      if ( (FT_Int16)len < 0 )  /* composite */
+      {
+        FT_UShort  flags;
+
+
+        do
+        {
+          flags = (FT_UInt16)( buffer[loc] << 8 | buffer[loc + 1] );
+
+          loc += 4;
+
+          loc += flags & FT_SUBGLYPH_FLAG_ARGS_ARE_WORDS ? 4 : 2;
+
+          loc += flags & FT_SUBGLYPH_FLAG_SCALE ? 2
+                   : flags & FT_SUBGLYPH_FLAG_XY_SCALE ? 4
+                       : flags & FT_SUBGLYPH_FLAG_2X2 ? 8 : 0;
+        } while ( flags & 0x20 );  /* more components */
+
+        if ( ( flags & 0x100 ) == 0 )
+          continue;
+      }
+      else
+        loc += 2 * len;
+
+      len = (FT_UInt16)( buffer[loc] << 8 | buffer[loc + 1] );
+
+      if ( len == 0 )
+        continue;
+
+      loc += 2;
+
+      sprintf( tag, "%04hx", i );
+      printf("\nglyf program %hd (%.4s)", i, tag );
+      Print_Bytecode( buffer + loc, len, tag );
+    }
+
+  Exit:
+    free( buffer );
+    free( offset );
+  }
+
+
   int
   main( int    argc,
         char*  argv[] )
@@ -545,7 +731,7 @@
 
     while ( 1 )
     {
-      option = getopt( argc, argv, "nuvV" );
+      option = getopt( argc, argv, "npuvV" );
 
       if ( option == -1 )
         break;
@@ -556,6 +742,10 @@
         name_tables = 1;
         break;
 
+      case 'p':
+        bytecode = 1;
+        break;
+
       case 'u':
         utf8 = 1;
         break;
@@ -653,6 +843,12 @@
         Print_Sfnt_Names( face );
       }
 
+      if ( bytecode && FT_IS_SFNT( face ) )
+      {
+        printf( "\n" );
+        Print_Programs( face );
+      }
+
       if ( face->num_fixed_sizes )
       {
         printf( "\n" );
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ft2demos-2.6.5/src/ftgamma.1 
new/ft2demos-2.7/src/ftgamma.1
--- old/ft2demos-2.6.5/src/ftgamma.1    2016-07-12 07:29:55.000000000 +0200
+++ new/ft2demos-2.7/src/ftgamma.1      2016-09-08 10:06:57.000000000 +0200
@@ -1,4 +1,4 @@
-.TH FTGAMMA 1 "July 2016" "FreeType 2.6.5"
+.TH FTGAMMA 1 "September 2016" "FreeType 2.7"
 .
 .
 .SH NAME
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ft2demos-2.6.5/src/ftgamma.c 
new/ft2demos-2.7/src/ftgamma.c
--- old/ft2demos-2.6.5/src/ftgamma.c    2016-05-21 11:38:06.000000000 +0200
+++ new/ft2demos-2.7/src/ftgamma.c      2016-08-26 11:45:49.000000000 +0200
@@ -17,9 +17,9 @@
 
   static FTDemo_Display*  display;
 
-  grBitmap   bit1 = { 300, 600, 600, gr_pixel_mode_gray, 256, NULL };
-  grBitmap   bit2 = { 300, 600, 600, gr_pixel_mode_gray, 256, NULL };
-  grBitmap*  bit;
+  static grBitmap   bit1 = { 300, 600, 600, gr_pixel_mode_gray, 256, NULL };
+  static grBitmap   bit2 = { 300, 600, 600, gr_pixel_mode_gray, 256, NULL };
+  static grBitmap*  bit;
 
 
   static void
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ft2demos-2.6.5/src/ftgrid.1 
new/ft2demos-2.7/src/ftgrid.1
--- old/ft2demos-2.6.5/src/ftgrid.1     2016-07-12 07:29:55.000000000 +0200
+++ new/ft2demos-2.7/src/ftgrid.1       2016-09-08 10:06:57.000000000 +0200
@@ -1,4 +1,4 @@
-.TH FTGRID 1 "July 2016" "Freetype 2.6.5"
+.TH FTGRID 1 "September 2016" "Freetype 2.7"
 .
 .
 .SH NAME
@@ -64,6 +64,13 @@
 Specify first index to display (default: 0).
 .
 .TP
+.BI "\-d\ \(dq" "axis1\ axis2\ .\|.\|." \(dq
+For Multiple Master or GX fonts, specify design coordinates for each axis at
+start-up.
+If this option is given, no named instances are shown.
+Ignored for all other font formats.
+.
+.TP
 .B \-v
 Show version.
 .
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ft2demos-2.6.5/src/ftgrid.c 
new/ft2demos-2.7/src/ftgrid.c
--- old/ft2demos-2.6.5/src/ftgrid.c     2016-05-21 22:39:12.000000000 +0200
+++ new/ft2demos-2.7/src/ftgrid.c       2016-08-26 11:45:49.000000000 +0200
@@ -16,6 +16,8 @@
 #include "ftcommon.h"
 #include "common.h"
 #include "output.h"
+#include "mlgetopt.h"
+#include <stdlib.h>
 
   /* the following header shouldn't be used in normal programs */
 #include FT_INTERNAL_DEBUG_H
@@ -146,6 +148,8 @@
     FT_MM_Var*   mm;
     char*        axis_name[MAX_MM_AXES];
     FT_Fixed     design_pos[MAX_MM_AXES];
+    FT_Fixed     requested_pos[MAX_MM_AXES];
+    FT_UInt      requested_cnt;
     FT_UInt      current_axis;
     FT_UInt      used_num_axis;
 
@@ -203,7 +207,7 @@
                                FTDemo_Handle*  handle )
   {
     FT_Size     size;
-    FT_Error    err = FTDemo_Get_Size( handle, &size );
+    FT_Error    err    = FTDemo_Get_Size( handle, &size );
     FT_F26Dot6  margin = 4;
 
 
@@ -1322,6 +1326,7 @@
     FT_Error         err;
     FT_Size          size;
     FT_UInt          n, num_names;
+    FT_Int           instance_index;
     FT_Multi_Master  dummy;
     int              num_indices, is_GX;
 
@@ -1364,6 +1369,9 @@
 
     num_names = FT_Get_Sfnt_Name_Count( size->face );
 
+    /* in `face_index', the instance index starts with value 1 */
+    instance_index = ( size->face->face_index >> 16 ) - 1;
+
     for ( n = 0; n < MAX_MM_AXES; n++ )
     {
       free( status.axis_name[n] );
@@ -1372,7 +1380,21 @@
 
     for ( n = 0; n < status.used_num_axis; n++ )
     {
-      status.design_pos[n] = status.mm->axis[n].def;
+      if ( status.requested_cnt )
+      {
+        status.design_pos[n] = n < status.requested_cnt
+                                 ? status.requested_pos[n]
+                                 : status.mm->axis[n].def;
+        if ( status.design_pos[n] < status.mm->axis[n].minimum )
+          status.design_pos[n] = status.mm->axis[n].minimum;
+        else if ( status.design_pos[n] > status.mm->axis[n].maximum )
+          status.design_pos[n] = status.mm->axis[n].maximum;
+      }
+      else if ( FT_IS_NAMED_INSTANCE( size->face ) )
+        status.design_pos[n] = status.mm->namedstyle[instance_index].
+                                          coords[n];
+      else
+        status.design_pos[n] = status.mm->axis[n].def;
 
       if ( is_GX )
       {
@@ -1796,6 +1818,9 @@
     fprintf( stderr,
       "  -r R      Use resolution R dpi (default: 72dpi).\n"
       "  -f index  Specify first index to display (default: 0).\n"
+      "  -d \"axis1 axis2 ...\"\n"
+      "            Specify the design coordinates for each\n"
+      "            Multiple Master axis at start-up.\n"
       "\n"
       "  -v        Show version."
       "\n" );
@@ -1816,13 +1841,32 @@
 
     while ( 1 )
     {
-      option = getopt( *argc, *argv, "f:h:r:vw:" );
+      option = getopt( *argc, *argv, "d:f:h:r:vw:" );
 
       if ( option == -1 )
         break;
 
       switch ( option )
       {
+      case 'd':
+        {
+          FT_UInt    cnt;
+          FT_Fixed*  pos = status.requested_pos;
+          char*      s   = optarg;
+
+
+          for ( cnt = 0; cnt < MAX_MM_AXES && *s; cnt++ )
+          {
+            pos[cnt] = (FT_Fixed)( strtod( s, &s ) * 65536.0 );
+
+            while ( *s == ' ' )
+              ++s;
+          }
+
+          status.requested_cnt = cnt;
+        }
+        break;
+
       case 'f':
         status.Num = atoi( optarg );
         break;
@@ -1944,7 +1988,8 @@
 
     for ( ; argc > 0; argc--, argv++ )
     {
-      error = FTDemo_Install_Font( handle, argv[0], 1 );
+      error = FTDemo_Install_Font( handle, argv[0], 1,
+                                   status.requested_cnt ? 1 : 0 );
       if ( error == FT_Err_Invalid_Argument )
         fprintf( stderr, "skipping font `%s' without outlines\n",
                          argv[0] );
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ft2demos-2.6.5/src/ftinspect.pro 
new/ft2demos-2.7/src/ftinspect.pro
--- old/ft2demos-2.6.5/src/ftinspect.pro        2016-07-05 18:04:37.000000000 
+0200
+++ new/ft2demos-2.7/src/ftinspect.pro  2016-09-08 10:06:57.000000000 +0200
@@ -11,7 +11,7 @@
   PKGCONFIG += libpng harfbuzz zlib bzip2
 }
 win32 {
-  LIBS += ../../freetyp2/objs/vc2010/freetype264.lib
+  LIBS += ../../freetyp2/objs/vc2010/freetype27.lib
   LIBS += -lpng -lharfbuzz -lz -lbz2 -lm
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ft2demos-2.6.5/src/ftlint.1 
new/ft2demos-2.7/src/ftlint.1
--- old/ft2demos-2.6.5/src/ftlint.1     2016-07-12 07:29:55.000000000 +0200
+++ new/ft2demos-2.7/src/ftlint.1       2016-09-08 10:06:57.000000000 +0200
@@ -1,4 +1,4 @@
-.TH FTLINT 1 "July 2016" "Freetype 2.6.5"
+.TH FTLINT 1 "September 2016" "Freetype 2.7"
 .
 .
 .SH NAME
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ft2demos-2.6.5/src/ftmulti.1 
new/ft2demos-2.7/src/ftmulti.1
--- old/ft2demos-2.6.5/src/ftmulti.1    2016-07-12 07:29:55.000000000 +0200
+++ new/ft2demos-2.7/src/ftmulti.1      2016-09-08 10:06:57.000000000 +0200
@@ -1,4 +1,4 @@
-.TH FTMULTI 1 "July 2016" "Freetype 2.6.5"
+.TH FTMULTI 1 "September 2016" "Freetype 2.7"
 .
 .
 .SH NAME
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ft2demos-2.6.5/src/ftmulti.c 
new/ft2demos-2.7/src/ftmulti.c
--- old/ft2demos-2.6.5/src/ftmulti.c    2016-05-21 12:08:44.000000000 +0200
+++ new/ft2demos-2.7/src/ftmulti.c      2016-08-26 11:45:49.000000000 +0200
@@ -17,6 +17,7 @@
 #include FT_MULTIPLE_MASTERS_H
 
 #include "common.h"
+#include "mlgetopt.h"
 
 #include <stdio.h>
 #include <stdlib.h>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ft2demos-2.6.5/src/ftstring.1 
new/ft2demos-2.7/src/ftstring.1
--- old/ft2demos-2.6.5/src/ftstring.1   2016-07-12 07:29:55.000000000 +0200
+++ new/ft2demos-2.7/src/ftstring.1     2016-09-08 10:06:57.000000000 +0200
@@ -1,4 +1,4 @@
-.TH FTSTRING 1 "July 2016" "Freetype 2.6.5"
+.TH FTSTRING 1 "September 2016" "Freetype 2.7"
 .
 .
 .SH NAME
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ft2demos-2.6.5/src/ftstring.c 
new/ft2demos-2.7/src/ftstring.c
--- old/ft2demos-2.6.5/src/ftstring.c   2016-05-21 12:21:27.000000000 +0200
+++ new/ft2demos-2.7/src/ftstring.c     2016-08-26 11:45:49.000000000 +0200
@@ -13,6 +13,7 @@
 
 #include "ftcommon.h"
 #include "common.h"
+#include "mlgetopt.h"
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -665,7 +666,7 @@
 
     for ( ; argc > 0; argc--, argv++ )
     {
-      error = FTDemo_Install_Font( handle, argv[0], 0 );
+      error = FTDemo_Install_Font( handle, argv[0], 0, 0 );
 
       if ( error )
       {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ft2demos-2.6.5/src/ftvalid.1 
new/ft2demos-2.7/src/ftvalid.1
--- old/ft2demos-2.6.5/src/ftvalid.1    2016-07-12 07:29:55.000000000 +0200
+++ new/ft2demos-2.7/src/ftvalid.1      2016-09-08 10:06:57.000000000 +0200
@@ -1,4 +1,4 @@
-.TH FTVALID 1 "July 2016" "FreeType 2.6.5"
+.TH FTVALID 1 "September 2016" "FreeType 2.7"
 .
 .
 .SH NAME
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ft2demos-2.6.5/src/ftvalid.c 
new/ft2demos-2.7/src/ftvalid.c
--- old/ft2demos-2.6.5/src/ftvalid.c    2016-05-21 12:28:33.000000000 +0200
+++ new/ft2demos-2.7/src/ftvalid.c      2016-08-26 11:45:49.000000000 +0200
@@ -32,6 +32,7 @@
 #include FT_INTERNAL_OBJECTS_H
 
 #include "common.h"
+#include "mlgetopt.h"
 
 
 #include <stdio.h>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ft2demos-2.6.5/src/ftview.1 
new/ft2demos-2.7/src/ftview.1
--- old/ft2demos-2.6.5/src/ftview.1     2016-07-12 07:29:55.000000000 +0200
+++ new/ft2demos-2.7/src/ftview.1       2016-09-08 10:06:57.000000000 +0200
@@ -1,4 +1,4 @@
-.TH FTVIEW 1 "July 2016" "FreeType 2.6.5"
+.TH FTVIEW 1 "September 2016" "FreeType 2.7"
 .
 .
 .SH NAME
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ft2demos-2.6.5/src/ftview.c 
new/ft2demos-2.7/src/ftview.c
--- old/ft2demos-2.6.5/src/ftview.c     2016-05-21 16:11:22.000000000 +0200
+++ new/ft2demos-2.7/src/ftview.c       2016-08-26 11:45:49.000000000 +0200
@@ -18,6 +18,7 @@
 
 #include "ftcommon.h"
 #include "common.h"
+#include "mlgetopt.h"
 #include <stdio.h>
 
   /* the following header shouldn't be used in normal programs */
@@ -1972,7 +1973,7 @@
       FTDemo_Set_Preload( handle, 1 );
 
     for ( ; argc > 0; argc--, argv++ )
-      FTDemo_Install_Font( handle, argv[0], 0 );
+      FTDemo_Install_Font( handle, argv[0], 0, 0 );
 
     if ( handle->num_fonts == 0 )
       Fatal( "could not find/open any font file" );
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ft2demos-2.6.5/src/mlgetopt.c 
new/ft2demos-2.7/src/mlgetopt.c
--- old/ft2demos-2.6.5/src/mlgetopt.c   1970-01-01 01:00:00.000000000 +0100
+++ new/ft2demos-2.7/src/mlgetopt.c     2016-08-26 11:45:49.000000000 +0200
@@ -0,0 +1,166 @@
+/*
+ *  This is a cheap replacement for getopt() because that routine is not
+ *  available on some platforms and behaves differently on other platforms.
+ *  This code was written from scratch without looking at any other
+ *  implementation.
+ *
+ *  This code is hereby expressly placed in the public domain.
+ *  [email protected] (Mark Leisher)
+ *  10 October 1997
+ *
+ *  Last update 2009-03-11.
+ */
+
+#include "mlgetopt.h"
+
+#include <stdio.h>
+#include <stdarg.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifdef __STDC__
+#define CONST  const
+#else
+#define CONST
+#endif
+
+  /*
+   *  Externals visible to programs.
+   */
+
+  int    opterr = 1;
+  int    optind = 1;
+  char*  optarg;
+
+  /*
+   *  Internal variables that are used to detect when the global values
+   *  need to be reset.
+   */
+
+  static int  cmdac;
+  static CONST char*   cmdname;
+  static char* CONST*  cmdav;
+
+  int
+#ifdef __STDC__
+  getopt( int  ac, char* const*  av, const char*  pat )
+#else
+  getopt( ac, av, pat )
+    int     ac;
+    char**  av;
+    char*   pat;
+#endif
+  {
+    int  opt;
+    CONST char*  p;
+    CONST char*  pp;
+
+    /*
+     *  If there is no pattern, indicate the parsing is done.
+     */
+    if ( pat == 0 || *pat == 0 )
+      return -1;
+
+    /*
+     *  Always reset the option argument to NULL.
+     */
+    optarg = 0;
+
+    /*
+     *  If the number of arguments or argument list do not match the last
+     *  values seen, reset the internal pointers and the globals.
+     */
+    if ( ac != cmdac || av != cmdav )
+    {
+      optind = 1;
+      cmdac = ac;
+      cmdav = av;
+
+      /*
+       *  Determine the command name in case it is needed for warning
+       *  messages.
+       */
+      for ( cmdname = 0, p = av[0]; *p; p++ )
+      {
+        if ( *p == '/' || *p == '\\' )
+          cmdname = p;
+      }
+      /*
+       *  Skip the path separator if the name was assigned.
+       */
+      if ( cmdname )
+        cmdname++;
+      else
+        cmdname = av[0];
+    }
+
+    /*
+     *  If the next index is greater than or equal to the number of
+     *  arguments, then the command line is done.
+     */
+    if ( optind >= ac )
+      return -1;
+
+    /*
+     *  Test the next argument for one of three cases:
+     *    1. The next argument does not have an initial '-'.
+     *    2. The next argument is '-'.
+     *    3. The next argument is '--'.
+     *
+     *  In either of these cases, command line processing is done.
+     */
+    if ( av[optind][0] != '-'            ||
+         strcmp( av[optind], "-" ) == 0  ||
+         strcmp( av[optind], "--" ) == 0 )
+      return -1;
+
+    /*
+     *  Point at the next command line argument and increment the
+     *  command line index.
+     */
+    p = av[optind++];
+
+    /*
+     *  Look for the first character of the command line option.
+     */
+    for ( opt = *(p + 1), pp = pat; *pp && *pp != opt; pp++ )
+      ;
+
+    /*
+     *  If nothing in the pattern was recognized, then issue a warning
+     *  and return a '?'.
+     */
+    if ( *pp == 0 )
+    {
+      if ( opterr )
+        fprintf( stderr, "%s: invalid option -- %c\n", cmdname, opt );
+      return '?';
+    }
+
+    /*
+     *  If the option expects an argument, get it.
+     */
+    if ( *(pp + 1) == ':' && (optarg = av[optind]) == 0 )
+    {
+      /*
+       *  If the option argument is NULL, issue a warning and return a '?'.
+       */
+      if ( opterr )
+        fprintf( stderr, "%s: option requires an argument -- %c\n",
+                         cmdname, opt );
+      opt = '?';
+    }
+    else if ( optarg )
+    /*
+     *  Increment the option index past the argument.
+     */
+      optind++;
+
+    /*
+     *  Return the option character.
+     */
+    return opt;
+  }
+
+
+/* End */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ft2demos-2.6.5/src/mlgetopt.h 
new/ft2demos-2.7/src/mlgetopt.h
--- old/ft2demos-2.6.5/src/mlgetopt.h   1970-01-01 01:00:00.000000000 +0100
+++ new/ft2demos-2.7/src/mlgetopt.h     2016-08-26 11:45:49.000000000 +0200
@@ -0,0 +1,42 @@
+/*
+ *  This is a cheap replacement for getopt() because that routine is not
+ *  available on some platforms and behaves differently on other platforms.
+ *
+ *  This code is hereby expressly placed in the public domain.
+ *  [email protected] (Mark Leisher)
+ *  10 October 1997
+ */
+
+#ifndef MLGETOPT_H_
+#define MLGETOPT_H_
+
+#ifdef VMS
+#define getopt local_getopt
+#define optind local_optind
+#define opterr local_opterr
+#endif
+
+#ifdef __cplusplus
+  extern "C" {
+#endif
+
+  extern int    opterr;
+  extern int    optind;
+  extern char*  optarg;
+
+  extern int  getopt(
+#ifdef __STDC__
+    int           argc,
+    char* const*  argv,
+    const char*   pattern
+#endif
+  );
+
+#ifdef __cplusplus
+  }
+#endif
+
+#endif /* MLGETOPT_H_ */
+
+
+/* End */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ft2demos-2.6.5/src/ttdebug.1 
new/ft2demos-2.7/src/ttdebug.1
--- old/ft2demos-2.6.5/src/ttdebug.1    2016-07-12 07:29:55.000000000 +0200
+++ new/ft2demos-2.7/src/ttdebug.1      2016-09-08 10:06:57.000000000 +0200
@@ -1,4 +1,4 @@
-.TH TTDEBUG 1 "July 2016" "FreeType 2.6.5"
+.TH TTDEBUG 1 "September 2016" "FreeType 2.7"
 .
 .
 .SH NAME
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ft2demos-2.6.5/src/ttdebug.c 
new/ft2demos-2.7/src/ttdebug.c
--- old/ft2demos-2.6.5/src/ttdebug.c    2016-05-26 08:12:12.000000000 +0200
+++ new/ft2demos-2.7/src/ttdebug.c      2016-08-26 11:45:49.000000000 +0200
@@ -51,6 +51,7 @@
 #include <ft2build.h>
 #include FT_FREETYPE_H
 #include "common.h"
+#include "mlgetopt.h"
 
 #include FT_TRUETYPE_DRIVER_H
 


Reply via email to