Hello community,

here is the log from the commit of package hxtools for openSUSE:Factory checked 
in at 2020-07-14 07:58:56
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/hxtools (Old)
 and      /work/SRC/openSUSE:Factory/.hxtools.new.3060 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "hxtools"

Tue Jul 14 07:58:56 2020 rev:40 rq:820536 version:20200712

Changes:
--------
--- /work/SRC/openSUSE:Factory/hxtools/hxtools.changes  2020-04-29 
20:53:27.677146159 +0200
+++ /work/SRC/openSUSE:Factory/.hxtools.new.3060/hxtools.changes        
2020-07-14 07:59:50.661897411 +0200
@@ -1,0 +2,9 @@
+Sun Jul 12 09:55:18 UTC 2020 - Jan Engelhardt <[email protected]>
+
+- Update to release 20200712
+  * profile: add QUILT_COLORS
+  * bsvplay: Pianoman MUS support
+  * pcmmix: new utility for arpeggio/polyphonic mixing of
+    bsvplay/qplay outputs
+
+-------------------------------------------------------------------

Old:
----
  hxtools-20200428.tar.asc
  hxtools-20200428.tar.xz

New:
----
  hxtools-20200712.tar.asc
  hxtools-20200712.tar.xz

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

Other differences:
------------------
++++++ hxtools.spec ++++++
--- /var/tmp/diff_new_pack.ZbgjkI/_old  2020-07-14 07:59:51.173899069 +0200
+++ /var/tmp/diff_new_pack.ZbgjkI/_new  2020-07-14 07:59:51.177899082 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           hxtools
-Version:        20200428
+Version:        20200712
 Release:        0
 Summary:        Collection of day-to-day tools (binaries)
 License:        GPL-2.0+ and WTFPL
@@ -139,7 +139,8 @@
 
 %description -n fd0ssh
 fd0ssh a helper program used by non-interactive programs, for example
-pam_mount, that want to pipe a password to ssh.
+pam_mount, that want to pipe a password to ssh. It works similar in
+spirit to expect(1), but implements much less features.
 
 %package -n ofl
 Summary:        Open File Lister from hxtools
@@ -199,6 +200,7 @@
 %_bindir/gxxdm
 %_bindir/hcdplay
 %_bindir/pcmdiff
+%_bindir/pcmmix
 %_bindir/proc_iomem_count
 %_bindir/proc_stat_parse
 %_bindir/qplay

++++++ hxtools-20200428.tar.xz -> hxtools-20200712.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hxtools-20200428/configure 
new/hxtools-20200712/configure
--- old/hxtools-20200428/configure      2020-04-28 23:16:35.897024624 +0200
+++ new/hxtools-20200712/configure      2020-07-12 11:44:59.919834895 +0200
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for hxtools 20200428.
+# Generated by GNU Autoconf 2.69 for hxtools 20200712.
 #
 #
 # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
@@ -577,8 +577,8 @@
 # Identity of this package.
 PACKAGE_NAME='hxtools'
 PACKAGE_TARNAME='hxtools'
-PACKAGE_VERSION='20200428'
-PACKAGE_STRING='hxtools 20200428'
+PACKAGE_VERSION='20200712'
+PACKAGE_STRING='hxtools 20200712'
 PACKAGE_BUGREPORT=''
 PACKAGE_URL=''
 
@@ -1301,7 +1301,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 hxtools 20200428 to adapt to many kinds of systems.
+\`configure' configures hxtools 20200712 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1367,7 +1367,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of hxtools 20200428:";;
+     short | recursive ) echo "Configuration of hxtools 20200712:";;
    esac
   cat <<\_ACEOF
 
@@ -1486,7 +1486,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-hxtools configure 20200428
+hxtools configure 20200712
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -1946,7 +1946,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by hxtools $as_me 20200428, which was
+It was created by hxtools $as_me 20200712, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -2811,7 +2811,7 @@
 
 # Define the identity of the package.
  PACKAGE='hxtools'
- VERSION='20200428'
+ VERSION='20200712'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -5936,7 +5936,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by hxtools $as_me 20200428, which was
+This file was extended by hxtools $as_me 20200712, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -6002,7 +6002,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; 
s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-hxtools config.status 20200428
+hxtools config.status 20200712
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hxtools-20200428/configure.ac 
new/hxtools-20200712/configure.ac
--- old/hxtools-20200428/configure.ac   2020-04-28 22:57:45.000000000 +0200
+++ new/hxtools-20200712/configure.ac   2020-07-12 11:44:16.000000000 +0200
@@ -1,4 +1,4 @@
-AC_INIT([hxtools], [20200428])
+AC_INIT([hxtools], [20200712])
 AC_CONFIG_AUX_DIR([build-aux])
 AC_CONFIG_HEADERS([config.h])
 AC_PROG_INSTALL
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hxtools-20200428/data/hxtools_bashrc.bash 
new/hxtools-20200712/data/hxtools_bashrc.bash
--- old/hxtools-20200428/data/hxtools_bashrc.bash       2020-04-28 
22:57:45.000000000 +0200
+++ new/hxtools-20200712/data/hxtools_bashrc.bash       2020-07-12 
11:44:16.000000000 +0200
@@ -110,26 +110,16 @@
 unset PS1_XTERM
 
 eval "$(/usr/bin/dircolors -b /usr/share/hxtools/hxtools_dircolors)";
+export QUILT_COLORS="diff_add=32:diff_rem=31:diff_hdr=1;37;44:diff_hunk=35"
 
 # Find out what options this machine's "ls" supports
 # Same option finding for "less"
 #
-if [[ "$(uname -s)" == Linux ]]; then
-       LESS="-Mi";
-       LS_OPTIONS="-NT0";
-       for i in --color=auto --group-dir; do
-               /bin/ls "$i" -d >/dev/null 2>&1 && LS_OPTIONS="$LS_OPTIONS $i";
-       done;
-else
-       unset LESS;
-       unset LS_OPTIONS;
-       for i in -M -i; do
-               less "$i" </dev/null >/dev/null 2>&1 && LESS="$LESS $i";
-       done;
-       for i in --color=auto --group-dir -N "-T 0"; do
-               /bin/ls "$i" -d >/dev/null 2>&1 && LS_OPTIONS="$LS_OPTIONS $i";
-       done;
-fi;
+LESS="-Mi"
+LS_OPTIONS="-NT0"
+for i in --color=auto --group-dir; do
+       /bin/ls "$i" -d >/dev/null 2>&1 && LS_OPTIONS="$LS_OPTIONS $i"
+done
 
 export LESS;
 export LS_OPTIONS;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hxtools-20200428/doc/Makefile.am 
new/hxtools-20200712/doc/Makefile.am
--- old/hxtools-20200428/doc/Makefile.am        2020-04-28 22:57:45.000000000 
+0200
+++ new/hxtools-20200712/doc/Makefile.am        2020-07-12 11:44:16.000000000 
+0200
@@ -35,6 +35,7 @@
        qplay.1 \
        qtar.1 \
        pcmdiff.1 \
+       pcmmix.1 \
        psthreads.1 \
        recursive_lower.1 \
        rezip.1 \
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hxtools-20200428/doc/Makefile.in 
new/hxtools-20200712/doc/Makefile.in
--- old/hxtools-20200428/doc/Makefile.in        2020-04-28 23:16:36.485025707 
+0200
+++ new/hxtools-20200712/doc/Makefile.in        2020-07-12 11:45:00.579837712 
+0200
@@ -296,6 +296,7 @@
        qplay.1 \
        qtar.1 \
        pcmdiff.1 \
+       pcmmix.1 \
        psthreads.1 \
        recursive_lower.1 \
        rezip.1 \
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hxtools-20200428/doc/NEWS.txt 
new/hxtools-20200712/doc/NEWS.txt
--- old/hxtools-20200428/doc/NEWS.txt   2020-04-28 22:57:45.000000000 +0200
+++ new/hxtools-20200712/doc/NEWS.txt   2020-07-12 11:44:16.000000000 +0200
@@ -1,4 +1,12 @@
 
+rel-20200712
+============
+* profile: add QUILT_COLORS
+* bsvplay: Pianoman MUS support
+* pcmmix: new utility for arpeggio/polyphonic mixing of
+  bsvplay/qplay outputs
+
+
 rel-20200428
 ============
 * vfontas: N2 vectorizer: cease smoothing of stub serifs
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hxtools-20200428/doc/bsvplay.1 
new/hxtools-20200712/doc/bsvplay.1
--- old/hxtools-20200428/doc/bsvplay.1  2020-04-28 22:57:45.000000000 +0200
+++ new/hxtools-20200712/doc/bsvplay.1  2020-07-12 11:44:16.000000000 +0200
@@ -1,18 +1,22 @@
 .TH bsvplay 1 "2008-02-06" "hxtools" "hxtools"
 .SH Name
 .PP
-bsvplay \(em convert BASICA music files to PCM
+bsvplay \(em convert BASICA music data to PCM
 .SH Syntax
 .PP
 \fBbsvplay\fP [\fB\-i\fP \fIpart\fP] [\fB\-q\fP \fIpart\fP] [\fB\-r\fP
 \fIrate\fP] [\fIfile\fP...] \fB| aplay \-f dat \-c 1\fP
 .SH Description
 .PP
-bsvplay will convert BASICA binary music files to linear 16-bit raw PCM.
+bsvplay will convert BASICA binary music data to linear 16-bit raw PCM.
 Normally, you will be wanting to pipe it into a raw PCM player like
 \fBaplay\fP(1) to actually output it to a sound device. Be sure to lower the
 volume beforehand to avoid nasty surprises that come with square waves. By
 default, bsvplay will mix 1:1 square:sine waves to give a medium tone hardness.
+.PP
+Do note that the music data is embedded in BSV/EXE/COM files and needs to
+be manually located. It is usually very evident from a regular pattern in
+hexdumps.
 .SH Options
 .TP
 \fB\-q\fP \fIpart\fP
@@ -25,6 +29,9 @@
 .TP
 \fB\-r\fP \fIrate\fP
 PCM sample rate (default: 48000 Hz)
+.TP
+\fB\-\-pianoman\fP
+Assume the input is Pianoman MUS.
 .SH File format
 .PP
 The BASICA format is defined 6-byte tuples of divisor, duration and pause.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hxtools-20200428/doc/pcmmix.1 
new/hxtools-20200712/doc/pcmmix.1
--- old/hxtools-20200428/doc/pcmmix.1   1970-01-01 01:00:00.000000000 +0100
+++ new/hxtools-20200712/doc/pcmmix.1   2020-07-12 11:44:16.000000000 +0200
@@ -0,0 +1,34 @@
+.TH pcmmix 1 "2020-07-11" "hxtools" "hxtools"
+.SH Name
+.PP
+pcmmix \(em PCM mixer
+.SH Syntax
+.PP
+\fBpcmmix\fP [\fB\-ap\fP] [\fB\-t\fP \fIp/q\fP] \fIfile\fP...
+.SH Description
+.PP
+pcmmix will mix two or more input streams (assumed to be LE16 PCM, and of
+the same number of channels). It can do so in either arpeggiated or
+polyphonic mode.
+.SH Options
+.PP
+\fB\-a\fP
+Select arpeggio mode.
+.PP
+\fB\-p\fP
+Select polyphony mode.
+.PP
+\fB\-r\fP \fIrate\fP
+Input sample rate (default: 48000).
+.PP
+\fB\-t\fP \fIp/q\fP
+Defines the length of one arpeggio block in which data from all input sources
+will be round-robined within, as p/q seconds. (default: 80/1086)
+.SH Examples
+.IP \(bu 4
+Entertainer from FOG: `pcmmix -t 160/1086 <(bsvplay --pianoman entrtan1.mus) 
<(bsvplay --pianoman entrtan2.mus) <(bsvplay --pianoman exe/entrtan3.mus) 
<(bsvplay --pianoman exe/entrtan4.mus) | aplay -fcd -r48000 -c1`
+.IP \(bu 4
+IHOLD from FOG: `pcmmix -t 80/1086 <(bsvplay --pianoman ihold1.mus) <(bsvplay 
--pianoman ihold2.mus) <(bsvplay --pianoman ihold3.mus) <(bsvplay --pianoman 
ihold4.mus) | aplay -fcd -r48000 -c1`
+.SH See also
+.PP
+\fBaplay\fP(1), \fBbsvplay\fP(1), \fBhxtools\fP(7), \fBqplay\fP(1)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hxtools-20200428/doc/vfontas.1 
new/hxtools-20200712/doc/vfontas.1
--- old/hxtools-20200428/doc/vfontas.1  2020-04-28 22:57:45.000000000 +0200
+++ new/hxtools-20200712/doc/vfontas.1  2020-07-12 11:44:16.000000000 +0200
@@ -61,6 +61,120 @@
 .PP
 vfontas (originally "VGA font file assembler") can transform raster font files
 in various ways.
+.SH Aspect ratio
+.PP
+CRT screens of the time commonly had an aspect ratio of 4:3, and whatever
+resolution was shown would be squeezed into that frame, potentially making the
+pixels non-square. This means that bitmap fonts of the time will need a
+corrective factor for modern display hardware to be reproduced faithfully. This
+correction can happen either during conversion (vfontas has no support for this
+at present), or at the time of rendering. The font can either be stretched in
+the vertical direction or compressed in the horizontal by using the reciprocal.
+.TS
+allbox tab(:);
+lB lB lB lB.
+T{
+Text res
+T}:T{
+Char size
+T}:T{
+Resolution
+T}:T{
+VStretch
+T}
+.T&
+l l l l.
+T{
+80x25
+T}:T{
+9x14
+T}:T{
+720x350
+T}:T{
+54/35 = 1.54
+T}
+.T&
+l l l l.
+T{
+40x25
+T}:T{
+8x8
+T}:T{
+320x200
+T}:T{
+6/5 = 1.2
+T}
+.T&
+l l l l.
+T{
+80x25
+T}:T{
+8x8
+T}:T{
+640x200
+T}:T{
+12/5 = 2.4
+T}
+.T&
+l l l l.
+T{
+80x25
+T}:T{
+8x14
+T}:T{
+640x350
+T}:T{
+48/35 = 1.37
+T}
+.T&
+l l l l.
+T{
+80x43
+T}:T{
+8x8
+T}:T{
+640x350
+T}:T{
+48/35 = 1.37
+T}
+.T&
+l l l l.
+T{
+80x25
+T}:T{
+9x16
+T}:T{
+720x400
+T}:T{
+27/20 = 1.35
+T}
+.T&
+l l l l.
+T{
+80x30
+T}:T{
+8x16
+T}:T{
+640x480
+T}:T{
+1.0
+T}
+.T&
+l l l l.
+T{
+80x50
+T}:T{
+9x8
+T}:T{
+720x400
+T}:T{
+27/20 = 1.35
+T}
+.T&
+l l l l.
+::x*y:x*y/3*4
+.TE
+.SH Commands
 .SS blankfnt
 .PP
 Initializes the memory buffer with 256 empty 8x16 glyphs. The primary purpose
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hxtools-20200428/examples/colortable 
new/hxtools-20200712/examples/colortable
--- old/hxtools-20200428/examples/colortable    2020-04-28 22:57:45.000000000 
+0200
+++ new/hxtools-20200712/examples/colortable    2020-07-12 11:44:16.000000000 
+0200
@@ -18,7 +18,7 @@
        }
 }
 
-for (my $bg = 0; $bg < 8; ++$bg) {
+for (my $bg = -1; $bg < 8; ++$bg) {
        for my $bit (0,1,7) {
                for $fg (30..37, 39) {
                        my $lo_fg = $fg - 30;
@@ -28,10 +28,14 @@
                        } elsif ($bit == 7) {
                                $lo_bg |= 8;
                        }
-                       printf"\e[0;$bit;$fg;4${bg}m%x%x", $lo_bg, $lo_fg;
+                       if ($bg == -1) {
+                               printf "\e[0;$bit;${fg}m%02x", $lo_fg;
+                       } else {
+                               printf "\e[0;$bit;$fg;4${bg}m%x%x", $lo_bg, 
$lo_fg;
+                       }
                }
        }
-       print"\e[0m\n";
+       print "\e[0m\n";
 }
 print "\e[1mbold\e[0m \e[2mdim\e[0m \e[3mitalic\e[0m \e[4munderscore\e[0m ",
       "\e[5mblink\e[0m \e[6mrapidblink\e[0m \e[7mreverse\e[0m\ndefault ",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hxtools-20200428/smm/.gitignore 
new/hxtools-20200712/smm/.gitignore
--- old/hxtools-20200428/smm/.gitignore 2020-04-28 22:57:45.000000000 +0200
+++ new/hxtools-20200712/smm/.gitignore 2020-07-12 11:44:16.000000000 +0200
@@ -1,5 +1,6 @@
 /bsvplay
 /hcdplay
 /pcmdiff
+/pcmmix
 /qplay
 /vfontas
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hxtools-20200428/smm/Makefile.am 
new/hxtools-20200712/smm/Makefile.am
--- old/hxtools-20200428/smm/Makefile.am        2020-04-28 22:57:45.000000000 
+0200
+++ new/hxtools-20200712/smm/Makefile.am        2020-07-12 11:44:16.000000000 
+0200
@@ -4,7 +4,7 @@
 AM_CFLAGS   = ${regular_CFLAGS}
 AM_CXXFLAGS = ${regular_CXXFLAGS}
 
-bin_PROGRAMS = bsvplay hcdplay pcmdiff qplay vfontas
+bin_PROGRAMS = bsvplay hcdplay pcmdiff pcmmix qplay vfontas
 dist_bin_SCRIPTS = aumeta extract_d3pkg extract_dxhog extract_f3pod \
        extract_qupak extract_dfqshared.pm gpsh mod2opus mkvappend ssa2srt
 
@@ -12,6 +12,7 @@
 bsvplay_LDADD   = ${libHX_LIBS} -lm
 hcdplay_LDADD   = ${libHX_LIBS}
 pcmdiff_LDADD   = ${libHX_LIBS}
+pcmmix_LDADD    = ${libHX_LIBS}
 qplay_SOURCES   = qplay.c pcspkr_pcm.c
 qplay_LDADD     = ${libHX_LIBS} -lm
 vfontas_SOURCES = vfontas.cpp vfalib.cpp vfalib.hpp
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hxtools-20200428/smm/Makefile.in 
new/hxtools-20200712/smm/Makefile.in
--- old/hxtools-20200428/smm/Makefile.in        2020-04-28 23:16:36.605025928 
+0200
+++ new/hxtools-20200712/smm/Makefile.in        2020-07-12 11:45:00.699838225 
+0200
@@ -90,7 +90,7 @@
 PRE_UNINSTALL = :
 POST_UNINSTALL = :
 bin_PROGRAMS = bsvplay$(EXEEXT) hcdplay$(EXEEXT) pcmdiff$(EXEEXT) \
-       qplay$(EXEEXT) vfontas$(EXEEXT)
+       pcmmix$(EXEEXT) qplay$(EXEEXT) vfontas$(EXEEXT)
 subdir = smm
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/configure.ac
@@ -114,6 +114,9 @@
 pcmdiff_SOURCES = pcmdiff.c
 pcmdiff_OBJECTS = pcmdiff.$(OBJEXT)
 pcmdiff_DEPENDENCIES = $(am__DEPENDENCIES_1)
+pcmmix_SOURCES = pcmmix.c
+pcmmix_OBJECTS = pcmmix.$(OBJEXT)
+pcmmix_DEPENDENCIES = $(am__DEPENDENCIES_1)
 am_qplay_OBJECTS = qplay.$(OBJEXT) pcspkr_pcm.$(OBJEXT)
 qplay_OBJECTS = $(am_qplay_OBJECTS)
 qplay_DEPENDENCIES = $(am__DEPENDENCIES_1)
@@ -189,10 +192,10 @@
 am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@)
 am__v_CXXLD_0 = @echo "  CXXLD   " $@;
 am__v_CXXLD_1 = 
-SOURCES = $(bsvplay_SOURCES) hcdplay.c pcmdiff.c $(qplay_SOURCES) \
-       $(vfontas_SOURCES)
-DIST_SOURCES = $(bsvplay_SOURCES) hcdplay.c pcmdiff.c $(qplay_SOURCES) \
-       $(vfontas_SOURCES)
+SOURCES = $(bsvplay_SOURCES) hcdplay.c pcmdiff.c pcmmix.c \
+       $(qplay_SOURCES) $(vfontas_SOURCES)
+DIST_SOURCES = $(bsvplay_SOURCES) hcdplay.c pcmdiff.c pcmmix.c \
+       $(qplay_SOURCES) $(vfontas_SOURCES)
 am__can_run_installinfo = \
   case $$AM_UPDATE_INFO_DIR in \
     n|no|NO) false;; \
@@ -338,6 +341,7 @@
 bsvplay_LDADD = ${libHX_LIBS} -lm
 hcdplay_LDADD = ${libHX_LIBS}
 pcmdiff_LDADD = ${libHX_LIBS}
+pcmmix_LDADD = ${libHX_LIBS}
 qplay_SOURCES = qplay.c pcspkr_pcm.c
 qplay_LDADD = ${libHX_LIBS} -lm
 vfontas_SOURCES = vfontas.cpp vfalib.cpp vfalib.hpp
@@ -431,6 +435,10 @@
        @rm -f pcmdiff$(EXEEXT)
        $(AM_V_CCLD)$(LINK) $(pcmdiff_OBJECTS) $(pcmdiff_LDADD) $(LIBS)
 
+pcmmix$(EXEEXT): $(pcmmix_OBJECTS) $(pcmmix_DEPENDENCIES) 
$(EXTRA_pcmmix_DEPENDENCIES) 
+       @rm -f pcmmix$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(pcmmix_OBJECTS) $(pcmmix_LDADD) $(LIBS)
+
 qplay$(EXEEXT): $(qplay_OBJECTS) $(qplay_DEPENDENCIES) 
$(EXTRA_qplay_DEPENDENCIES) 
        @rm -f qplay$(EXEEXT)
        $(AM_V_CCLD)$(LINK) $(qplay_OBJECTS) $(qplay_LDADD) $(LIBS)
@@ -483,6 +491,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bsvplay.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hcdplay.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcmdiff.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcmmix.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcspkr_pcm.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qplay.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vfalib.Po@am__quote@
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hxtools-20200428/smm/bsvplay.c 
new/hxtools-20200712/smm/bsvplay.c
--- old/hxtools-20200428/smm/bsvplay.c  2020-04-28 22:57:45.000000000 +0200
+++ new/hxtools-20200712/smm/bsvplay.c  2020-07-12 11:44:16.000000000 +0200
@@ -1,6 +1,6 @@
 /*
  *     bsvplay.c - BASICA binary music format interpreter
- *     Copyright © Jan Engelhardt <jengelh [at] medozas de>, 2002 - 2010
+ *     Copyright © Jan Engelhardt, 2002-2010,2020
  *
  *     This program is free software; you can redistribute it and/or
  *     modify it under the terms of the GNU General Public License
@@ -11,6 +11,7 @@
 #include <sys/types.h>
 #include <errno.h>
 #include <fcntl.h>
+#include <math.h>
 #include <stdbool.h>
 #include <stdint.h>
 #include <stdio.h>
@@ -20,35 +21,61 @@
 #include <libHX/init.h>
 #include <libHX/option.h>
 #include "pcspkr.h"
+#define TICKSPERSEC 1086
 
+/*
+ * based on findings from pvt collection
+ * entertan.exe 1989 (size:29527 md5:13caa8100e15ad65d900f6a12b9ddf24)
+ * ihold.exe    1989 (size:21317 md5:5cf7aef915539c60a9a98c96a3a8aefb)
+ * maplleaf.exe 1989 (size:27865 md5:f234797cbd1dba47d90da8a94dcb088f)
+ * mnty.exe     1989 (size:19441 md5:507997fa70b89f9a9ed5430e833cb6c0)
+ * willtell.exe 1989 (size:33799 md5:5d5405a5ff063476deec618dcd3d990d)
+ */
 struct bsv_insn {
        uint16_t divisor, duration, af_pause;
 };
 
+/*
+ * based on findings in FOGDOS.118, FOGDOS.119, FOGDOS.120:
+ * pianoman.com 1986-05-06 01:36:02 (md5:cba939868e35b2742984246aa9317984) 
(Neil J. Rubenking)
+ * entertan.mus 1984-12-06 03:51:24 (size:24280 
md5:994a5130d91b5b1395e4f9653f06c2e9)
+ * (Scott Joplin - The Entertainer)
+ * ihold.mus    1986-05-03 18:10:36 (size:17440 
md5:d1ed36909bd4db1e4903181e57486c19)
+ * (Tom Lehrer - I hold your hand in mine)
+ * maplleaf.mus 1984-12-07 03:56:00 (size:23080 
md5:f070f2b417065c322434ea2af613d464)
+ * (Scott Joplin - The maple leaf rag)
+ * mntpythn.mus 1984-12-29 20:19:40 (size:18700 
md5:e10ba993a9d3179af0b890f453ddc93f)
+ * (John Philip Sousa - The liberty bell)
+ * willtell.mus 1985-01-10 15:23:26 (size:40105 
md5:bd0e216ce89080a1e633465f57516b6a)
+ * (Gioachino Rossini - William Tell)
+ */
+struct pianoman_insn {
+       /* 0..255 */
+       uint8_t octave;
+       /* c(1), c#(2), d(3), d#(4), e(5), f(6), f#(7), g(8), g#(9),
+        * a(10), a#(11), b(12), rest(13) */
+       uint8_t note;
+       /* 0..9 */
+       uint8_t staccato;
+       /* 1280=whole note, 640=half, etc. */
+       uint16_t len;
+} __attribute__((packed));
+
 static struct pcspkr pcsp = {
        .sample_rate = 48000,
+       .prop_square = 1,
+       .prop_sine   = 1,
        .volume      = 0.1,
 };
 
 static unsigned int filter_lo = 0, filter_hi = ~0U;
 static unsigned int tick_groupsize, tick_filter;
-static unsigned int no_zero_ticks;
+static unsigned int no_zero_ticks, flg_pianoman;
 
-static void parse_file(const char *file)
+static void parse_basica(int fd)
 {
        unsigned int count = 0, ticks = 0;
        struct bsv_insn tone;
-       int fd;
-
-       if (strcmp(file, "-") == 0)
-               fd = STDIN_FILENO;
-       else
-               fd = open(file, O_RDONLY);
-
-       if (fd < 0) {
-               fprintf(stderr, "Could not open %s: %s\n", file, 
strerror(errno));
-               return;
-       }
 
        while (read(fd, &tone, sizeof(struct bsv_insn)) ==
            sizeof(struct bsv_insn))
@@ -62,34 +89,99 @@
                if (tick_groupsize != 0)
                        silenced |= (count % tick_groupsize) != tick_filter;
 
-               fprintf(stderr, "(%5u) %5hu %5ld%c %5hu %5hu\n",
+               fprintf(stderr, "(%5u) %5hu %5ldHz%c %5hu %5hu\n",
                        count, tone.divisor, frequency,
                        silenced ? '*' : ' ', tone.duration,
                        tone.af_pause);
                /*
                 * It seems that in the sample BSV executables from 1989
                 * calculate the cpu speed and then do around 1086 ticks/sec.
-                * entertan.exe: 199335 / 183 = 1089
-                * ihold.exe:     73248 /  68 = 1077
-                * maplleaf.exe: 170568 / 157 = 1086
-                * mnty.exe:     119680 / 110 = 1088
-                * willtell.exe: 225350 / 206 = 1093
+                * entertan.exe: 199335 / 183s = 1089
+                * ihold.exe:     73248 /  68s = 1077
+                * maplleaf.exe: 170568 / 157s = 1086
+                * mnty.exe:     119680 / 110s = 1088
+                * willtell.exe: 225350 / 206s = 1093
                 */
                ticks += tone.duration + tone.af_pause;
                if (silenced && no_zero_ticks)
                        ;
                else if (silenced)
                        pcspkr_silence(&pcsp, (tone.duration + tone.af_pause) *
-                               pcsp.sample_rate / 1086);
+                               pcsp.sample_rate / TICKSPERSEC);
                else
                        pcspkr_output(&pcsp, frequency,
-                                     tone.duration * pcsp.sample_rate / 1086,
-                                     tone.af_pause * pcsp.sample_rate / 1086);
+                                     tone.duration * pcsp.sample_rate / 
TICKSPERSEC,
+                                     tone.af_pause * pcsp.sample_rate / 
TICKSPERSEC);
        }
 
        fprintf(stderr, "Total ticks: %u\n", ticks);
 }
 
+static void parse_pianoman(int fd)
+{
+       unsigned int count = 0, ticks = 0;
+       struct pianoman_insn tone;
+       double notemap[255*12];
+
+       for (int n = 0; n < sizeof(notemap); ++n)
+               notemap[n] = 440.0 * pow(2, (n - 45) / 12.0);
+
+       while (read(fd, &tone, sizeof(tone)) == sizeof(tone)) {
+               int frequency = notemap[tone.octave*12+tone.note];
+               unsigned int af_pause = tone.len * tone.staccato / 10;
+               unsigned int duration = tone.len - af_pause;
+               bool silenced;
+
+               ++count;
+               silenced = tone.note == 13;
+               if (tick_groupsize != 0)
+                       silenced |= (count % tick_groupsize) != tick_filter;
+
+               fprintf(stderr, "(%5u) O%uN%02u %5dHz%c %5u %5u\n",
+                       count, tone.octave, tone.note, frequency,
+                       silenced ? '*' : ' ', duration,
+                       af_pause);
+               /*
+                * Pianoman runs through
+                * entertan.mus: 194240/182s=1067
+                * ihold.mus:     69760/ 66s=1056
+                * maplleaf.mus: 138480/130s=1065
+                * mntpythn.mus: 112200/105s=1068
+                * willtell.mus: 169407/159s=1065
+                */
+               ticks += tone.len;
+               if (silenced && no_zero_ticks)
+                       ;
+               else if (silenced)
+                       pcspkr_silence(&pcsp, (duration + af_pause) *
+                               pcsp.sample_rate / TICKSPERSEC);
+               else
+                       pcspkr_output(&pcsp, frequency,
+                                     duration * pcsp.sample_rate / TICKSPERSEC,
+                                     af_pause * pcsp.sample_rate / 
TICKSPERSEC);
+       }
+       fprintf(stderr, "Total ticks: %u\n", ticks);
+}
+
+static void parse_file(const char *file)
+{
+       int fd;
+       if (strcmp(file, "-") == 0)
+               fd = STDIN_FILENO;
+       else
+               fd = open(file, O_RDONLY);
+
+       if (fd < 0) {
+               fprintf(stderr, "Could not open %s: %s\n", file, 
strerror(errno));
+               return;
+       }
+       if (flg_pianoman)
+               parse_pianoman(fd);
+       else
+               parse_basica(fd);
+       close(fd);
+}
+
 int main(int argc, const char **argv)
 {
        static const struct HXoption options_table[] = {
@@ -103,8 +195,14 @@
                 .help = "Play only this tick in a tick block"},
                {.sh = 'Z', .type = HXTYPE_NONE, .ptr = &no_zero_ticks,
                 .help = "Skip over silenced ticks"},
+               {.sh = 'i', .type = HXTYPE_DOUBLE, .ptr = &pcsp.prop_sine,
+                .help = "Proportion of sine-wave calculation mixed in"},
+               {.sh = 'q', .type = HXTYPE_DOUBLE, .ptr = &pcsp.prop_square,
+                .help = "Proportion of square-wave calculation mixed in"},
                {.sh = 'r', .type = HXTYPE_UINT, .ptr = &pcsp.sample_rate,
                 .help = "Sample rate (default: 48000)"},
+               {.ln = "pianoman", .type = HXTYPE_NONE, .ptr = &flg_pianoman,
+                .help = "Assume input is in Pianoman .MUS file"},
                HXOPT_AUTOHELP,
                HXOPT_TABLEEND,
        };
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hxtools-20200428/smm/pcmmix.c 
new/hxtools-20200712/smm/pcmmix.c
--- old/hxtools-20200428/smm/pcmmix.c   1970-01-01 01:00:00.000000000 +0100
+++ new/hxtools-20200712/smm/pcmmix.c   2020-07-12 11:44:16.000000000 +0200
@@ -0,0 +1,158 @@
+/*
+ *     pcmmix - trivial wave mixer
+ *     Copyright Jan Engelhardt, 2020
+ *
+ *     This program is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU General Public License
+ *     as published by the Free Software Foundation; either version 2
+ *     of the License, or (at your option) any later version.
+ */
+#include <errno.h>
+#include <fcntl.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <libHX/init.h>
+#include <libHX/option.h>
+
+static char *blocklen_str;
+static unsigned int mixing_mode, sample_rate = 48000;
+
+enum {
+       MIX_ARPEGGIO = 0,
+       MIX_POLYPHONY,
+};
+
+static ssize_t fullread(int fd, void *buf, size_t rem)
+{
+       size_t pos = 0;
+       while (rem > 0) {
+               ssize_t ret = read(fd, (char *)buf + pos, rem);
+               if (ret == 0)
+                       return pos;
+               if (ret < 0)
+                       return ret;
+               rem -= ret;
+               pos += ret;
+       }
+       return pos;
+}
+
+int main(int argc, const char **argv)
+{
+       static const struct HXoption options_table[] = {
+               {.sh = 'a', .type = HXTYPE_NONE | HXTYPE_VAL, .ptr = 
&mixing_mode,
+                .val = MIX_ARPEGGIO, .help = "Arpeggio mix (see -t too)"},
+               {.sh = 'p', .type = HXTYPE_NONE | HXTYPE_VAL, .ptr = 
&mixing_mode,
+                .val = MIX_POLYPHONY, .help = "Polyphonic mix"},
+               {.sh = 'r', .type = HXTYPE_UINT, .ptr = &sample_rate,
+                .help = "Input sample rate (default: 48000)", .htyp = "RATE"},
+               {.sh = 't', .type = HXTYPE_STRING, .ptr = &blocklen_str,
+                .help = "Block length (default: 40/1086)", .htyp = "p/q"},
+               HXOPT_AUTOHELP,
+               HXOPT_TABLEEND,
+       };
+       int ret;
+       if ((ret = HX_init()) <= 0) {
+               fprintf(stderr, "HX_init: %s\n", strerror(-ret));
+               abort();
+       }
+       if (HX_getopt(options_table, &argc, &argv, HXOPT_USAGEONERR) !=
+           HXOPT_ERR_SUCCESS) {
+               HX_exit();
+               return EXIT_FAILURE;
+       }
+       if (blocklen_str == NULL)
+               blocklen_str = "120/1086";
+
+       char *e = NULL;
+       unsigned int blocklen_p = strtoul(blocklen_str, &e, 0);
+       unsigned int blocklen_q = 1;
+       if (e != NULL && *e == '/')
+               blocklen_q = strtoul(e + 1, NULL, 0);
+       fprintf(stderr, "Block length: %u/%us", blocklen_p, blocklen_q);
+       unsigned int blocksamples = sample_rate * blocklen_p / blocklen_q;
+       unsigned int blockbytes = sizeof(int16_t) * blocksamples;
+       fprintf(stderr, ", %u samples, %u bytes\n", blocksamples, blockbytes);
+
+       --argc;
+       ++argv;
+
+       int *inputfd = malloc(sizeof(*inputfd) * argc);
+       int inputcount = 0, eofs = 0;
+
+       for (int i = 0; i < argc; ++i) {
+               inputfd[i] = open(argv[i], O_RDONLY);
+               if (inputfd[i] < 0) {
+                       fprintf(stderr, "open %s: %s\n", argv[i], 
strerror(errno));
+                       continue;
+               }
+               ++inputcount;
+       }
+
+       if (inputfd == NULL) {
+               perror("malloc");
+               HX_exit();
+               return EXIT_FAILURE;
+       }
+
+       if (mixing_mode == MIX_ARPEGGIO) {
+               void *inputbuf = malloc(blockbytes);
+               void *dumbbuf = malloc(blockbytes);
+               if (inputbuf == NULL || dumbbuf == NULL) {
+                       perror("malloc");
+                       HX_exit();
+                       return EXIT_FAILURE;
+               }
+
+               unsigned int fragsamples = blocksamples / inputcount;
+               unsigned int fragbytes = sizeof(int16_t) * fragsamples;
+               fprintf(stderr, "Slot sample count: %u\n", fragsamples);
+
+               while (eofs < inputcount) {
+                       memset(inputbuf, 0, sizeof(int16_t) * blocksamples);
+                       for (int i = 0; i < inputcount; ++i) {
+                               for (int j = 0; j < inputcount; ++j) {
+                                       void *atp = i != j ? dumbbuf : inputbuf 
+ i * fragbytes;
+                                       ssize_t rdret = fullread(inputfd[i], 
atp, fragbytes);
+                                       if (i == j && rdret != fragbytes)
+                                               ++eofs;
+                               }
+                       }
+                       write(STDOUT_FILENO, inputbuf, inputcount * fragbytes);
+               }
+
+               free(dumbbuf);
+               free(inputbuf);
+       } else if (mixing_mode == MIX_POLYPHONY) {
+               int16_t **inputbuf = malloc(sizeof(int16_t *) * inputcount);
+               for (int i = 0; i < inputcount; ++i)
+                       inputbuf[i] = malloc(blockbytes);
+               int16_t *outputbuf = malloc(blockbytes);
+
+               while (eofs < inputcount) {
+                       for (int i = 0; i < inputcount; ++i) {
+                               memset(inputbuf[i], 0, blockbytes);
+                               ssize_t rdret = fullread(inputfd[i], 
inputbuf[i], blockbytes);
+                               if (rdret != blockbytes)
+                                       ++eofs;
+                       }
+                       for (int s = 0; s < blocksamples; ++s) {
+                               int32_t v = 0;
+                               for (int i = 0; i < inputcount; ++i)
+                                       v += inputbuf[i][s];
+                               outputbuf[s] = v / inputcount;
+                       }
+                       write(STDOUT_FILENO, outputbuf, blockbytes);
+               }
+               free(outputbuf);
+               for (int i = 0; i < inputcount; ++i)
+                       free(inputbuf[i]);
+               free(inputbuf);
+       }
+
+       free(inputfd);
+       return EXIT_SUCCESS;
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hxtools-20200428/smm/pcspkr.h 
new/hxtools-20200712/smm/pcspkr.h
--- old/hxtools-20200428/smm/pcspkr.h   2020-04-28 22:57:45.000000000 +0200
+++ new/hxtools-20200712/smm/pcspkr.h   2020-07-12 11:44:16.000000000 +0200
@@ -9,7 +9,7 @@
 #endif
 
 struct pcspkr {
-       double volume;
+       double prop_square, prop_sine, volume;
        FILE *file_ptr;
        unsigned int sample_rate;
 };
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hxtools-20200428/smm/pcspkr_pcm.c 
new/hxtools-20200712/smm/pcspkr_pcm.c
--- old/hxtools-20200428/smm/pcspkr_pcm.c       2020-04-28 22:57:45.000000000 
+0200
+++ new/hxtools-20200712/smm/pcspkr_pcm.c       2020-07-12 11:44:16.000000000 
+0200
@@ -13,6 +13,24 @@
 #include "pcspkr.h"
 
 /**
+ * dynamic_qi
+ * @pcsp:      pc speaker struct
+ * @x:         time
+ *
+ * A pure sine wave does not sound at all like a PC speaker. A square wave on
+ * the other hand is very hard (hardness, not difficulty). Mix square and sine
+ * according to parameters.
+ */
+static inline double dynamic_qi(const struct pcspkr *pcsp, double x)
+{
+       double i = sin(x);
+       double q = (i > 0) ? 1 : -1;
+
+       return (pcsp->prop_square * q + pcsp->prop_sine * i) /
+              (pcsp->prop_square + pcsp->prop_sine);
+}
+
+/**
  * pcspkr_output - produce waves
  * @state:     pcspkr state
  * @frequency: tone frequency
@@ -30,8 +48,9 @@
        long sample;
 
        for (sample = 0; sample < duration; ++sample) {
-               double q = sin(2.0 * M_PI * frequency * sample / 
pcsp->sample_rate);
-               value = 32767 * pcsp->volume * (q > 0 ? 1 : -1);
+               value = 32767 * dynamic_qi(pcsp,
+                       2.0 * M_PI * frequency * sample / pcsp->sample_rate) *
+                       pcsp->volume;
                fwrite(&value, sizeof(value), 1, pcsp->file_ptr);
        }
        value = 0;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hxtools-20200428/smm/qplay.c 
new/hxtools-20200712/smm/qplay.c
--- old/hxtools-20200428/smm/qplay.c    2020-04-28 22:57:45.000000000 +0200
+++ new/hxtools-20200712/smm/qplay.c    2020-07-12 11:44:16.000000000 +0200
@@ -30,6 +30,8 @@
 static int glob_spd = 120, glob_len = 4, glob_octave = 4;
 static struct pcspkr pcsp = {
        .sample_rate = 48000,
+       .prop_square = 1,
+       .prop_sine   = 1,
        .volume      = 0.1,
 };
 
@@ -406,6 +408,10 @@
 int main(int argc, const char **argv)
 {
        static const struct HXoption options_table[] = {
+               {.sh = 'i', .type = HXTYPE_DOUBLE, .ptr = &pcsp.prop_sine,
+                .help = "Proportion of sine-wave calculation mixed in"},
+               {.sh = 'q', .type = HXTYPE_DOUBLE, .ptr = &pcsp.prop_square,
+                .help = "Proportion of square-wave calculation mixed in"},
                {.sh = 'r', .type = HXTYPE_UINT, .ptr = &pcsp.sample_rate,
                 .help = "Sample rate (default: 48000)"},
                HXOPT_AUTOHELP,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hxtools-20200428/smm/vfalib.cpp 
new/hxtools-20200712/smm/vfalib.cpp
--- old/hxtools-20200428/smm/vfalib.cpp 2020-04-28 22:57:45.000000000 +0200
+++ new/hxtools-20200712/smm/vfalib.cpp 2020-07-12 11:44:16.000000000 +0200
@@ -793,14 +793,14 @@
 
 void vectorizer::set(int x, int y)
 {
-       /* TTF/OTF spec wants CCW orientation */
+       /* TTF/OTF spec: right side of line to be interior */
        int s = scale_factor;
        x *= s;
        y *= s;
-       emap.insert(edge{{x, y}, {x, y + s}});
-       emap.insert(edge{{x, y + s}, {x + s, y + s}});
-       emap.insert(edge{{x + s, y + s}, {x + s, y}});
-       emap.insert(edge{{x + s, y}, {x, y}});
+       emap.insert(edge{{y, x}, {y + s, x}});
+       emap.insert(edge{{y + s, x}, {y + s, x + s}});
+       emap.insert(edge{{y + s, x + s}, {y, x + s}});
+       emap.insert(edge{{y, x + s}, {y, x}});
 }
 
 void vectorizer::make_squares()
@@ -828,14 +828,13 @@
         */
        for (auto edge = emap.begin(); edge != emap.end(); ) {
                auto twin = emap.find({edge->end_vtx, edge->start_vtx});
-               if (twin == edge) {
-                       printf("Glyph outline description is faulty: edge with 
startvtx==endvtx (%d,%d)\n",
-                               edge->start_vtx.x, edge->start_vtx.y);
-                       break;
-               }
                if (twin == emap.cend()) {
                        ++edge;
                        continue;
+               } else if (twin == edge) {
+                       printf("Glyph outline description is faulty: edge with 
startvtx==endvtx (%d,%d)\n",
+                               edge->start_vtx.x, edge->start_vtx.y);
+                       break;
                }
                emap.erase(twin);
                edge = emap.erase(edge);
@@ -1022,30 +1021,30 @@
                        bool br = (c2 && ((c6 && ((!c3 && (c1 || c7 || c9)) || 
(!c1 && !c4) || (!c8 && !c9))) || c5)) || (c5 && ((!c1 && !c9) || c3 || c6));
 
                        if (tl) {
-                               emap.insert(edge{{2*x,   2*y+1}, {2*x,   
2*y+2}});
-                               emap.insert(edge{{2*x,   2*y+2}, {2*x+1, 
2*y+2}});
-                               emap.insert(edge{{2*x+1, 2*y+2}, {2*x,   
2*y+1}});
+                               emap.insert(edge{{2*y+1, 2*x},   {2*y+2, 2*x}});
+                               emap.insert(edge{{2*y+2, 2*x},   {2*y+2, 
2*x+1}});
+                               emap.insert(edge{{2*y+2, 2*x+1}, {2*y+1, 2*x}});
                        }
                        if (tr) {
-                               emap.insert(edge{{2*x+1, 2*y+2}, {2*x+2, 
2*y+2}});
-                               emap.insert(edge{{2*x+2, 2*y+2}, {2*x+2, 
2*y+1}});
-                               emap.insert(edge{{2*x+2, 2*y+1}, {2*x+1, 
2*y+2}});
+                               emap.insert(edge{{2*y+2, 2*x+1}, {2*y+2, 
2*x+2}});
+                               emap.insert(edge{{2*y+2, 2*x+2}, {2*y+1, 
2*x+2}});
+                               emap.insert(edge{{2*y+1, 2*x+2}, {2*y+2, 
2*x+1}});
                        }
                        if (bl) {
-                               emap.insert(edge{{2*x,   2*y},   {2*x,   
2*y+1}});
-                               emap.insert(edge{{2*x,   2*y+1}, {2*x+1, 2*y}});
-                               emap.insert(edge{{2*x+1, 2*y},   {2*x,   2*y}});
+                               emap.insert(edge{{2*y,   2*x},   {2*y+1, 2*x}});
+                               emap.insert(edge{{2*y+1, 2*x},   {2*y,   
2*x+1}});
+                               emap.insert(edge{{2*y,   2*x+1}, {2*y,   2*x}});
                        }
                        if (br) {
-                               emap.insert(edge{{2*x+1, 2*y},   {2*x+2, 
2*y+1}});
-                               emap.insert(edge{{2*x+2, 2*y+1}, {2*x+2, 2*y}});
-                               emap.insert(edge{{2*x+2, 2*y},   {2*x+1, 2*y}});
+                               emap.insert(edge{{2*y,   2*x+1}, {2*y+1, 
2*x+2}});
+                               emap.insert(edge{{2*y+1, 2*x+2}, {2*y,   
2*x+2}});
+                               emap.insert(edge{{2*y,   2*x+2}, {2*y,   
2*x+1}});
                        }
                        if (di) {
-                               emap.insert(edge{{2*x,   2*y+1}, {2*x+1, 
2*y+2}});
-                               emap.insert(edge{{2*x+1, 2*y+2}, {2*x+2, 
2*y+1}});
-                               emap.insert(edge{{2*x+2, 2*y+1}, {2*x+1, 2*y  
}});
-                               emap.insert(edge{{2*x+1, 2*y  }, {2*x,   
2*y+1}});
+                               emap.insert(edge{{2*y+1, 2*x},   {2*y+2, 
2*x+1}});
+                               emap.insert(edge{{2*y+2, 2*x+1}, {2*y+1, 
2*x+2}});
+                               emap.insert(edge{{2*y+1, 2*x+2}, {2*y,   
2*x+1}});
+                               emap.insert(edge{{2*y,   2*x+1}, {2*y+1, 2*x}});
                        }
                }
        }
@@ -1424,12 +1423,12 @@
 
 bool vertex::operator<(const struct vertex &o) const
 {
-       return std::tie(x, y) < std::tie(o.x, o.y);
+       return std::tie(y, x) < std::tie(o.y, o.x);
 }
 
 bool vertex::operator==(const struct vertex &o) const
 {
-       return std::tie(x, y) == std::tie(o.x, o.y);
+       return std::tie(y, x) == std::tie(o.y, o.x);
 }
 
 bool edge::operator<(const struct edge &o) const
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hxtools-20200428/smm/vfalib.hpp 
new/hxtools-20200712/smm/vfalib.hpp
--- old/hxtools-20200428/smm/vfalib.hpp 2020-04-28 22:57:45.000000000 +0200
+++ new/hxtools-20200712/smm/vfalib.hpp 2020-07-12 11:44:16.000000000 +0200
@@ -68,7 +68,7 @@
        bool operator<(const struct vertex &) const;
        bool operator==(const struct vertex &) const;
        bool operator!=(const struct vertex &a) const { return !operator==(a); }
-       int x, y;
+       int y, x;
 };
 
 struct edge {


Reply via email to