Vectors, Variables, and Values

(Updated August 13, 1999)

Software Conventions
Porting and Supported Platforms

General Purpose Library
Networking Library
C++ Library
VMS-Specific Library
VxWorks-Specific Library
Code 521 Library
EPOCH Library

Other Applications

Design/Implementation/Documentation Conventions

My library software follows certain conventions that you might find useful to know when using or examining the software:

More to follow when I think of it ...


Porting and Supported Platforms

In writing my software, I try make it as portable as possible. I make use of ANSI C libraries and header files as much as I can. Function declarations are made in both ANSI C and non-ANSI C form, so the code will compile whether your compiler is ANSI C-compliant or not.

The operating systems I'm using on my current project are: Solaris (SunOS 5.5 on Sun-4 and x86 platforms) and Lynx OS 2.4 (on a PowerPC), a real-time UNIX. For the previous 3 years, I used: SunOS 4.1.3 (on Sun-4 platforms), HP/UX, and VxWorks, a real-time, Unix-like OS running on 68040-based systems. Prior to that, I was on a project for which we ported earlier versions of much of this software from UNIX to VMS (VAX C and UCX TCP/IP).

The software distributions generally include the following Makefiles:

(At one time, I tried setting up the networking library to use configure, but I got lost in the documentation and the process. configure is a great idea that's too darned complicated - I'm sure we should all be grateful for UNIX and open systems!)

I suspect that most of the non-OS-specific software would build without error on a PC. If someone will loan (or give) me a PC with Windows, I will be happy to test out my theory.



Thanks to the following people for bug and porting reports:

I don't have the changes required for the various ports, but at least I know it's possible to port the code to the various platforms with relatively little trouble. My apologies to anyone I've left out, including those who reported bugs (e.g., in the quadword utilities and in the IPC utilities) before I started keeping a list here.


General Purpose Library (libgpl.tar.Z, 482k)

Command Line Processing

opt_util - full-word option scanning package for UNIX-style command lines or strings.

Data Structures

cobl_util - collectable object lists.
gsc_util - generic depth-first and breadth-first graph search package.
hash_util - hash table creation/search package.
list_util - generic list handling package.
tpl_util - N-tuple creation and element retrieval.

Error Reporting

vperror - perror(3)-like error reporting function.


drs_util - directory scanning package.
eio_util - extensible I/O package for user-level, application-specific device drivers.
fnm_util - file name parsing package.

Interprocess Communication

The IPC packages provide named message queues, semaphores, and shared memory segments under UNIX and VxWorks. Earlier versions of the semaphore and shared memory packages were ported to VMS by Fred Shaklan and myself; message queues were not needed, but they could have been easily emulated using mailboxes. If I ever work on VMS again, I'll port the new packages; the package APIs are operating system-independent.

msq_util - high-level interface to named message queues (UNIX and VxWorks).
nob_util - named objects database package.
sem_util - high-level interface to named semaphores (UNIX and VxWorks).
shm_util - high-level interface to named shared memory (UNIX and VxWorks).

Memory Management

meo_util - memory operations.

String Manipulation

get_util - miscellaneous string scanning functions.
rex_util - full-featured regular expression matching and substitution package.
str_util - miscellaneous string handling functions.


bmw_util - benchmarking package.
ts_util - POSIX timespec manipulation package.
tv_util - UNIX timeval manipulation package.


bit_util - bit manipulation functions.
ckp_util - checkpointing package.
dympl_util - dynamically loads object modules (UNIX, VMS, VxWorks).
xbm_util - X bitmap (XBM) utilities.
xqt_util - shell execution package (high-level interface to UNIX shell or VMS CLI).

Networking (libnet.tar.Z, 328k)

(This library distribution is a subset of the libgpl library, plus some test clients and servers.)

The following packages provide high-level, but powerful, interfaces to TCP/IP and UDP/IP networking:

tcp_util - high-level interface for TCP/IP network socket I/O.
udp_util - high-level interface for UDP/IP network socket I/O.

And the following packages implement higher-level protocols layered on top of the TCP_UTIL package:

lfn_util - high-level interface for LF-terminated network I/O.
nft_util - FTP server framework (UNIX, VMS, and VxWorks).
xnet_util - high-level interface to xdr(3)-based network I/O.

The NIX package simplifies the writing of I/O-event-driven applications (e.g., network servers):

nix_util - non-X-based, X Toolkit-style I/O and timer event dispatcher.
port_util - simple listening ports for NIX dispatcher-based network servers.

The remaining packages are an assortment of networking support functions:

net_util - miscellaneous network functions.
qio_util - application-level, queued I/O facility (UNIX, VMS, and VxWorks).
skt_util - socket support functions.

Version-Independent Messages

These three packages implement version-independent messages as described in Appendix B of Robert Martin's Designing Object-Oriented C++ Applications Using the Booch Method. (What he calls attributed data trees, I call name/value lists.) VIM network streams are layered on top of the TCP_UTIL package.

nvp_util - name/value pairs.
nvl_util - lists of name/value pairs.
vim_util - version-independent message streams.

C++ Library (libgplp)

Endpoint - generic network endpoint.
TcpEndpoint - TCP/IP endpoint.
BufferedTCP - buffered TCP/IP stream.
Dispatcher - I/O event dispatcher.
HashTable - hash table creation and search.
OptionsScan - full-word option scanning package for UNIX-style command lines or strings.

VMS-Specific Library (libvms)

VMS - a class operating system. It deserves a better fate; perhaps its reincarnation as Windows NT will rescue it from oblivion. This software was written for a VMS-based satellite control center during 1992-1993; we used the VAX C compiler and DEC's UCX TCP/IP networking product. Porting the original UNIX software to VMS was relatively painless and most of the applications I wrote for the project ported effortlessly back to UNIX afterwards.

lnm_util - high-level interface to VMS logical name facility.
luq_util - high-level interface for DECmessageQ I/O.
mbx_util - high-level interface to VMS mailboxes.
popen - VMS version of UNIX function.
rock_util - high-level interface to VMS resource locking.
sup_util - distributed "server is up" tracking using VMS locks.
tty_util - high-level interface for VMS terminal I/O.

VxWorks-Specific Library (libvx)

atexit - VxWorks implementation of ANSI C function.
ef_util - VxWorks implementation of VMS-like event flags.

Code 521 Library (libppl)

eio_mbx - Extensible I/O driver for MEDS mailbox I/O.
eio_packet - Extensible I/O driver for packet file I/O.
kai_util - KDOS asynchronous file I/O.
mist_util - high-level interface to MEDS message streams.
stan_util - too-high-level interface to MEDS message streams.

EPOCH Version 3 Library (libepl)

edb_util - EPOCH events database utilities.
epc_util - EPOCH network communications.
gv_util - EPOCH global variables.
ins_util - IN-SNEC CORTEX utilities.
nvf_util - named variable set files.
nvr_util - named variable utilities.
nvs_util - named variable sets.

EPOCH Version 3 Remote Access Library (liberal)

Endpoint - network endpoint.
TcpEndpoint - TCP/IP endpoint.
BufferedTCP - buffered TCP/IP stream.
EpochStream - EPOCH network stream.
EpochMessage - EPOCH network message.
NVar - named variables.
NVarSet - sets of named variables.
NVarFile - files of named variable sets.
GSegment - EPOCH global variable segments.
GVar - EPOCH global variables.
Dispatcher - I/O events dispatcher.
HashTable - hash table creation and search.
OptionsScan - command-line options scanning.



dump - formatted dump program.
ffc - format file in columns.
fifo - Named pipe talk utility.
quack - DECmessageQ talk utility.
rpm - RPC stream merger.
talknet - network talk utility.


events_reader - TPOCC event message reader.
maple - TPOCC multiple applications emulator.
molox - module lines-of-code/PDL counter.
offset - TPOCC system variable information server.
sdp - TPOCC system variable display tool.
syncsrc - TPOCC synchronous data source simulator.
xstol - X11/Motif-based GUI for TPOCC's command language interpreter.

aemh - X-SAR alarm/event message handler simulator.
prosper - TPOCC process spawner.

kdosd - KDOS file server.
mbc - MEDS message broadcaster/concentrator.
tsi - TPCE SNMP interface.

cereal - EPOCH serial interface emulator.
cornet - CORTEX network tool.
eire - EPOCH events reader.
epcot - EPOCH-CORTEX telemetry server.
glop - EPOCH global variable print.

Other Applications

A network server that provides each client with its own Tcl interpreter, extended with networking and hardware debugging commands. (Derived from earlier programs, nicl and picl!)
A Tcl-based, programmable HTTP server. hope was originally a separate program; since I needed some of gentle's capabilities, however, I ended up just adding some HTTP commands to gentle. (Also see HOPE/LZP, HOPE/ETS, and HOPE/Epoch.)
A Tcl-based, programmable X11 (Tk) graphical user interface. (Derived from earlier Motif programs, wimp and twerp!) For an overview of gentle and moi, see my slightly out-of-date memo, "C'est Moi!". I subsequently developed a Motif equivalent to moi, called plum, which resulted in a reworking of the display classes so that the same status page definitions could be used by both the Tk and Motif versions of the GUI.
Not another compiler-compiler?! In FORTRAN, no less!
Not another file transfer application?! (Superseded by pose.)
Collects function-by-function metrics for C source code. The metrics include lines-of-code, Halstead's Software Science volume, McCabe's cyclomatic complexity, and NPATH.
Generates cflow(1)-style structure charts from VMS object modules.
A Tcl-based, programmable X11 (Motif) graphical user interface. (The Motif equivalent of moi.)
A pocket FTP/WWW server, included in the libnet distribution.

Alex Measday /