Sie sind auf Seite 1von 24

QCP -- QEdit(R) Compiler Program

A program to ease invocation of compilers


and other software tools from a function key in
QEdit(R) version 2

ABRIDGED DOCUMENTATION

Author: Tim Farley


Revision: 2.08
Date: November 17th, 1989

QCP is Copyright (C) 1989, by Tim Farley

QEdit(R) and QMac are Copyright (C) 1985-1991 by


Applied Systems Technologies, Inc. (dba SemWare(R))
All Rights Reserved

QEdit and SemWare are registered trademarks of


Applied Systems Technologies, Inc.

DESCRIPTION
-----------
QCP is a program to run compilers & other utilities from within
QEdit 2.08+. You hit a function key in QEdit, QCP decides which
program to run based on the name of the file you are editing,
runs it, and then "reads" the error messages from the compiler to
tell QEdit how to jump to the errors in your source code.

QCP can interface in the same manner to any external utility that
generates redirectable output containing "line numbers" that
refer to your original source file.

QCP works in conjunction with QMAC.EXE, also found on your


registered diskette.
QCP 2.08 Documentation Page 2

TABLE OF CONTENTS
-----------------
Description ................................................ 1
Table Of Contents .......................................... 2
File List .................................................. 3
Quick Installation ......................................... 3
Quick Start ................................................ 4
Running QCP ................................................ 5
Command Line Switches and QCP .............................. 6
/R -- Read Config Info from Disk ...................... 7
/C -- Configure QCP.EXE's Defaults .................... 7
/S -- Show QCP.EXE's Current Defaults ................. 7
/W -- Write New Error Output File ..................... 7
/O -- Output File Name ................................ 7
/M -- Macro File Name ................................. 8
file -- File to Compile ............................... 8
options -- Compiler Options ........................... 8
QEdit Macro Key Customization .............................. 9
Compiler Compatibility ..................................... 9
Custom Compiler Configurations ........................ 9
Compatible Compilers .................................. 10
I/O Redirection Problems, Tips ........................ 12
Microsoft Fortran 3.x ............................ 12
Microsoft MASM 4.0 ............................... 13
DBFAST 1.03 ...................................... 13
Norton Guides Database Compiler 1.04 ............. 14
Microsoft Quick Pascal 1.00 ...................... 14
Incompatible Compilers ................................ 15
Configuration Via QCP.DAT .................................. 15
Substitution Strings .................................. 16
QCP Configuration Commands ............................ 16
Summary of Command Line Switches ........................... 17
Summary of Substitution Strings ............................ 17
Summary of Configuration Commands .......................... 18
Error Messages ............................................. 18
Informative & Warning Messages ............................. 20
Acknowledgements & Contacts ................................ 21
Revision History ........................................... 22
QCP 2.08 Documentation Page 3

FILE LIST
---------
The following files constitute QCP:

QCP.DOC - this documentation file


QCP.EXE - the QCP program
QCP.DAT - the configuration data file
QCP.TXT - partial QEdit keyboard file containing
sample macros for use with QCP

NOTE: This version of the documentation is slightly abridged to


fit on the diskette with QEdit. You can download a longer, more
detailed documentation file from SemWare's BBS and many other BBS
systems around the country.

LICENSE
-------
QCP is part of your QEdit package, and is covered by the QEdit
license agreement.

QUICK INSTALLATION
------------------
STEP 0
------
Set aside your original copies of all the QCP files in a safe
place. Always work on a copy, not the original!

STEP 1
------
PUT QCP.EXE AND QCP.DAT IN A CONVENIENT DIRECTORY ON YOUR DISK.

QCP.EXE should exist somewhere along your current PATH statement


so that it can be executed easily. QCP.DAT can exist in one of
three places: (1) the current directory, (2) the same directory
that QCP.EXE is in, or (3) somewhere along your current PATH
statement.

If you are going to use the macro creation feature of QCP, and
this is highly recommended, then make sure QMAC.EXE is accessible
along your PATH as well.

We recommend keeping QCP.EXE (and QCP.DAT, if you use the /R


option) as well as QMAC.EXE on a RAMdisk, and listing that
RAMdisk drive letter first in your PATH= environment variable.
This allows QCP to operate very rapidly, even on relatively
"slow" systems.
QCP 2.08 Documentation Page 4

STEP 2
------
EDIT QCP.DAT TO SUIT THE FILE EXTENSION(S) YOU USE AND THE
COMPILER OR UTILITY PROGRAM THAT SHOULD BE INVOKED FOR EACH ONE.

There are comments in the supplied QCP.DAT to help you


remember the syntax of commands, as well as several sample
command lines for popular compilers.

It is assumed that the command line you specify for your compiler
will redirect the error messages from the compiler to a file, by
default called ERRORS.LST. This file can then be loaded into
QEdit for viewing, but more importantly it is read by QCP in
order to construct QEdit macros that will move your cursor to
each error in your file. So, typically each command line you use
in QCP.DAT should end with ">$O", which causes the output to be
redirected to the error file.

If this is the only configuration you are going to use, you will
probably want to "install" these options into your copy of
QCP.EXE permanently by typing "QCP /C" at a DOS prompt.

STEP 3
------
ADD THE MACRO DEFINITION(S) FROM QCP.TXT INTO YOUR
QCONFIG.DAT, AND USE QCONFIG TO INSTALL THESE KEY(S) INTO YOUR
COPY OF QEDIT.

Note that the default macro is set up to always create and read
the ERRORS.LST and ERRORS.MAC file in the CURRENT directory. If
you have a RAM disk or other fast disk drive, you will probably
want to edit the macro definition to put these files there.

Within the macro, the /O and /M command line switches for QCP are
used to make sure the filenames match. You may want to configure
these filenames into QCP permanently, and remove the references
to /O and /M in the macro definition.

QUICK START
-----------
Edit a file for which you created a definition in QCP.DAT. I.e.,
if you defined something for .C, then edit TEMP.C. Put in a
deliberate syntax error, something that you know the compiler
will generate an error message for. Save the file to disk.
QCP 2.08 Documentation Page 5

Now, hit the function key you assigned in QCONFIG.DAT. QEdit


will shell out, run QCP, which will run your compiler. Errors
will be redirected to ERRORS.LST, and macros created. When you
return to QEdit, your file will be in the top window, and your
error messages will be in the bottom.

If your chosen compiler generates compatible error messages (see


Compiler Compatibility, below), you will be able to hit Alt-1
through Alt-0 to move to each of the errors your compiler issued,
both in the source and output windows. Or, if you are using the
/W+ mode (rewrite error file), you should be able to just hit
Shift-F10 to step to each successive error message.

And that's all there is to it!

There are some other features of QCP you may want to take
advantage of, read on to find out about those, as well as how to
configure QCP's behavior to suit your specific needs.

RUNNING QCP
-----------
If you are having trouble getting QCP to work as described, more
than likely your file names are getting out of sync. Please make
sure that the file names (1) in your QEdit macro key, (2) in QCP
itself, and (3) in any batch files you use to run compilers; all
agree as to where and under what name each file is placed.

Also, when compiling this way, a pretty good bit of RAM is


required, all told. This is because QEdit, your source file,
QCP, and your compiler (not to mention a couple copies of the
stub portion of COMMAND.COM) are all in memory at the same time.
Check out the ToggleSwap option in QEdit 2.1 if this gets to be a
problem.
QCP 2.08 Documentation Page 6

COMMAND LINE SWITCHES AND QCP


-----------------------------
If you just type QCP at a DOS prompt, it will respond with this
screen of info. (Display of defaults removed here to fit the
screen on a normal page):

----------------------------------------------------------------
QCP: QEdit Compiler Program x.yy dd-mmm-yyyy
Copyright (C) 1989, Tim Farley. All Rights Reserved.

QCP /R[file] /C[file] /S /G /Q /B /W /P /Ichar /Ofile /Mfile /# FILE opts...

/R Reads configuration info from specified file.


/C Configures defaults into specified copy of QCP.
/S Shows QCP's current configurable defaults
/G+ /G- Guess or don't guess a missing file extension
/Q+ /Q- Create or don't create a QEdit binary macro file
/B+ /B- Batch mode: create autoexec macro for QEdit
/W+ /W- Write or don't write copy of error file
/P+ /P- Pause or don't pause for keystroke after an error
/Ichar Char to be Inserted before row/col in output
/Ofile File to which Output will be redirected
/Mfile QEdit Macro file name to be generated
/# i.e. /1 thru /9, uses the specified special
extension definition instead of the file's extension
FILE is source file to compile.
opts are options to be passed to compiler commmand line

/R, /C, and /S are mutually exclusive


If none of them are present, internal defaults are used
----------------------------------------------------------------

All QCP switches MUST precede the file name. Both "/" and "-"
are recognized as switch characters. However, each switch must be
preceded by its own switch character. Each switch must be
separated from the others by at least one space.

The switches that contain file names (/M and /O, optionally on /C
and /R) MUST NOT contain a space between the switch and the file
name.

The boolean switches, like /G and /Q, can have "+" or "-" behind
them to set the specified switch on or off. If nothing is behind
the switch, it is set on. If any character other than "+" or "-"
is behind a boolean switch, for instance "=", then the current
value is TOGGLED.

The most commonly used command line switches are explained in


detail below:
QCP 2.08 Documentation Page 7

/R -- READ CONFIG INFO FROM DISK


---------------------------------
When /R is present, QCP will always read its configuration data
from an external file at run time, overwriting the internal
defaults.

/C -- CONFIGURE QCP.EXE'S DEFAULTS


-----------------------------------
The /C option causes QCP to read its configuration data from
QCP.DAT, and install this info as new defaults into QCP.EXE.
This allows you to permanently customize your copy of QCP.

Please be aware that since /C writes data into the EXE file, it
is possible for your copy of QCP to be damaged by this operation.
Make sure you always have a clean, uninstalled copy of QCP safely
tucked away.

In operation on networks, you may not wish to use the /C option,


if QCP.EXE will be located on a server drive to which you do not
have write access. See /R above.

/S -- SHOW QCP.EXE'S CURRENT DEFAULTS


--------------------------------------
The /S option is a companion to /C. It allows you to see the
current defaults installed into QCP.EXE.

Note that /R, /C and /S are mutually exclusive. If you combine


them on a command line, the last one specified will take control.

/W+ or /W- -- WRITE NEW ERROR OUTPUT FILE


------------------------------------------
The /W switch controls whether QCP will write a new copy of the
compiler output file (normally ERRORS.LST). The purpose of this
is to insert a certain ASCII character (see /I or ..I)
immediately to the left of the row and column numbers that QCP
found in the compiler output. This allows the "next error" and
"previous error" macro keys to find row numbers and column
numbers without having any special knowledge of how the error
messages are formatted.

Since this involves writing a new copy of ERRORS.LST, it can slow


down the process somewhat, hence the flag to turn it off.

/O -- OUTPUT FILE NAME


-----------------------
The /O option lets you specify the Output file name that will be
used by QCP. This filename is substituted for "$O" (see below)
if present on your target compiler command lines. This is also
the file that QCP will read back in after the compiler runs, to
attempt to locate any error messages.
QCP 2.08 Documentation Page 8

The Output file name can also be configured with the "..O"
command in QCP.DAT, however if /O is present it will override the
value specified in QCP.DAT.

The /O command line option is intended so that the filenames used


can be completely controlled by your QEdit function key macro.

/M -- MACRO FILE NAME


----------------------
The /M option is similar to /O, except it controls the name of
the binary macro file created by QCP and QMAC for use in finding
errors in your source code. This file name is replaced wherever
"$M" appears in your target command line(s).

The macro file name can also be configured using the "..M"
command in QCP.DAT, however if /M is present it will override the
value specified in QCP.DAT.

On both of the above files, QCP will look for an environment


variable called TMP, to determine a suitable place to put "temp"
files. This is the same as most Microsoft utilities which will
use the TMP environment variable to locate your RAM disk for
their use in writing scratch files. If you invoke QCP with the
/S switch, you will see the result of this when the three file
names are listed.

You may not want this to happen, especially if you want to insure
that the file names referred to in your QEdit macro key are the
same as those used by QCP. If so, just include a drive and/or
path specification in the file name. If you want them always to
be in the "current" directory, then use ".\" prior to each file
name.

FILE -- FILE TO COMPILE


------------------------
The first non-switch parameter on the QCP command line is assumed
to be the file you wish to compile. This is normally generated
using "CurrentFilename" in a QEdit macro key, but could be typed
by you. This can be a full file specification including path.

options -- COMPILER OPTIONS


----------------------------
Any parameters past the filename on the QCP command line are
assumed to be options for the target compiler's command line.
They are simply passed along, assuming you have put the
appropriate $1, $2 etc. strings on your compiler command line
templates in QCP.DAT.
QCP 2.08 Documentation Page 9

All of these options must be delimited on both sides by spaces.


Note that this is a restriction of QCP that might not be shared
by your compiler.

QEDIT MACRO KEY CUSTOMIZATION


-----------------------------
QCP is normally intended to be invoked from a QEdit macro key. A
sample key is provided in QCP.TXT. You could edit this
before installing it in your QCONFIG.DAT, to make it behave
differently.

COMPILER COMPATIBILITY
----------------------
The macro creation feature of QCP hinges on QCP's ability to read
the error messages created by your compiler. By default, QCP
assumes that your compiler issues error messages in this form:

<text> FILENAME.EXT <non-numeric chars> XX <text> YY <message>

where XX is the number of the source line on which the error


occurred, and YY is the column number on that line.

The default case allows for error messages similar to:

FILENAME.EXT (ROW,COL): MESSAGE


FILENAME.EXT: ROW: MESSAGE
"FILENAME.EXT", ROW COLUMN: MESSAGE
D:\PATH\FILENAME.EXT(ROW): MESSAGE

Most all of CURRENT VERSIONS of the compilers put out by


Microsoft Corporation, and Borland International, and every C
compiler we know of, can be made to issue error messages in this
form, and thus will work fine by default.

CUSTOM COMPILER CONFIGURATIONS


------------------------------
Non-standard compilers can still be handled by the appropriate
configuration line in QCP.DAT. The syntax for this is as follows:

.ext "command line" "unique string" [ "lead-in string" ]

Either single or double quotes can be used, but they must match
on either end of a given string. If you need to include a quote
mark inside one of the strings, use the other type of quote mark
to delimit it. Any number of commas and/or spaces (if present)
between the strings will be ignored.
QCP 2.08 Documentation Page 10

Command line is the normal compiler command line that would have
been on the line by itself.

The unique string is some string that is found in the compiler's


output ONLY in error message lines. This typically might be
something like "***ERROR:".

The lead-in string, if present, specifies a string that will


always be found in an error line to the left of the source line
number. It is not mandatory, if not present it will default to
the same thing as the unique string. The first numeric
characters to the right of the lead-in string must be the line
number. Keep in mind that the file name itself, the error
message, or the line of source code itself (if echoed as part of
the error message) might contain numeric characters that could be
misinterpreted as a line number.

Maximum length of the unique and lead-in strings is 16 characters


each, they will be truncated if longer. You CAN include
substitution strings like $N and $F inside the unique string and
lead-in string. The length limitation DOES NOT apply to the
strings AFTER they are expanded. The strings ARE NOT case
sensitive when matching occurs.

Example:

Your compiler generates error messages like:

***ERROR: Syntax error on line 34

You would set your unique string to "***ERROR" and your lead-in
string to "line".

Choose your strings carefully, as some compilers generate very


inconsistent looking error messages. A common mistake is to try
to key off the word "error" in the message, which will then cause
QCP to ignore "warning" messages.

COMPATIBLE COMPILERS
--------------------
Below are some cases of specific compilers, and the command line
switches or other actions necessary to make them conform to what
QCP is expecting. In many cases, you will want to add or
subtract switches to or from the sample command lines. Consult
your compiler manual.
QCP 2.08 Documentation Page 11

Most compilers allow you to specify either just a simple file


name, or a complete path specification on the command line. Keep
this in mind when selecting whether to use $F, or $N, or $N.$E,
etc. for your filename on the command line. The way you specify
the source file name on the command line, can affect how the
compiler echoes it in error messages. You may want to experiment
with this, if you are defining specific unique or lead-in strings
that involve the filename.

COMPILER LINE TO PUT IN QCP.DAT


------------------------- -------------------------------
Clipper by Nantucket, 8/87 .prg "clipper $N >$O","line "
FoxBase Compiler v2.1 .prg "foxpcomp -e $F >$O","Error in line "
FST Modula-2 v2.0a .mod "m2comp $F >$O","File: $F",", Line"
Microsoft Assembler 5.x .asm masm $F; >$O
Microsoft BASIC .bas bc /Z $F; >$O
Microsoft C 5.x .c cl /c /W3 $F >$O
Microsoft FORTRAN 4.0 .for fl /c $F >$O
Microsoft Menu Maker v1.2 .def "makemenu $N >$O","Error ("
Microsoft Pascal 4.0 .pas pas1 /H $F; >$O
Alternative: .pas pl /c /Zz $F >$O
Microsoft Quick C 1.01 .c qcl $F >$O
QMac (QEdit macros) 2.x .qm "qmac $N.mac $F /B /A- >$O" "QMAC "
Telix 3.x Script Compiler .slt cs $F >$O
TopSpeed Modula-2 1.14 .mod m2 /c $F >$O
Turbo Assembler 1.00 .asm "tasm $F >$O" "** $F"
Turbo C 2.0 .c tcc -c -w $F >$O
Turbo Pascal 4.0 & 5.0 .pas tpc /q $F >$O
Watcom C 6.5 .c wcl /c $F >$O

NOTES:
The /H switch for Microsoft Pascal is undocumented.
The Microsoft BASIC and FORTRAN, Clipper and FoxBase command
lines have not been tested by us personally.
Microsoft Menu Maker comes with the Microsoft Mouse.
We recommend you use the /W+ option when working with
Clipper, because of the way that Clipper writes its
output.

Many compilers will compile files other than the one specified,
due to an automatic "make" function built into the compiler.
This can sometimes result in either (1) QCP ignoring error
messages from the compiler, because they don't pertain to the
current file or (2) QCP jumping to erroneous error lines in the
current file, because it was unable to distinguish that they did
not pertain to the current file. Some of the compilers that are
prone to this are Clipper, Turbo Pascal, both of the Modula-2
compilers, and others. We plan to address this in a future
version of QCP.
QCP 2.08 Documentation Page 12

Below are some instances where just a simple command line will
not do the trick. Even if you do not use one of them, you may
want to read through them to see what kinds of configuration
tricks are possible.

I/O REDIRECTION PROBLEMS, TIPS


------------------------------
Many of the unusual compiler configurations listed below result
from problems redirecting the output to the compiler. If a
program writes its screen output to the "Standard Output Device"
under DOS, then the text can be redirected normally, using the
">" character followed by a filename on the dos command line.
However, if the output is written to the "Standard Error Device",
redirection is impossible using DOS alone.

We know of two utilities that can assist with compilers that use
Standard Error to display error messages. One is ERROUT.EXE,
which is a utility Microsoft ships with many of its recent
compiler products.

The other is CONCOPY.EXE, which is a Freeware product by


Christopher J. Dunford and The Cove Software Group. You can get
it on many BBS systems, including SemWare's.

See the sections below for examples of the use of ERROUT and
CONCOPY with QCP.

MICROSOFT FORTRAN 3.x


---------------------
Microsoft Fortran 3.x can work with QCP. Its error messages look
like this:

***** Error XXX,line YY -- ERROR MESSAGE

To get this, we define the unique string and lead-in string as


follows:

.FOR "for1 $N.$E; >$O","*****",",line "

You may wish to put this command line in a batch file instead of
invoking it directly, so that you can call up PAS2 and PAS3 of
the compiler as needed. If so, be sure to pass $O to the batch
file as a command line parameter.
QCP 2.08 Documentation Page 13

MICROSOFT MASM 4.0


------------------
Masm produces compatible error messages by default.

Unfortunately, MASM 4.0 writes the error messages to Standard


Error, so we have to use a utility to redirect it (see above).
Put one of these two lines in your QCP.DAT:

.ASM ERROUT /f $O MASM $N.$E;

.ASM CONCOPY $O MASM $N.$E;

The part to the left of MASM causes Standard Error to be redirected to


the output file.

Later versions of MASM write to Standard Output.

DBFAST 1.03
-----------
This dBASE III+ compatible compiler does not generate error
messages compatible with the default case. They look like this:

MESSAGE TEXT. Line #: XX

where XX is the line number. We will define a unique string in


order to make this work with QCP.

Because of the way redirection occurs with DBCOMP, you need to


use a batch file to run the compiler. Here is DBC.BAT:

ECHO OFF
DBCOMP %1 -W -PF
COPY %1.ERR %2
DEL %1.ERR

The -PF switch redirects output to a file. This file always has
the same root name as the file being compiled, with an extension
of "ERR". The -W switch causes "warning" messages to also be
issued, which you may or may not desire. Use this line in
QCP.DAT:

.PRG "DBC $N $O","Line #:"

which sets both the unique string and the lead-in string to the
string "Line #:"
QCP 2.08 Documentation Page 14

It is important to use $N so that the ".ERR" can be appended in


the batch file. Also, make sure you have the DBFAST RAM-resident
"engine" loaded into memory before you enter QEdit, as it is NOT
RECOMMENDED to attempt to load it from inside QEdit, since it is
a TSR program.

NORTON GUIDES DATABASE COMPILER 1.04


------------------------------------
The tools supplied with the Norton Guides to create your own
online help databases can be used with QCP. However, they
require both redirection help and a special unique/lead-in
string.

Both of Norton's programs write the error messages to Standard


Error. Put one of these two sets of lines in your QCP.DAT:

.NGC "errout /f $O ngc $F" "Line "


.NGM "errout /f $O ngml $F" "Line "

.NGC "concopy $O ngc $F" "Line "


.NGM "concopy $O ngml $F" "Line "

Norton does not recommend particular extensions for the Database


source files or the Menu Link Control files. For the sake of
this example, we have adopted ".NGC" for the former and ".NGM"
for the latter.

MICROSOFT QUICK PASCAL 1.00


---------------------------
Quick Pascal's command-line compiler also uses Standard Error to
output error messages. Put one of the following two lines in
your QCP.DAT:

.PAS ERROUT /f $O qpl $F

.PAS "CONCOPY $O qpl $F" "error P" "$N.$E"

Quick Pascal issues "status messages" telling what line it is


currently compiling, to the console, just as Turbo Pascal does.
Unfortunately, unlike Turbo Pascal, Quick Pascal does not have a
/Q switch to turn this off.

As a result, if you use CONCOPY to redirect the output, you will


get a number of bare carriage returns in the output. For this
reason, we recommend you use the /W+ mode of QCP when compiling
with Quick Pascal. When the error file is rewritten by QCP, the
bare carriage returns will be converted to proper line breaks.
This is also the reason for the unusual Unique and Lead-in
QCP 2.08 Documentation Page 15

strings on the CONCOPY command line above.

INCOMPATIBLE COMPILERS
----------------------
The following compilers cannot be made to work with QCP's macro
generation feature as far as we can tell. If you can figure out
a way to make one of these work, we'll be glad to add that
information to a future version of this DOC file.

A86 macro assembler, V3.20 (and earlier) by Eric Isaacson


Error messages do not include line numbers.
Microsoft Pascal, v3.32 and earlier
Error messages are too inconsistently formatted.
Ryan-McFarland FORTRAN version 2.4
Error messages do not include line numbers.
Turbo Pascal 3.0 and earlier
This compiler is an integrated environment only.

CONFIGURATION VIA QCP.DAT


-------------------------
QCP needs information on the file extensions and compilers you
use in order to do its job. You supply this information by
editing the file QCP.DAT to suit your individual circumstances.

In addition, various options in the way QCP behaves can be


controlled via lines in QCP.DAT. This includes those mentioned
above in the section on command line switches, but also some
others that you will normally change only rarely.

An example QCP.DAT, which contains the same values with which


QCP.EXE is shipped, is supplied. You can begin by editing this
file to suit your requirements.

The main content of QCP.DAT is a list of file name extensions,


followed by the command line that will be executed for each one,
as follows:

Ext. Default Command Line


---- --------------------
.asm masm $F; >$O
.c tcc -c $F >$O

and so on.
QCP 2.08 Documentation Page 16

It is legal to have an entry for a "nothing" file extension.


Just put a period by itself on a line, followed by at least one
space, and the command line to use.

Only the first 10 extensions found will be processed. Any


additional ones, or duplicate ones, will be ignored. A warning
message is issued to help you clean up your QCP.DAT.

The raw command lines may not be longer than 64 characters,


though they can become a full 127 characters long when the $
strings are expanded.

QCP executes a child copy of COMMAND.COM, which is passed the


command line to execute. This means that you can use internal
DOS commands, batch files and I/O redirection in invoking your
compiler. COMMAND.COM is found using the 'COMSPEC' environment
variable, make sure yours is set correctly. Putting COMMAND.COM
on a RAM disk and setting your COMSPEC variable to point to it
considerably speeds operation of QCP and other programs. See
your DOS manual for details.

SUBSTITUTION STRINGS
--------------------
Various sub-strings, in the form of "$c" where c is some
character, can be included in compiler command lines, macro key
templates and the QMAC command line template (see below), in
order to substitute values at run-time. They can be included in
any order. Some make more sense than others in certain contexts.
There is a chart listing all of them, with sample values, later
in this document.

QCP CONFIGURATION COMMANDS


--------------------------
Some configuration commands can also be included in QCP.DAT to
customize QCP in special ways.

You need not supply all or any of these commands in QCP.DAT, you
can mix and match as you see fit. Any that are not included will
default to the previously installed values in QCP.EXE. If more
than one of the same directive occurs in QCP.DAT, the last one
takes precendence.

See the chart later in this document, as well as QCP.DAT itself,


for more details.
QCP 2.08 Documentation Page 17

Here are some summaries of the various switches, parameters, etc.


that QCP understands:

SUMMARY OF QCP COMMAND LINE SWITCHES


------------------------------------

SWITCH MEANING TYPICAL VALUE


---------- ------------------------ --------------------------

/? or /H show Help screen


/C Configure QCP /C or /CE:\MYDIR\MYQCP.EXE
/G set Guess extension mode /G+
/M set Macro file name /M.\errors.mac
/O set Output file name /O.\errors.lst
/P set Pause after error /P+
/Q set QEdit macro creation /Q+
/R Read config from QCP.DAT /R or /RE:\MYDIR\MYQCP.DAT
/S See defaults /S
/W set reWrite error file /W+

SUMMARY OF SUBSTITUTION STRINGS


-------------------------------

STRING MEANING TYPICAL VALUE


---------- ------------------------ --------------------------

$$ single dollar sign "$"


$1 to $9 Compiler options varies with compiler
$C source Column number "1"
$D Drive letter "C"
$E Extension of file "PAS"
$F Full filename "C:\LANG\TURBO\MYFILE.PAS"
$I Inserted character CHR( 255 )
$K macro Key number "1" through "0"
$L Lead-in string "MYFILE.PAS"
$M Macro file name ".\ERRORS.MAC"
$N Name of file "MYFILE"
$O Output file name ".\ERRORS.LST"
$P Path (directory) of file "\LANG\TURBO"
$R Result line number "3"
$S Source line number "124"
$T Temp file name "$QCP$.TMP"
$U Unique string "MYFILE.PAS"
QCP 2.08 Documentation Page 18

SUMMARY OF QCP.DAT CONFIGURATION COMMANDS


-----------------------------------------

STRING MEANING TYPICAL VALUE


---------- ----------------------- ---------------------------

..C QMac Command line "QMAC $M $T B N"


..G Guess extension "ON" or "OFF"
..I Insertion character "255"
..M Macro file name ".\ERRORS.MAC"
..N Next error macro a valid macro
..O Output file name ".\ERRORS.LST"
..P Previous error macro a valid macro
..Q QEdit macro template "ON", "OFF", or valid macro
..T Temp file name "$QCP$.TMP"
..W reWrite error file "ON" or "OFF"

ERROR MESSAGES
--------------
Various error conditions can occur when QCP operates, in which
case it will issue the following error messages. Each of these
will be preceeded by "QCP Error:" to remind you that an error
condition has occurred, and followed by a console beep.

QCP.DAT cannot be found


or
QCP.EXE cannot be found

The data file or executable file could not be found in the


current directory, the directory the EXE came from, nor anywhere
along the path. These can occur as the result of using the /R or
/C command line switches.

d:\dir\QCP.EXE is corrupted or wrong version

You may have more than one QCP.EXE on your disk, or more than one
version of QCP present. If that is not true, your copy of QCP
may have been damaged due to disk error. Get a fresh copy from
your backup.

DOS error on execution of target command line

Some sort of DOS error (other than out of memory) occurred on


trying to load the child COMMAND.COM. This would be very rare,
but might be caused by an invalid COMSPEC environment variable,
or an invalid copy of COMMAND.COM.
QCP 2.08 Documentation Page 19

Error reading d:\dir\QCP.DAT

This means some sort of DOS error occurred while reading the data
file, either a bad sector, or premature EOF or something.

File name missing on /O or /M switch

You specified /O or /M on the QCP command line without putting a


filename immediately behind the switch (no spaces).

File name missing

After parsing out the various switches, QCP could not find an
actual file name to pass to your compiler.

I/O problem while attempting to write d:\dir\QCP.EXE

Some sort of DOS error occurred while rewriting the defaults in


QCP.EXE. This will only occur when you specify the /C command
line option. Your copy of QCP.EXE may have been damaged by this,
get a new copy off your backup disk.

Improper macro continuation line

When specifying multi-line QEdit macros in QCP.DAT, by putting


"&" on the end of the line, QCP does some rudimentary checking.
If the continuation line begins with a period ("."), it will
issue this message. It could also happen if the end of QCP.DAT
was reached before finishing the macro. This can occur while
reading any of the macro template commands in QCP.DAT.

No extensions found in d:\dir\QCP.DAT

No lines in the specified copy of QCP.DAT began with a '.', so


QCP could not find any extensions to parse.

No matching command line found for extension "xxx"

There was no extension/command line definition in QCP.DAT that


matched the extension of the file given on the command line (i.e.
"xxx"). If you specified /1 through /9 on the command line, then
there was no matching ..1 through ..9 command in your
configuration.

Not enough memory to execute command line

There was not enough memory to load a child copy of COMMAND.COM


and execute your target command line.
QCP 2.08 Documentation Page 20

Unrecognized command switch "x"

You specified a "/x" switch on the command line that QCP did not
recognize. Check the documentation for valid switches.

Only one of these errors will be displayed during any single run
of QCP. If any of these error messages were displayed, the DOS
ERRORLEVEL value will be set to 128 or higher when QCP exits.

INFORMATIVE & WARNING MESSAGES


------------------------------
QCP will also issue various informative messages during
operation. These will be preceded by "QCP:" for messages, or
"QCP Warning:" for warnings. No beep will sound, nor will the
ERRORLEVEL be set in these cases, as these are non-fatal
conditions. The "press any key to continue" prompt, if enabled,
will not appear after these messages.

Duplicate definition for "xxx" ignored

There is more than one definition line for extension "xxx" in


your QCP.DAT. Edit your QCP.DAT so that there is only one. If
you need to temporarily disable one definition to use another,
edit the line so that there is no "." in column 1, and QCP will
ignore that line.

Extension table full, extension "xxx" ignored

You have more than 10 extension/command line definitions in your


QCP.DAT, and QCP ran out of table space. "xxx" will be the 11th
or greater extension defined in the file. Edit your QCP.DAT so
that there are 10 or less definitions.

Macro file created for QEdit

This message appears after QCP is done running QMAC to create a


loadable binary macro file for QEdit.

New defaults written to d:\dir\QCP.EXE

This informs you that QCP has successfully re-written its


defaults as requested by /C, and where QCP.EXE was found.
QCP 2.08 Documentation Page 21

Reading configuration from d:\dir\QCP.DAT

This message just informs you that a configuration is being read


to satisfy a /R or /C request, and it tells you where QCP.DAT was
found on the disk.

Unknown configuration command "..x" ignored

QCP found a command named "..x" in your QCP.DAT, and did not
recognize it. See elsewhere in this documentation for the list
of supported configuration commands.

Unmatched " in input line of d:\dir\QCP.DAT

QCP was trying to read in a command line followed by a unique


string and/or a lead-in string, and could not find a matching
quote character. Since you can mix and match single and double
quotes, double check your data file to be sure you paired them up
correctly.

ACKNOWLEDGEMENTS & CONTACTS


---------------------------
Source code to QCP is no longer available.

Special thanks to Tony Tortorelli, Randy Wallin, Gary Speegle,


David Chaika, Howard Kapustein and Sammy Mitchell for help in
tracking down particular compiler command lines that would work
with QCP. Also thanks to Mike Smedley and Jerry Houston for some
great ideas on which QCP is based.

If you have any questions or suggestions, please contact:

SemWare
4343 Shallowford Road
Suite C3A
Marietta, GA 30062-5022

Voice Phone: (404) 641-9002 9 a.m to 5 p.m. E.T., Mon-Fri.


BBS: (404) 641-8968
FAX: (404) 640-6213
QCP 2.08 Documentation Page 22

REVISION HISTORY
----------------
Version 1.0 - 7-Feb-1989 - Initial release.

Version 2.0 - 15-Mar-1989 - Substantial revision.


Added internal defaults.
Added /R, /H, /? and /S command line switches.
Added self-configuration /C option.
Added construction of QMAC macros from error output.
Added support for environment variable 'TMP'.
Additional error checking and status messages.
Added "special extensions" for special-purpose macros
Added /M and /O cmd line options to make the
invocation macro more self-contained.
Added /Q, made boolean switches more consistent.
Documentation file significantly rewritten.

Version 2.08 - 17-Nov-1989 - Supports QEdit 2.08.


Detects column number along with line number.
Allows generic "next" and "previous" macros.
Allows compilers to be run outside of QEdit, with
the editor being invoked via an autoexecute macro.
Pause after error messages.
QEdit macros that QCP writes can now be two lines.
Miscellaneous improvements.

*** END ***