Dec 222017
Swiss Army Knife for Basic programmers. Various tools for GWBASIC programmers.
File SAK.ZIP from The Programmer’s Corner in
Category BASIC Language
Swiss Army Knife for Basic programmers. Various tools for GWBASIC programmers.
File Name File Size Zip Size Zip Type
ALIAS.EXE 32000 20973 deflated
BOXER.BAS 4210 1518 deflated
GUIDE.TXT 31488 8735 deflated
LIST.EXE 33024 21652 deflated
PCHELP.DOC 6981 2412 deflated
STRIP.EXE 33536 21964 deflated
TPCREAD.ME 199 165 deflated
XREF.EXE 38272 24774 deflated
XREF.RSV 1152 487 deflated

Download File SAK.ZIP Here

Contents of the GUIDE.TXT file



BASIC Programming Tools for the IBM Personal Computer

Version 1.0.0


Copyright (C) 1984, John R. Layman.
All rights reserved.

Layman & Layman
1344 Blair House
Columbus, OH 43220

CompuServe 75216,3557

Swiss Army Knife User's Guide

Table of Contents

Introduction 2

Description of ALIAS utility 3

Description of STRIP utility 4

Description of LIST utility 6

Description of XREF utility 7

Description of BOXER program 9

Operating Instructions 10

Error Messages 12

User-supported Concept 14

Permission to Copy 15

29-Dec-84 Page 1 of 15

Swiss Army Knife User's Guide


The Swiss Army Knife is an aid to BASIC programming on the IBM PC and
look-alikes. Its blades are utility programs which provide:

program compaction
line optimization
alias substitution
formatted program listing
cross-reference generation

These tools allow you to:

* dramatically improve the performance of your programs.

* write larger programs than are possible using BASIC alone.

* program using meaningful variable names and sound programming style
without being penalized by the BASIC interpreter.

* print neatly formatted program listings, including an optional
cross-reference of critical program elements.

In short, this is the basic tool kit for BASIC programming.

The utilities which make up The Swiss Army Knife are written in BASIC
and compiled with the IBM BASIC Compiler. They are readily portable
to any system which uses Microsoft's GW-BASIC, and because the source
code is available to users, you can tailor them to suit any special
need you may have. You will find the internals to be of superior
quality; professional software, available in "user-supported" form.

05-Jan-85 Page 2 of 15

Swiss Army Knife User's Guide


You can use ALIAS to replace long variable names with short aliases.
Doing so improves the performance of an interpreted BASIC program
without sacrificing the clarity of its source form. Using ALIAS to
rename variables is particularly effective when you run it prior to
compacting and optimizing the program using the STRIP utility.

To use ALIAS you must prepare a list of the variable names you wish
to change and the aliases which are to be given. You may rename all
variables, or just a select few. You may also assign the same alias
to more than one variable. This flexibility allows you to tune the
performance of your program. It also permits you to leave certain
names unchanged (such as those in COMMON), or to separately process
segments of a program which are to be MERGEd at execution time.

The alias list is an ASCII text file. Each line in the file contains
a variable name and its alias (an "alias pair"). For example:


is an alias pair which instructs the utility to substitute the alias,
D$, for every occurrence of the string name, ITEM.DESCRIPTION$.

An alias may be a literal, rather than a variable name. This allows
you to replace variables with constants, such as:

TRUE=-1 or ARRAY.SIZE=500 or PROGRAM$="PAY010 vn 1.0"

This capability is useful for both interpreted and compiled programs.
The BASIC Compiler often generates considerably more efficient and
concise code when literals are used.

ALIAS has the following characteristics and restrictions:

* The alias list may be in any sequence.

* The utility is unable to differentiate between subscripted and
unsubscripted variables of the same name.

* You are responsible for ensuring that aliases do not violate any
variable naming scheme which uses the DEFINT, DEFSNG, DEFDBL, or
DEFSTR instructions, and that the alias list contains no errors of
explicit typing (e.g. ADDRESS$=A!).

* At termination, a line count and byte length are displayed for both
input and output files. The length shown is that of the ASCII
text; not the size of the tokened form of the program.

05-Jan-85 Page 3 of 15

Swiss Army Knife User's Guide


STRIP is a program compactor. It condenses a BASIC program so that
it will load and execute more efficiently and require less disk
space. By using STRIP, you can write well-organized, well-formatted
programs without being penalized by the overhead inherent in inter-
preted execution. You can also use this utility to reduce the size
of compiled BASIC programs.

You normally compact a program after you have tested it and are ready
to place it into production. The compaction process is similar to
compilation in that it produces an "object" version of the program
which is distinct from the "source" version. Compaction is most
effective when you assign aliases beforehand using the ALIAS utility.

No special preparation is required to make a program compactable, but
you must observe one restriction: do not use comment lines as the
destination of line-referencing statements such as GOTO or GOSUB.
The reason for this restriction is explained below.

STRIP condenses a program by removing insignificant spaces, words,
and symbols. Full comment lines are deleted, and comments or REMs
which appear at the right of a line are discarded. Notice that full
REM lines are left in place so that they can be used as pseudo tags
(the destination of line-referencing statements), or for permanent
remark text such as a copyright notice. Note that the term "comment
line" is used here to mean only those remark lines which are defined
by the single quote (apostrophe) character.

STRIP includes an optional line optimization feature. This feature
combines the lines in a program, wherever possible, to reduce its
overall size. The BASIC interpreter uses an efficient scheme for
managing program lines, and it is not particularly sensitive to the
number of lines in a program. The primary advantage of optimization
lies in reducing the size of a program rather than in improving its
performance. Some options of the BASIC Compiler generate extra code
for each program line, so it is frequently advantageous to optimize a
program prior to compiling it.

STRIP has these additional characteristics and restrictions:

* References to nonexistent lines are considered legitimate and are
ignored. This makes it possible for you to independently compact
program fragments and subroutines.

05-Jan-85 Page 4 of 15

Swiss Army Knife User's Guide

* Those BASIC instructions which are normally used only in the direct
mode (e.g. AUTO, EDIT, LIST, LLIST, RENUM) are not recognized as
line referencing statements. STRIP may eliminate lines which are
referred to by these statements if you optimize a program which
includes them.

* The line optimization feature increases the run time of the utility
because it requires a preliminary pass of the source program.

* Line optimization will not combine DATA statements, even when they
adjoin. The DATA keyword will be repeated for each statement.

* The anomalous syntax of the DATA statement is ignored. Any series
of spaces that occur within an alphanumeric data constant which is
not surrounded by quotes will be reduced to a single space. You
can avoid this by always using quotes for such constants.

* At termination, a line count and byte length are displayed for both
input and output files. The length shown is that of the ASCII
text; not the size of the tokened form of the program.

05-Jan-85 Page 5 of 15

Swiss Army Knife User's Guide


LIST produces a formatted program listing which you can control by
observing certain source code conventions. These are:

* If the first line of the program is a REM of 40 characters or less,
the text of the REM is used as a page heading. Otherwise, the file
name is used.

* REM lines and comment lines which contain a caret (^) as the first
comment character are preceded by a page change.

* REM lines and comment lines are printed in bold-face on standard
IBM dot matrix printers or compatibles.

* Comments can be boxed using frames of line graphics characters in
the configuration (shown as ASCII values):

[179] text here [179]

These boxes print size-as, double-width, or compressed, depending
on the length of the comment line. If it fits within 80 positions
with the framed portion enlarged, the box is printed double-width
(the remainder of the line prints at normal pitch). If the line is
between 80 and 132 characters long, the entire line is compressed.
Otherwise, the line prints at normal pitch.

Boxes can be printed only on standard IBM dot matrix printers or
compatibles. Original IBM 80cps and Epson MX80 printers without
the Graftrax option cannot print the actual frame characters. For
these printers, LIST translates the displayable frame characters
into their printable counterparts.

LIST splits long lines at rational breaking points and indents the
continuation according to the indentation of the base of the line.
It does not impose any indentation or formatting scheme. When you
edit a long line so that there is enough white space at the breaking
point to naturally indent the continuation, LIST will print the line
just as it appears when listed by the interpreter.

At run time, you can stipulate that line numbers are to be aligned on
their units position (i.e. right-justified as 5-digits).

LIST and XREF may automatically be run in tandem, producing a single
output file.

05-Jan-85 Page 6 of 15

Swiss Army Knife User's Guide


XREF produces a cross-reference listing of the variable names and

line numbers used in a program. Optionally, you can expand this
listing to include reserved words and/or literals.

XREF has the following characteristics and restrictions:

* If the first line of the program is a REM of 40 characters or less,
the text of the REM is used as a page heading. Otherwise, the file
name is used.

* Symbols print in emphasized mode and references print in compressed
mode on standard IBM dot matrix printers or compatibles.

* Each category of symbols is listed separately (i.e. variable names,
line numbers, reserved words, numeric literals, string literals).

* Line numbers appear with a "#" prefix and are correctly ordered in
numeric sequence (e.g. #50 precedes #100). Numeric literals appear
in alphabetic sequence (e.g. 100 precedes 50).

* BASIC instructions which are normally used only in direct mode are
not recognized as reserved words or line referencing statements.
These include AUTO, EDIT, LIST, LLIST, RENUM, and the like.

* Unary minus (negation) is not recognized. References to a negative
numeric literal will appear as references to the absolute value of
the literal.

There is no restriction on the size of the subject program. If the
internal data structures used to develop the cross-reference become
saturated, XREF will open scratch files on the default drive to hold
the overflow. Since disk accesses noticably degrade the throughput
of the utility, you may wish to operate from a RAM disk when creating
a voluminous cross-reference. (The capacities of the current version
are: symbol tree = 200, reference list = 2,000. These permit XREF to
be run on a 64k machine. You may wish to enlarge the arrays which
comprise these data structures to take advantage of more memory.)

XREF can automatically be run in tandem with LIST, producing a single
output file.

05-Jan-85 Page 7 of 15

Swiss Army Knife User's Guide


To distinguish between variable names and reserved words, XREF uses a
reserved word list. The list is external to the utility so that you
can modify it to adapt to changes in BASIC or for your own special

The list supplied with XREF is for BASIC Release 2.0. It includes
such words as TIMER and WINDOW, which were not reserved in earlier
versions. It also includes ABSOLUTE, a word reserved only by the
BASIC Compiler. The list purposely excludes the names of BASIC's
special variables; these include ERR, ERL, DATE$ and TIME$. You may
add these to the list if you don't wish them to be listed as variable

The list resides in the file named XREF.RSV. This is a simple ASCII
text file which you can display using the DOS TYPE command. You can
also edit this file using EDLIN or any other text editor which can
handle DOS files. The list is required to be in alphabetic order and
is limited to a maximum of 175 words in the delivered version of the

While it is possible for you to tailor the reserved word list, there
are potential undesirable side-effects to changing the list. XREF's
lexical scan is not driven by a formal syntax, and its ability to
recognize context can be damaged when certain key words are removed
from the list. The effects of such damage could range from subtle
(e.g. inability to determine the sense of the ambiguous word AS) to
quite severe (e.g. unrecognized DATA statements). Clearly, it is
safest to use the list as supplied. If you do decide to alter the
list, be certain to preserve a copy of the original as a precaution.
And remember that it is more blessed to add than to delete.

05-Jan-85 Page 8 of 15

Swiss Army Knife User's Guide


You can use BOXER to frame your program comments. Framed comments
(or "boxes") are an effective, professional way to present program
preambles, module headings, copyright notices, and the like. The
LIST utility recognizes these boxes and prints them in normal, double-
width, or compressed mode, depending on their size (refer to LIST for
a detailed description of these print conventions).

BOXER accepts a single line of text and constructs a five-line series
of comments which contains the framed text. By manipulating these
lines with the BASIC editor, you can enlarge the frame to any size.

You must run BOXER from the BASIC interpreter. The program asks for
the starting line number, the line numbering increment, and the text
string. There is no default starting line number, so you must enter
the number of the first line. The default increment is 10. If you
do not enter any text, the program will construct a frame which can
accomodate 60 characters per line.

When BOXER terminates, it clears itself from memory. You must then
move the cursor to each line, in turn, and press the [Enter] key to
actually place the lines into the interpreter's program space. Once
all of the lines have been entered, they can be SAVEd or MERGEd with
your source program.

05-Jan-85 Page 9 of 15

Swiss Army Knife User's Guide


The utilities in The Swiss Army Knife deal with ASCII text files, not
with BASIC's shorthand tokened form. Input program files must have
been written to disk using the ",A" variant of the SAVE command, and
it is necessary to LOAD and SAVE an output file to convert it to
tokened BASIC.

All source lines must be acceptable to the BASIC interpreter. The
BASIC Compiler language extensions are not recognized.

The utilities (except for BOXER) are invoked from the DOS prompt, and
use the same conventions for command line and switch settings as are
used in other standard language facilities such as the assembler and
the BASIC Compiler. A command line may consist only of the name of
the called utility, or it may include a list of the file names to be
used and/or switch settings to invoke optional features.

When all files are not explicitly specified in the command and the
file list ends with a semicolon, the remaining unspecified files will
default without further prompting. When the file list does not end
with a semicolon, the utilities will prompt for the unspecified
files. A null source file name will always result in a prompt.

The switches are never prompted for, but may be appended to the
command line or to any file specification entered in response to a

Because of the limitations of IBM's BASIC Compiler, the utilities do
not recognize path names. A disk files must reside in the current
directory of its particular disk. A device name may be substituted
for a file name. The utilities require that device names be ended
with a colon (e.g. PRN:). COMn: files are not supported.

When specifying print ouptut from LIST and XREF, it may be necessary
to indicate a printer type. The default type is 0, which is treated
as a crude device having only a Form Feed capability. The original
IBM 80cps printer and MX80 (without Graftrax) are printer type 1.
The IBM graphics printer and later Epson models are printer type 2.
There is no configuration facility for setting a standard printer
type. Types other than zero must be specified each time one of these
utilities is run. You can avoid this inconvenience by setting up a
batch file to call these utilities, with the appropriate printer type
specified in the batch command which calls the program.

05-Jan-85 Page 10 of 15

Swiss Army Knife User's Guide




Switches: none

Source default: entry.ASC
Destination default: entry.BAS
Alias file default: entry.AKA



Switches: O - optimize lines

Source default: entry.ASC
Destination default: entry.BAS


LIST ,/n/A/X/R/L

Switches: n - printer type (0..2)
A - align line numbers
X - print cross-reference
R - include reserved words in cross-reference *
L - include literals in cross-reference *
* (X switch unnecessary with R and/or L)

Source default: entry.ASC
Printout default: LPT1:


XREF ,/n/R/L

Switches: n - printer type (0..2)
R - include reserved words in cross-reference
L - include literals in cross-reference

Source default: entry.ASC
Printout default: LPT1:


05-Jan-85 Page 11 of 15

Swiss Army Knife User's Guide


Error messages are, for the most part, identical to the messages
produced by the BASIC interpreter. The errors fall into three
classes, shown below by example:

1) Disk not ready. Correct condition; then press any key:

This is an example of a correctable condition. You should
correct the fault and press a key to re-attempt the failed
operation. You may also enter Ctrl/Break to abort the program.

2) Bad file mode. Unrecoverable.

This is an example of a condition that cannot be corrected while
the utility is loaded. The program will self-abort. You must
correct the problem before retrying the utility. In the example
above, you would have to convert the tokened program to an ASCII
text file.

3) Error 2 at 6450. Unrecoverable.

This is an example of an unexpected error. Such errors are fatal
and may indicate a bug in the utility. If you should encounter
such a failure, please mail a written description of your problem
to Layman & Layman. Please include your name, address, and phone
number, along with any pertinent supporting information.

The following non-standard errors may also occur. All are Class 2.

Bad switch.

An unexpected switch appears in the DOS command line.

Unrecognized line format.

A source line has been encountered which does not have the form
of an interpretive BASIC line. The progress monitor display
shows the point at which the error occurred.

Line out of sequence.

Source line numbers are not in sequence. The progress monitor
display indicates the location of the error.

(continued on next page)

05-Jan-85 Page 12 of 15

Swiss Army Knife User's Guide

ERROR MESSAGES (continued)

Alias pair format error.

An entry in the alias file does not have the expected A=B form.

Alias table saturated.

The limit of 3,000 aliases has been exceeded.

Break table saturated.

The optimizers limit of 9,000 referenced lines has been exceeded.

Too many words.

The limit of 175 reserved words has been exceeded.

Word out of sequence.

The reserved word list is not in alphabetic order.

05-Jan-85 Page 13 of 15

Swiss Army Knife User's Guide


If you have received a copy of this suite of utility programs
and have found it to be of value,
your $35 contribution will be greatly appreciated.

Layman & Layman
1344 Blair House Court
Columbus, OH 43220

Whether or not you make a contribution, you are encouraged to copy
the program for evaluation by other users.

The Swiss Army Knife is part of the growing body of "user-supported"
software. User-supported software is an experiment in distributing
computer programs, based on these principles:

1. The value and utility of software can best be assessed by the
user on his/her own system.

2. The creation of personal computer software should be encouraged
and supported by the computing community.

3. The copying of programs for evaluation should be encouraged,
rather than restricted.

Under this concept, anyone may request a copy of user-supported
software by sending a blank, formatted diskette to the author, along
with a self-addressed, postage-paid return mailer. A copy of the
software and documentation will be placed on the diskette and sent by
return mail. (Note: two single-sided, double-density diskettes are
required to contain both object and source code).

A second way to obtain an copy of the software is from a friend, a
computer club, or bulletin board. After you have had an opportunity
to evaluate the software, you are trusted to either forward payment
to the author, or to discontinue use of the software.

Free distribution of software and voluntary payment for its use

eliminates the normal costs of promotion and distribution. Users
obtain quality software at reduced cost. They try it out before
buying, doing so at their own pace, and in the comfort of their home
or office. The best programs will survive and thrive, based purely
on their quality and usefulness.

This honor system benefits the entire personal computer community.
If you believe in these ideals, your contribution is solicited to
help make them work.

Please join the experiment.

05-Jan-85 Page 14 of 15

Swiss Army Knife User's Guide

NOTICE: The Swiss Army Knife is a proprietary software product of
Layman & Layman, protected under Title 17, USC, Copyrights. Limited
license is granted to users of this product to reproduce or transmit
the software on a private, non-commercial basis for the purpose of
evaluation by prospective users. This license explicitly excludes:

1. distribution in a modified form.

2. distribution for consideration other than media or handling

3. distribution in connection with any other product, except with
the express written consent of Layman & Layman.

05-Jan-85 Page 15 of 15

 December 22, 2017  Add comments

Leave a Reply