vol‐0 ‐ afnix installation guide

This chapter describes the installation procedures for the
AFNIX writing system distribution. This chapter explains how
to set and compile this distribution.

The complete distribution can be downloaded from the AFNIX
home page. The result is a complete source tree that is
ready for compilation. The distribution contains also the
documentation as well as examples. The distribution is
supported on a variety of platforms as indicated below that
can be either 32 bits or 64 bits machines. The distribution
is also available at the FreeBSD port collection.

Platform   Processor                                   Operating system
Linux      X86‐32, X86‐64, IA64, SPARC‐32, SPARC‐64    Linux 3.x, 4.x
FreeBSD    X86‐32, X86‐64, IA‐64, SPARC‐32, SPARC‐64   FreeBSD 8.x, 9.x, 10.x.x
Gnu        X86‐32, X86‐64                              GNU KBSD, GNU Hurd

Specific processors like the Alpha, M68K, ARM, MIPS and
SUPERH are also supported on certain distributions. The
PowerPC (PPC) processor has been discontinued. The Solaris
SPARC platform has been discontinued. Do not hesitate to
contact the development team for specific processor or
platform support.

The core software is written in C++. It has been
successfully built with the GNU GCC 4, 5, 6. The
clangcompiler has also been succesfully tested. You will
also need the GNU Makepackage. With some distributions the
command is called gmake. Note that the Makefilehierarchy is
designed to operate safely with the ‐jGNU Makeoption.

The distribution is available as a compressed tar file. Note
that the documentation is distributed in a separate file.
The following command unpacks the distribution.

zsh> gzip ‐d afnix‐src‐[version].tar.gz
zsh> tar  xf afnix‐src‐[version].tar

The list of commands to execute is given in the example
below. A detailed description for each command is given
hereafter. The make worldcommand is the default command that
builds the whole tree with the default compiler.

zsh> ./cnf/bin/afnix‐setup ‐o ‐‐prefix=/usr/local/afnix
zsh> make status
zsh> make [‐j]


zsh> make test
zsh> make install
zsh> make clean

With some platforms, the makecommand should be replaced by
the gmakecommand. The make statuscommand is optional and can
be used to report the internal value contents. In
particular, the version and the installation parameters are

The afnix‐setupcommand can be invoked to setup a particular
configuration. You should have your compiler on your search
path. Normally, the command given below is enough.

zsh> ./cnf/bin/afnix‐setup ‐o ‐‐prefix=/usr/local/afnix

This command checks that the target platform can be detected
and configured. The ‐ooption configures the compilation in
optimized mode. Use the ‐goption can be used to configure
the build process in debug mode. The ‐‐prefixoption sets the
installation directory. Note that the compilation process is
done in the distribution tree and that the ‐‐prefixoption
affects only the installation operations. The ‐voption is
the verbose option. Other options are available for fine

Option       Description                              Default
‐h           Print a help message                     n/a
‐v           Set the verbose mode                     n/a
‐g           Set the debug mode                       yes
‐o           Set the optimized mode                   no
‐‐help       Same as ‐h                               n/a
‐‐prefix     Set the target install directory         /usr/local
‐‐shrdir     Set the shared install directory         /usr/local/share
‐‐altdir     Set the alternate install directory      /usr/local
‐‐sdkdir     Set the system kit directory             platform dependent
‐‐compiler   Set the default compiler                 platform dependent
‐‐proctype   Set the processor type                   generic
‐‐dynamic    Compile and link dynamically             yes
‐‐static     Compile and link statically              no
‐‐openmp     Enable the optional openmp compilation   no

The prefixoption set the root installation directory. The
binary and library installation directories are derived from
it. The shrdirset the shared installation directory which is
normally used for the installation of the manual pages on
most popular systems. the altdirsets the alternate
installation directory. Normally this path should be empty
as it affects the path for the etcdirectory. This flag
should be used when using a prefix to unusual destination.
the sdkdiroption sets the path of the platform system
development kit. This option is only used with the


Darwinplatform. The compileroption can be used to force a
particular compiler with the help of a compiler
configuration file. The proctypeoption can be used to force
a particular processor architecture. The ‐sor ‐‐staticoption
can be used to build a static executable. Normally, this
option should not be used since it restrict the use of
extension modules. The dynamiccontrols whether or not the
dynamic libraries should be built. This option is detected
automatically for a particular platform and should be used
only by package maintainer. There exists also specific
options which are mostly for package maintainers. At this
time, the build process integrates the Debian, Ubuntu and
Fedora specific packaging mechanism.

Option      Description                                        Default
‐‐package   Set the type of package to support                 none
‐‐pkgbin    Set the optional package bin directory             none
‐‐pkglib    Set the optional package lib directory             none
‐‐pkgprj    Set the optional package project directory         none
‐‐pkghdr    Set the optional package header directory          none
‐‐pkgetc    Set the optional package etc directory             none
‐‐pkgman    Set the optional package manual directory          none
‐‐pkgdoc    Set the optional package documentation directory   none
‐‐pkgwww    Set the optional package www directory             none

The compilation process is straightforward. With some
platforms, the makeaccepts the ‐jthat enables concurrent

zsh> make [‐j]

This will build the complete distribution locally. If an
error occurs, it is best to report it at the
( AFNIX bug reportmail address.

The distribution contains all test suites. The test suites
are compiled and executed with the following command.

zsh> make test

This command run the test suites for each library as well as
the test suites for each application client. Most of the
base library test suites are written in C++ with the
application test suites written in the core writing system.

Once the system has been built and tested, it can be
installed. By default, the distribution tree is installed
into the /usr/localdirectory. This can be overwritten with
the ‐‐prefixoption during the configuration process.


zsh> make install

There are several variables that controls the behavior of
the installrule. Each variable has its default value sets
during the setup configuration. However, this variable can
also be altered during the installation process

Variable   Description                          Default
PREFIX     The root install directory           /usr/local
SHRDIR     The shared install directory         /usr/local/share
ALTDIR     The shared alternate directory       /usr/local/etc
SDKDIR     The system  kit directory            platform dependent
BINDIR     The binary install directory         prefix/bin
LIBDIR     The library install directory        prefix/lib
HDRDIR     The header files install directory   prefix/include/afnix
ETCDIR     The extra files install directory    altdir/etc/afnix

The documentation is installed independently of the
software. The docrule builds the documentation and the
publishrule installs the documentation. Several variables
also control the documentation installation path.

Variable   Description                           Default
DOCDIR     The documentation install directory   shrdir/doc/afnix
MANDIR     The manual pages install directory    shrdir/man

The distribution is cleaned with the cleanrule.

zsh> make clean

This rule does not clean the configuration. For a complete
cleaning the resetrule is more appropriate.

zsh> make reset

The axicommand invokes the interpreter. In order to operate
properly, the LD_LIBRARY_PATHenvironment variable must be
configured with the directory containing the shared
libraries. If the libraries have been installed in a
standard location like /usr/local/lib, there is nothing to

The directory expcontains various examples which can be run.
Each example is labeled according to their use in the volume
1 of the documentation set. Example 0101.alsprints the


message hello world. Example 0501.alsprints various
information about the system configuration.

zsh> axi 0501
major version number   : 2
minor version number   : 8
patch version number   : 0
interpreter version    : 2.8.0
operating system name  : linux
operating system type  : unix
afnix official uri     :

The build process provides several features that permits to
customize the compilation process as well as the nature of
the final executable. Most of the time, these options are
reserved for the package maintainer and are given below for
illustration purpose.

The distribution can be configured to operate on a specific
machine target. For example, a typical Linux box will be
compiled with the default compiler target, which is the 386
processor. You can force the compilation to be optimized for
a particular processor. This is done with the
‐‐proctypeoption of the afnix‐setupcommand. Currently the
distribution supports the 586and 686architectures for the
Intel platform. The ultraarchitecture is valid for the SPARC

zsh> cnf/bin/afnix‐setup ‐o ‐‐prefix=/usr/local

This command will configure the distribution to be compiled
specifically for the Pentium architecture.

Extensions are specific libraries or executables which are
not build automatically during the build process. The user
is responsible to decide which extension is needed for the
system All extensions are located under the
src/extdirectory. Simply going into the appropriate
directory and running the makecommand will build the
extension.  The asiextension creates a static interpreter
with all libraries automatically included in the final
executable. The extension is simply build with the following
command. Note that this extension overwrite the previous
executable in the bld/bindirectory.

zsh> make ‐C src/ext/asi


The distribution comes with some extra files. The most
important is the Emacs mode afnix‐mode. The original source
file is written in Emacs Lisp and is available in the
etcdirectory of the distribution. This file should be
installed according to the current Emacs installation.

This chapter contains additional notes for the package
maintainer. They are also useful for anybody who is in
charge of integrating the distribution in a build process.
The chapter describes the distribution tree with more

The distribution tree is composed of various directories.
Each of them has a Makefilewhich can be called locally or
from the top level.

     This directory contains the configuration distribution
     and various utilities. Normally you should not touch
     it, unless you are using a compiler different than gcc.

     This directory contains the complete source tree. The
     source code is written in C++. Normally this directory
     is left untouched. If there are good reasons to modify
     it, please contact the development team.

     This directory contains the complete test suites. The
     test suites are used by various programs including the
     main interpreter, the compiler and the debugger. It
     shall be noted that the library distribution also
     includes specific test suites.

     This directory contains the complete documentation
     written in in XML with a special DTD. It should be left

     This directory contains various files associated with
     the distribution. Some files are useful to be copied.

     This directory contains various examples. They are
     included for illustration purpose.

The process of building a package solely depends on the
distribution type. Most likely, the standard distribution
should contain the binary executables as well as some
configuration file and the manual pages. The documentation
and the development header files can put in separate



The configuration process involves the use of the afnix‐
setupcommand located in the cnf/bindirectory. This command
is used to configure the distribution. Package maintainers
are encouraged to use it with specific options.

The afnix‐guesscommand is used during the configuration
process to detect a supported platform. This command can be
run in stand‐alone mode. Various options can be used to tune
the type of information requested.

Option   Description
‐h       Print a help message
‐n       Print the platform name
‐v       Print the platform version
‐M       Print the platform major number
‐m       Print the platform minor number
‐p       Print the platform patch number
‐t       Print the processor type

Without option, the utility prints a platform and processor
description string.

zsh> ./cnf/bin/afnix‐guess

The directory cnf/defcontains a platform specific default
file. The file determines what is the default compiler and
linking mode. This file is used by the afnix‐setupcommand.
For example, the afnix‐darwin.deffile contains:

compiler: gcc
lktype  : dynamic
lkmode  : dylib

Such options instructs the configuration utility, that the
default compiler is gccand the linking mode should operates
in dynamic mode by using the dylibrule. These default values
can be overwritten with the equivalent option of the afnix‐
setupcommand. Note that the compiler version is
automatically detected by the system. The afnix‐vcompcommand
will return the appropriate compiler version running on the
target system.

THe source tree has two types of C++ files. The first type
has the extension .cxxand the second type has the extension
.cpp. The .cxx‐‐ and the associated .hxx‐‐ files are only


used to indicate a system dependency. These files are found
only in the src/lib/pltdirectory. The .cxxextension
indicates that the file might use system specific include
files. The .cpp‐‐ and the associated .hpp‐‐ files are the
normal C++ source files. The .cppextension is used to
indicate that these files will not use a system specific
file. By default this rule is enforced in the compiler
configuration file by specifying some compiler flags which
do not authorize such access.

The configurations files are located in the
cnf/makdirectory. Normally they should be left untouched.
The most important one is the afnix‐rule.makfile that
defines most of the compilation and linking rules.
Additionally, during the setup operation, the afnix‐
setupcommand creates several files in the bld/cnfdirectory.
The bldis the build directory. The afnix‐plat.makfile is the
platform configuration file and the afnix‐comp.makis a link
to the appropriate compiler configuration file.

Normally, the compilation process is immediate. Just
invoking the makecommand will do the job. However, some
package maintainer have the desire to overwrite some flags.
Some options are provided to facilitate this task.

     This flag can be used to add some compilation flags for
     all .cppfiles.

     This flag can be used to add some compilation flags for
     all .cxxfiles.

     This flag can be used to add some compilation
     definitions for all source files.

     This flag can be used to add some compilation paths for
     the .cxxfiles.

For example, it is common to have some maintainer to compile
with both the debug and optimize flags. This can be done
with the following command (assuming an optimized


All include files, compiled libraries and executables are
placed in the blddirectory. This directory contains the
bld/binfor binaries, bld/libfor libraries and bld/hdrfor the
header files.


The package can be built by accessing the blddirectory or by
invoking the installrule. The second method is not
recommended for package construction, since it might trigger
some file installation without any control.  The
etcdirectory contains some special files that might be used
for the package construction. A sample list of them is given

     This file is the Emacs mode.

     This file is the debugger Emacs gud mode.

The top level Makefilecontains several rules that might be
useful for the package maintainer.

     This rule show the configuration status for each
     parameters with the version.

     This rule invokes the default configuration in debug

     This rule invokes the default configuration in
     optimized mode.

     This rule invokes the default configuration in debug
     mode and compile the whole distribution. The default
     install directory is /usr/local.

     This rule invokes the default configuration in
     optimized mode and compile the whole distribution. The
     default install directory is /usr/local.

     This rule runs all test suites.

     This rule builds the documentation.

     This rule builds the distribution.

     This rule installs the distribution.


     This rule installs the documentation.

     This rule cleans the distribution but keep the

     This rule resets the distribution including the

This chapter contains the release notes for the differents
releases. Release notes are given in descending order for a
particular version. The standard notation is
major.minor.patchwhich represents respectively, the major,
minor and patch number. A major version number changes
indicates a substantial change in the distribution,
including new tools, application interface and license. A
minor version number change indicates noticeable change,
with or without new tools but without application interface
change nor license change. Finally, a patch number change
indicates a simple change to fix problem. There is no
additional features in a patch nor an application interface



     Incorporated patches for GCC 7.

     The Unicode revision 9.0.0 has been incorporated in the
     core engine.

     The Collectableobject is now beeing deployed inside the
     engine. A colletable object provides a releasemethod
     which can be used to remove links between object.

     A full dupleix object has been added as a generic
     object. A full dupleix stream is provided for certain
     class of object like the network socket. The default
     mode of operations remains the half‐dupleix stream
     since stream access are protected by mutexes.

     The math module incorporates an infix notation parser
     module. This is a preliminray work suppoosed to grow
     over the next releases. The mean, covariance and
     univariate regression has been added as objects.


     The bundle object literal index has been updated to
     follow the bundle length.



     Minor platform updates. This is an internal release in
     preparation for the 2.8.0 release.

     Revisit socket options and parameters

     Minor fixes with the agent accessor.



     Incorporated patches for GCC 6.

     Incorporated patches for Debian issued by maintainer.

     Fixed the FreBSD build.

     This is the relase 2.6.0. The code has been updated to
     better support c++/11 for both gcc and clang.

     The processing of character entity reference has been
     substantially changed to adhere fully with the xml

     The spreadsheet importer has been updated and a csv
     reader has been added. The importation process has also
     been revisited.

     The security module has been updated to support the
     tls. This include moving to a 6 bits mersenne‐twister
     and adding a certificate block.

     The normal deviate has been added.


     A new geometry service has been adedd to the
     distribution. This provides support for modeling
     various shapes and solids.

     The streamable objects has been added to the cloud data
     analytics service.



     This is the relase 2.5.2. The release includes support
     for the GCC 5 / CLANG 5 compilers suite. Thank’s to
     Martin Michlmayr for pointing this out.

     This is the relase 2.5.1. This is an emergency release
     that fixes a bug in the uri percent encoding which can
     be downloaded from here . It’s amazing that it was not
     found before.

     The system infrastructure has been cleaned to support
     the clang compiler. The code has also been cleaned to
     support the C++11 standard which is now the compilation

     A Styleobject to support ina generic way the formating
     operation for the literal objects. Consequently, most
     of the literal objects have been cleaned and now
     support a formatmethod that operates with a
     Styleargument. The PrintTableobject has been enhanced
     to support column extension and column style.

     The lnmethod is now the standard prefered name for the
     natural logarithm. Several bugs have been fixed in the
     real matrix implementation with respect to the openmp
     implementation. A new solver based on the Modified
     Gram‐Schmidt algorithm. has been added. Note also that
     the direct solver interface has been updated.

     The Uriclass has been enhanced to support partial uri
     path extraction.

     The spreadsheet module has been considerably
     overhauled. A new object Lstackhas been added as a


     literal stack which can be bound to the cell as a
     literal array. The sheet formating has been also
     revisited to make profit of the new Styleobject has
     well as the printable transformation.

     The Meterobject has been added as a mean to help for
     the performance measurements.

     The unicode conversion with reference has been updated
     to adapt itself to the stream or buffer encoding during
     a write process.

     A preliminary set of nuclear physics constants have
     been added.

     The Workspaceobject has been enhanced to support output

     A JsonMimeobject has been added. It is designed to
     translate various object into a Javascript object
     notation format. At this time, only the real data
     samples Rsamplesobject is supported.



     The Unicode 6.3.0 database is now supported in this

     The standard object incorporates an alias table which
     enables the mapping of property name in a plist. The
     Trieobject has been enhanced to support a reference
     index. The trie name mapping is now obtained with the

     This release incorporates an experimental support for
     OpenMP. The OpenMP threads are compatible with the
     afnix threads and support is initially available in the
     math module. This option must be enabled explicitelly
     in the build setup to be effective.

     The session user registration id has been enhanced. The
     concept of cloud service is available throuh the


     generic Xaasobject, and more specifically with the
     Saasobject. The Workspaceobject has been enhanced with
     a public zone.

     The Intercomobject has been enhanced to support a
     buffered serialization which was somehow mandatory when
     operating in udp mode.

     Numerous deadlocks in the socket class have been fixed
     as well as udp inconsistencies.

     The QmrKrylov solver has been added as part as the
     iterative solver family. The krylov convergence test
     has also been improved. The Qrsolver has been added as
     part as the direct solver family. The sparse matrix has
     been enhanced to support a generic iterator. The whole
     solver architecture has been revisited and is now a
     class based architecture with a type driven factory.
     Numerous bugs have been fixed. Vector and matrix now
     support row permutations.



     This is the relase 2.3.2. The release fixes the real
     samples array serialization.

     This is the release 2.3.1. Release 2.3.0 was an
     internal work which has not been distributed.

     The interpreter object can read a line or a passphrase
     from the attached terminal.

     The interpreter can be put in daemon mode. This mean
     that a new detached processed is spawned with the
     interpreter attached to it. The librarian has been
     simplified and the loader integrated inside the

     The input steam nom implements a stream consumption
     method designed to accumulate a stream content into the
     stream buffer. Subsequently, the buffer can be
     converted into a string. The serialization of eos has
     been fixed.


     The resolver has been enhanced to map a file into a
     string. This methodology also applies to file present
     in a librarian.

     The Plistobject has been enhanced to better support the
     merging operation.

     The Unicode 6.2.0 database is now supported in this

     The real matrix and vector implementation has been
     redesigned to support a unique sparse representation.
     The serialization has also been added to these objects.

     The cloud object set has enhanced with an intercom
     cloud object which simplify the transmission of
     registered cloud object. A cart and a cart set object
     have been added as a mean to store cloud object. The
     session object and sessions set objects have been
     added. The session object has been enhanced to produce
     the associated session cookie, with an augmented
     session closing mechanism.

     The UriPathobject has been added as a uri path
     manipulator for http server.

     The silicon energy gap has been fixed to the standard
     value. The periodic table structure has been revisited.

     The xhtml form elements have been added to the service.
     A base element class has been also added to almost all
     elements. The base class provides support for setting
     the common element attributes.



     The Hurd platform is now supported in this release.
     Thanks to our contributor for delivering this new

     The Unicode 6.0.0 database is now supported in this



     The lexical analyzer is now an object in its own. It
     can be used to construct other object from a string

     An automatic linear system verification has been added
     to the linear solver. Jacobi preconditionner have been
     added to the Krylov solvers and Newton solvers have
     been improved.

     The periodic table of the elements is under
     construction and should be completed soon. The table
     will provides the information for each elements,
     including name, symbol and other physical constants.
     The suport for intrinsic carrier concentration is now
     available. This is a cryptic feature for people working
     on semiconductors.



     The SuperH processor is now supported in this release.
     The SuperH is a 32 bits processor.

     The implementation now supports the concepts of Not a
     Numberor NAN as a whole. A real object can set and
     tested for NAN.

     The resolver has been enhanced to support indirect
     librarian reference.

     The personnal information managementmodule has been
     renamed into the cloud session managementor afnix‐

     The mathmodule has been dramatically enhanced. The
     Rsamplesobject has been added for storing data samples.
     Function and polynomial objects have added to support
     generic function computation. The non‐linear Newton
     system solver has been added as an object.

     The Scalable Vector Graphicservice has been added. The


     service provides the support for the SVG 1.1 standard
     and allows the automatic generation of SVG compliant

     The Physicsservice has been added. The service provides
     the support for standard physics operations. In
     particular, the most common physical constants are
     defined in this service.


     AFNIX 2.1.1 has been released. This is an emergency
     release that corrects a small problem in the clean rule
     with the static directory.



     The BlockBufferobject has been added to the standard
     object library. Furthermore, the Bufferhas been adapted
     to operate as a base class for the block buffer and the
     shlmethod has been added to the buffer object as a mean
     to shift the buffer. As consequence, the default
     operating mode for a buffer is the BYTEmode. When
     operating with strings, the UTF8mode might be more
     suitable. The BitSetobject has been renamed to
     Bitsetand the interface has been cleaned. The Vectorhas
     been cleaned. The object‐ppredicate has been fixed.

     The thread engine has been completly redesigned and
     extensivelly tested on 32 and 64 bits platforms. It is
     no longer a problem to operate with more than 32K
     threads simultanesouly. Furthermore, the concept of
     thread pool has been added to the engine. The end‐
     ppredicate has been added to the thread object to
     indicate a succesful thread completion.

     The Readerobject has been added as a form reader. The
     reader parses an input stream and produces a form until
     the end‐of‐stream. The Readerprovides the support for
     string based execution.

     The Librarianobject has been enhanced to support the
     concept of default exeution module. When such module
     and when the interpreter is requested to do so, the


     module is automatically loaded during the execution.

     The HttpProtodefault version has been move to 1.1 for
     both the request and response objects.

     The InputMappedclass has been enhanced to provide the
     facility for mapping buffer as well as acting as a null
     character generator. The OuputBufferobject has been
     added as a buffer output stream. With the addition of a
     form reader, the interpreter communication class
     Intercomhas been added to the standard i/o module.

     The XneCondobject has been enhanced to support various
     xml object. The XmlPihas been enhanced to support
     attributes derivation from the string value.

     The itumodule is a new module. It has been added with a
     complete support for the ASN.1 standard. ASN.1 is
     essential for the support of certificates.

     The axsclient has been removed from the core
     distribution. All of the client functionalities are now
     available in the spreadsheet module.



     The long awaited unrefreserved keyword has been added
     as a mechanism to unreference a symbol.

     The object‐ppredicate has been added as a standard
     predicate. The predicate is the negation of the nil‐
     pstandard predicate. The method‐ppredicate has also
     been added as a standard predicate.

     The file stream parsing has been enhanced with the help
     of the stop «and resume »characters. When the stop
     characters is found, all parsing operations are
     suspended until a resume character is found.

     The aboutsymbol has been added to the exception object
     as extended exception reason. For a given reason, the
     file name and line number is added to the exception



     The Strvecstring vector class has been added to the
     core library. The class is similar to the Vectorclass
     except that it operates with strings and provides
     additional strings related methods.

     The Counterobject has been added as a reserved object.
     The counter is designed to be used directly in loop.

     The core library has been extensively cleaned in
     preparation for the next major release. In particular,
     numerous memory leaks have been removed and some
     classes derivations have been fixed. A major bug in the
     closure argument counting has also been discovered and
     fixed during this process.

     The Pathnameobject has been enhanced to detect the type
     of path associated with the object. Additionally, a
     normalizemethod has been added.

     The FileInfoobject has been added to the module. The
     class provides an immediate access to the principal
     file parameters such like it size or its modification

     The NamedFifoobject has been added to the module. The
     class provides the support for a large string based
     fifo with file saving capabilities.

     Several predicates and functions related to media type
     conversion have been added to the module. In
     particular, a media type extension conversion has been
     implemented. The HttpResponseclass has been enhanced
     with several methods for status code checking.

     Support for the Digital Standard Algorithm, (aka DSA)
     as specified by FIPS‐PUB 186‐3 has been added to the
     library. The implementation incorporates several new
     objects to manipulate signatures.

     The RC2block cipher algorithm has been added to the



     The documentation distribution rules have been
     rewritten and the "publish" rule has been added.



     The distcleantop level makefile rule has been renamed
     as reset.

     The stream engine has been cleaned with a new
     architecture. Two new objects InputStreamand
     OutputStreamacts as the foundation of this new design.

     The HttpProto, HttpRequestand HttpResponseobjects have
     been completely rewritten. In the new model, both
     objects can operate on the server and client side. The
     HttpReplyobject has been removed.

     The Sha224hash function has been added. This class
     concludes the implementation of all SHA family hash
     functions. The Desclass that supports the DES stream
     cipher has been added to the library.

     The XmlRootclass has been enhanced in order to ease the
     declaration node existence verification as well as the
     encoding mode extraction.



     A new option controls the seeding of the random engine.
     By default, in debug mode, the random engine is not
     seeded unless requested by the user. In optimized mode,
     which is the normal mode, the random engine is seeded
     at initialization.

     The long awaited base number object has been added. The
     Numberobject serves the Integer, Real, and
     Relatifobjects. The base number object is designed to
     ease the task of formatting numbers.

     The relatif number object has been enhanced to support


     extra methods that are used for large number
     computation. This include the power and gcd computation
     which are used by the cryptographic engine. In
     addition, the base arithmetic relatif methods have been
     optimized and certain corner bugs in the division

     The core engine has been updated with the new Unicode
     5.1.0 database.

     A serious bug in the form synchronize engine that would
     cause an engine crash when a form is nil has been

     A new object called Pathlisthas been added to support
     the manipulation of path list. The object is designed
     to ease the file name resolution in the presence of
     search path. The module has also been extensively

     A new module called afnix‐mthhas been added to the
     standard distribution. The module is designed to
     integrate the base mathematical functions and objects
     available in the engine. With such introduction, the
     random number generation has been moved into this
     module. Additionally, the functions needed to generate
     prime numbers have been added to this module.

     A new module called afnix‐sechas been added to the
     standard distribution. The module is designed to
     integrate the security functions and cryptographic
     objects.Two new hasher objects have been added to the
     security module. The Md2object implements the MD2
     message digest algorithm as described in RFC 1319. The
     Md4object implements the MD4 message digest algorithm
     as described in RFC 1320. The standard key derivation
     functions KDF1 and KDF2 have been added to the security
     module. The asymmetric cipher RSA has also been added
     to the security module and the Keyobject has been
     updated to reflect this.


     AFNIX 1.7.1, the « An Armor release » has been
     released. This is an emergency release that corrects a
     major problem within the evaluation process. Although,
     the problem has been fixed, it involves a large piece


     of code, with a major redesign of the evaluation
     engine. It is therefore recommended to upgrade the
     engine immediately.

     AFNIX 1.7.0, the « An Armor release » has been
     released. This is a major release that incorporates
     numerous new features in the field of cryptography. The
     release also incorporates the latest 5.1.0 Unicode



     The core engine has been seriously modified to
     accommodate for a new object collection system (aka
     garbage collection). The new system is more robust and
     provides new mechanism that will permit to reclaim
     cyclic structure as well as destroying global object on

     The core engine has been adapted to support the new
     MACOS X Leopard operating system.


     AFNIX 1.6.0 has been released. This release provides is
     an intermediate candidate toward another major release.
     The most important thing is that the object collection
     engine has been redesigned and that MACOS X Leopard is
     now supported.



     The core engine continues to be updated in order to
     better support the Unicode 5.0 standard. With this
     release, the string normalization scheme is now in
     place and used by default internally. This implies
     among other things, a better support for multiple
     diacritics as well as the beginning of the standard
     collation algorithm.

     The Loggerbase class has been enhanced to support the


     generation of a log file. An output stream can now be
     bound to the object.

     The concept of class deferobject has been added to the
     Classobject. The defermode is the opposite of the
     infermode and provides a mechanism for base class

     The PrintTableobject has been enhanced to support the
     concept of table header.

     The exception object whatcan be thrown with the
     reserved keyword throw. This provides a mechanism to
     re‐throw an exception.

     A critical bug in the core engine affecting the
     behavior of the returnreserved keyword in a tryblock
     has been fixed. A return form inside a try block was
     incorrectly generating an exception which was
     subsequently caught by the try block.

     The base network module has been enhanced to better
     operate with IPV6. In particular, when both IPV4 and
     IPV6 stacks are present and a host name (typically
     localhost) have an address entry, the socket
     constructor make sure it can build an object. The IPV6
     address display has been rewritten.

     A new object called Pathnamehas been added to support
     the manipulation of system path. In addition, two new
     functions mkdirand mhdirhave been also added to support
     the directory creation, both normally and

     The Urihas been dramatically enhanced to conform to the
     RFC 3986. In particular, the path representation for
     urn is now working properly. The cookie object has been
     massaged to support the cookie version 1, although it
     does not seem to be supported (yet!) by the browsers.

     The xml module has been enhanced with a new parsing
     system called the simple model. In the simple model,
     nodes are parsed in a linear fashion. The node content
     is available in the form of a string and its
     interpretation is at the user discretion.


     The afnix‐wamservice has been renamed as afnix‐wax. The
     service has also been updated with two new objects,
     namely the XmlMimeand XhtmlMimewhich permits to build a
     mime representation of an xml tree. Several xhtml
     objects have also been added to complete the
     collection. This include the XhtmlScriptfor example.

     The afnix‐xpeservice has been added as a new service.
     The xml processing environment (xpe) provides a xml
     processor that permits manipulate the whole xml tree
     with the help of various xml processor features. In
     particular, the service provides the support for the
     xml include extension.

     This release incorporates for the first time, the
     concept of core project, which represents a librarian
     or an application. The first project is the AFNIX
     protocol extension or apxwhich is a message based
     protocol designed to transport request/reply messages
     within a client/server environment. The message is
     built with the xml library and the librarian provides
     the encapsulation layer.

     The AFNIX media dumper or amdproject is a complete
     application designed to illustrate the design of an
     application. The application permits to dump an uri
     content into a file.


     AFNIX 1.5.2 has been released. This is a minor release
     that fixes the build process with GCC 4.2.

     AFNIX 1.5.1 has been released. This is a minor release
     that fixes the documentation targets during the build

     AFNIX 1.5.0 has been released. This release provides a
     xml processor in the form of a new service module
     called ’xml processing environment’ or xpe. The whole
     documentation generation is now fully automated, thanks
     to the new xml processor. This release also provides a
     better support for the ’web application extension’ or
     wax service. The support for the GNU/FreeBSD platform
     has also been added in this release. As usual, this
     release comes with its wagon of bug fixes, notably this


     time in the network field especially with IPV6 on the
     FreeBSD platform.



     The core engine has been substantially changed to
     support the new Unicode 5.0 standard. As of now, the
     engine is in place internally, but not fully activated.
     In particular, the string normalization is implemented
     but not activated. The next release should incorporate
     the full system with a change that should be
     transparent to the user.

     An instance inference mechanism ‐‐ which is equivalent
     to the concept of virtual constructor ‐‐ has been added
     to the core engine. Such system permits to derive top
     instance from a base instance construction.

     The PrintTableobject has been enhanced with a
     dumpmethod similar to the formatmethod.

     The Propertyand the Plistobjects have been added to the
     standard library. a property is name/value pair. The
     property list object is an iterable object that stores
     property objects.

     A new module called afnix‐xmlhas been added. The module
     provides the foundation for a full xml 1.0/1.1 support.
     The module also includes a parser that permits to build
     xml tree. A xml tree writer is also part of the module
     functionality. A xml processor is not yet available and
     is expected in the next release.

     A new module called afnix‐nwghas been added. The module
     provides the support for the network working
     groupobjects such like Uriobject. The module also
     provides the foundation for the mime support.

     The afnix‐webmodule has been removed and replaced by
     the afnix‐wamservice.

     The afnix‐wamservice has been added as the first
     service into the core distribution. A service differs


     from a module in the sense that it is a combination of
     different modules. The web application
     managementservice depends on the xml and nwg modules.
     The service provides all the functionality to support a
     http session, including xhtml page generation and cgi
     request reply.


     This release is a minor release that fixes the
     "install" rule in the etc directory.

     This release is a minor release that fixes the tcp
     socket read method that incorrectly handles a
     connection reset by the peer. The Timeclass also
     incorporates a small fix for the to‐rfcmethod.

     This release is a minor release that fixes the lexer
     for not parsing correctly some floating point numbers.
     The standard i/o documentation is also fixed. A print
     media support is now available in the documentation.

     This release incorporates the Unicode 5.0 standard as
     well as a brand new xml module. This release also
     introduces the concept of service module, which
     provides additional functionalities on top of regular
     modules. A new service module called web application
     managementor wamis also introduced with this release.
     This service module is based on the newly created xml
     module and replaces the old web module which has been
     obsoleted immediately.



     The core engine has been modified to integrate a
     character transcoder that permits the support all
     ISO‐8859codesets which are mostly used for the encoding
     of european and arabic characters. Depending on the
     locale settings, the transcoder automatically remaps
     the 8 bits characters into their respective unicode
     character. All clients have been updated to detect
     their associated locale and to set automatically the
     appropriate transcoder. A new option ‐ehas been added
     to force a particular encoding.


     A logging base class has been added. The logging
     facility provides the interface to store messages by
     time and level. This class is further extended in the

     A heap class has been added. The heap can operate in
     ascending or descending mode. This class can be used to
     support priority queue.

     An option class has been added in order to ease the
     option capture when designing an application. The class
     permits to define the valid options and offer a
     powerful retrieval mechanism.

     The Timeclass has been completely changed and a new
     Dateclass has been added. The new mechanism provides a
     better separation between the time and the date,
     increase the date range and authorizes the support for
     multiple calendar.

     The axsclient has been modified to support the
     axs:insert‐marker, axs:insert‐headerand insert‐
     footercontrol commands.

     The Folioand Sheetclasses have been substantially
     updated to support additional information. The
     Sheetalso supports the concept of markers that marks
     the sheet columns by literals. The concept of column
     tagging has been added with the associated search
     methods. All classes also contain an information field.
     The importation mechanism now supports a cons cell that
     defines both the cell name and the cell value.

     The Tableclass has been modified to support the concept
     of table data header. The associated methods have been
     added to the class and a new HtmlThhas been added. The
     concept of tag propagation has also been added. If a
     tag element already exists, this one is not added. This
     is particularly true for the classtag that is now part
     of the class constructor. The HtmlPageclass has been
     put in strict conformance with xhtml 1.1 and the
     XHtmlpageclass has been removed.

     A new module called the afnix‐pimmodule has been added
     to the base distribution. The personal information
     management or pimmodule is designed to ease the


     management of personal information and agenda.

     A new module called the afnix‐gfxmodule has been added
     to the base distribution. The module contains the base
     class that supports the graph data structure which was
     previously part of the standard library.



     The core engine has been substantially modified to
     integrate the support for Unicode characters. Depending
     on the system settings the reader automatically adjust
     itself to operate in byte mode or in UTF‐8 mode. The
     Stringand Characterclasses are now operating with a
     Unicode representation. The design of an Unicode based
     engine also impacts several classes like the Regex,
     Bufferand stream classes. A new class called Byteis
     also designed to handle byte character. A new stream
     model with a base Streamclass has also been added. The
     full support with Unicode character is not yet
     completed. In particular, certain codesets are not
     supported at all. This is particularly true with case‐
     conversion functions.

     The object model now supports the creation of orphan
     instancewhich is an instance without a class attached
     to it. The instance can be later bound to a class and
     such class can even be changed during the course of the
     program execution.

     The Addressclass has been updated to reflect the access
     to address aliases.

     The Literateclass has been updated to reflect the
     support of Unicode characters. The class can operate
     both in byte mode or in Unicode character mode.



     Support for the large file system has been added in the
     base distribution. All input/output operations as long
     as they are supported by the operating system are now


     done in 64 bits mode.

     The cryptographic library incorporates the support for
     the SHA‐1, SHA‐256, SHA‐384 and SHA‐512 hash

     The cryptographic library incorporates the support for
     the Advanced Encryption Standard (AES) as a symmetric

     The ODC library has been renamed to SPS which stands
     for spreadsheet library. This new name is considered
     more appropriate for the function the library achieves.

     The XhtmlPara class is now configured to support XHTML
     1.1 with utf‐8 encoding.

     The documentation has been rewritten completely in XML.
     A DTD as well as the necessary XSLT style sheets have
     also been designed to produce a professional
     documentation which can be used for printing or for
     online browsing.


     This release incorporates a fix for a terminal
     capability error.

     This release incorporates fixes for several build
     problems with the FreeBSD platform.

     The 1.1 release is yet another milestone that
     incorporates a full redesign of the documentation tree
     as well as the inclusion of the cryptographic library
     that features some original implementations. The full
     documentation is now available in XML format and can be
     accessed online.

The 1.0 release is the initial release. This release
replaces the old ALEPH programming languagewhich has been



     This release incorporates the necessary files that
     support GCC 4. It also provides some minor fixes that
     were preventing the compilation on some 64 bits

     This release incorporates a minor fix that could cause
     the build process to fail.

     This release incorporates a minor fix that could cause
     the build process to fail.

     This is the primary release 1.0.0 which originated from
     the ALEPH programming languageand which has been
     discontinued. A complete history of the language is
     provided in the description page.