At the beginning of Edward K. Ream's article introducing his
Small-C Screen Editor in Dr. Dobbs Journal (#63, January, 1982)
he asked whether our present editor lacked flexibility,
transporability, and extensibility. Although my mainstay editor
has been PIE from Software Toolworks, I have often been annoyed
at its inability to edit large files or to make major structural
changes in text. On the other hand, Ream's editor as presented
did not go much beyond PIE and seemed clumsy in its Edit-mode,
but it does encourage adapting it to fit individual needs since
it is presented in source code. Thus, after several nights of
typing and several more nights of debugging, I had the C editor
up and running.
I have been modifying the editor during the last few months and
it has evolved to the point that I feel some of Dr. Dobb's
readers may be interested. The changes are of several types:
1) Extensions to the file-handling and buffer management to
permit editing large files, extracting parts of the text to a
different file, and moving and copying portions of the text
within the file.
2) Changing the edit mode operation to recognize special
keys on the H19 Terminal or H89 Computer instead of single-letter
commands. As a bonus, the editor now assumes eXchange mode for
any other typed key.
3) Addition of a few new commands to the edit-mode and some
changes in rules of operation.
4) Slight modifications to allow modular compilation using
the Software Toolworks C/80 compiler.
These enhancements are discussed below.
A documentation file is included
which summarizes the expanded features and all
commands.
Changes to File Handling and Command-Mode Operation
Most of the changes to the command-mode are concerned with
adding flexibility to file handling and major buffer alterations.
Separate read and write files are now maintained, with load
<nfilename> specifying the read file name, clearing the
buffer, reading the file, and closing the read file if it all
fits in the buffer. Otherwise as much as fits is read in, and
the read file remains open. The open <filename> command
opens the readfile without clearing the buffer or reading
anything in. More from the read file can be added to the buffer
with either the rest or add <n> commands. Rest reads in
as much more as possible and gives the option of clearing the
buffer, but add <n> reads only <n> more lines
without clearing the buffer. The write file is specified by name
<filename> for a new file, or delname <filename>
for writing over an existing file (This replaces the resave
command). Write <n> writes n lines from the buffer to
the write file, deleting those lines. To balance the existing
append <filename> command, an extract <from to>
command has been added to write the indicated line range to a new
file (the name is requested after the command is entered) without
deleting those lines from the buffer. Finally, to allow
flexibility, the read and write files can be closed by closeread
and closewrite.
Major structural changes in the file can now be made using
the copy <from to n> and move <from to n>
commands, which take n lines from <from> and copy them to
before line <to>. In addition, move deletes the
<n> lines at <from>. For speed, these routines
open up the new space, and then do the copying or moving. No
move or copy is allowed if there is not room in the buffer. If
buffer space is tight, or if the move or copy is to a part of the
file not currently in memory, then use the extract and append
commands, which use the disk as a buffer.
The following command-mode commands are unaltered from the
original: append, change, clear, delete, dos, find, g, list,
search, and tabs.
Changes to Edit and Insert Modes
The most important change to the edit mode is the
replacement of the single-letter commands by escape-character
sequences generated by the special keys on the H19/H89 keyboard.
Similar keys, but with different escape sequences, are found on
many other terminals and computers. This allows default use of
the eXchange mode (replacing contents of cursor position with the
typed keystroke) for normal keys, including the space bar. Most
special characters and edit mode commands retain their original
functions (see the documentation portion of the listing for
details), but two new commands have been created for the edit
mode: the HOME key moves alternately to the top and bottom line
on the screen, and the ERASE key erases from the current cursor
position to the end of the line. More subtle changes have also
been made. The RETURN key moves to the beginning of the next
line in Edit mode, but acts as the insert down key in the Insert
mode. Both the DC and DELETE keys delete the character at the
cursor, but BACKSPACE deletes the character to the left of the
cursor, the same as the original delete character special key.
The only commands remaining as control codes are split and join.
There is some room for expansion: three keys are currently
assigned to force command mode, but could be reassigned. Note
that the ESC key must be pressed twice to be recognized, because
it is also issued by the special character codes of the keyboard.
My choice of key assignments and features has admittedly been
influenced by the PIE editor.
Implementation Details
I'd like to start out with an unsolicited endorsement of the
Software Toolworks C/80 Compiler, now in version 2.0 and
incorporating almost all of the C language. Its a decendent of
Small-C and is cheap, fast, and powerful. Its salient feature in
the context of the editor is support for modular compilation
using Microsoft M80 and L80. Since the editor is broken into 9
fairly independent modules, changes can be made in one without
having to recompile everything. Also, SID can be used for
debugging using global variable and function names. The
disadvantage is that variable and function names must be distinct
at six characters length. This has necessitated renaming several
functions in the editor, as listed in Figure 1. Also, to
force the main buffer to be at the end of the program, the short
program MBUFFER.MAC must be assembled by M80 and be the last
module linked (after the C/80 CLIBRARY module).
Most details of the changes are explained in the listing.
Concluding Remarks
This editor is a very useful addition to my stable of
inexpensive editors, and is particularly suited to editing large
files, interleaving text from other files, and breaking up a file
or portions of a file into smaller pieces. It doesn't do
everything, and some of the things it does do go excruciatingly
slowly. In particular, the default eXchange operation in the Edit
mode is somewhat slower than typing speed for my 2 Mz H89, as are
the insert and delete line commands. I suggest those with H89's
go through the bothersome task of reassembling their BIOS with
the type-ahead buffer option. The search, find, and change
commands would benefit from some assembly language optimization.
When I move on to my next system, I will feel secure that I
have its first editor waiting in the wings, and it won't cost me
twice as much as my previous editor for the same features. The
modified editor is in the public domain.