Vectors, Variables, and Values

Software Conventions
Porting and Supported Platforms

General Purpose Library
Networking Library
C++ Library
EPOCH Library


On the Shelf

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,)

Command Line Processing

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

Data Structures

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.
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.
xqt_util - shell execution package (high-level interface to UNIX shell or VMS CLI).

Networking (libnet.tar.Z,)

(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.
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.

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.


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!)
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.
A pocket FTP/WWW server, included in the libnet distribution.

Generic Tools

dump - formatted dump program.
ffc - format file in columns.
talknet - network talk utility.

Project-Specific Tools

cornet - CORTEX network tool.
direct - EPOCH directive submitter.
eire - EPOCH events reader.
epcot - EPOCH-CORTEX telemetry server.
glop - EPOCH global variable print.

Alex Measday  /  c.a.measday@ieee.org