Eloquence A.04.02 Release Notes

This documents changes from Eloquence release A.04.01 to A.04.02.


Fixed problems

The following bugs are corrected with this patch:

CRTCOLS problem

If the screen width has been switched to 132 characters using the CRTCOLS statement, the display width did not change. This could result in an unexpected behaviour.

Now the default display width is changed accordingly, if it is not set explicitly.

Memory problem

HP-UX malloc(3X) caused problems with memory allocation, causing 'eloqcore' processes to grow all the time instead of re-using memory.

The malloc(3X) library has been replaced by malloc(3C).


A bug in the REPORT WRITER caused a PAGE BREAK if STOP REPORT was executed during PAGE TRAILER.

This has been fixed.

PTY handling

The 'eloq' process uses pty's for communicating with the 'eloqcore' process. For some reasons the pty permissions sometimes change, which could result in a hangup of Eloquence processes at startup. 'eloq' was unable to open either the pty master or the slave side.

To solve this problem, you have to install eloq with the set-user-id bit set.

     cd /usr/eloquence
     chown root eloq
     chmod 4555 eloq
Pty devicefiles have been moved to /dev/ptym (master side) and /dev/pty (slave side) with HP-UX release 8.0.
The /dev/pty* and /dev/ttyp* files are only links to the real devicefiles provided for compatibility.
These links are not handled by SAM.

'eloq' has been changed to access the devicefiles instead of compatibility links.

ASCII-Window Bugs

All known bugs regarding the ASCII-Window functionality has been fixed.

New features

The following new features are implemented in this patch:


A new keyword has been implemented:

FNAME$( expr ) returns the filename associated with the given file number.

      ASSIGN #1 TO "foo,TMP"
      DISP FNAME$(1)

   -> /tmp/foo.DATA
Please note: An absolute HP-UX compliant path/name is returned.

FIND performance improvement

In former revisions, the FIND statement resulted in a regular sequential read of the first dataset in THREAD. If the first dataset in THREAD contained many records, it resulted in a long execution time.

Now a 'fast sequential' mode is used internally to process the first dataset. This will passby the internal database cache, which results in a better response time.

Please note:

DBOPEN performance improvement

DBOPEN checks each (created) dataset for existence and consistency during the open. In former revisions, this was done each time a database was opened, resulting in long response time if the database contained may datasets.

Now DBOPEN checks the database only the first time it is opened (systemwide). Any subsequent DBOPEN will execute faster, because consistency checks are omitted.

BREAK key handling (PC connected via LAN)

Pressing the BREAK key on a PC connected via LAN caused process termination instead of triggering the desired ON HALT action. Network layers converted the BREAK into a SIGINT resulting in process termination.
Now eloq will intercept SIGINT and convert it into a BREAK character. But this only works if you started 'eloq' instead of 'eloqcore'.

ASCII-Windows Enhancements

The following enhancements concerning the ASCII-Window functionality have been implemented:

DBPATCH utility

The 'dbpatch' utility which was only available for the Response Center engineers is now included in this patch.

If the database ROOT file contains different information than the data sets (eg. number of records), the database is considered as corrupted and will return a -94 status word during the DBOPEN. This may be the result of a power failure or a kill -9 in the "right" moment (please refer to Murphys Laws for details).

The only supported way to repaire your database is to export it using dbexport, erase it using dberase and re-fill it using dbimport utility programs.

The dbpatch utility can be used for two different purposes:

  1. If started without any options, it indicates which datasets are corrupted.

    Sample output of the dbpatch utility: The arrow at the end of a line indicates a corrupted dataset.

                                      EXPECTED        REAL
       ---------------- -- - -------- ------ -------- ------ --------
       INTERPRET        01 A      100     32       68     32       69 <
       NAME             02 A      100     64       50     64       50
       INHABER          03 M      200     76      161     76      161
       DISC             04 D      500    128     2429    128     2430 <
  2. If started with the option '-w', it patches the ROOT file.

    THIS DOES NOT FIX ANY CORRUPTED DATA, it will simply suppress the status error. However, this may be necessary, if time does not permit you to export/import the database.

NOTE: The use of the dbpatch utility with the write option is UNSUPPORTED and may result in unpredictable behaviour, due to errors in the "links" between data records or data sets (master/detail). You should repair your database using dbexport/dbimport as soon as possible.

Remote Database Access

With this new version A.04.02, network access to a remote database is now supported.


Eloquence does not allow an access via NFS, because data base access synchronisation is done via shared memory, which can't be shared over a network. So any (write) access using NFS services would destroy the database.

Now Eloquence provides a network database daemon, which will provide access to a database via network. The network daemon will intercept requests from network, process them and transmits results back to the invoking process.

The network daemon must be started on each machine, on which a database resides which should be accessible via network. Eloquence must be installed on each machine, where an network daemon should be started.

A remote access version of the database library has been provided which will allow remote access to Eloquence database via network from 'C' language. Eloquence does not need to be installed to use this remote library.



The network daemon runs with a fixed user id. This is potential security lack if it runs as 'root', because NO password must be specified to access ANY data in ANY database on the system.

The suggested solution is to either create a new login eg. 'remote' or to use an existing login to start the network server instead of 'root'.

You must modify your system configuration in order to use or provide access to a database via network.

  1. Modify the file /etc/services on the system where the database resides and on the system, from which you want to access the database. This will provide a mapping from a service name and a port number.

    Add a line like the following to your /etc/services

            eloq  8000/tcp  # HP ELOQUENCE eloqnd
    where "eloq" is the service name, "8000" is a port number, "tcp" is the protocol name. All characters after '#' are comment.

    Check the port number against the following:

    NOTE: The entries must not be preceded by a blank space. See the services(4) manual page for more information.

  2. How to start the network daemon:

    Start the network daemon from within your /etc/rc just after eloqd Add a line like the following in the 'localrc' part of your /etc/rc file:

            su remote -c /usr/eloquence/eloqnd
    where "remote" is the user login.

    Accessing a remote database

    To access a remote database from within Eloquence, you have to define a VOLUME in your eloq.config or .eloqrc which will map a logical volume name to a remote path.
    For example
          VOLUME HPFB :HPFB HPFB:/usr/application
    Any access to a database DBNAME,HPFB will be performed using the network daemon on the system HPFB.

    You have to provide an absolute path to the directory where the database resides, because there is no current directory.

    There is a new status code for Eloquence database: A status of -700 indicates that a remote operation failed. Status word 10 describes the kind of failure:


    Accessing a remote database should be fully transparent except that all status words will be initialized with zero prior to remote database access (they remain unchanged accessing local database).

    Remote access library

    We provide an additional library, which allows remote access to an Eloquence database from a system, where no Eloquence is installed.

    To compile with a "remote only" database library, you have to define REMOTE_ONLY before including idb.h. You should link with libreloq.a instead of libeloq.a

    Code skeleton:

             #define REMOTE_ONLY
    To link:
             cc ... -l reloq

    Last update: 95/08/15