Sydney S. Weinstein, CDP, CCP is a consultant, columnist, lecturer, author, professor and President of Datacomp Systems, Inc., a consulting and contract programming firm specializing in databases, data presentation and windowing, transaction processing, networking, testing and test suites, and device management for UNIX and MS-DOS. He can be contacted care of Datacomp Systems, Inc., 3837 Byron Road, Huntingdon Valley, PA 19006-2320 or via electronic mail on the Internet/USENET mailbox syd@DSI.COM (dsinc!syd for those that cannot do Internet addressing).
During the last two months, a group spearheaded by Raphael Manfred <ram@acri.fr> has released dist-3.0, a long-awaited update to a useful tool. The update improves upon Larry Wall's dist-2.0 package as released in comp.sources. unix in 1988. Manfredi's group has posted dist-3.0 as Volume 39 Issues 5-32 with patches in Issues 33, 34, 49, 50, 51, 52, 58, 64, 82, 87, and 88 in the newsgroup comp.sources.misc. The dist package includes a Configure script generator (metaconfig), a Makefile.SH generator (jmake), a set of patching tools (pat) and a set of tools for making a distribution kit. The entire dist package is designed to support the longterm maintenance of a software project. In addition, dist aids in cross-system portability.
metaconfig is a perl program that uses a set of Bourne shell script fragments (called modules) to automatically customize your programs. metaconfig bases these customizations on the #ifdef symbol. metaconfig offers customizations for different OS portability features, include file usage, and user selection of application feature sets. By a simple process, you can extend the set of over 300 pre-written modules by writing your own.
metaconfig outputs a shell script that will automatically customize your application to the installation system and that system's user specifications. In addition, metaconfig remembers the customization parameters when it performs subsequent reconfigurations. Running the configure script produces a config.sh file saving these values and a config.h file which contains all of the C level defines and options.
metaconfig automatically runs any file whose name ends in .SH through the shell, along with the config.sh answers. This feature allows for customizing any file. The most common .SH file is Makefile.SH. dist even includes a generator, jmake, which automatically produces Makefiles in Makefile.SH format. configure then automatically "adjusts" these files to produce makefiles that are specific to the installed system. jmake inputs simple rules and outputs shell scripts that produce the Makefile, which configure subsequently customizes.
The remaining tools in dist keep track of the application, its changes and bug fixes. These tools can automatically produce a set of "difference" files called patches. dist can apply these patches to the source files to upgrade them to the current release. In addition, the patching tools produce a set of notes on the modifications, which you can distribute as release notes.
dist requires Perl to run, as metaconfig is written in Perl. (Actually, dist was originally written to make Perl easier to install.)
More Misc
units, a program cloned from one of UNIX's stranger commands, appeared in comp.sources.misc this month. units provides conversions between arbitrary scaling factors, such as from feet to meters, or BTUs to watt-hours. units understands, via its internal tables, a large number of scales, and checks the units for conformity. If the units are not comparable, units prints a conformity error and lists the reduced form for each scale. Adrian Mariano <adrian@stein2.u.washington.edu> contributed this clone for Volume 38, Issue 61.Andrew Burt <aburt@du.edu> contributed menushell for Volume 38, Issues 66-68. menushell is a UNIX menuing shell that provides an easy-to-use interface for users. Administrators will find it easy to write menus for menushell as well. You can write menus in any format; and menushell can execute any code your shell can. menushell supports argument prompting, context sensitive help, and text-based menu generation.
Ted Wisniewski <ted@oz.plymouth.edu> submitted a different, and simpler, menu shell, PSCMenu, for Volume 39, Issues 60-61. PSCMenu is a menu system capable of executing any UNIX command from the "menu." PSCMenu reads individual menus from menu files located in a "menu" directory. You can edit the menu files with any editor, since they are simple text files. Through the "menu" is flexible, the only command line argument PSCMenu accepts is the name of a directory containing the menu files. You specify a default directory in the menu header file.
Jeff Kingston <jeff@joyce.cs.su.oz.au> made one of the larger contributions this time, with lout in Volume 38, Issues 69-103. Quoting the author: "lout is a document formatting system. It reads a high_level description of a document similar in style to LaTeX and produces a PostScript file which can be printed on many laser printers and graphic display devices. lout offers an unprecedented range of advanced features, including optimal paragraph breaking, automatic hyphenation, PostScript EPS file inclusion, equation formatting, tables, diagrams, rotation and scaling, sorted indexes, bibliographic databases, running headers and odd-even pages, automatic cross referencing, and much more, all ready to go. Furthermore, lout is easily extended with definitions which are very much easier to write than troff or TeX macros because lout is a high-level language, the outcome of an eight-year reasearch project that went back to the beginning."
Hadmut Danisch <danish@ira.uka.de> had updated his hpcdtoppm, PhotoCD-Decoder that produces output in portable pixmap format (ppm) and PostScript (from Photo-CD's) for Volume 39, Issues 2-4. v0.5p11 contains the following updates: bug fixes, support for gsave/grestore in the PostScript stream, Floyd-Steinberg dithering on the PostScript output, and ANSIfication of the procedure headers.
Chip Rosenthal <chip@chinacat.unicom.com> contributed enh-du2, a highly_portable, high-performance, POSIX-conformant reimplementation of the du command, for Volume 39, Issues 35-36 with a patch in Volume 39, Issue 72. Enh-du also adds some helpful features your system du lacks. Enh-du includes, in addition to the enhanced du command, dusort a filter that formats the output of du, and ngsizes, a script that produces a summary of disk space used by the Usenet news system. This last feature alone puts enh-du2 to good use.
Adam Costello <amc@wuecl.wustl.edu> contributed par, a paragraph reformatter, in the spirit of the BSD command fmt for Volume 39, Issues 83-85. par copies its input to its output, reformatting paragraphs as it goes. par does text fill, prefix and suffix stripping/replacement, hanging idents, optional justification, and many other advanced operations.
Mike Gleason <mgleason@cse.unl.edu> has issued version 1.5.0 of his ncftp package, posted as Volume 39, Issues 53-57. ncftp is an alternative user interface to ftp. Gleason has updated the previously posted version, v1.0.2, with the following new features: support for input command line editing (gnu-readline package), support for several firewall libraries and their implementation, a recent sites file, better on-line help, faster ASCII transfers, and of course bug fixes. Patch 1 appeared in Volume 39, Issue 65 and fixed some bugs in the termcap code and history file. Patch 2 in Issue 68 fixed another termcap problem. Patch 3 in Issue 77 fixed some portability problems. Patch 4 appeared in Issue 90 and fixed many problems and added SVR4 support.
On the patch front, contributors posted several patches to remind version 3.0. Patch 7, Volume 38, Issues 62-65, adds system variables to allow more user control over remind operations and to allow for queries about the command line options from within a reminder script. Patch 7 also adds sunrise and sunset computations as well as daylight savings time and time zone computations. Patch 8, Volume 39, Issues 79-81 adds foreign language support including French and Norwegian language catalogs. Of course, both patches include bug fixes and various minor enhancements. David F. Skoll <dfs@doe.carleton. ca> contributed remind.
Qiegang Long <qlong@giane.cs.umass.edu> fixed several bugs for his deaf package in Volume 38, Issue 65. deaf is an integrated environment that manipulates files and directories, queries Archie servers, and transfers files. Because of its embedded ftp utility, deaf not only supports file/directory operations on a local system in a full-screen fashion, it also allows most of those operations (like view, edit, delete, rename, etc.) to apply to files/directories located at remote machines.
Brad Appleton <brad@hcx1.ssd.csd.harris.com> introduced patch 2 to CmdLine in Volume 39, Issue 44. CmdLine is a C++ command line argument parser that understands both the short (minus letter) and long form (+keyword) argument formats. Patch 2 fixes a problem with certain compilers in which the constructor would ignore the first argument.
UNIX Utilities
Various utilities comprise the highlights from comp.sources.unix this month. Michael Schroeder <mlschroe@immd4.informatik. unierlangen.de> contributed his screen-3.5 screen manager with VT100/ANSI terminal emulation as Volume 26, Issue 300-309. screen is a fullscreen window manager that multiplexes a physical terminal between several processes (typically interactive shells). Each virtual terminal provides the functions of a DEC VT100 terminal and, in addition, several control functions from the ANSI X3.64 (ISO 6429) and ISO 2022 standards (e.g. insert/delete line and support for multiple character sets). screen-3.5 maintains a scrollback history buffer for each virtual terminal and a copy-and-paste mechanism that allows moving text regions between windows. Patch 1 appeared as Volume 27, Issue 14 and is a bug fix release.William LeFebvre <phil@eecs.nwu.edu> updated the famous top program to top 3.2 for Volume 27, Issues 1-12. top produces a real-time continuously updated display of the "top n processes" using the most system resources. top runs on most SVR4 and BSD style UNIX systems.
UNIX includes several incompatible talk programs that allow two users to communicate in real time, via a split screen character-at-a-time display. ytalk from Britt Yenne <yenne@austin.eds.com> provides a multi-user talk program that understands the existing incompatible talk protocols, and even understands incorrectly compiled talk daemons. (Multi-user talks allows any number of users to connect and hold a conversation.) Version 3.0 of ytalk was posted in Volume 27, Issue 24 with patch 1 in Issue 25 to fix some problems.
Bruce Perens <bruce@pixar.com> contributed a new multi-system compatible version of an old SunOS standby, efence, for Volume 27, Issue 26. Electric Fence is a unique kind of malloc debugger. Electric Fence uses the virtual memory hardware of your system to detect when software overruns the boundaries of a malloc buffer. Electric Fence will also detect any accesses to memory previously released by free. Because it uses the VM hardware for detection, Electric Fence stops your program on the first instruction that causes a bounds violation. It's then trivial to to display the offending statement with a debugger. This version supports SysV/386 including SVR4, Solaris 2.x, SGI IRIX 5.0, IBM AIX, SunOS 4.x and HP/UX 9.01. A very short patch for a HP/UX kernel bug was posted in Volume 27, Issue 30.
conv123 is an interesting set of utilities posted in Volume 27, Issues 31-32. Contributed by Gregory Santos <greg@brooktree.com>, conv123 provides two utilities, conv123 converts an ASCII file into a 123format binary spreadsheet file, grph123 converts an ASCII file into a 123-named graph file. You can use both utilities to import arbitrary data into programs capable of reading 123-format files.
The moderator contributed one himself, a new issue of avlsubs. Submitted by Paul Vixie <paul@vix.com> for Volume 27, Issue 34, this new release adds ANSI and POSIX support. Quoting the author: "These functions create and manipulate a balanced binary (AVL) tree. Each node of the tree contains the expected left & right subtree pointers, a short-int balance indicator, and a pointer to the user data. On a 32-bit system, this means an overhead of 4+4+2+4 bytes per node (or, on a RISC or otherwise alignment-constrained system with implied padding, 4+4+4+4 bytes per node). There is no key data type enforced by this package; a caller-supplied compare routine is used to compare user-data blocks. Balanced binary trees are very fast on searches and replacements, but have a moderately high cost for additions and deletions. If your application does a lot more searches and replacements than it does additions and deletions, the balanced (AVL) binary tree is a good choice for a data structure."
On the patch front, xinetd-2.1.1 from Panos Tsirigotis <panos@cs.colorado.edu> received patch 1 in Volume 26, Issue 299. The patches resolve a problem with unlisted RPC services and fix some initialization problems, especially with syslog.
Library Extensions
Bruce Schuchardt <bruce@servio.slc.com> contributed the latest version of xgrapsc to comp,sources.x for Volume 20, Issue 100-104. xgrabsrc grabs an X window and dumps it in various formats. Version 2.3 fixes many bugs, including these very often reported bugs, dumping of subwindows in earlier releases just didn't work at all in this release, you can dump any window by ID; preview images in EPSI files used incorrect values for white and black these values are now correct; the program would not remove Motif mwm window dressings from a window; the program did not always grab the correct area when used with virtual window managers like tvtwm. In addition, xgrabsrc also adds these features: faster, more compact color PostScript printing; a Motif version of the user interface; a -coords option to specify a fixed area of the screen to grab; normal xwd output and xwd -xy style output, which is more compact.George Ferguson <ferguson@cs.rochester.edu> contributed a patch to the latest version of xarchie. xarchie is the Internet tool to search the FTP servers for a file or set of files. Patch 1 in Volume 20, Issue 107 fixes some minor bugs and adds some new weight and server information.
Justin Kibell <jck@kimba.catt.citri.edu.au> turned his learning exercise with the XPM library into xboing, a simple blockout type game where you bounce a ball around the game area with a paddle, blowing up blocks with the ball. You win by obtaining points for each block destroyed and each level completed. The person with the highest score wins. Posted in Volume 20, Issues 108-133, xboing makes use of the XPM library (also publically available) at version 3.2 or better.
Reviews are Failing
It seems that comp.sources.reviewed is starting to fail. No one reviewed the patches to c2man, so they built up until a repost was warranted. No one reviewed that either so the moderator reviewed it himself. Graham Stoney <greyham@research.canon.oz.au> contributed c2man-2.09 for Volume 3, Issues 49-54. c2man generates UNIX-style manual pages in nroff/troff -man format directly from ordinary comments embedded in C source code. This new release is mostly a cleaned up version incorporating all bug fixes.
Nethack Fallout Part II
The largest posting to comp.sources.games once again was an update patch to nethack31. Patch 3 was posted in 18 parts as Volume 18, Issues 34-51. Once again, the nethhack team has produced a patch larger than most programs (expected, as nethack itself is huge). Contributed by Izchak Miller <izchak@linc.cis.upenn.edu>, patch 3 revised the Mac windowing interface and ported the Mac code to Think C. The patch also cleans up Amiga windowing, and updates MSDOS's display to avoid color confusion. Of course, the patch also fixes bugs.Andrew C. Plotkin <ap1i+@andrew.cmu.edu> submitted patch 1 to his spellcast for Volume 18, Issue 52. Again, this patch fixes bugs, and includes a workaround for the SunOS realloc problem.
Generic Tetris, gtetris4, got a fresh coat of paint and a repost in Volume 18, Issues 53-55. Contributed by Q. Alex Zhao <azhao@cc.gatech.edu>, this version uses only Xlib and supports almost all UNIX X11 systems. New in this version is enhanced portability to more platforms.
Taking tetris to the next plane, literally, is Andrew C. Plotkin <ap1i@andrew.cmu.edu>, who contributed threedee for Volume 18, Issues 56-59. threedee is two games; tetris on a sane, cubical 3-d lattice, and tetris on a close-packed 3-d lattice of spheres. Time to squint a bit more at your display?
Previews from alt.sources
As usual, there's plenty in alt. sources, so here are just a couple of highlights of what's to come in the main stream groups.Jeff Epler <jepler@nyx.cs.du.edu> posted aat, Another Animation Tool, on July 21, 1993 in 1 part. aat allows you to use a simple script language to mostly automate the process of animation with your favorite raytracer/renderer.
To handle the different sound formats used by each computer and workstation, Lance Norskog <thinman@netcom.com> posted st on July 26, 1993 in 9 parts. st translates sound samples between different file formats, and performs various sound effects. This new release understands raw files in various binary formats, raw textual data, Sound Blaster .VOC files, IRCAM SoundFile files, SUN Sparcstation CD-R (music CD format, Macintosh HCOM files, Sounder files, NeXT .snd files, SUN ADPCM (compressed) .au files, and Soundtool (DOS) files. st sound effects enable changing the sample rate, adding echo delay lines, low-, high-, and bandpass filtering, and the Fender Vibro effect.
A1 Davis <rbc!al> posted version 0.11 of "A Circuit Simulator," acs-0.11 on July 28, 1993 in 20 parts. acs is a general purpose mixed analog and digital circuit simulator. acs performs nonlinear dc and transient analyses, fourier analysis, and ac analysis linearized at an operating point. acs is fully interactive and command driven. You can also run acs in batch mode or as a server. acs produces output as it simulates. This release provides Spice-compatible models for the MOSFET (level 1 and 2) and diode. Other models, including BJT, are (still waiting) in the testing phase. This version, while still officially in beta test, should be stable enough for basic undergraduate teaching and courses in MOS design, but not for bipolar design. In batch mode it is mostly Spice compatible, so you can often use the same file for both acs and Spice.