WELCOME TO TURBO BASIC
哪哪哪哪哪哪哪哪哪哪哪
This README file contains information that will be useful
and/or of interest to you. Please read it in its entirety,
referring to it when you encounter problems in the manual.
TABLE OF CONTENTS
哪哪哪哪哪哪哪哪�
1. How to get Help
2. Graphics support for the new IBM Personal System computers
3. Corrections/Additions to the Manual
4. Important tips
5. Files on the disk
1. HOW TO GET HELP
哪哪哪哪哪哪哪哪哪
If you have any problems, please read this file and the
Owner's Handbook first. If you still have a question and need
assistance, help is available from the following sources:
1. Type GO BORLAND on the CompuServe bulletin board system.
2. Check with your local software dealer or users' group.
3. Write to us at the following address:
Borland International
Turbo Basic Technical Support
4585 Scotts Valley Dr.
Scotts Valley, CA 95066
4. If you have an urgent problem that cannot wait and you
have sent in the license agreement from the front of
your manual, then call the Borland Technical Support
department. Please have the following information ready
before calling:
a) Product name and serial number on your original
distribution disk.
b) Product version number. The version number for Turbo
Basic is displayed when you first load the program
and before you press any keys.
c) Computer brand, model, and the brands and model
numbers of any additional hardware.
d) Operating system and version number. (The version
number can be determined by typing VER at the DOS
prompt.)
e) Contents of your AUTOEXEC.BAT file.
f) Contents of your CONFIG.SYS file.
2. NEW IBM GRAPHICS MODE SUPPORT
哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪
Turbo Basic supports the new enhanced graphics modes
available on the new IBM Personal System computers.
Use the SCREEN statement to access the new modes. The
following table describes the new modes the SCREEN
statement takes:
SCREEN MODE
哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪�
11 640 X 480 black and white
12 640 X 480 16 Color
3. CORRECTIONS/ADDITIONS TO THE MANUAL
哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪
The following lists the corrections and additions to the
Turbo Basic manual. They are sequential by page number so you
can easily update your manual while you read through them.
Page 38 - The G (for global) option in the editor's Find
command does NOT stop at the position of each occurrence of
your search string. It searches through the entire file from
beginning to end, and positions the cursor on the LAST
occurrence of the search string.
Page 38 - The N (for Next) option of the Find command is not
documented here. The N option finds the Next occurrence of a
search string, starting at the current cursor position in the
file you are editing. Keep in mind that the G option will
override the N option if you use both at the same time. Also,
note that the N option is different than the n of the Find
command. The lower case n represents an integer that can be
used in the option list of the Find command.
Page 39 - The n (for number) option of the Find and replace
command. Unlike the n option in the Find command, the n
option for Find and replace causes the next n cases of the
search string to be replaced by the replace string. If the G
option is used, the search starts at the top of the file;
otherwise it starts at the current cursor position.
Page 49 - A word of warning is necessary concerning the 8087
coprocessor and Turbo Basic. In some cases, a program will
read that your machine has an 8087 chip when it really
doesn't; for example, if you've set the switch on for 8087
but have yet to install the chip. This will either cause
Turbo Basic to hang when running a program or to generate
compile-time errors when compiling programs with numbers.
Environment variables solve this problem nicely. Add the
following to your AUTOEXEC.BAT file:
SET 87=NO
Take a look at Appendix G, "A DOS Primer," for more
information about environment variables and AUTOEXEC.BAT
files.
Page 52 - The sentence: "Note that 8 notes equal 1 byte;"
should be: "Note that 1 note equals 8 bytes;"
Page 55 - In the discussion of Save Options/Window/Setup, it
says that you may save the options to TB.EXE. Actually, a
file extension of .TB is always added to the end of the
configuration file's name.
Page 57 - Under the Run-time error option in the Debug menu,
note that you'll receive a "Run-time error not found" error
message if you give an invalid program counter.
Page 76 - Arrays are considered dynamic in the following
cases:
- If declared after the $DYNAMIC metastatement is used,
as in
10 $DYNAMIC
20 DIM A(10)
- If declared as dynamic explicitly, as in
10 DIM DYNAMIC A(10)
- If a variable is used in the DIM statement, as in
10 X% = 10
20 DIM A(X%)
- If the array is included in a COMMON statement, as in
10 DIM A(10)
20 COMMON A(1)
- If there are two or more DIM statements for the same
array identifier, as in
10 DIM A(10)
20 A(0) = 10
30 DIM A(10)
- If an array is declared local to a procedure or function,
as in
DEF FNTest%
LOCAL A()
DIM A(10)
FNTest% = A(0)
END DEF
Page 107 - The example program on this page uses a variable
called name$. This variable will cause a syntax error because
you cannot use a reserved word as a variable. Replace the
variable name$ with FileName$.
Page 125 - $INLINE's example program contains two extra
commas that will cause a compile error. Remove the commas
at the end of the first two $INLINE statements.
Page 144 - The description of the CEIL function should read:
The CEIL function converts a numeric variable or
expression to an integer by returning the smallest integer
that is...
Page 155 - Make the following modification to the example program for
the CLOSE statement:
Change:
OPEN "CLOSEFIL.ONE" AS #1
OPEN "CLOSEFIL.TWO" AS #2
To:
OPEN "CLOSEFIL.ONE" FOR OUTPUT AS #1
OPEN "CLOSEFIL.TWO" FOR OUTPUT AS #2
Page 162 - Remove the OPEN statement in COM(n)'s example
program; it is extraneous and will cause a compile error.
Page 174 - Remove the following line from the example program:
Your results:
Page 180 - The example statement in the middle of the page:
= m + 16
should be:
n = m + 16
Page 191 - Make the following change to the example program
for DRAW:
Change:
DRAW "M= " +VARPTR$(I%) + ",40"
To:
DRAW "BM=" + VARPTR$(I%) + ",40"
Page 239 - The first sentence in the Remarks section should be:
n is the trapped key, and integer expression from 1-25,
30, or 31, according to the following:
The table following the first paragraph should be modified to
look exactly like the one on page 274.
Page 242 - The syntax description for LBOUND is:
LBOUND(array(dimension))
In the example program, the statement:
PRINT "Lower Array Bound of Dimension 2 is ";LBOUND(Array%,2)
Should be changed to:
PRINT "Lower Array Bound of Dimension 2 is ";LBOUND(Array%(2))
Page 274 - The first sentence in the Remarks section should be:
n is the trapped key, and integer expression from 1-25,
30, or 31, according to the following:
Page 286 - The syntax for the OPEN COM statement is:
OPEN "COMn:[baud] [,parity] [,data] [,stop] [options]"
Page 287 - The example program for OPEN COM should be changed
to the following:
' allocate a string array to store input
DIM ComPortInput$(1)
$COM1 1024 ' set up a 1K input buffer
OPEN "COM1:300,n,8,1,DS,RS,CS,CD" AS #1 LEN = 1
PRINT "Press any key to terminate the program..."
WHILE NOT INSTAT ' while a key hasn't been pressed
' if there is any input available
IF LOF(1) > 0 THEN
' read any info available in the com port buffer
ComPortInput$(0) = INPUT$(LOF(1), #1)
' display input
PRINT "COM Port input: ";ComPortInput$(0)
END IF
WEND
END ' end of program
Page 301 - The example statement in the middle of the page is
missing a colon.
Change:
a$ = "C D E" PLAY "E D E X" + VARPTR$(a$)
To:
a$ = "C D E" : PLAY "E D E X" + VARPTR$(a$)
Page 319 - The DATA statements for the example program are
missing. Use the following:
DATA W. Perry, 78, 65, 35, 79, 86, 93, 79, 85, 99, 96
DATA P. Watson, 98, 94, 70, 88, 99, 100, 75, 96, 100, 95
DATA M. Ciccone, 65, 59, 75, 82, 56, 79, 82, 76, 69, 89
Page 352 - Remove the comment from the first statement of the
program:
Change:
' top$ = STRING$(40,61)
To:
top$ = STRING$(40,61)
Page 365 - The syntax for UBOUND is:
UBOUND(array(dimension))
In the example program, the statement:
FOR index% = LBOUND(Array%) TO UBOUND(Array%)
Should be changed to:
FOR index% = LBOUND(Array%(1)) TO UBOUND(Array%(1))
Page 382 - In the DATA statement for the example program add
an ending double quote to the word "Paris".
Page 401 - The original assembly language source code for the
INLINE procedure on this page is:
program segment ; begin program segment
assume cs:program
push BP ; save the Base Pointer
mov BP,SP ; move stack pointer to BP
les DI,[BP+6] ; offset address of parameter
mov AX, 64h ; constant to fill
mov CX, C8h ; length of fill
cld ; clear the direction flag
rep ; fill the words
stosw
pop BP ; restore Base Pointer
program ends ; end program segment
ends ; end compilation
Note that there is no RET at the end of the routine. You may
run this code through The MicroSoft Assembler to generate the
code listed in the manual.
Page 416 - Error 242, String memory corrupt, should be
String/array memory corrupt.
4. IMPORTANT TIPS
哪哪哪哪哪哪哪哪�
CTRL-BREAK - If you want to be able to use CTRL-BREAK when
running a program, toggle ON the Keyboard break option in the
Options pulldown menu before compiling/running your program.
Note that CTRL-BREAK will only interrupt your program if the
Keyboard break option is turned ON and your program is doing
screen I/O or you have turned the Trace option ON in the
Debug menu. This is important to note because many public
domain programs written for BASICA do not provide any way
for the user to terminate execution other than pressing
CTRL-BREAK.
PRINT USING - When using the PRINT USING statement to display
real numbers (single and double precision), you may find that
the format strings for your BASICA programs do not format the
numeric values correctly. One symptom may be that your
numbers are displayed with a preceding % character followed
by the number. This is because Turbo Basic provides 80 bits
of numeric precision compared to BASICA's 24 bits. In other
words, you have proportionately more-significant digits for
all of your numbers. And consequently, you may have to make
more room for your numbers when you output them.
We have also found that some versions of GW BASIC
automatically remove the last character of a number when
there isn't enough room in the format string to display a
negative sign. BASICA does not do this, nor does Turbo Basic.
If you need to display a negative sign, you must allow for it
in the PRINT USING statement's format string.
5. FILES ON THE DISK
哪哪哪哪哪哪哪哪哪哪
Disk 1
哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪
README COM - The program to use to peruse this README file
TB EXE - The Turbo Basic compiler
TBINST COM - The Turbo Basic installation program
TBHELP TBH - The help file for Turbo Basic
HANOI BAS - An example Turbo Basic program that plays the
famous Towers of Hanoi game.
README - This file!
Disk 2
哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪
REGNAMES INC - The named constants representing the registers
used by the CALL INTERRUPT statement
ACKERMAN BAS - An example program demonstrating the Ackerman
algorithm (illustrating recursion)
BALL BAS - An example graphics program
HANOI BAS - An example Turbo Basic program that plays the
famous Towers of Hanoi game.
HILBD BAS - An example program demonstrating the precision
of the 8087 math package
MUSIC BAS - An example sound program
QUIKSORT BAS - An example program implementing the Quick Sort
algorithm
RECQUICK BAS - An example program implementing the Quick Sort
algorithm using recursion
SIEVE BAS - An example program implementing the Sieve
algorithm
WHEREIS BAS - The Main file for the WHEREIS program
WHEREIS INC - The Include file for the WHEREIS program
GETDIR ASM - The Assembly language source for Turbo Basic
Inline procedure; gets the current directory
GETDRIVE ASM - The Assembly language source for Turbo Basic
Inline procedure; gets the current drive
GETDTA ASM - The Assembly language source for Turbo Basic
Inline procedure; gets the current DTA
SETDTA ASM - The Assembly language source for Turbo Basic
Inline procedure; sets the DTA to a new location
GETDIR BIN - The Assembled version of GETDIR.ASM; ready to be
used by WHEREIS.BAS
GETDRIVE BIN - The Assembled version of GETDRIVE.ASM; ready to
be used by WHEREIS.BAS
GETDTA BIN - The Assembled version of GETDTA.ASM; ready to
be used by WHEREIS.BAS
SETDTA BIN - The Assembled version of SETDTA.ASM; ready to
be used by WHEREIS.BAS
MC BAS - The Main file for the MicroCalc example program
MC0 INC - An Include file for MicroCalc
MC1 INC - An Include file for MicroCalc
MC2 INC - An Include file for MicroCalc
MC3 INC - An Include file for MicroCalc
MC4 INC - An Include file for MicroCalc
MC5 INC - An Include file for MicroCalc
MC6 INC - An Include file for MicroCalc
MC7 INC - An Include file for MicroCalc
MC8 INC - An Include file for MicroCalc
MC HLP - The help file for MicroCalc
MCDEMO - The Demonstration work sheet for MicroCalc
README.DOC File
Release Notes for Microsoft (R) BASIC Professional Development System
Version 7.10
(C) Copyright Microsoft Corporation, 1990
Product Serial Number: 00-007-2710-10009751
This document contains release notes for version 7.10 of the Microsoft (R)
BASIC Professional Development System for MS-DOS (R) and the Microsoft
Operating System/2 (MS(R) OS/2). The information in this document is more
up-to-date than that in the manuals.
This version of BASIC contains the "BASIC Language Reference" and
"Programmer's Guide" published with the previous release of the product,
version 7.0. The information in those manuals is current with this
release except where noted in this document. The "Getting Started" manual
explains the features new to version 7.1 in Chapter 1, "New Features."
Microsoft revises its languages documentation at the time of reprinting,
so some of the information in this online file may already be included in
your manuals.
=======================================================================
Contents
=======================================================================
Part Description
---- -----------
1 Notes and Tips
2 Notes for "Microsoft BASIC Language Reference"
3 Notes for "Microsoft BASIC Programmer's Guide"
=======================================================================
Part 1: Notes and Tips
=======================================================================
Quick Library Compatibility Between Versions
--------------------------------------------
Quick libraries created with version 7.1 that use the LBOUND or UBOUND
functions or the ERASE statement on a dynamic array whose elements include
a record containing a static array will not work with version 7.0 of QBX.
Compatibility with Novell Netware
-----------------------------------
If you have a peripheral (such as a mouse) that uses Interrupt Request
Level (IRQ) 3, and your system is part of a network using Novell (R) Netware
version 2.15 or earlier, your system may hang when you load QBX, PWB, or
CodeView. As a temporary solution, set your peripheral to use another
interrupt. For more information, contact your Novell Netware dealer.
PWB State Files / Help Under OS/2
---------------------------------
Do not directly edit PWB state files (such as CURRENT.STS). To change editor
settings in PWB, choose Editor Settings from the Options menu. For more
information, see the section "Customizing the Environment" in Chapter 4 of
"Getting Started."
MSHELP.DLL must be located in the path set by LIBPATH in your CONFIG.SYS
file in order to use Help in PWB under OS/2.
NMK Utility
-----------
The NMK utility (NMK.COM) should not be used within PWB. To get help on
NMK, type QH NMK from the command line.
ILINK and BIND Utilities
------------------------
Documentation for the ILINK and BIND utilities is included online for
compatibility with Microsoft C. These utilities are not included with
Microsoft BASIC and are not supported by BASIC.
I/O within LPRINT, PRINT #, PRINT # USING, WRITE, and WRITE USING
-----------------------------------------------------------------
If you use any of these output statements with an argument that is,
itself, an input/output statement, the output will go to the
console screen rather than the expected file or device. To avoid this
problem, use a variable to get input, and use that variable as the
argument to the statement that will perform the output. In the following
example output will always go to the screen:
OPEN "Test1.dat" FOR INPUT AS #1
OPEN "Test2.dat" FOR OUTPUT as #2
PRINT #2, INPUT$(10, #1)
The following rewritten example will send output to the proper place:
OPEN "Test1.dat" FOR INPUT AS #1
OPEN "Test2.dat" FOR OUTPUT AS #1
TEXT$ = INPUT$(10, #1)
PRINT #2, TEXT$
Output is also sent to the screen if you use an argument that is a
user-defined function that also performs input/output. You must not
use user-defined functions that perform I/O as arguments to any of the
preceding output statements.
Debugging Custom Run-Time Modules with CodeView
------------------------------------------------
You can debug custom run-time modules with CodeView only in protected mode
(CVP.EXE). To do this you must prepare the run-time module as follows:
1. Compile the source files using the CodeView options (/Zi or /Zd).
2. Set the LINK environment variable to include the /CO (CodeView) option.
3. Run the BUILDRTM utility to create the custom run-time module.
After you run BUILDRTM, you should set the LINK environment variable back to
its original setting.
References to Version Numbers in Filenames
------------------------------------------
The references to the filenames for the BASIC run-time libraries and run-
time modules in the "BASIC Language Reference" and "Programmer's Guide"
include the 7.0 version number, e.g. BRT70ENR.LIB. Change these to include
the 7.1 version number, e.g. BRT71ENR.LIB.
=======================================================================
Part 2: Notes for "Microsoft BASIC Language Reference"
=======================================================================
Page Section\Note
---- ------------
31-32 CALL (BASIC Procedures)
-----------------------
In version 7.1, BASIC supports the use of the BYVAL keyword
in CALL, DECLARE, SUB, and FUNCTION statements for BASIC
procedures. You can use BYVAL to pass parameters by value
rather than by reference (the default). It is no longer
necessary to enclose parameters in parentheses to emulate
passing by value. For more information and an example of using
BYVAL in BASIC procedures, see the online Help for the DECLARE
statement (BASIC procedures). For specifics on using BYVAL with
CALL, see the online Help for the CALL statement (BASIC
procedures).
Change the explanation of the example to state that the SUB
procedure prints a message on the 24th line of the display.
37 CHAIN
-----
Under DOS 2.1, CHAIN will not work unless filespec$ provides a
path. Also under DOS 2.1, if the run-time module is in the
root directory, the root directory must be listed in the PATH
environment variable.
40 CHDIR
-----
Refer to the online Help for CHDIR for a more appropriate
example of CHDIR and MKDIR usage.
61 COMMAND$
--------
The fifth line from the top of the page is missing a pair of
parentheses. The line should read:
SUB Comline (NumArgs, Args$(), MaxArgs) STATIC
68 CONST
-----
You cannot use ASCII 01 and 02 in string constants if you are
going to compile to an executable program. The compiler
(BC.EXE) uses ASCII 1 and 2 internally to represent
End-of-Statement and End-of-Line, respectively. You can,
however, still use 1 and 2 within the QBX environment.
84 DATA
----
You cannot use ASCII 01 and 02 in data strings if
you are going to compile to an executable program.
See the preceding note for CONST.
88 DECLARE (BASIC Procedures)
--------------------------
In version 7.1, BASIC supports the use of the BYVAL keyword
in CALL, DECLARE, SUB, and FUNCTION statements for BASIC
procedures. See the online Help for this statement for more
information.
93 DECLARE (Non-BASIC Procedures)
------------------------------
Reword the paragraph following the note to read:
Be careful when using the SEG keyword or when passing parameters
by near reference (no keyword), because BASIC may move variables
in memory before the called routine begins execution. Anything
in a CALL statement's argument list that causes memory movement
may create problems. You can safely pass variables using SEG or
near reference if the CALL statement's argument list contains
only simple variables or arithmetic expressions. SEG cannot be
used to pass arrays.
116 END
---
Syntax 2, END [n%], accepts a range of integers from -32,768
through 32,767, inclusive.
144 FUNCTION
--------
In version 7.1, BASIC supports the use of the BYVAL keyword
in CALL, DECLARE, SUB, and FUNCTION statements for BASIC
procedures. See the entry for page 31 for more information.
147 GET (File I/O)
--------------
The argument for record number should be "recordnumber&" since
it accepts a long-integer value.
151 GET (Graphics)
--------------
Screen modes 3 and 4 should be added to the table at the top of
the page. Both modes use one bit per pixel per plane and have
one plane.
177 KEY (Assignment)
----------------
The KEY n%, stringexpression$ syntax can also be used to
create user-defined keys. Refer to the information on page 180
for specific details on how this is accomplished.
The description for the KEY ON statement in the table in the
middle of the page should mention that only the first five
characters of the soft-key string value are displayed for
function key F10.
180 KEY (Event Trapping)
--------------------
The correct value for the Ctrl+Alt key combination is &H0C
(12 decimal) for non-extended keyboards and &H8C for extended
keyboards.
181 Keyboard Scan Codes
-------------------
Add the following to the Keyboard Scan Code chart:
Key Code
--- ----
F11 133
F12 134
200 LOCK...UNLOCK
-------------
The paragraph after the warning incorrectly states that BASIC
may generate the error "Bad record number" if you attempt to
access a file that is locked. BASIC will generate only the
"Permission denied" error message in this case.
238-239 OPEN COM
--------
Under OS/2, specifying DS0 to ignore the state of the Data Set
Ready (DSR) line does not work properly. In this case, you
will have to either not ignore the DSR line or you will have
to jumper the DSR line to an active high-signal line. Refer to
serial port information that specifically pertains to your
hardware, and perform any modifications at your own risk.
The range for the parity argument should include the value PE.
Setting parity to PE enables parity error checking.
261 PLAY (Music)
------------
The remarks should note that the PLAY statement generates an
"Illegal Function Call" error if you attempt to use the
enharmonic notes C-, B+, E+ or F-.
275 PRINT USING
-----------
The syntax for the PRINT USING statement should be as follows:
PRINT USING formatstring$; expressionlist [;]
The PRINT USING statement does not use print zones. You cannot
replace the optional semicolon with a comma.
280 PUT Statement (File I/O)
------------------------
The argument for record number should be "recordnumber&" since
it accepts a long-integer value.
The introduction to the example near the bottom of the page
incorrectly states that "the following two statements write
15 bytes to file number 1:" The example actually writes 17
bytes to file number 1, since the first two bytes store
the length of the string in BASIC.
333 SETMEM Function
---------------
The example shows using the C malloc() and free() functions to
allocate and free memory. These will take the allocated memory
away from the BASIC program until the program terminates. To be
able to reallocate memory using SETMEM after a C procedure, you
must use halloc() and hfree().
The corrected C code for the SETMEM example is as follows:
void far cfunc(bytes)
int bytes;
{
char *halloc();
char *workspace;
/* Allocate working memory using amount BASIC freed. */
workspace=halloc((unsigned) bytes, 1);
/* Working space would be used here. */
/* Free memory before returning to BASIC */
hfree(workspace);
}
345 SOUND
-----
The duration argument accepts any positive single-precision,
floating-point value between 0 and 65,535, inclusive.
368-375 StringAddress, StringAssign, StringLength, and StringRelease
------------------------------------------------------------
Sample MASM code for these entries includes lines like
the following:
extrn StringAddress: proc far
call StringAddress
In all cases, only "far" should appear after the colon
in the extrn directive. In addition, all extrn
directives should appear outside of any .code or .data
segment directives. For example, the extrn directives
in the sample code on page 369 should appear as
follows:
.model medium, basic ; Use same model as BASIC.
; Define external (BASIC library) procedures.
extrn StringAddress: far
extrn StringLength: far
.code
; Define procedure with one-word argument.
...
376 SUB
---
In version 7.1, BASIC supports the use of the BYVAL keyword
in CALL, DECLARE, SUB, and FUNCTION statements for BASIC
procedures. See the online Help for this statement for more
information.
409 WIDTH
-----
The Remarks state that the WIDTH #filenumber% form of the
statement may be used with a file. This form of the statement
may only be used with a device opened as a file with the OPEN
statement.
425 DATESERIAL
----------
Change the paragraph that begins "For each of the three
arguments..." to read as follows:
When converting specific dates, the ranges shown above for each
of the arguments should be used. However, when using expressions
to calculate date serial numbers for relative dates (e.g., a
week from 10 Dec 89) each of the three arguments can be any
valid integer as long as the resulting date serial number
is between -53,688 and 65,380, inclusive. Date serial
numbers outside this range generate the error message "Illegal
function call."
506 Matrix Math Toolbox
-------------------
The first sentence of the Remarks for the MatSEqn FUNCTION
should read:
The MatSEQNtype% procedure solves a system of linear equations
contained in a one-dimensional vector and in a square matrix;...
The sentence beginning "The second matrix,..." should read:
The second matrix is used to enter the vector constants for
that system of simultaneous equations.
518 Fonts Toolbox
-------------
Change the first sentence in the second paragraph to read as
follows:
Nine font files are supplied: Courier fonts in COURA.FON,
COURB.FON, and COURE.FON, Helv fonts in HELVA.FON,
HELVB.FON, and HELVE.FON, and Tms Rmn fonts in TMSRA.FON,
TMSRB.FON and TMSRE.FON.
523 Fonts Toolbox
-------------
Add the following documentation for the GTextWindow before
existing documentation for GetTotalFonts:
GTextWindow SUB
Action Retains the logical coordinates of window
boundaries. (See note below.)
Syntax GTextWindow (x1, y1, x2, y2, Scrn%)
Remarks The GTextWindow procedure uses the following
arguments:
Argument Description
-------- -----------
x1 Integer containing the minimum
X value (logical coordinate).
y1 Integer containing the minimum
Y value.
x2 Integer containing the maximum
X value.
y2 Integer containing the maximum
Y value.
Scrn% Integer containing either cTRUE
(used with WINDOW SCREEN statement
to show window Y values increase
top to bottom) or cFALSE (used
with WINDOW statement to show
window Y values increase bottom to
top )
This procedure should be called after defining
VIEW and WINDOW and prior to calling OutGText.
To clear the current window, call this routine
with X1=X2 or Y1=Y2.
Note: The first call to OutGtext will work without
calling GTextWindow, however all subsequent calls
treat the coordinates as pixel coordinates of the
window; therefore, to retain the logical
coordinates call GTextWindow prior to calling
OutGText.
See Also See OutGText statement for more information.
524 Fonts Toolbox
-------------
Change the last line of the LoadFont% FUNCTION section to read:
l% = LoadFont%("n1/n3/n6")
549 User Interface Toolbox
----------------------
Change "CommandKeySet" in the paragraph following the table to
"ShortCutKeySet."
550 User Interface Toolbox
----------------------
Add the following line after the COMMON SHARED statement for
GloStorage:
COMMON SHARED /uitools/GloWindowStack() AS INTEGER
586 User Interface Toolbox
----------------------
The AttrBox SUB is incorrectly identified as being a procedure
in GENERAL.BAS. Actually, AttrBox is found in UIASM.OBJ.
601 Keyboard Scan Codes and ASCII Character Codes
---------------------------------------------
Add the following to the table on page 601:
| | | ASCII or | ASCII or | ASCII or
| Scan | ASCII or | Extended | Extended | Extended
Key| Code | Extended | with SHIFT| with CTRL | with ALT
---|-------|------------|------------|------------|------------
|Dec|Hex|Dec|Hex|Char|Dec|Hex|Char|Dec|Hex|Char|Dec|Hex|Char
---|---|---|---|---|----|---|---|----|---|---|----|---|---|----
F11|133| 85|133| 85| NUL|135| 87| NUL|137| 89| NUL|139| 8B| NUL
F12|134| 86|134| 86| NUL|136| 88| NUL|138| 8A| NUL|140| 8C| NUL
---------------------------------------------------------------
606 BASIC Reserved Words
--------------------
Add PRESERVE to the list of BASIC reserved words.
608-610 BASIC Compiler (BC)
-------------------
In version 7.1, the following options were added for the BASIC
Compiler:
/? or /Help Displays compiler syntax and options.
/FBr[filename] Generates a file containing restricted program
symbol information for use with the Programmer's
WorkBench Source Browser. This information file
has the name specified by the filename argument.
If no name is specified, it has the same name as
the source file with an .SBR filename extension.
The file contains information about the
definitions and references to all global
symbols.
/FBx[filename] Generates a file containing extended program
symbol information for use with the Programmer's
WorkBench Source Browser. This information file
has the name specified by the filename argument.
If no name is specified, it has the same name as
the source file with an .SBR filename extension.
The file contains information about the
definitions and references to all global and
local symbols.
The information for the /Z option applies to PWB, as well as to
the M editor.
611 BUILDRTM Utility
----------------
The run-time argument to BUILDRTM should not include a path or
a file extension.
620 NMAKE
-----
Change the description for the macrodefinitions argument to
the following:
An optional field that lists macro definitions for NMAKE to
use. Macros can also be specified in the makefile. See the
"Macro Definitions" section for details.
631 Table 4.1 Run-Time Error Codes
------------------------------
Add run-time error 89, "Insufficient ISAM buffers," to
the table.
639 Database needs repair
---------------------
Change REPAIR.EXE to ISAMRPR.EXE.
653 Illegal Function Call
---------------------
This error may also occur if an error is trapped and corrected
by the user between BEGINTRANS and COMMITTRANS statements. For
example:
ON ERROR GOTO TRAP
OPEN "A:\FOO.MDB" FOR ISAM ...
BEGINTRANS
...
COMMITTRANS
PRINT "The TRANSACTION was SUCCESSFULLY committed"
...
END
TRAP:
IF ERL = 10 and ERR = 71 THEN
INPUT "Hit any key after the DRIVE door is CLOSED...";a$
RESUME
END IF
This example may cause an "Illegal function call" error on the
COMMITTRANS statement if the transaction is interrupted by a
"Disk not ready" error.
656 Run-Time Error Message - Insufficient ISAM buffers
--------------------------------------------------
There are not enough buffers to handle ISAM file processing.
See the section "Estimating Minimum ISAM Buffer Values" in
Chapter 10 of the "Programmer's Guide" for more information.
ERR code: 89
665 Run-Time Error Message - Overflow
----------------------------------
In the first list item, change "40 indices" to "28 indexes."
Remove the sentence that begins, "If there are 32 open
tables..." This limitation is not correct and does not cause an
Overflow error. See "Using Multiple Files: 'Relational'
Databases" in Chapter 10 of the "Programmer's Guide" for
information on open table limitations.
684 Link error L1083 - Cannot open run file
---------------------------------------
This error can also be caused by a read-only .EXE file of the
same name as specified for the run file. Link will not be able
to overwrite the read-only file.
690 Link error L2044 - Symbol multiply defined
------------------------------------------
This error may also appear in PWB when doing mixed-language
programming with C. The error results from the C start-up
code being linked in twice. To avoid the error, enter the
appropriate BASIC library (for example, BRT71ENR.LIB
for a program using the BASIC run-time, emulator math,
near strings, and running in real mode) in the Additional
libraries field of the Link Options dialog.
=======================================================================
Part 3: Notes for "Microsoft BASIC Programmer's Guide"
=======================================================================
Page Section/Note
---- ------------
41 Defining Procedures
-------------------
The DATA statement should be added to the list of statements
and expressions not allowed within a procedure.
56 Passing Arguments by Value
--------------------------
This section describes how to emulate passing parameters
by value in BASIC procedures by enclosing the parameter in
parentheses. With version 7.1 you can define parameters
to pass by value using the BYVAL keyword in the DECLARE
statement for the procedure. For information on using BYVAL in
BASIC procedures, see the online Help for the DECLARE statement
(BASIC procedures).
66 Preserving Values of Local Variables with STATIC
------------------------------------------------
In the first example, a "Duplicate Definition" error will occur
if the procedure SubProg2 is called more than once. To avoid
this, rewrite the example as follows:
SUB SubProg2
STATIC Array() AS INTEGER, FirstPassFlag%
IF FirstPassFlag% = 0 THEN
DIM Array(-5 TO 5, 1 TO 25) AS INTEGER
FirstPassFlag% = 1
END IF
...
END SUB
68 The Factorial Function
----------------------
In the example declaration of the Factorial# procedure, delete
the STATIC keyword so the line appears as follows:
FUNCTION Factorial# (N%)
224 Presentation Graphics
---------------------
Table 6.1 should indicate that the Presentation Graphics toolbox
can only be used in real mode.
250-251 AxisType
--------
The table listing the elements of the AxisType structure
incorrectly lists the "Labelled" element. That element should
be referred to as "Labeled."
The description for the TicFormat element should state that you
should set TicFormat to cNormFormat to display tick mark labels
in decimal format.
319 ISAM Support
------------
The Note on this page indicates that ISAM is not supported
under OS/2. With version 7.1 this restriction has been
removed.
341 Restrictions on Indexing
------------------------
Add the following to the end of the first paragraph:
The maximum number of indexes per table is 28.
344 Setting the Current Record by Position
--------------------------------------
Add the following just after the paragraph that begins,
"The effect of any of the MOVEdest statements...":
If you trap errors while using either a MOVENEXT or
MOVEPREVIOUS ISAM statement, and an I/O error occurs (either
57 or 71) on an index that is not the NULL index, you must
resynchronize ISAM internal pointers before using another
MOVENEXT or MOVEPREVIOUS statement. Synchronization can be
done using any valid SETINDEX statement, either a MOVEFIRST or
MOVELAST statement, or any of the SEEKxx (SEEKEQ, SEEKGE,
SEEKGT) statements.
345 A Typical ISAM Program
----------------------
The command line used for invoking PROISAM for use with the
BOOKLOOK program (shown halfway down the page) is stated as
PROISAM /Ib:24. The efficiency of the ISAM has improved and
the program can now be run in 640K conventional memory, with
no expanded memory, with only 9 buffers: PROISAM /Ib:9. If you
have EMS available, you need not specify the /Ib option.
376 Starting ISAM for Use in QBX - /Ie argument
-------------------------------------------
The explanation for the /Ie: option for the ISAM TSR states
that "...In practice, you only need to specify /Ie if your
program code (or a loaded Quick library) actually manages EMS
memory." Although this is true, there may be other times when
you want to reserve EMS for other uses. Having many ISAM
buffers improves the performance of ISAM, but during program
development ISAM performance may be less important than the
size of your program's source code. For example, your program
may only need 10-12 ISAM buffers to prevent an "Insufficient
ISAM buffers" error at run time. If you have 1.2 megabytes of
EMS available, you can use the /Ie: option to minimize the EMS
used by ISAM buffers, reserving the rest for program source
code. For example, if your program needs about 10 buffers, you
can invoke the ISAM TSR with /Ie:900. This will provide several
hundred K of EMS to be used for ISAM buffers. The rest will be
reserved for QBX (and your program source code). Note that
only program parts whose size is between 512 bytes and 16K are
placed in EMS by QBX. You can check the sizes of your
procedures and module-level code blocks by pressing F2 to see
the View menu's SUBs dialog box.
380 Using ISAM with Compiled Programs
---------------------------------
The note labeled Important at the bottom of the page no longer
applies in version 7.1 since you can specify additional options
from the Make EXE dialog box when compiling within QBX.
393 The ISAMCVT Utility
-------------------
Add the following sentence just before the section entitled
"The Repair Utility":
No EMS driver can be loaded when running ISAMCVT.
394 Repair Utility
--------------
Replace the paragraph that begins, "When you use the ISAMREPR
utility..." with the following:
The ISAMREPR utility requires an additional 32K within your
database to re-create the system indexes. This adds a least
32K to the size of the database. Do not run the utility if
your disk does not have this amount of space available in the
current working directory. Also note that the maximum size of
a database is 128 megabytes. When you run the ISAMREPR
utility, adding 32K to the size of an extremely large database
may cause it to exceed the maximum allowed. ISAMREPR deletes
inconsistent records in tables, but does not compact after
doing so. Compacting a database is described in the next
section.
490-497 String-Processing Routines
--------------------------
Sample MASM code in this section includes lines like
the following:
extrn stringassign: proc far
call stringassign
In all cases, only "far" should appear after the colon in the
extrn directive. In addition, all extrn directives should appear
outside of any .CODE or .DATA segment directives. For an
example, see the entry for pages 368-375 of the "BASIC Language
Reference."
494 BASIC Calling MASM
------------------
Change the first sentence in the paragraph following the
"Important" note to read as follows:
This MASM code uses the .MODEL directive which establishes
compatible naming and calling conventions for BASIC, and
it also uses simplified segment directives.
Change the third-from-last line of the example to read as
follows:
C$ = AddString$(A$, LEN(A$), B$, LEN(B$))
520 Language Changes for Protected Mode
-----------------------------------
Table 14.1 indicates that all of the ISAM statements and
functions are not supported in protected mode. With version
7.1 that restriction has been removed.
539 Using Stub Files
----------------
The third paragraph on this page states that stub files can be
used to create run-time modules. This is true for all stub files
except OVLDOS21.OBJ and NOEMS.OBJ, which cannot be built into
run-time modules. These stub files can be linked with programs
using run-time modules, however.
558-560 Using BC Command Options
------------------------
The first paragraph in this sections states that the slash (/)
and the dash (-) can be used interchangeably to specify BC
command-line options. This is true, but they cannot be
intermixed. You must use either all slashes or all dashes
in your command line.
Add the following command options to the table: /?, /Help, /FBr,
/FBx. See the entry in this document for pages 608-610 of the
"BASIC Language Reference" for descriptions of these options.
The description of the /Z option applies to PWB, as well as to
the M editor.
When using the /D option with dynamic arrays, it is possible
to produce incorrect results if you pass an array element to a
procedure that changes the value of the element index. For
example, the following works properly when compiled with all
options except /D:
CALL SubProc(a(i),i)
PRINT a(i), i
The following performs the same operations and works properly
with all compile options including /D.
j=i
CALL SubProc(a(i),j)
PRINT a(i), j
561 Using Floating-Point Options (/FPa and /FPi)
--------------------------------------------
The new CURRENCY data type is not currently supported in the
alternate math library.
576 Options
-------
Replace /NOD with /NOE in the table at the top of the page.
589 Valid LINK Options
------------------
The /PACKCODE option can be abbreviated to /PACKC, not /PAC as
shown in the table.
595 Ignoring Default Libraries (/NOD:filename)
------------------------------------------
Add the following to the paragraph that begins, "In general,
higher-level languages..."
For example, if you specify the /NOD option when linking a
protect-mode BASIC program, you must explicitly specify the
run-time library (BRT71xxP.LIB) and OS2.LIB in the libraries
field of the LINK command line.
599 Specifying OS/2 Window Type
---------------------------
You cannot use the /D compiler option together with /PM:VIO.
611 Linking Stub Files
------------------
The first paragraph on this page states that you can link stub
files with custom run-time modules. This is true for all stub
files except OVLDOS21.OBJ and NOEMS.OBJ. These stub files can be
linked with programs using run-time modules, however.
624 Mouse, Menu, and Window Libraries
--------------------------------
If you rebuild toolbox Quick libraries, files should be
compiled with the /Ah option (allow dynamic arrays to be
greater than 64K) if you intend to use QBX with the /Ea option
(Put arrays into expanded memory).
Also note that Table 19.1 applies to all toolbox files, not
just MOUSE.BAS, MENU.BAS, and WINDOW.BAS.
625 Loading and Viewing Quick Libraries
-----------------------------------
QBX now requires that the BASIC source for any Quick library
be compiled using the /Fs (far string) compiler option.
Consequently, QBX will not permit you to load a Quick library
file that has the near string features of earlier versions of
QuickBASIC. If you encounter an "Invalid Format" error when
attempting to load an older Quick library file, you should
recompile the files using BC with the /Fs option.
You may also encounter the "Invalid Format" error if you
invoke QBX with a /Ea option (put arrays into expanded memory)
and have not compiled the Quick library with /D (generate
debugging code) or /Ah (allow dynamic arrays of records,
fixed-length strings, and numeric data to be larger than 64K).
636 Description Blocks
------------------
The following information applies to the command component
of description blocks:
The first character after a dependency line in a description
block must be a whitespace character, i.e., either a space or
a tab. An error occurs if only a carriage return is used on a
blank line.
663 OBJECTS Directive
-----------------
This section should note that you should not include the
OVLDOS21.OBJ or NOEMS.OBJ stub files in the list of filenames
after the OBJECTS directive.
701 Elementary Data Types - String
------------------------------
You cannot use ASCII 01 and 02 in strings constants if you
are going to compile to an executable program. The compiler
(BC.EXE) uses ASCII 1 and 2 internally to represent
End-of-Statement and End-of-Line, respectively. You can,
however, still use 1 and 2 within the QBX environment.
702 Elementary Data Types - Numeric
-------------------------------
A math coprocessor (80x87) handles rounding of extremely small
numbers differently from the way numbers are rounded by the
BASIC emulator math package. Because of this difference, some
numbers that are properly displayed using a coprocessor are
rounded and displayed as zero when using emulator math. The
range of single-precision floating-point numbers that are
properly displayed as input, using the emulator math package,
is +/- 2.802597E-45. For double-precision floating-point
numbers, the range is +/- 4.94065645841247D-324.
In Table B.1, the description for double-precision floating
point numbers should say that they are accurate to 15
digits. Also, the upper and lower ranges with or without
the alternate math library should be +/-1.79769313486231D308
rather than +/-1.797693134862315D308 for regular math and
+/-1.79769313486232D308 for alternate math.
707 Data Types in ISAM Files
------------------------
In Table B.2, the description for the DOUBLE data type
should list the upper and lower ranges as
+/-1.79769313486231D308 rather than +/-1.797693134862315D308.
"README.DOC" File
Release Notes for MICROSOFT(R) QuickBASIC Version 4.5 for
IBM(R) Personal Computers and Compatibles
(C) Copyright Microsoft Corporation, 1988
THIS FILE CONTAINS IMPORTANT INFORMATION CONCERNING VERSION 4.5 OF
MICROSOFT(R) QuickBASIC. PLEASE READ THE ENTIRE FILE BEFORE USING
QuickBASIC.
This file has seven parts:
PART CONTENTS
1 Information about additions and changes to the
Learning to Use Microsoft QuickBASIC
2 Information about additions and changes to the
manual Programming in BASIC
3 Using your Mouse with QuickBASIC
4 Supplementary information on mixed-language programming
5 Using Btrieve with QuickBASIC
6 Using the DOS 3.2 patch for math accuracy
7 Miscellaneous information about using QuickBASIC
===< Part 1: Learning to Use Microsoft QuickBASIC >
No entries yet for this part
===< Part 2: Programming in BASIC >
No entries yet for this part
===< Part 3: Using Your Mouse with QuickBASIC >
--------------< New Mouse Driver for Use with QuickBASIC >------------------
QuickBASIC Version 4.5 can be used with any mouse that is 100%
compatible with the Microsoft Mouse. However, you must use a
Microsoft Mouse driver Version 6.00 or later. Earlier versions may
cause unpredictable behavior when used with QuickBASIC. MOUSE.COM,
Version 6.24 is supplied with QuickBASIC Version 4.5.
Especially if you are writing programs that use the mouse, you
should use the supplied version of the mouse driver when working in
QuickBASIC. Previous versions have included MOUSE.SYS, which is
installed by including the line DEVICE=MOUSE.SYS in your CONFIG.SYS
file. This version of QuickBASIC includes MOUSE.COM, which is not
installed via CONFIG.SYS. To install MOUSE.COM, just type MOUSE at
the DOS prompt. To include MOUSE.COM automatically when your machine
boots, make sure MOUSE.COM is in your search path, then put the line
MOUSE
in your AUTOEXEC.BAT file. To free up memory, you can remove the
mouse driver at any time by typing MOUSE OFF at the DOS prompt.
This will restore between 9K and 10.5K of memory with Version 6.11.
--------< Using Mouse Function Calls from QuickBASIC Programs >------------
If you are programming for the Microsoft Mouse, you should obtain
the Microsoft Mouse Programmer's Reference Guide and the library
MOUSE.LIB that comes with it. (These are not included in QuickBASIC
or Mouse package and must be ordered separately). Most of the
information in the Mouse Programmer's Reference Guide applies
directly to QuickBASIC Version 4.5. However, the following additional
restrictions must be observed:
Certain Mouse function calls (Functions 9 & 16) require you to set
up an integer array and pass the address of the array to the mouse
driver. For previous versions, the only restriction on this array
was that it had to be $STATIC (the default array type). In QuickBASIC
Version 4.5, however, the array also must be in a COMMON block if you
will be making the Mouse function call from within the QuickBASIC
environment. In addition, it is recommended that the support code
for the Mouse call be in a Quick library or linked into the
executable file when making Mouse function calls from QuickBASIC.
To produce a Quick library for using Mouse function calls from
within the QuickBASIC environment, use the following command line
(produces MOUSE.QLB):
LINK MOUSE.LIB/QU,MOUSE.QLB,,BQLB40.LIB/NOE;
An example from PIANO.BAS (included with the Microsoft Mouse
Programmer's Reference) for using Mouse function call 9:
DEFINT A-Z
DECLARE SUB MOUSE (M1, M2, M3, M4)
DIM Cursor(15, 1)
COMMON Cursor() 'Ensures array data is in DGROUP
.
. (set up Cursor() for mouse cursor shape desired)
.
M1 = 9: M2 = 6: M3 = 0
CALL MOUSE(M1, M2, M3, VARPTR(Cursor(0, 0)))
In addition to the above, note that Mouse function calls 21-23
require dynamically allocated storage out of the home data segment.
The recommended way to do this is to allocate space in a dynamic
string variable based on the return value from function call 21,
using the STRING$ or SPACE$ function. Then use VARPTR on this string
variable just prior to calling Mouse function call 22 or 23.
===< Part 4: Supplementary Information on Mixed-Language Programming >
--------< Linking from within QuickC or with QCL >--------------------------
Microsoft QuickC and the QCL command both set the /NOI linker
by default. Therefore, you should not link from within QuickC, or
with QCL, when your program contains modules written in a case-
insensitive language such as BASIC. Use LINK to link your program
from the command line.
--------< Pascal and Fortran Modules in QuickBASIC Programs >---------------
Modules compiled with Microsoft Pascal or Fortran can be linked with
BASIC programs, as described in the Microsoft Mixed-Language
Programming Guide. They can also be incorporated in Quick libraries.
However, QuickBASIC programs containing code compiled with Microsoft
Pascal must allocate at least 2K near-heap space for Pascal. This can
be done by using the DIM statement to allocate a static array of 2K or
greater in the NMALLOC named common block, for example, as follows:
DIM name%(2048)
COMMON SHARED /NMALLOC/ name%()
The Pascal run-time assumes it always has at least 2K of near-heap
space available. If the Pascal code cannot allocate the required
space, QuickBASIC may crash. This applies to Pascal code in Quick
libraries as well as Pascal code linked into executable files. The
situation is similar for Fortran I/O, which also requires near
buffer space, and which can be provided by the same means as the
Pascal near malloc space.
--------< STATIC Array Allocation >---------------------------------------
If you are writing assembly-language modules for use in QuickBASIC
programs, see Section 2.3.3, "Variable Storage Allocation," in the
BASIC Language Reference. Assembly-language code should not assume
data is in a particular segment. To avoid problems, pass data using
the SEG or CALLS keywords, or use FAR pointers. Alternatively, you
can declare all arrays dynamic (still using far pointers) since
dynamic arrays are handled identically by BC and within QuickBASIC.
--------< Quick Libraries with Leading Zeros in the First Code Segment >--
A Quick library containing leading zeros in the first CODE segment
is invalid, causing the message "Error in loading file <name> -
Invalid format" when you try to load it in QuickBASIC. For example,
this can occur if an assembly-language routine puts data that is
initialized to zero in the first CODE segment, and it is subsequently
listed first on the LINK command line when you make a Quick library.
If you have this problem, do either of the following:
(1) link with a BASIC module first on the LINK command line, or
(2) make sure that, in whatever module comes first on the LINK
command line, the first code segment starts with a non-zero byte.
--------< References to DGROUP in Extended Run-time Modules >-------------
For mixed-language programs that use the CHAIN command, you should
make sure that any code built into an extended run-time module does not
contain any references to DGROUP. (The CHAIN command causes DGROUP to
move, but does not update references to DGROUP.) This rule applies
only to mixed-language programs; because BASIC routines never refer
to DGROUP, you can ignore this caution for programs written entirely
in BASIC.
To avoid this problem, you can use the value of SS, since BASIC always
assumes that SS coincides with DGROUP.
===< Part 5: Using Btrieve >
-------------------< Using Btrieve in OS/2 Protected Mode >--------------------
In OS/2 protected mode, a BASIC program that uses Btrieve must do a
Btrieve reset call (function 28) before executing the CHAIN statement.
The program must also reopen all Btrieve files when the destination of
the CHAIN starts to run.
--------------------< Using Btrieve with QuickBASIC >--------------------------
If you use Btrieve with QuickBASIC, you must make a small change to
your programs for QuickBASIC Version 4.5. Currently your programs
contain a statement that obtains the address of the field buffer for
an open file. For example:
OPEN "NUL" AS #1
FIELD #1, 20 AS CITY$, 10 AS STATE$
FCB.ADDR% = VARPTR(#1) 'This statement obtains the address
In QuickBASIC Version 4.5, you should change the indicated statement
to return the address of the first variable in your field buffer minus
a constant, as follows:
OPEN "NUL" AS #1
FIELD #1, 20 AS CITY$, 10 AS STATE$
FCB.ADDR% = SADD(CITY$) - 188 ' CITY$ is the first field
' buffer variable
The following example shows how to obtain the same address for a
user-defined type:
TYPE ADDRESS
CITY AS STRING * 20
STATE AS STRING * 10
END TYPE
DIM ADD1 AS ADDRESS
FCB.ADDR% = VARPTR(ADD1) - 188
' or, you can use FCB.ADDR% = VARPTR(ADD1.CITY) - 188
Your programs should function correctly with Btrieve with this change.
===< Part 6: DOS 3.20 Patch >
This information is important only if your system has ALL of the following
characteristics:
1. Uses MS-DOS version 3.20
2. Boots from a hard disk drive
3. Has a math coprocessor (for instance, an 8087 chip)
4. Runs programs that use floating-point math
For systems that satisfy all of the preceding conditions, you may be able to
eliminate floating-point math problems by installing a small patch in DOS. If
you are not sure whether you need the patch, perform the following steps:
1. Copy the program PATCH87.EXE (included in this release) to the root
directory of your hard-disk drive.
2. Reboot your system from the hard disk, and DO NOT PERFORM ANY FLOPPY-
DISK OPERATIONS after rebooting. It is very important that you avoid
floppy-disk I/O after rebooting, since that will affect the reliability
of the diagnostic test that you are about to perform.
3. If necessary, use the CD command to move to the root directory of your
hard-disk drive.
4. Run the PATCH87.EXE program by entering this command at the DOS prompt:
PATCH87
5. The program performs a diagnostic test on your system to determine
whether it needs the DOS patch, and if the patch is needed,
whether the patch can be installed successfully. If the program tells
you that you need to install the DOS patch, and that it can be done,
follow the procedure described in the next section.
NOTE: The floating-point problem has been eliminated in versions of
MS-DOS higher than 3.20. This includes MS-DOS versions 3.21 and 3.30.
If you performed the preceding test and determined that you should install the
DOS patch on your system, perform the following steps:
1. Format a blank floppy disk. (Do NOT use the /s formatting option to
transfer system files to the disk.)
2. Use the SYS command to copy IO.SYS and MSDOS.SYS from the root
directory of your hard disk to the new floppy disk. For instance, if
you boot from drive C:, you would enter the following commands:
C:
SYS A:
3. Use the COPY command to copy COMMAND.COM and SYS.COM to the same
floppy disk.
4. Use the COPY command to copy the program PATCH87.EXE (included in this
release) to the same floppy disk.
5. Change the current drive and directory to the floppy disk, by entering
the following command:
A:
7. Install the DOS patch by entering the following command:
PATCH87 /F
WARNING: If you experience any disk errors during steps 2 through 7,
do NOT proceed with step 8. Reboot from your hard disk and repeat the
entire process.
8. If you have not experienced any errors, use the SYS command to transfer
the files IO.SYS and MSDOS.SYS from the floppy disk back to your hard
disk. For instance, if the boot directory of your system is the root
directory of drive C:, you would enter the following command at the DOS
prompt:
A:
SYS C:
9. The DOS patch has been installed. Reboot the system.
===< Part 7: Miscellaneous Information About Using QuickBASIC >
----------------------< Using FIXSHIFT.COM Utility >-----------------------
Some keyboards have an extra set of DIRECTION (i.e. arrow) keys, in
addition to those on the numeric keypad. A bug in the ROM BIOS of
some machines with these keyboards can interfere with the QuickBASIC
editor. The Utilities 2 disk includes a program, FIXSHIFT.COM, that
fixes this bug. If you have such a keyboard, run this program by typing
FIXSHIFT. If your machine does not have the bug, FIXSHIFT displays a
message telling you so. Otherwise FIXSHIFT prompts you for the proper
actions. FIXSHIFT takes about 450 bytes of memory. Except for the BIOS
bug, it has no effect on other programs you run.
----------------------< Note on VGA Display Adapter >----------------------
If you install an IBM (R) Personal System/2 (TM) Video Graphics
Array display adapter (VGA) in a non-PS/2 machine, the VGA adapter
should be the only adapter in the system, and you should not use
monochrome modes (SCREEN 10) if you have a color monitor. Similarly,
you should not use color modes (SCREEN 1, 2, 7, 8, 9, 11, 12, 13) if
you have a monochrome monitor.
-------------------< Note on Using QuickBASIC with DOS 2.1 >----------------
To use QuickBASIC with a two-floppy system under DOS 2.1, you must
put a copy of COMMAND.COM on each disk containing an executable
file ( a file with the .EXE extension).
-------------< PTR86, LOF, Naming SUB procedures and variables >------------
PTR86 is no longer supported. Use VARSEG and VARPTR instead.
Also, when used with a communications device, LOF now returns the
amount of space remaining (in bytes) in the output buffer. In
previous versions this was returned in the input buffer. Also, note
that a variable and SUB procedure could have the same name in
previous versions. In Version 4.5, this causes a "Duplicate
definition" error message.
Microsoft QuickBASIC 4.50 中文版
Mircrosoft (R) QuickBASIC (C) Copyright Microsoft Corporation, 1985 - 1991
[ README.DOC 檔案內容 ]
此份檔案提供使用者有關 QuickBASIC 4.50 中文版的技術文件資料,
請在使用 QuickBASIC 以前,先參閱下面的說明 :
(一). QuickBASIC 的作業系統需求
(二). QuickBASIC 的硬體需求
(三). 如何了解 QuickBASIC 中文版內的新增與修訂規格
(四). 使用 QuickBASIC 中文版應注意的事項
(五). 在 "倚天" 中文系統上使用 QuickBASIC 時應注意的事項
(六). 在 "零壹" 中文系統上使用 QuickBASIC 時應注意的事項
(七). 使用浮點算術運算(floating-point arithmetic)時應注意的事項
(八). 如何移植不同版本的 Quick Library 到中文版中繼續使用
(九). 使用混合語言程式(mixed-language programming)時的補充資料
(十). FIXSHIFT.COM 程式檔的使用
(一). QuickBASIC 作業系統需求 :
請於 MS-DOS 或 PC-DOS 英文版 3.30 以及 3.30 以上,在下列有提供與 "CMEX"
相容的中文系統上使用 QuickBASIC, 並且該中文系統必須採用以 BIG-5 中文碼
為準:
(1). 倚天中文系統版本 2.01 或 2.01 以上,包括 :
"飛碟四號" 中文碟
"光電二號" 中文卡
"閃電四號" 中文卡
"彩虹一號" 中文卡
(2). 零壹中文系統版本 4.0 或 4.0 以上,包括 :
"彩虹精靈" 中文碟
"風神 1601" 中文卡
"彩翼 1601" 中文卡
(二). QuickBASIC 硬體需求 :
(a). 主機需求 ----
IBM 個人電腦或與 IBM-PC 相容的電腦,具有一個硬碟與一個軟碟配備;
除了 640 K位元組(bytes)的主記憶體以外,假如能夠再提供擴充記憶體
(Expanded Memory),則可以產生最佳的使用效果(請參閱第 (2) 項說明)。
(1). 基本的硬碟空間需求 :
請保留 2 MB 位元組空間,以供設定程式(SETUP.EXE)安裝
QuickBASIC 磁片內的檔案到硬碟。
(2). 額外的硬碟或擴充記憶體空間的需求 :
QuickBASIC 每一次執行使用者程式以後,在回到 QuickBASIC
工作環境之前,會將當時程式輸出畫面儲存起來,以提供 [V/景象]
功能表內的 "U/輸出畫面" 命令,可以再回溯觀看程式輸出畫面;
或者由程式暫停處繼續執行程式。
QuickBASIC 儲存程式輸出畫面的方式是 :
** 對於 "本文螢幕模式"(Text Screen Mode)的程式輸出畫面,
是直接儲存在主記憶體,不會使用硬碟或擴充記憶體的空間。
** 對於 "繪圖螢幕模式"(Graphic Screen Mode)的程式輸出畫面,
假如擴充記憶體有足夠空間,就儲存到擴充記憶體內; 假如
擴充記憶體空間不夠或者根本沒有配置時,則儲存到硬碟內。
由於擴充記憶體的存取速度遠比硬碟快,為了執行上的效率,
我們建議使用者能預留擴充記憶體空間供 QuickBASIC 使用。
擴充記憶體的空間需求 :
-- VGA 顯示卡的繪圖螢幕模式 : 144 K 位元組
-- EGA 顯示卡的繪圖螢幕模式 : 128 K 位元組
-- Hercules(MGA) 顯示卡的繪圖螢幕模式 : 32 K 位元組
硬碟的空間需求 :
-- 沒有固定的數目,原則上請參照 "擴充記憶體的空間需求",
因為 QuickBASIC 會將畫面資料以壓縮方式儲存到硬碟內,
所以實際使用的空間會比預留的空間來的小。
QuickBASIC 會在根目錄(root directory)建立一個暫存檔
(QB45XXXX.TMP)以儲存程式輸出畫面資料,在 QuickBASIC
正常結束時,此份檔案會自動被刪除。
(b). 顯示介面 ----
** 可以採用 Hercules(MGA), EGA 或 VGA 的任何一種顯示卡。
** 下面是 CSI(中文系統輸出入界面)有關視訊(VIDEO)方面的規格表。
在前面 " QuickBASIC 作業系統需求" 所介紹的中文系統環境,
有些 "繪圖緩衝區" 的起始位置(例如 : 倚天 "飛碟四號" 中文碟
的 VGA/EGA 彩色顯示區) 與 CSI 規格有差異, QuickBASIC 可以
經由 CSI 中的 "查詢系統資訊" (Query System Information)功能
取得該起始位置值。
"本文緩衝區", "繪圖緩衝區" 與 "視訊顯示區" 欄是以 "十六進制"
值表示。
+--------------------------------------------------------------------------+
| | MGA | MGA | VGA | VGA | EGA | EGA |
| | 本文 | 繪圖 | 本文 | 繪圖 | 本文 | 繪圖 |
| | (Text) |(Graphic)| (Text) |(Graphic)| (Text) |(Graphic)|
+--------------+---------+---------+---------+---------+---------+---------+
| 螢幕模式 | 07 | 71 | 03 | 82 | 03 | 80 |
| Screen Mode | | | | | | |
+----------------------------------+-------------------+-------------------+
| 本文緩衝區 |B000:0000| |B800:0000| |B800:0000| |
| Text Buffer | | | | | | |
+----------------------------------+-------------------+-------------------+
| 繪圖緩衝區 | |B800:0000| |A000:0000| |A000:0000|
|Graphic Buffer| | | | | | |
+----------------------------------+-------------------+-------------------+
| 視訊顯示區 |B800:0000|B800:0000|A000:0000|A000:0000|A000:0000|A000:0000|
| Video Buffer | | | | | | |
+--------------+-------------------+-------------------+-------------------+
| 頁數 | 01 | 01 | 01 | 01 | 01 | 01 |
+--------------+-------------------+-------------------+-------------------+
| 螢幕解析度 | 640 x 400 | 640 x 480 | 640 x 400 |
|橫座標x縱座標 | | | |
+----------------------------------+-------------------+-------------------+
| 繪圖區 | 640 x (0 ~ 374) | 640 x (0 ~ 449) | 640 x (0 ~ 374) |
|橫座標x縱座標 | | | |
+----------------------------------+-------------------+-------------------+
| 系統區 | 640 x (375 ~ 399) | 640 x (450 ~ 479) | 640 x (375 ~ 399) |
| (狀態列) | | | |
|橫座標x縱座標 | | | |
+--------------+---------------------------------------+-------------------+
| 字框 | 英文字 : 08 x 15 | 英文字 : 08 x 18 | 英文字 : 08 x 15 |
|(寬度 x 高度) | 中文字 : 16 x 15 | 中文字 : 16 x 18 | 中文字 : 16 x 15 |
+--------------+-------------------+-------------------+-------------------+
| 列數 x 行數 | 英文字 : 25 x 80 | 英文字 : 25 x 80 | 英文字 : 25 x 80 |
|(Row x Column)| 中文字 : 25 x 40 | 中文字 : 25 x 40 | 中文字 : 25 x 40 |
+--------------+-------------------+-------------------+-------------------+
|顏色屬性暫存器| 沒有提供 | 16 個 | 16 個 |
|Color Attribute | | |
+--------------+-------------------+-------------------+-------------------+
| 顏色範圍 | 沒有提供 | 256 K 種 | 64 種 |
| Color Number | | | |
+------------------------------------------------------+-------------------+
(c). 主記憶體 ----
在中文系統環境下,除了能夠載入 QuickBASIC 主程式 "QB.EXE" 以外,
還需要再提供 64K 位元組空間; 所以我們給使用者的建議是: 原則上
需提供 384K 位元組以上的空間供 QuickBASIC 工作環境使用; 假如
執行 BASIC 程式中,還有 "主記憶體空間不夠" 或 "字串空間不足"
...等等時,請試圖再空出更多的主記憶體空間,使 QuickBASIC 能產生
最佳的執行效果。
為了能有更多的主記憶體空間,在安裝中文系統時 :
** 請儘可能將中文字型全部存放在硬碟內。
** 請選擇您在使用上最方便的一種中文輸入法就可以了,而不要將
全部的輸入法都安裝在主記憶體內。
** 有關進一步的技術問題,請與提供中文系統程式的公司詢問。
(d). 週邊輔助工具 ---- 滑鼠。
(d-1) Microsoft 英文版滑鼠驅動程式(mouse driver programs)
無法在符合 CSI 規格的中文系統中使用,目前 Microsoft
公司有提供一套可以使用在英文系統與 CSI 中文系統的
中文版滑鼠套裝軟體,在英文系統中使用中文版滑鼠驅動
程式時,就與英文版的滑鼠功能相同。使用者請在英文系統
中執行該套裝軟體磁片內的 MSETUP.EXE 程式將中文版
滑鼠驅動程式安裝到硬碟,然後在啟動中文系統以後,啟動
中文版滑鼠驅動程式,就可以在 QuickBASIC 工作環境中
使用滑鼠。
中文版滑鼠驅動程式檔名是 :
*** EGA.COM (僅使用在 EGA 或 VGA 顯示卡上)
*** MOUSE.COM
由於 EGA.SYS 與 MOUSE.SYS 被啟動以後,無法像 EGA.COM
與 MOUSE.COM 可以被移去(例如 : 執行 MOUSE OFF 命令),
所以中文版滑鼠套裝軟體內沒有提供 EGA.SYS 與 MOUSE.SYS
程式。
下面介紹如何啟動中文系統與中文版滑鼠驅動程式,而可以在
QuickBASIC 工作環境中使用滑鼠的步驟:
這是在 DOS 命令列所輸入的命令 :
C:>ET16V-16 ; 注意: 必需先啟動中文系統。
; 這是使用 VGA 顯示卡時,執行
; ET16V-16.COM 進入倚天中文系統的範例。
C:>EGA ; 使用 MGA 顯示卡時,可以不要執行這條命令。
; 使用 EGA 或 VGA 顯示卡時,則必需在
; MOUSE.COM 以前,先執行此命令。
C:>MOUSE
C:>QB ; 執行 QB.EXE 以後,就可以在 QuickBASIC
; 工作環境中使用滑鼠。
[提示]: 或者,可以將前三條命令加在 "AUTOEXEC.BAT"
批次檔內,因為每一次開機時,系統會自動執行
"AUTOEXEC.BAT" 檔中所有的命令,而滑鼠驅動
程式就在當時順利的被啟動。
下面介紹如何移去中文版滑鼠驅動程式與中文系統的步驟:
當結束 QuickBASIC 程式以後,在 DOS 命令列所輸入的命令:
C:>MOUSE OFF ; 注意: 有使用 EGA 或 VGA 顯示卡時,
; 必需先移去 MOUSE.COM。
C:>EGA OFF
C:>ETCTL/C:IQ ; 最後,移去中文系統。
; 這是移去倚天中文系統的範例。
[提示]: 也可以將這些命令加在 "AUTOEXEC.BAT" 檔內。
使用中文版滑鼠驅動程式時,其他應注意的事項 :
** 請不要混合使用中文版與英文版的滑鼠驅動程式。
** 滑鼠驅動程式只需在每一次開機以後,被啟動一次就
可以了;啟動以前請記得要將滑鼠插在電腦主機上。
** 輸入滑鼠驅動程式檔名時,請記得要同時輸入存放滑鼠
驅動程式的正確路徑名稱。
** 有關進一步了解滑鼠功能的詳細內容,請參閱 "中文版
滑鼠套裝軟體" 磁片內的 "MREADME.DOC" 檔案。
(d-2). QuickBASIC 套裝軟體內也有提供 Microsoft 中文版滑鼠
驅動程式,由於程式檔以壓縮方式儲存,需由 SETUP.EXE
還原以後才可以使用;並且 SETUP.EXE 是 "有條件" 的
安裝給 QuickBASIC 中文版使用者。其安裝步驟是:
(i). 先檢查使用者個人電腦上目前是否已經有啟動
Microsoft 公司的滑鼠驅動程式? 假如有時,才會
將中文版滑鼠驅動程式還原,並安裝到硬碟內。
(ii). 在安裝到硬碟以後,為了方便將來啟動中文版滑鼠驅動
程式, SETUP.EXE 會檢查目前硬碟內的 AUTOEXEC.BAT
與 CONFIG.SYS 中是否有啟動滑鼠驅動程式的命令?
假如有時:
** 對於 AUTOEXEC.BAT 檔內的動滑鼠驅動程式命令,
會更改成為存放中文版滑鼠驅動程式的正確路徑
名稱(假如目前使用 EGA 或 VGA 顯示卡,並且
沒有 EGA.COM 命令時,會在 MOUSE.COM 命令前
自動加入 EGA.COM 命令); 而原來的 AUTOEXEC.BAT
會改名為 AUTOEXEC.BAK。
** 對於 CONFIG.SYS 檔,則會刪除滑鼠驅動程式(EGA.SYS
或 MOUSE.SYS)命令; 而原來的 CONFIG.SYS 會改名為
CONFIG.BAK。
在結束 SETUP.EXE 程式以後,請使用者重新啟動系統(REBOOT),
再遵照 (d-1) 一節所描述的 -- 啟動中文系統與中文版滑鼠
驅動程式的步驟,就可以在 QuickBASIC 工作環境中使用滑鼠。
(三). 如何了解 QuickBASIC 中文版新增與修訂的規格 :
(1). 請在下面的二個地方了解 "新增與修訂的規格" 以及 "使用中文版
時應注意的事項" :
*** QuickBASIC 的 BASIC 程式設計使用手冊中的 "附錄 J" 一章。
*** QuickBASIC 工作環境中, [H/援助] 功能表的 "C/內容" 命令
中,有提供 "中文版使用時應注意的事項" 一項。
另外 [H/援助] 功能表內的 "I/索引" 命令,對於中文版新增與
修訂的函數或敘述名稱左邊,有使用 "(新)" 或 "(修)" 記號來
標明。
(2). 有關 QuickBASIC 與 BASIC 直譯器(BASICA 和 GW-BASIC) 之間的
差異,請參閱 QuickBASIC 的 BASIC 程式設計使用手冊 "附錄 A"
一章,有詳細說明。
或者線上援助功能中,在每一個函數或敘述的 <細節> 援助視窗中,
也有說明。
(3). 由於 QuickBASIC 中文版採用 BIG-5 碼,如果使用者現有的 BASIC
程式要移植到 QuickBASIC 繼續使用,對於程式中有使用中文碼的
部份,請根據實際需要,先在中文系統下執行轉碼程式轉成 BIG-5 碼
以後,才可以在 QuickBASIC 環境中顯示正確的中文字型。
轉碼前,請先將現有的 BASIC 程式以 "TEXT FILE" 格式儲存。
(四). 使用 QuickBASIC 中文版應注意的事項 :
(1). QB.FNT 檔案的使用 :
原英文版使用的表格圖形碼(Semi-Graphic Code,&H80 - &HFF),
在目前中文版本是當成中文碼的高位元組(High-Byte)使用,所以
在 BASIC 程式中請改用中文符號字元來顯示。
由於 QuickBASIC 工作環境中功能表(Menu),交談框(Dialog Boxes),
視窗(Windows)的顯示,需要使用英文表格圖形(例如: ┌,┐,└,┘,
─,│); 所以 QuickBASIC 自己使用一組英文字型檔(QB.FNT, 字型
橫寬=8,縱高=15),前面的 32 個字型(ASCII 碼: &H00 ~ &H1F)可以
顯示表格圖形。QuickBASIC 一開始會載入 QB.FNT, 透過中文系統中
的 CSI 功能來安裝並且使用這組新的英文字型。對於 BASIC 程式
字串(string)內有包含 00H ~ 1FH 的 ASCII 碼,雖然在 QuickBASIC
工作環境中是顯示 QB.FNT 字型,但在執行程式時, QuickBASIC 會
還原中文系統原來的英文字型組,所以不會影響程式執行時的正常顯示。
注意: QB.FNT 必須與 QB.EXE 檔存放在同一個子目錄內。
(2). 在 VAL 函數中,如果字串參數第一個字元為中文數字字元,
就無法得出正確的輸出結果,請參閱下面的範例:
A$ = "123.45" '第一個字元為中文數字字元
B$ = "123.45” '第一個字元為英文數字字元
C$ = "123.45" '全部為英文數字字元
D$ = "&Habc” '第一個字元為代表十六進制值的
'前置符號(中文字元)
PRINT VAL(A$)
PRINT VAL(B$)
PRINT VAL(C$)
PRINT VAL(D$)
輸出結果 : 0
123.45
123.45
2748
[解決方法] : 將字串參數先使用 CSNG$ 函數轉換成英文字元,
就可以在 VAL 函數得到正確的輸出結果。
(3). 請小心使用 SCREEN 敘述 :
(3)-1. 在 QuickBASIC 工作環境中偵錯(DEBUG) BASIC 程式,
於程式暫停期間(例如:停在所設定的程式中斷點上),
對於 "已經執行過的 SCREEN 敘述",若還需要再修改
螢幕模式參數值時,應小心更正。因為錯誤的螢幕模式
參數值,將導致 QuickBASIC 於程式繼續執行(例如 :
按 <F5> 鍵繼續執行程式)以後,會產生無法預期的錯誤
結果。
(3)-1. QuickBASIC 是根據個人電腦上的顯示卡來檢查 SCREEN
敘述內的螢幕模式參數值是否正確。例如:使用者目前
使用 VGA 顯示卡,雖然執行 ET16E.COM (EGA 顯示卡
驅動程式) 進入倚天中文系統,但 QuickBASIC 仍然
視為使用 VGA 顯示卡,而允許使用的螢幕模式參數值
是: 00, 03 與 82 。因此請使用與顯示卡一致的中文
系統驅動程式(例如 : 使用 VGA 顯示卡時,請執行倚天
中文系統驅動程式 ET16V-16.COM 或 ET16V.COM )。
(4). QuickBASIC 二本使用手冊中對於程式的註解部份(REM 敘述或
` 後面的文字),為了方便使用者閱讀,已經全部翻譯成為中文;
但套裝軟體磁片內的範例/教學程式(存在 EXAMPLES 與 ADVR_EX
子目錄中),除了 QCARDS.BAS 以外,仍保留原來的英文說明。
同時使用手冊中的範例程式是採用中文檔名,而套裝軟體磁片
內的範例程式(存在 EXAMPLES 子目錄中),則維持原英文名稱。
如果使用者中文系統有提供檔名允許使用中文時,可以使用
"RENFILE.BAT" 批次命令(batch commands)檔更改為中文檔名,
否則請參照 PACKING.LST 內中英文檔名的對照,來配合學習
使用手冊內的範例程式
(5). QuickBASIC 二本使用手冊與線上援助功能中的援助訊息,對於
英文名詞的翻譯,請注意下面幾點說明:
** LINE 翻譯為 "行" 或 "列", 例如: LINE NUMBER 是
"行號" 或 "列號"。由於 COLUMN 的翻譯也是 "行",若
與 "COLUMN" 一起使用時,則 LINE 固定為 "列"。
例如: SCREEN(列,行,[顏色旗標]) 函數
LOCATE [列][,[行][,[游標][,[起始,結束]]]] 敘述
** 在線上援助功能中的援助訊息,對於會讓使用者混淆的中文
翻譯名詞有保留原英文名稱,例如: COLUMN 翻譯為 "行(column)",
以幫助使用者了解其英文原意。
(6). QuickBASIC 線上援助功能下的 <Quick 畫面> <細節> <範例>
援助視窗中,對於 BASIC 語言每一個函數/敘述的語法介紹,
或範例使用,或與 BASICA 版本的差異..等等,都有詳盡的說明,
請善加利用來幫助您完成 BASIC 程式。
同時 FQCARDS.BAS 是完整的 QCARDS.BAS 程式。如果使用者利用
QCARDS.BAS 程式配合 QuickBASIC 使用手冊來學習 QuickBASIC
的工作環境或語言以後,還無法產生正確的程式時,可以參考
FQCARDS.BAS 程式。
(五). 在 "倚天" 中文系統上使用 QuickBASIC 時應注意的事項 :
(1). 進入 QuickBASIC 以前 :
** 請使用中文系統預設的 BIG-5 碼, 或在 DOS 命令列
(Command Line)輸入 "ETCTL/C:SI0" 命令,設定為
BIG-5 碼。
** 請按下 Alt-Ctrl-T 透通性模式互換鍵(Transparent Mode
Toggle Key)設定為透通性模式。
或者,可以在 DOS 命令列輸入 "ETCTL/C:IT" 設定透通性模式
命令。
(2). 對於使用 2.00.03 版本的中文系統使用者,下面資訊提供您在
使用時應注意的事項 :
(a). QuickBASIC 會自動載入 QB.FNT 字型檔,然後透過中文系統
上的 CSI 功能建立一組新的英文字型,使 QuickBASIC 工作
環境中:功能表(Menu),交談框(Dialog Boxes),視窗(Windows)
能顯示正確的表格圖型(例如 :┌,┐,└,┘,─,│)。
但目前 2.00.03 版本的中文系統還無法顯示這套新建立的字型。
(b). 對於使用 ET16E.COM, ETEGA.COM 建立 EGA 卡彩色顯示的
使用者,目前 2.00.03 版本還無法執行 QuickBASIC。
(c). QuickBASIC [O/選用功能] 功能表,對於 "D/畫面設定..."
命令中顏色屬性的設定,目前 2.00.03 版本是將高亮度
(High-Intensity)以 "閃爍"(Blinking) 的方式顯示。
以上的情況,倚天公司已經在新版本的中文系統上全部解決了。
(六). 在 "零壹" 中文系統上使用 QuickBASIC 時應注意的事項 :
(1). 進入 QuickBASIC 以前 :
** 請先執行 CMEXMODE.BAT 設定成 CMEX 環境。
** 然後,在 DOS 命令列(Command Line) :
(a). 請輸入 "01CTL/I:2" 命令,設定為 BIG-5 中文碼。
(b). 請輸入 "01CTL/CUR:1" 命令,設定游標的處理為
"英文模式"。
(2). 由於 QuickBASIC 需要使用 384 K 的記憶體空間, 所以在此提供給
使用零壹 4.0 版以上的使用者,在建立中文系統時如何節省記憶體
空間之方式:
(a). 使用彩虹精靈中文碟時,可以修改 01.BAT 檔案, 減少 Download
的字型。例如:只要設定 "載入一個 16x16 字體" 及 "保留一個
16x16 字體緩衝區"。
Download /L16:1/B16:1/L:1/B:1 D:
若要列印 24x24 字型, 首先需將 24 字型片拷備到中文目錄中,
並且至少設定 "載入一個 24x24 字型" 及 "保留一個 24x24 的
緩衝區"。
注意 : 使用 "風神/彩翼 1601 中文卡" 時,由於中文卡本身
有提供完整的字型, 所以不需要做以上的修改。
(b). 請執行 01SETUP,可以刪除不會用到的輸入法。
目前各種輸入法佔用記憶體空間大小是 :
全形輸入法 -- 01 K 倉頡輸入法 -- 05 K
注音輸入法 -- 38 K 內碼輸入法 -- 01 K
片語輸入法 -- 05 K
(c). 將系統片中的 CCF.STM 檔名更改為 CCF.SYS,並依下列方式修改,
以取消不用的驅動器程式。
現將 CCF.SYS 驅動器的功能說明如下:
DRV=FONTFILE.SYS ....... 字型驅動器(彩虹精靈用)
( 或 DRV=CARDPTN.SYS .... 風神/彩翼 1601 中文卡驅動器)
DRV=CODE.SYS ........... 內碼驅動器
DRV=SCONDRV.SYS ......... 單色螢幕驅動器
DRV=EVCONDRV.SYS ........ 彩色螢幕驅動器
DRV=GRAPHS.SYS .......... 單色繪圖驅動器
DRV=PRAPHE.SYS .......... 彩色繪圖驅動器
DRV=FULL.SYS ............ 全形輸入法
DRV=CJDRV.SYS ........... 倉頡輸入法
DRV=PHDRV.SYS ........... 注音輸入法
DRV=OBSQF.SYS ........... 內碼輸入法
DRV=PHRASE.SYS .......... 片語輸入法
DRV=PRT400.SYS .......... 4.0 版列表驅動器
DRV=PRT320C.SYS ......... 零壹 3.2 版中文列表驅動器
DRV=HDCP400.SYS ......... HARD COPY 驅動器
DRV=ZOAPI.SYS ........... 零壹 API 驅動器
DRV=CSI.SYS ............. CMEX API 驅動器
DRV=ETAPI.SYS ........... 倚天 API 驅動器
若使用者可以利用文書處理工具(例如 : PE2 ...等)修改
ccf.sys 檔案, 即 :在不要用到的驅動器最前面加上一個分號(;),
以後中文系統啟動時就不會載入該驅動器。例如 :
;drv=graphs.sys
;drv=full.sys
;drv=prt400.sys
;drv=hdcp400.sys
注意 : 使用 QuickBASIC 時至少須載入: 字型,內碼,螢幕,
CMEX API 等四個驅動器;以及另外一種在使用上最
方便的輸入法便可以執行。
假如不使用倉頡輸入法時,則需要在中文目錄中建立
INT1, INT2, INT3, INT4 等四個 0 BYTE 的空檔,
然後重新載入中文系統。
(3). 在 4.02 版本的中文系統上使用 QuickBASIC 時,有關的注意事項 :
(a). 4.02 版本將 VGA/EGA 彩色顯示卡上的 "閃爍"(Blinking)
功能當成背景顏色使用,雖然沒有 "閃爍"(Blinking)功能
的顯示效果,然而在背景顏色的選擇上可以增加到最多 16 種。
(b). 在單色(MGA)顯示卡的顯示屬性中 :
(i). 反白(Reverse)與畫底線(with Underline)的屬性
不會同時並存。例如 :
COLOR 7, 0 '正常顯示
COLOR 1, 0 '正常顯示 + 畫底線
COLOR 0, 7 '反白顯示
COLOR 1, 7 '正常顯示
(ii). "閃爍" 與 "高亮度"(High-Intensity) 的顯示效果相同。
(七). 使用浮點算術運算(floating-point arithmetic)時應注意的事項 :
(a). QuickBASIC 中文版編譯(compile) QuickBASIC 程式成為可執行檔
(executable file)時,對於程式內所使用的浮點算術運算,提供了
一個可以產生 "處理速度最快" 而且 "程式最小" 的模擬數學輔助
處理器(Numeric Coprocessor)的 "算術程式"(Alternate floating
point math)。
執行檔在 DOS 命令列實際執行時,不會理會數學輔助處理器的存在,
一律都採用此 "算術模擬程式" 來處理算術運算。
(b). 運算元(operand)與關係運算子(relational operator)組合成一個
運算式(expression),當運算元為單精確度(single-precision number)
或是倍精確度(double-precision number)時,請小心使用關係運算子,
尤其儘量避免測試二個值是否相等,因為運算結果可能 "相當接近" 但
"卻不相等" 。請參閱下面的例子:
(1). 這個例子中的 IF 敘述, 除非 A! 的值正好是等於 0.0,
否則將不會執行 PRINT 敘述。當 A! 是一個相當小的值時,
例如 1.0E-23, 則此 PRINT 敘述仍不會被執行 :
IF A! = 0.0 THEN PRINT "相等結果"
(2). 這個例子中也是不會執行 PRINT 敘述 :
CLS
A$ = "123.45"
IF VAL(A$) = 123.45 THEN PRINT "相等結果"
解決方法 :
請在關係運算式中使用變數名稱,就可以得到 "相等" 的結果,
例如上面第二個例子可以改寫為 :
CLS
A$ = "123.45"
B! = VAL(A$)
IF B! = 123.45 THEN PRINT "相等結果"
(八). 如何移植不同版本的 Quick Library 到中文版中繼續使用:
(a). 如果您有在不同版本(例如: QuickBASIC 英文版 4.50)中所發展
的 Quick Library 程式移植到中文版繼續使用時,請將原始程式
(source programs) 載入到 QuickBASIC 中文版工作環境中,
使用 [R/執行] 功能表中的 "L/產生程式庫" 命令重新建立,
然後才可以繼續在中文版下使用。
(b). 假如沒有原始程式,只有 Quick Libray 程式庫檔案,請先在 DOS
命令列執行下面的命令以後, 才可以拿到 QuickBASIC 中文版下
繼續使用 :
(以 QuickBASIC 英文版 4.50 的 "QB.QLB" Quick library 為例)
LINK QB.LIB, QB.QLB, /QU, BQLB45C.LIB
但是最好不要採用此種方式,因為有些問題還是要從原始程式修改,
才能解決的。
(九). 使用混合語言程式(mixed-language programming)時的補充資料 :
(1). 使用者所寫的程式有包含例如: 用 BASIC 語言所寫的 "與大小寫
無關"(case-insensitive)的模組(module)時,請不要在 Microsoft
的 QuickC 工作環境或 QCL 命令下使用重疊鏈結器(LINKER)來與
其他程式模組一起鏈結,因為它們會加入預設的鏈結參數 "NOI",
使用者可以轉到一般 DOS 命令列下使用重疊鏈結器作鏈結,這樣
就不會有問題了。
(2). 動態陣列(dynamic array)的使用:
使用者可以提供一個組合語言程式給 QuickBASIC 使用, 但在組合
語言程式中不應該假設資料是存放在同一個 SEGMENT 內。為了避免
這個問題,QuickBASIC 程式可以以遠程位址(far reference)的方式
傳送參數資料給組合語言使用,例如: 使用 "CALLS" 敘述, 或在參數
前面加上 "SEG" 關鍵字,或使用遠程指標(far pointer)等等; 還有
一種方法是傳送動態陣列資料型態的參數(還是要使用遠程指標),
因為 BASIC 編譯器與 QuickBASIC 之下對於動態陣列的處理方式
都是相同的。
(3). 在 QuickBASIC 下使用 Btrive :
使用者程式有包含 Btrive,在 QuickBASIC 4.50 版下使用時,
必需作小小的改變,例如: 程式中有一個敘述用來取得一個已
開啟檔案的欄位區域起始位址時:
OPEN "NUL" AS #1
FIELD #1, 20 AS CITY$, 10 AS STATE$
FCB.ADDR% = VARPTR(#1)
在 QuickBASIC 4.50 版下使用時,必需修改成下面的方式:
OPEN "NUL" AS #1
FIELD #1, 20 AS CITY$, 10 AS STATE$
FCB.ADDR% = SADD(CITY$) - 188
下面例子也是介紹如何取得使用者自定型態的資料位址:
TYPE ADDRESS
CITY AS STRING * 20
STATE AS STRING * 10
END TYPE
DIM ADD1 AS ADDRESS
FCB.ADDR% = VARPTR(ADD1) - 188
'
' 或者也可以寫成下面的方式 :
' FCB.ADDR% = VARPTR(ADD1.CITY) - 188
'
(十). FIXSHIFT.COM 的使用 :
有些鍵盤增加一組除了數字鍵以外的 向上/向下/向左/向右 方向鍵,
由於有些個人電腦主機上 ROM BIOS 存在的錯誤,使得 QuickBASIC
不能正確使用這一組方向鍵; 因此提供 FIXSHIFT.COM 程式來修正
這個錯誤。假如使用者個人電腦上的 ROM BIOS 沒有錯誤, FIXSHIFT
程式也會顯示正確的訊息通知使用者。
FIXSHIFT.COM 為一個常駐程式(resident program),會佔用主記憶體
約 450 位元組(bytes)空間,它的目的僅為了修正 ROM BIOS 上的錯誤,
而不會影響到其他程式的執行。
VISUAL BASIC FOR WINDOWS DEVELOPERS GUIDE
by D.F. Scott
(copyright 1992, Sams Publishing)
----------------------------------------------------------------------
README.TXT
----------------------------------------------------------------------
Each *.EXE file on this disk is a compressed archive that can contain
a number of files. When one of these *.EXE files is run, it will
automatically decompress and store files on your hard drive.
NOTE: You need at least 2.8 megabytes of free space on your hard drive
to install the files from this disk.
Follow these instructions to run the installation program. This program
will automatically decompress the files you need, and install them on
your C: hard drive.
1. You need to be at a DOS prompt. Double-click on the MSDOS
Prompt icon in Program Manager.
2. From the DOS prompt, set your default drive to the drive that
contains the installation disk. For example, if the A: drive
hold the disk, type A: and press the Enter key.
3. Type the following and then press the Enter key:
INSTALL drive
("drive" is the drive letter of your hard drive)
For example, INSTALL C: would install the files to your
C: hard drive.
This will install all of the files to your hard drive.
----------------------------------------------------------------------
LOCATION OF FILES:
* The Visual Basic source code from the book is in \VB-DEVGD\SOURCE.
* The compiled programs are in \VB-DEVGD\COMPILED. This directory
also contains the VBRUN200.DLL and other Visual Basic run-time
files that are needed for running the compiled programs.
* A Word for Windows help file template is stored in \VB-DEVGD\TEMPLATE.
* The DLL and EXE files for the vxBase library are stored in your Windows
directory.
* The sample data files for vxBase are stored in \VB\VXBASE\AIRPLANE
and \VB\VXBASE\SAMPLE.
* The vxBase documentation is stored in \VB\VXBASE\DOCS.
*********************************************************************
IMPORTANT! Before you use vxBase, read VXBASE.WRI (the documentation
file, in Windows Write format)
*********************************************************************
A technical note...
--------------------
The compressed files on this disk were created using version 2.13 of
the LHA utility. They are self-extracting archives, and the files are
stored with expanded filenames. They will automatically extract to the
proper directory.
*** End ***
VISUAL BASIC FOR WINDOWS DEVELOPERS GUIDE
by D.F. Scott
(copyright 1992, Sams Publishing)
----------------------------------------------------------------------
README.TXT
----------------------------------------------------------------------
Each *.EXE file on this disk is a compressed archive that can contain
a number of files. When one of these *.EXE files is run, it will
automatically decompress and store files on your hard drive.
NOTE: You need at least 2.8 megabytes of free space on your hard drive
to install the files from this disk.
Follow these instructions to run the installation program. This program
will automatically decompress the files you need, and install them on
your C: hard drive.
1. You need to be at a DOS prompt. Double-click on the MSDOS
Prompt icon in Program Manager.
2. From the DOS prompt, set your default drive to the drive that
contains the installation disk. For example, if the A: drive
hold the disk, type A: and press the Enter key.
3. Type the following and then press the Enter key:
INSTALL drive
("drive" is the drive letter of your hard drive)
For example, INSTALL C: would install the files to your
C: hard drive.
This will install all of the files to your hard drive.
----------------------------------------------------------------------
LOCATION OF FILES:
* The Visual Basic source code from the book is in \VB-DEVGD\SOURCE.
* The compiled programs are in \VB-DEVGD\COMPILED. This directory
also contains the VBRUN200.DLL and other Visual Basic run-time
files that are needed for running the compiled programs.
* A Word for Windows help file template is stored in \VB-DEVGD\TEMPLATE.
* The DLL and EXE files for the vxBase library are stored in your Windows
directory.
* The sample data files for vxBase are stored in \VB\VXBASE\AIRPLANE
and \VB\VXBASE\SAMPLE.
* The vxBase documentation is stored in \VB\VXBASE\DOCS.
*********************************************************************
IMPORTANT! Before you use vxBase, read VXBASE.WRI (the documentation
file, in Windows Write format)
*********************************************************************
A technical note...
--------------------
The compressed files on this disk were created using version 2.13 of
the LHA utility. They are self-extracting archives, and the files are
stored with expanded filenames. They will automatically extract to the
proper directory.
*** End ***
WELCOME TO TURBO C 2.0
----------------------
This README file contains important, last minute information
about Turbo C 2.0. The HELPME!.DOC file on the COMMAND LINE/UTILITIES
disk also answers many common Technical Support questions.
TABLE OF CONTENTS
-----------------
1. How to Get Help
2. Installation
3. Important Notes
4. Corrections to the Manuals
5. Additional Notes
6. Notes for Turbo Prolog Users
7. Files on the Disks
1. HOW TO GET HELP
-------------------
If you have any problems, please read this file, the
HELPME!.DOC file, and the Turbo C manuals first. If you still
have a question and need assistance, help is available from
the following sources:
1. Type GO BOR on the CompuServe bulletin board system for
instant access to the Borland forums with their libraries of
technical information and answers to common questions.
If you are not a member of CompuServe, see the enclosed special
offer, and write for full details on how to receive a free
IntroPak containing a $15 credit toward your first month's on-
line charges.
2. Check with your local software dealer or users' group.
3. Write to us at the following address:
Borland International
Turbo C Technical Support
1800 Green Hills Road
P.O. Box 660001
Scotts Valley, CA 95066-0001
Please remember to include your serial number or we will be
unable to process your letter.
4. If you have an urgent problem that cannot wait and you have sent
in the license agreement from the front of your manual, you may
call the Borland Technical Support Department at (408) 438-5300.
Please have the following information ready before calling:
a. Product name and serial number on your original distribution
disk. Please have your serial number ready or we will be
unable to process your call.
b. Product version number. The version number for Turbo C is
displayed when you first load the program and before you
press any keys.
c. Computer brand, model, and the brands and model numbers of
any additional hardware.
d. Operating system and version number. (The version number can
be determined by typing VER at the MSDOS prompt.)
e. Contents of your AUTOEXEC.BAT file.
f. Contents of your CONFIG.SYS file.
2. INSTALLATION
----------------
The INSTALL/HELP disk contains a program called INSTALL.EXE that
will assist you with the installation of Turbo C 2.0. There are
three options for installation:
1. Hard Disk - This option allows you to pick the subdirectories
where the files will be loaded. It will create a TURBOC.CFG
file based on those directories.
2. Update from TC 1.5 - This allows for an easy update from version
1.5. After the files are copied, all the installed options
from your current TC.EXE will be transferred to the new one.
This is especially useful if you have modified the colors or
editor keys.
3. Floppy Disk - This option will build either a command line or
Integrated Development Environment version for a two drive
system. Be sure to have three formatted disks ready before
you start.
To start the installation, change your current drive to the one
that has the install program on it and type INSTALL. You will
be given instructions in a box at the bottom of the screen for
each prompt. For example, if you will be installing from drive
A:, type:
A:
INSTALL
You should read the rest of this README file to get further
information about this release before you do the installation.
3. IMPORTANT NOTES
-------------------
o The file HELPME!.DOC contains discussions of common questions
and answers concerning Turbo C 2.0. You should consult it for
answers to problems that aren't covered in this file or in
the manuals.
o If you are running INSTALL or TCINST on a laptop or any other
system that uses an LCD or composite display, you should set
your system to black and white mode before running INSTALL
or TCINST. You can do this from DOS with the following command
line:
mode bw80
or, you can force INSTALL or TCINST to come up in black and
white mode by using the /b switch:
tcinst /b
o /P PARAMETER FOR TC.EXE. A new command-line switch controls
palette swapping on EGA video adapters. Using this switch
tc /p hello
is recommended only when the user program modifies the EGA
palette registers. When /P is specified, the EGA palette will be
restored each time the screen is swapped. In general, you don't
need to use this switch unless your program modifies the EGA
palette registers, or unless your program uses BGI to change
the palette.
o A program that takes over interrupt 9 cannot be debugged
with the integrated debugger. Use the standalone Turbo Debugger
instead.
o exec() WITH NOVELL NETWORK. Versions of the Novell network
system software earlier than 2.01-2 do not support a DOS
call used by exec(), spawn(), and system(). If you are using
the Integrated Development Environment to run a program that
uses any of these functions and you have early Novell system
software, run the program from DOS. To do this from the
Integrated Development Environment you can use Alt-F/O.
o If you used the INSTALL program to upgrade from version 1.5,
or if you used CINSTXFR to transfer options from an
installation of version 1.5, check the setting of the
standard stack frame option in the Integrated Development
Environment (Alt-O/C/C/S). If you are going to use the
integrated debugger this option should be turned ON.
o If you are having problems with the call stack or qualified
names, make sure you have compiled with the standard stack
frame option turned on.
o The ANSI draft has changed the syntax of labels. A label now
must always be followed by a statement. This means that code
like this is no longer accepted:
{
.
.
.
jump_label:
}
If you have code like this, change it to look like this:
{
.
.
.
jump_label:
; /* need a statement here! */
}
o TCC has a switch to specify which assembler to look for. By
default, it will look for TASM.EXE. If you want to use a
different assembler, use -E<filename>, as described in the
Reference Guide.
o When using THELP on an AT&T 6300, be sure to use the /L25
command-line option, as described in the file THELP.DOC.
o When you use qualified variable names as described on page
57 of the User's Guide you don't need to use the module
name to access a variable that is local to a global
function. The module name is only needed when you access a
static variable or a variable that is local to a static
function.
o Because of the limited memory available in the Tiny model,
it no longer supports graphics functions.
o The Version 1.5 graphics drivers (*.BGI) are not compatible
with the Version 2.0 graphics library. Use the graphics drivers
distributed with Version 2.0.
o When used with a Zenith Z-449 card, the BGI autodetection code
will always select the 640X480 enhanced EGA mode. If you are
using the Z-449 with a monitor that is not compatible with
this mode, it will be necessary to override the GraphDriver
and GraphMode parameters used in the BGI initgraph() call.
4. CORRECTIONS TO THE MANUALS
------------------------------
REFERENCE GUIDE:
Page
159 The prototype for the function getdefaultpallette() is
incorrect. It should be
struct palettetype * far _Cdecl getdefaultpalette( void );
USER'S GUIDE:
Page
57 In the section entitled "Qualifying Variable Names," the
last sentence should read "...need to type only myfunc.myvar."
66 The directions for compiling the WORDCNT program are
incorrect. There is no WORDCNT.PRJ file; all you need to do
is load the file WORDCNT.C into the editor. Once you have
done that, the rest of the instructions are correct.
5. ADDITIONAL NOTES
--------------------
5.1 NOTES FOR VERSION 1.0 & 1.5 USERS
-------------------------------------
o You must use the Version 2.0 libraries with the 2.0 compilers.
o The Integrated Development Environment no longer displays the
message "Press any key to return to Turbo C..." when your
program terminates. Instead, at the end of your program the
User screen is replaced by the Integrated Development
Environment. To view the User screen, press Alt-F5 or
select Alt-R/S. When you are viewing the User screen,
pressing any key will return you to the Integrated
Development Environment.
o A new pseudo-variable has been added. _FLAGS now contains the
value of the flags register so you can test the flags at any
point in your program.
o The ssignal() and gsignal() functions are no longer
supported. See the section in this README on how to convert
programs that use them.
o The cprintf() function now works as documented. It does not
translate line-feeds into CR/LF combinations.
o Some compatibles had a problem under Version 1.5 because it
used interrupt 18H. Version 2.0 does not use this interrupt,
so you shouldn't encounter this problem anymore.
o The program TCINST.COM in Version 1.0 has been changed to an
.EXE file. You should delete the TCINST.COM program before
trying to run the new TCINST.EXE. Otherwise, MS-DOS will actually
run the old one.
o The FILE structure for streams in Version 1.0 (but not 1.5) has
been changed, so that the function tmpfile() could be implemented.
You should recompile any modules that use stream I/O.
5.2 THELP
----------
THELP is a memory-resident utility program that gives you
access to the Turbo C context-sensitive help system from any
program. You don't need to use THELP if you're in the
Integrated Development Environment, but it is especially useful
if you use the command line compiler and your own text editor,
or if you are debugging with the standalone Turbo Debugger. To
use THELP, load THELP.COM into memory by typing at the DOS
command line:
thelp
You activate ("pop-up") THELP by typing its hot key -- by
default numeric keypad <5>. All Turbo C help commands apply
(F1, Ctrl-F1, Alt-F1). For a complete description of THELP,
refer to THELP.DOC in the Documentation Subdirectory.
5.3 USING CINSTXFR.EXE
----------------------
Your Turbo C 2.0 package contains a program named CINSTXFR.EXE,
which can be used to transfer the configuration of the
Integrated Development Environment from your copy of Turbo C
1.5 (not for 1.0) to your new installation of Turbo C 2.0. This
program is run automatically by INSTALL.EXE if you select the
option to "Update Hard Drive Copy of Turbo C 1.5 to Turbo C 2.0."
If you prefer to do this yourself, you can run CINSTXFR.EXE from
the DOS command line.
CINSTXFR.EXE takes two arguments: the first is the name of your
Turbo C 1.5 Integrated Development Environment file (usually
TC.EXE), and the second is the name of your Turbo C 2.0
Integrated Development Environment file (also usually TC.EXE).
Either one of these names can also include a path name.
For example, if your copy of the Turbo C 1.5 Integrated
Development Environment file is named TC.EXE and is in a
directory named \TURBOC and your copy of the Turbo C 2.0
Integrated Development Environment file is also named TC.EXE
but is located in a directory named \TC2, the command line to
copy the configuration from 1.5 to 2.0 would look like this:
CINSTXFR \TURBOC\TC.EXE \TC2\TC.EXE
This will transfer all the options that you installed in
your copy of Turbo C 1.5 to your copy of Turbo C 2.0.
CINSTXFR.EXE does not work with Turbo C 1.0. If you are
upgrading from Turbo C 1.0, you will have to install the
options yourself.
5.4 CHANGED SWITCHES FOR OBJXREF
--------------------------------
OBJXREF is an object module cross reference utility and is
described on page 528 of the Turbo C Reference Guide.
The /O option (object files directory) has been changed to the
/D (directories) option. The switch now allows for multiple
search directories to be specified. The new syntax is:
OBJXREF /Ddir1[;dir2[;dir3]]
or
OBJXREF /Ddir1 [/Ddir2] [/Ddir3]
OBJXREF will search each of the directories in the specified
order for all object and library files. If no /D option is
used, only the current directory will be searched. However,
if a /D option is used, the current directory will NOT be
searched unless it is included in the directory list. For
example, to first search the BORLAND directory for files and
then search the current directory, you would type
OBJXREF /Dborland;.
If multiple search directories are specified and a file
matching the file specification is found, OBJXREF will include
the file as part of the cross-reference. OBJXREF will only
continue to search the other directories for the same file
specification if the file specification contains wildcards.
A new option has been added to allow you to specify an output
file where OBJXREF will send any reports generated. The new
option is the /O option, and has the following syntax:
OBJXREF myfile.obj /RU /Ofilename.ext
By default, all output is sent to the console.
5.5 CONVERSION INFORMATION FOR ssignal() AND gsignal()
------------------------------------------------------
Note: The C library and SIGNAL.H no longer support the ssignal()
and gsignal() functions.
ssignal() and gsignal() were from the old UNIX System III
days. The ANSI standard no longer supports them nor does the
current UNIX System V Interface Definition specification. To
ease portation problems for people moving older code to Turbo
C, we supply the source for the functions that came with TC
1.0 and TC 1.5. Also, the following discussion describes how
code can be converted to do the same sort of things that
ssignal() and gsignal() do without actually using them.
NOTE: The constants defined in SIGNAL.H for SIG_IGN and
SIG_DFL are different from the constants that were in
TC 1.0 and TC 1.5.
By using a globally declared array of function pointers, you
can simulate the actions of ssignal() and gsignal() by using
the following macros. Notice how the global table entry [0] is
used as a temporary variable in the ssignal macro allowing the
macro to swap the values and still return the original one.
int (*_sigTable[16]) =
{
SIG_IGN, SIG_IGN, SIG_IGN, SIG_IGN,
SIG_IGN, SIG_IGN, SIG_IGN, SIG_IGN,
SIG_IGN, SIG_IGN, SIG_IGN, SIG_IGN,
SIG_IGN, SIG_IGN, SIG_IGN, SIG_IGN,
};
#define ssignal(num, action) \
( \
(((num) < 1) || ((num) > 15)) ? SIG_DFL : \
( \
(_sigTable[0] = _sigTable[(num)]), /* List of actions */ \
_sigTable[(num)] = (action), /* The last expression */ \
_sigTable[0] /* is the return value */ \
) \
) \
#define gsignal(num) \
( \
(((num) < 1) || ((num) > 15)) ? 0 : \
( \
(_sigTable[(num)] == SIG_IGN) ? 1 : \
( \
(_sigTable[(num)] == SIG_DFL) ? 0 : (*_sigTable[(num)])() \
) \
) \
) \
6. NOTES FOR TURBO PROLOG USERS
--------------------------------
o If you are linking C code with programs generated by Turbo
Prolog 2.0, use the file INIT.OBJ provided on the
EXAMPLES/BGI/MISC disk of the Turbo C 2.0 package instead of
the file provided with Turbo Prolog 2.0. There have been some
changes made in Turbo C 2.0 that require the use of this new file.
o If your C code uses floating point math and you link with the
emulator library, Prolog will not automatically detect a math
coprocessor chip. If you want to force the program to use the
coprocessor, link it with FP87.LIB instead of EMU.LIB.
7. FILES ON THE DISKS
----------------------
INSTALL/HELP
------------
INSTALL EXE - Installation program
README COM - Reads this README
TCHELP TCH - Help file for Turbo C
THELP COM - Pop-up utility to access TCHELP.TCH
THELP DOC - Documentation for THELP.COM
README - This file
INTEGRATED DEVELOPMENT ENVIRONMENT
----------------------------------
TC EXE - Turbo C Compiler
TCCONFIG EXE - Program to convert configuration files
MAKE EXE - Program for managing projects
GREP COM - Turbo GREP program
TOUCH COM - Program that updates a file's date and time
COMMAND LINE/UTILITIES
----------------------
TCC EXE - Command-line version of Turbo C Compiler
CPP EXE - Turbo C preprocessor
TCINST EXE - Installation program for TC.EXE
TLINK EXE - Borland Turbo Linker
HELPME! DOC - Common questions and answers
LIBRARIES
---------
C0S OBJ - Small model startup code
C0T OBJ - Tiny model startup code
C0L OBJ - Large model startup code
MATHS LIB - Small model math library
MATHL LIB - Large model math library
CS LIB - Small model run-time library
CL LIB - Large model run-time library
EMU LIB - 8087 emulator library
GRAPHICS LIB - Graphics library
FP87 LIB - 8087 library
TLIB EXE - Borland Turbo Librarian
HEADER FILES/LIBRARIES
----------------------
???????? H - Turbo C header files
<SYS> - Subdirectory with SYS\*.H header files
C0C OBJ - Compact model startup code
C0M OBJ - Medium model startup code
MATHC LIB - Compact model math library
MATHM LIB - Medium model math library
CC LIB - Compact model run-time library
CM LIB - Medium model run-time library
EXAMPLES/BGI/MISC
-----------------
UNPACK COM - Program to unpack the .ARC files
OBJXREF COM - Object file cross-reference utility
C0H OBJ - Huge model startup code
MATHH LIB - Huge model math library
CH LIB - Huge model run-time library
GETOPT C - Parses options in command line
HELLO C - Example Turbo C program
MATHERR C - Source code for handling math library exceptions
SSIGNAL C - Source code for ssignal and gsignal functions
CINSTXFR EXE - Program to copy TC 1.5 installation to TC 2.0
INIT OBJ - Initialization code for use when linking with Prolog
BGI ARC - BGI drivers and fonts
BGIOBJ EXE - Conversion program for fonts and drivers
ATT BGI - Graphics driver for ATT400 graphics card
CGA BGI - Graphics driver for CGA
EGAVGA BGI - Graphics driver for EGA and VGA
HERC BGI - Graphics driver for Hercules
IBM8514 BGI - Graphics driver for IBM 8514 graphics card
PC3270 BGI - Graphics driver for PC3270
GOTH CHR - Font for gothic character set
LITT CHR - Font for small character set
SANS CHR - Font for sans serif character set
TRIP CHR - Font for triplex character set
BGIDEMO C - Graphics demonstration program
STARTUP ARC - ARC file with startup source code and related files
RULES ASI - Assembler include file for interfacing with Turbo C
C0 ASM - Assembler source for startup code
SETARGV ASM - Assembler source code for parsing the command line
SETENVP ASM - Assembler source code for preparing the environment
BUILD-C0 BAT - Batch file for building the startup code modules
MAIN C - Alternative, stripped-down C main file
EMUVARS ASI - Assembler variable declarations for emulator
WILDARGS OBJ - Object code for module to expand wildcard arguments
EXAMPLES ARC - Various C examples code
CPASDEMO PAS - Pascal program that demonstrates Turbo Pascal 4.0 -
Turbo C interface
CPASDEMO C - C example module for the Turbo Pascal 4.0 - Turbo C
interface demonstration
CTOPAS TC - Configuration file for use with TC.EXE that
creates Turbo C modules in the correct format
for linking with Turbo Pascal 4.0 programs
CBAR C - Example function to be used with PBAR.PRO
PBAR PRO - Example Turbo Prolog program demonstrating interface
with Turbo C
WORDCNT C - Example program demonstrating source level debugging.
NOTE: DO NOT RUN THIS PROGRAM WITHOUT READING THE
DISCUSSION IN THE MANUAL. IT CONTAINS
DELIBERATE ERRORS.
WORDCNT DAT - Data file for use by WORDCNT.C
MCALC ARC - Mcalc sources and doc
MCALC DOC - MicroCalc documentation
MCALC C - MicroCalc main program source code
MCINPUT C - MicroCalc input routines source code
MCOMMAND C - MicroCalc commands source code
MCPARSER C - MicroCalc input parser source code
MCUTIL C - MicroCalc utilities source code
MCDISPLY C - MicroCalc screen display source code
MCALC H - The header file for MicroCalc
MCALC PRJ - The MicroCalc project file
Turbo C TOOLS/2.0 Version 6.00
Turbo C TOOLS/2.0
Version 6.00
March 31, 1989
This document provides information on the installation and use of Turbo C
TOOLS/2.0. It should be used as a supplement to the manual. Please read the
Introduction and "Using Turbo C TOOLS" in the manual. Then read this file
for information specific to your C compiler and to this version of Turbo C
TOOLS.
Copyright (C) Blaise Computing Inc. 1989. All rights reserved.
The PACKING.LST file lists the files supplied and the diskettes and
subdirectories where they reside.
OUTLINE OF THIS FILE
Compiler Versions and Memory Models Supported
Manual Changes
Warnings and Usage Notes
Troubleshooting
Extracting the Source Code
Printing the Source Code
Removing Tabs From the Source Code
Rebuilding the Libraries
Rebuilding the Sample Programs
C and Assembly Modules and Macros
Construction Notes
COMPILER VERSIONS AND MEMORY MODELS SUPPORTED
This version of Turbo C TOOLS supports Turbo C versions 1.00, 1.50, and 2.00.
For information about later versions of the Turbo C compiler, check the
bulletins enclosed with Turbo C TOOLS or contact Blaise Computing.
Tiny (T) model: Turbo C TOOLS does not officially support the T model.
However, many modules in the S model library (TCT_T2S.LIB) will work
correctly in T model programs.
Huge (H) model: For many programs using the H model, you can use the L model
library (TCT_T2L.OBJ), especially if they contain no interrupt service
routines (ISRs) or intervention code. However, if you need support for data
objects larger than 65,535 bytes or if your program malfunctions, then
recompile the library using the H memory model. See "Rebuilding the
Libraries" below.
The following files are specific to particular memory models. The same files
support Turbo C versions 1.00, 1.50, and 2.00, with a few exceptions listed
below under "Warnings and Usage Notes". The columns of the table are
explained below.
Blaise Computing Inc. March 31, 1989 Page 1
Turbo C TOOLS/2.0 Version 6.00
"Native "No Mouse
Memory Model Library Windows" COMPILER.MAC Support"
------------ ----------- ---------- ------------ ------------
S TCT_T2S.LIB NW_T2S.OBJ COMP_T2S.MAC BNOMOUSE.OBJ
M TCT_T2M.LIB NW_T2M.OBJ COMP_T2M.MAC BNOMOUSE.OBJ
C TCT_T2C.LIB NW_T2C.OBJ COMP_T2C.MAC BNOMOUSE.OBJ
L TCT_T2L.LIB NW_T2L.OBJ COMP_T2L.MAC BNOMOUSE.OBJ
Memory Model: This affects the maximum data and code size in your program
and the nature of data and code pointers. In the Turbo C Integrated
Environment (TC.EXE), the memory model is specified via the
Options/Compiler/Model switch; the default is S model unless you save a
different configuration. With the command-line version (TCC.EXE), the
memory model is specified via the /m command line switch; the default is S
model.
Library: These files are precompiled versions of all the Turbo C TOOLS
functions. To link them into your programs, specify the proper library
file on the compiler or linker command line or in your project file.
"Native Windows" file: Programs linked with this optional object file
coordinate all their Turbo C TOOLS window operations with the Turbo C text
window. This object file requires Turbo C version 1.50 or later. Read
the section on "Turbo C's Text Window" in the chapter on window functions
(prefix WN).
COMPILER.MAC file: This specifies the memory model for Turbo C modules
written in assembly language. If you reassemble any Turbo C assembler
modules, first copy the correct file to COMPILER.MAC.
"No Mouse Support" file: Programs linked with BNOMOUSE.OBJ are prevented
from including the mouse functions MOCHECK, MOHIDE, and MOPRECLK. If your
program uses menus, WNREAD, or the help system, and if you don't want to
use the mouse, then linking with BNOMOUSE.OBJ will make your program
slightly smaller. Notice that the same BNOMOUSE.OBJ file supports all
memory models.
MANUAL CHANGES
The following are important changes to the manual. The changes have already
been made in the online reference database.
Pages 36 (WNEXAMPL.C) and 54 (MNEXAMPL.C) -- The constants CYAN and MAGENTA
should be replaced by SC_CYAN and SC_MAGENTA, respectively.
Page 60 -- The MN_NOWRAP action bit has been added. Its bit value is 0x4000.
It has the effect of suppressing wraparound for the MN_UP, MN_DOWN,
MN_RIGHT, MN_LEFT, MN_NEXT, and MN_PREVIOUS motions.
The following motions have been added:
Symbol Value Motion
---------- ----- ------------------------------------------
MN_PGUP 0x00a Move upward the height of the viewport.
MN_PGDN 0x00b Move downward the height of the viewport.
MN_PGRIGHT 0x00c Move rightward the width of the viewport.
MN_PGLEFT 0x00d Move leftward the width of the viewport.
Blaise Computing Inc. March 31, 1989 Page 2
Turbo C TOOLS/2.0 Version 6.00
Page 61 -- The following default key assignments have been added:
Keystroke ASCII value Key code Action(s) Motion
---------------- ----------- -------- --------- -----------
PgUp 0 73 MN_PGUP
PgDn 0 81 MN_PGDN
Ctrl-right arrow 0 116 MN_PGRIGHT
Ctrl-left arrow 0 115 MN_PGLEFT
Enhanced Keyboard:
PgUp 224 73 MN_PGUP
PgDn 224 81 MN_PGDN
Ctrl-right arrow 224 116 MN_PGRIGHT
Ctrl-left arrow 224 115 MN_PGLEFT
Enter 13 224 MN_TRANSMIT
Page 75 -- The sample help source file you should study is SHOWHELP.TXT.
SHOWHELP.HLP is its binary version.
Page 126 -- To use malloc() inside a TSR program, you can use a new function
called ISRESERV instead of the cumbersome method described in the manual.
Read the description of ISRESERV in the ISRESERV.DOC file or in the online
reference database.
ISRESERV is useful for the near heap in the T, S, and M memory models and
the far heap in the C, L, and H models. To reserve space on the far heap
in the T, S, and M models, create a new function based on ISRESERV.C and
in the new function replace malloc() and free() with farmalloc() and
farfree(), respectively.
Page 156 (EDFIELD) -- There is an additional fifth argument: "pfinal". The
calling sequence now is:
int edfield(const char *pinitstr,
char *pretstr,
int retsize,
const ED_CONTROL *pctrl,
KEY_SEQUENCE *pfinal);
"pfinal" is the address of a structure in which to report the final
keystroke, or NIL if no report is desired.
Pages 183 (HLDISP) and 190 (HLREAD) -- If the "pfinal" argument is the NIL
pointer, then no information is returned via "pfinal", and the returned
value of the function is always NIL, regardless of whether an error is
detected.
Pages 231 (KBQUERY) and 467 (WNQUERY) -- The value returned in *pkey has
changed: now it is always the key code (scan code) of the terminating
keystroke. The value of the function is always the character code of the
terminating keystroke.
Pages 254 (MNDSTROY) and 480 (WNREMOVE) -- When setting the Turbo C text
window to the entire screen, the text color is not changed. Therefore the
text color may remain the same as the last selected window.
Page 371 (STPEXPAN) -- None of its arguments should have the "const"
modifier.
Page 412 (UTSQZSCN) -- The data type of the "psource" argument is now "const
char far *".
Blaise Computing Inc. March 31, 1989 Page 3
Turbo C TOOLS/2.0 Version 6.00
Page 421 (UTUNSQZ) -- The data type of the "psource" argument is now "const
char *".
Page 454 (WNFIELD) -- WNFIELD returns an immediate error if any portion of
the window's viewport is covered by any other viewport. There is an
additional sixth argument: "pfinal". The calling sequence now is:
int wnfield(BWINDOW *pwin,
const char *pinitstr,
char *pretstr,
int retsize,
const ED_CONTROL *pctrl,
KEY_SEQUENCE *pfinal);
"pfinal" is the address of a structure in which to report the final
keystroke, or NIL if no report is desired.
Page 472 (WNREAD) -- A new argument called "pfinal" has been added. The
calling sequence is now as follows:
WN_EVENT *wnread(BWINDOW *pwin,
const WHERE *pwhere,
int view_ht, int view_wid,
int org_row, int org_col,
const BORDER *pbord,
WN_EVENT *pfinal,
int option);
"pfinal" is the address of a structure to receive a copy of the final
event the user performed, or NIL if no copy is desired. The returned
value of the function is also changed: it is a copy of "pfinal", or NIL
if failure.
Page 533 -- Change in behavior for global variable b_ega: After you call
SCEQUIP, the b_ega global variable will contain the value SC_ABSENT (-2)
if a Video Graphics Array (VGA) or PS/2 Display Adapter is installed.
Under Turbo C TOOLS version 5, b_ega would contain SC_MONO (0) or SC_COLOR
(1) if a VGA was present because the VGA emulates all the EGA's
functionality.
Page 534 -- Internal functions with changed calling sequences include
MNTRUNC, WNNUPBLK, WNPIMBLK, and WNPUTIMG.
Page 538 -- The "EB" notation marks new keystrokes that are translated by the
traditional BIOS services into their traditional equivalents, as well as
keystrokes that are discarded by the traditional BIOS services.
Page 556 -- The global variables b_mnmohoriz and b_mnmovert report the
character column and row (respectively) where the final mouse event took
place under MNREAD or MNLREAD. They are expressed in terms of character
cells, not pixels. They contain 0xffff if the final event was a
keystroke.
Page 562 -- New internal function: WNSETATR sets the Turbo C text window's
attribute.
WARNINGS AND USAGE NOTES
STACK CHECKING IN ISRs -- Stack overflow checking is not permitted in either
interrupt service routines (ISRs) or intervention functions in the T, S,
and M memory models of Turbo C version 2.00 and later. Stack checking is
also prohibited in all functions called by the affected ISRs and
intervention functions. (Note: Stack checking occurs only if you set the
Blaise Computing Inc. March 31, 1989 Page 4
Turbo C TOOLS/2.0 Version 6.00
O/C/Code/Test Stack option (in the Integrated Environment) or specify the
-N command line option when compiling your program.)
FLPROMPT AND MOCHECK UNDER TURBO C 1.0 -- If your program uses FLPROMPT or
MOCHECK under Turbo C version 1.0, then you should recompile FLPROMPT.C
and/or MOCHECK.C under version 1.0 and link with the resulting .OBJ
file(s). (MOCHECK is used to detect mouse clicks and is used in HLDISP,
HLREAD, MNREAD, and WNREAD. MOCHECK is suppressed if you link with
BNOMOUSE.OBJ.)
INTERVENTION CODE ON DOS VERSION 2 -- Please read "Foreground and Background
Programs and Their Privileges" on page 122 of the Turbo C TOOLS Reference
Manual. The intervention scheduler does not set the current process on
DOS version 2. Therefore, intervention functions in background programs
on DOS version 2 should avoid DOS memory allocation. In addition, they
should open and reclose their files each time they are invoked.
INTERVENTION CODE ON NON-IBM VERSIONS OF DOS -- If you specify IV_DOS_NEED
when installing an intervention function, the scheduler will postpone
invoking the intervention function if an interrupt 0x24 (critical error)
is in progress. The location of the interrupt 0x24 busy flag varies
between different versions of DOS. If you encounter a problem using
intervention code on a non-IBM version of DOS, please contact Blaise
Computing.
SCROLLING MONOCHROME DISPLAY PAGES -- The BIOS scroll function normally
obtains the attribute for the new blank rows by examining the previous
location of the cursor. The Enhanced Graphics Adapter supports multiple
display pages on the Monochrome Display. On monochrome display pages
beyond page 0, BIOS scrolling works improperly in that the attribute of
the new blank rows is obtained from page 0 instead of the active page.
This affects SCTTYWIN, SCTTYWRT, and VISCROLL.
TROUBLESHOOTING
Please also read Appendix A in the manual. Here are some additional symptoms
and explanations to consider when diagnosing problems:
Abnormal program termination.
This can occur if the startup module cannot allocate sufficient space for
the stack and the near heap. If you are initializing the global variables
"_stklen" and "_heaplen", try smaller values.
Text appears in incorrect color.
When MNDSTROY and WNREMOVE set the Turbo C text window to the entire
screen, they do not change the text color. Therefore text later emitted
via the Turbo C text window functions may have the colors of the last
selected window.
Asynch overruns during mouse operations.
Since the Microsoft mouse operates via hardware interrupts, it is possible
that mouse movements and button presses and releases will cause overrun
errors during the arrival of data at the serial ports. First test whether
overruns occur without the use of Turbo C TOOLS. The internal function
MOCATCH disables interrupts for a significant period of time; this
function is installed when you use HLDISP, HLREAD, MOCHECK, MNREAD, or
WNREAD. If overruns are a severe problem, contact Blaise Computing.
Blaise Computing Inc. March 31, 1989 Page 5
Turbo C TOOLS/2.0 Version 6.00
EXTRACTING THE SOURCE CODE
The source code for the library is supplied in the form of two
self-extracting archive programs: TCTSRC1.EXE and TCTSRC2.EXE. The full
contents of both files are listed in the PACKING.LST file.
To extract the contents of either file, set the current drive and directory
to the drive and directory where you want to put the files. Then execute the
self-extracting archive program, as in the following example:
a:tctsrc1
To extract only a selection of the files in an archive, you can use ambiguous
filenames, as in the following example, which extracts all the source code
for the window (WN) functions:
a:tctsrc2 wn*.*
PRINTING THE SOURCE CODE
The CONCAT.COM utility for printing the source code is described in the
manual's chapter on "Using Turbo C TOOLS". As an additional aid, lists are
provided for each category of source files. For example, the ST.FIL file
lists all the source files for the string (ST) functions. You can use this
file when formatting all the ST files as follows:
concat st.prt <st.fil
REMOVING TABS FROM THE SOURCE CODE
The source modules were saved with consecutive blank spaces compressed to tab
characters, with tab stops every eight characters. The EXPAND.COM utility is
provided to expand the tabs back to blank spaces if you wish. It is also
useful for removing tabs from help source files.
EXPAND is a filter: it obtains its input from the standard input device and
writes its output to standard output. Therefore you can use it by
redirecting standard input and output, as in the following example:
expand <wnexampl.c >wnexampl.ntb
The resulting file WNEXAMPL.NTB has tab characters expanded to strings of
blanks.
REBUILDING THE LIBRARIES
A batch file, BUILDLIB.BAT, and a librarian response file, LIBRESP, are
provided to make it easy to reconstruct the Turbo C TOOLS libraries. The
batch file makes a number of assumptions. If these are not appropriate for
your environment, you should alter the batch file to match your system. The
assumptions are:
All source files (.C and .ASM) and the LIBRESP file are in the current
directory;
Blaise Computing Inc. March 31, 1989 Page 6
Turbo C TOOLS/2.0 Version 6.00
BEGINASM.MAC and COMP_T2?.MAC are in the MAC subdirectory;
The C language header files (.H) are in the \TURBOC\INCLUDE directory;
The Turbo C command-line compiler (TCC.EXE), the Turbo Assembler
(TASM.EXE), and the Turbo Librarian (TLIB.EXE) are either in the
current directory or in one of the directories specified in the PATH=
environment entry.
BUILDLIB is invoked with the command
buildlib model
where "model" is either s, m, c, l, or h (in lower case) to indicate the
memory model. The batch file compiles and assembles all source modules by
category (to make it easy for you to recompile just some categories), and
then invokes the librarian to create the library. For example, to
reconstruct the small memory model library, issue the command
buildlib s
REBUILDING THE SAMPLE PROGRAMS
The MAKEXPLS file is designed for use with the Turbo MAKE utility to rebuild
the eighteen sample programs. It makes the following assumptions:
The sample program source files are in the current directory.
All Turbo C and Turbo C TOOLS header files are in the \TURBOC\INCLUDE
directory.
All libraries are in the \TURBOC\LIB directory.
The Turbo C command-line compiler (TCC.EXE) and the Turbo Linker
(TLINK.EXE) are either in the current directory or in one of the
directories listed in the PATH= environment entry.
For rebuilding TCWIN.EXE, the batch file MAKTCWIN.BAT must be either in
the current directory or in one of the directories listed in the PATH=
environment entry; also the proper NW_T2?.OBJ file must be in the
\TURBOC\LIB directory.
Invoke the make file by issuing the following command to rebuild a single
example program
make -fmakexpls mnexampl.exe
or the following command to rebuild all eighteen:
make -fmakexpls
Blaise Computing Inc. March 31, 1989 Page 7
Turbo C TOOLS/2.0 Version 6.00
C AND ASSEMBLY MODULES AND MACROS
The following tables list which functions are implemented in C, which in
assembly language, and which are macros defined in the header files. The
tables also list certain anomalous source files.
The following functions are implemented as ordinary C functions, each in its
corresponding .C file:
edbase isprep mnhilit0 mospeed scttywin wnchgevn wnremevn
edbuffer isremove mnhilite mostat scttywrt wncover wnremove
edchgkey isreserv mnitem prcancel scwrap wncreat0 wnresprv
edinitky issense mnitmkey prerror scwrite wncurmov wnretevn
edreduce ivdetect mnkey prgetq stpcvt wncurpos wnretinf
edremkey ivdisabl mnlitem prinstld stpexpan wncurset wnrevupd
edretinf ivinstal mnlitkey prspool stpjust wncursor wnscrblk
edretkey ivsense mnmchitm scapage stptabfy wncurtrk wnscrlbr
edsetcur ivvecs mnmchkey scattrib stpxlate wndstroy wnscroll
edwrap kbequip mnmouse scblink stschind wnerror wnseldev
edwrrect kbextend mnmstyle scborder utansi wnforget wnselect
edzapkey kbflush mnread scbox utcrit wngetimg wnsetbuf
fldolock kbgetkey mnvalmn0 scchgdev utctlbrk wngetopt wnsetcur
flflush kbkcflsh mnvdisp scclrmsg utgetclk wnhide wnsetopt
flgetdta kbpoll moavoid sccurset utmovmem wnhoriz wnshoblk
fllock kbquery mobutton sccurst utnulchk wninitev wnunhide
flnorm kbqueue mocheck scequip utsafcpy wnneedup wnupdate
flprompt kbset mocurmov scgetvid utsleep wnnupblk wnvalev0
flputdta kbstuff moequip scmode utspkr wnorigin wnvalno0
flremvol kbwait mogate scmode4 utsqzscn wnovrlap wnvalwi0
flretvol mmctrl mogetmov scnewdev uttim2tk wnpgadd wnvdisp
flsetvol mmfirst mograph scpages uttk2tim wnpgrem wnwrap
hlclose mmsize mohandlr scpal1 utunsqz wnpimblk wnwrbuf
hldisp mnatr mohard scpalett viatrect wnpoll wnwrrect
hlfrindx mncreat0 mohide scpclr vihoriz wnprintf wnwrstrn
hllookup mndefkey moinst scpgcur viptr wnputbor wnwrttyx
hlopen mndisabl mojump scread virdsect wnputsen wnzapevn
hlpas2c mndlitms molitpen screstpg viscroll wnquery wnzapsen
hlread mndlkeys mopreclk scrows viwrsect wnrdbuf
iscurprc mndstroy morange scsavepg wnatrblk wnread
isinstal mnfindsl mosoft scsetvid wnatrstr wnredraw
The following functions are implemented in assembly language, each in its
corresponding .ASM file:
iscall ivctrl kbready utamove utmodel
isdispat kbplace mocatch utintflg vidirec0
Blaise Computing Inc. March 31, 1989 Page 8
Turbo C TOOLS/2.0 Version 6.00
The following routines are implemented as macros, defined in the header files
shown here:
Macro Definition | Macro Definition | Macro Definition
-------- ---------- | ---------- ---------- | -------- ----------
edfield bedit.h | utdosmajor butil.h | utpokeb butil.h
isgetvec bintrupt.h | utdosminor butil.h | utpoken butil.h
isputvec bintrupt.h | utdosrdy butil.h | utpokew butil.h
isresext bintrupt.h | utdosver butil.h | utpspseg butil.h
kbscanof bkeybrd.h | uthibyte butil.h | utrange butil.h
kbstatus bkeybrd.h | uthinyb butil.h | utseg butil.h
max butil.h | uthiword butil.h | utsign butil.h
min butil.h | utinp butil.h | utskip butil.h
mncreate bmenu.h | utintoff butil.h | utsound butil.h
mndsplay bmenu.h | utinton butil.h | utspkoff butil.h
mnlread bmenu.h | utlobyte butil.h | utspkon butil.h
moreset bmouse.h | utlonyb butil.h | uttofar butil.h
prchar bprint.h | utlowlim butil.h | uttofaru butil.h
prinit bprint.h | utloword butil.h | utuplim butil.h
prstatus bprint.h | utmax butil.h | utwdlong butil.h
scclrmsg bscreens.h | utmin butil.h | vidspmsg bvideo.h
scpage bscreens.h | utnorm butil.h | virdrect bvideo.h
utabs butil.h | utnybbyt butil.h | viwrrect bvideo.h
utalarm butil.h | utoff butil.h | wnattr bwindow.h
utalloc butil.h | utoutp butil.h | wncreate bwindow.h
utbound butil.h | utpeekb butil.h | wndsplay bwindow.h
utbyword butil.h | utpeekn butil.h | wnfield bwindow.h
utchknil butil.h | utpeekw butil.h | wnwrstr bwindow.h
utcopy butil.h | utplong butil.h | wnwrtty bwindow.h
The following functions do not have their own source files, but are defined
in the source files shown here:
Function Defined | Function Defined
-------- ---------- | -------- ----------
b_vidcpy scnewdev.c | ivdisk ivctrl.asm
ivbiosky ivctrl.asm | ivdos ivctrl.asm
ivcbreak ivctrl.asm | ividle ivctrl.asm
ivcom1 ivctrl.asm | ivkeybd ivctrl.asm
ivcom2 ivctrl.asm | ivtimer ivctrl.asm
The following source files are not named for any individual function:
BNOMOUSE.ASM defines substitute versions of MOCHECK, MOHIDE, and MOPRECLK.
See the section "Excluding Mouse Support" in the chapter on mouse
support functions (prefix MO).
NW.C defines versions of WNCHKDM, WNCMOVE, WNGETATR, WNSETATR, and
WNSETWIN that make contact with the Turbo C text window. NW.C is the
source module for the NW_T2?.OBJ files.
WNNATVWN.C defines versions of WNCHKDM, WNCMOVE, WNGETATR, WNSETATR, and
WNSETWIN that do not use the Turbo C text window. It is the source
file for the WNNATVWN.OBJ modules in the libraries.
Blaise Computing Inc. March 31, 1989 Page 9
Turbo C TOOLS/2.0 Version 6.00
The following source files define no functions:
KBSCANOF.C defines the b_keycod[] array, which is referenced by the
KBSCANOF macro.
MOVARS.C defines the global variables b_mocatch, b_modispat, b_mohanmask,
and b_momask.
SCPAGE.C defines the b_curpage global variable, which is referenced by the
SCPAGE macro.
CONSTRUCTION NOTES
All C modules and example programs were compiled with version 2.0 of the
Turbo C command-line compiler (TCC) using the following switches: -c
(compile only), -m (memory model), -O (optimize jumps), and -w (enable all
warnings). All assembler modules were assembled with version 1.0 of the
Turbo Assembler (TASM) using the /mx and /w+ switches. The libraries were
built with version 2.0 of the Turbo Librarian (TLIB) using the /0 switch.
(The /0 librarian switch omits unnecessary debugging and autodependency
information.)
The example programs were linked with TLINK version 2.0 using no switches.
(For a list of supplied files and the diskettes and subdirectories where they
reside, see the PACKING.LST file.)
=== End of README.DOC ===
Blaise Computing Inc. March 31, 1989 Page 10
Welcome to Turbo C ++
---------------------
This README file contains important information about Turbo C++.
For the latest information about Turbo C++, the accompanying
programs, and the manuals, read this file in its entirety.
TABLE OF CONTENTS
-----------------
1. How to Get Help
2. Installation
3. Features
4. Important Information
5. Testing Your Expanded Memory
6. Corrections to the Documents
7. TCTOUR
8. Files on the Disks
1. HOW TO GET HELP
-------------------
If you have any problems, please read this file, the
HELPME!.DOC file, and the Turbo C++ manuals first. If you still
have a question and need assistance, help is available from
the following sources:
1. Type GO BPROGB on the CompuServe bulletin board system for
instant access to the Borland forums with their libraries of
technical information and answers to common questions.
If you are not a member of CompuServe, see the enclosed special
offer, and write for full details on how to receive a free
IntroPak containing a $15 credit toward your first month's on-
line charges.
2. Check with your local software dealer or users' group.
3. Write to us at the following address:
Borland International
Turbo C Technical Support
1800 Green Hills Road
P.O. Box 660001
Scotts Valley, CA 95066-0001
Please remember to include your serial number or we will be
unable to process your letter.
4. If you have an urgent problem that cannot wait and you have sent
in the license agreement that came with the package, you may
call the Borland Technical Support Department at (408) 438-5300.
Please have the following information ready before calling:
a. Product name and serial number on your original distribution
disk. Please have your serial number ready or we will be
unable to process your call.
b. Product version number. The version number for Turbo C++
can be displayed by pressing Alt-Space/A.
c. Computer brand, model, and the brands and model numbers of
any additional hardware.
d. Operating system and version number. (The version number can
be determined by typing VER at the MSDOS prompt.)
e. Contents of your AUTOEXEC.BAT file.
f. Contents of your CONFIG.SYS file.
2. INSTALLATION
---------------
You MUST use the INSTALL program to install Turbo C++.
The files on the distribution disks are all archived and
have to be properly assembled. You cannot do this by
hand!
To start the installation, change your current drive to the one
that has the install program on it and type INSTALL. You will
be given instructions in a box at the bottom of the screen for
each prompt. For example, if you will be installing from drive
A:, type:
A:
INSTALL
You should read the rest of this README file to get further
information about this release before you do the installation.
3. FEATURES
-----------
- C++! Turbo C++ offers you the full power of C++ programming,
implementing the entire C++ 2.0 language as defined by the AT&T
specification. To help you get started, we're also including
C++ class libraries.
- ANSI C! A 100% implementation of the ANSI C standard.
- Borland's new Programmer's Platform. The Programmer's Platform
is a new generation user interface; it goes beyond the old
integrated environment (IDE) to provide access to the full range of
programs and tools on your computer. It includes:
-- mouse support
-- multiple overlapping windows
-- a multi-file editor
-- user-configurable menu entries to run other programs
without leaving Turbo C++
- VROOMM (overlay manager): VROOMM lets you overlay your code
without complexity. You select the code segments for
overlaying; VROOMM takes care of the rest, doing the work
needed to fit your code into 640K.
- An online tour of the new Programmer's Platform.
- Online hypertext help, with copy-and-paste program examples
for practically every function.
- Many indispensable library functions, including heap checking
functions and a complete set of complex and BCD math functions.
4. IMPORTANT INFORMATION
------------------------
C++ STREAM I/O
The standard libraries have all the functions needed for
the IOSTREAM libraries defined in the AT&T 2.0 spec. If
you have code that uses the STREAM libraries from the 1.0
spec, you must link with the appropriate OLDSTRMx.LIB
file, where 'x' is replaced by the letter for the
appropriate memory model:
oldstrms.lib -- small model
oldstrmc.lib -- compact model
oldstrmm.lib -- medium model
oldstrml.lib -- large model
oldstrmh.lib -- huge model
EXAMPLE PROGRAMS
When you are running any example programs that come with
.PRJ files, if you didn't use the standard directories when
you installed Turbo C++ you will have to change the .PRJ file
to reflect your actual directory setup. Do this from inside
TC with Alt-O/D.
Included in this release is source code to the GREP2MSG and
TASM2MSG filter programs (in EXAMPLES), which give an example of
how to write your own custom filter programs to use with the
Transfer Menu (see page 64 of the User's Guide).
COMPILER AVAILABLE MEMORY
To achieve better capacity and flexibility, Turbo C++ uses VROOMM,
which means that the reported "available memory" number (both with
the standalone compiler and in the integrated development environment)
reflects the actual amount of RAM available to VROOMM for the entire
compiler. What this means is that even when the reported available
memory approaches or is equal to zero, much larger files can still
be compiled at the expense of compilation speed. In the Programmer's
Platform, when memory available for VROOMM reaches zero, the compile
box will show "Swapping ...." as the amount of available memory; the
standalone compiler will merely report "Available memory 0" in this case.
OVERLAYS AND ASSEMBLY LANGUAGE
Just as all "C" modules to be linked into an overlaid executable must
be compiled with the -Y compiler switch, all assembly language modules
need to be assembled with the -O TASM switch. If an assembly file is
the result of a TCC compilation, TCC automatically passes -O to the
assembler whenever -Y is used. Modules written entirely in assembly
language must be assembled with the -O switch (using TASM version 2.0
or newer) if they are to be linked into an overlaid executable. Failure
to follow these rules may result in the overlaid program failing
unpredictably when run.
IMPORTANT NOTES
- If you use inline assembler in C++, TASM 1.0 may not be able
to assemble the generated code. If you run into this problem,
you will need to update to version 2.0 of TASM.
- Functions that return structures now take a hidden
parameter that contains the address where the returned
structure is to be placed. If you are writing assembler
code to link with C code you must be sure to allow for
this extra parameter.
- When debugging mouse application the Options|Debugging|Display
Swapping option should be set to "Always" for best results.
- When running under DOS versions 2.0 or 2.1, you should not rename
TC, TCC, or TLINK. They need to know their names to be able to
load their overlays.
- TEMC will not allow a macro to contain multiple commands that return
exit codes.
- C++ programs that use either of the stream libraries will not link
correctly if you compile with the -K command-line switch (default
char is unsigned) or with the corresponding option in the Programmer's
Platform ( Alt-Options/Compiler/Code Generation/Unsigned characters).
- Example 2 for the signal() function in the Reference Guide uses
an extension to signal() that is not supported in C++, so the
example will not compile as a C++ program.
- If you have selected Save Desktop in the Turbo C++ Programmer's
Platform, everything that you put into the clipboard will be saved
as part of the desktop. After several sessions this may make
starting the Programmer's Platform take longer. If this happens
to you (you will see the message "Loading Desktop" while the
Programmer's Platform is loading), you can speed things up by
deleting unneeded things from the clipboard. Just select Alt-E/S
to show the clipboard, and start deleting.
- In some rather unusual situations when stepping through
a program in the IDE you may get a message saying "Line
too complex". This means that the Programmer's Platform
can't step past the line it is currently on. To continue
stepping, you should move the cursor to the next line in
the program and press F4 (Go to Cursor). If the line where
this message occurs is the last line in a function, use
the Call Stack (Ctrl-F3 or Alt-D/C) to see where the function
was called from, select the calling function (by moving the
highlight to it and pressing Enter), move the cursor to the
next line, and press F4.
- If you change your keyboard settings using the Editor Commands
choice in TCINST, you may lose some key assignments. To avoid
this, use the following procedure:
1) don't save the modifications to the EXE; instead invoke
TCINST with the name of your configuration file, by default
TCCONFIG.TC.
2) create a file containing the following line:
Tab: SmartTab;
and invoke TEMC with the name of that file and the name
of your configuration file as arguments.
As an example, you can follow these exact steps:
CD \TC\BIN
TCINST TCCONFIG.TC
<make changes, save, and exit TCINST>
COPY CON TEMP.TEM
Tab: SmartTab;
<Ctrl-Z>
TEMC TEMP.TEM TCCONFIG.TC
5. Testing Your Expanded Memory: EMSTEST.COM
--------------------------------------------
Included with Turbo C++ is a program to test your Expanded Memory
hardware and software. If you have problems using Turbo C++ with
your EMS, type EMSTEST at the DOS prompt and follow the instructions.
6. Corrections to the Documents
--------------------------------
GETTING STARTED
- Chapter 4, Page 61: The operator precedence and associativity
tables should be corrected to match the following information.
Note there are now sixteen precedence categories. Operators within
a category have the same precedence. Precedence goes from highest
to lowest; therefore, any operator in category 1 has precedence
over any operator in categories 2 through 16; any operator in
category 2 has precedence over any operator in categories 3
through 16, and so on.
Operators Associativity
--------------------------------------------------
1. ( ) [ ] -> :: . Left to right
2. ! ~ + - ++ -- & *
(typecast) sizeof new delete Right to left
3. .* ->* Left to right
4. * / % Left to right
5. + - Left to right
6. << >> Left to right
7. < <= > >= Left to right
8. == != Left to right
9. & Left to right
10. ^ Left to right
11. | Left to right
12. && Left to right
13. || Left to right
14. ?: (conditional expression) Right to left
15. = *= /= %= += -= &=
^= |= <<= >>= Right to left
16. , Left to right
USER'S GUIDE
- Chapter 1, Page 69: The $TASM macro has another macro inside it; to
wit, $SAVE CUR.
- Chapter 4: There is one new command-line compiler option: -V.
The -V option controls the C++ virtual tables. You have four
variations of the -V option:
-V Smart C++ virtual tables
-Vs Local C++ virtual tables
-V0 External C++ virtual tables
-V1 Public C++ virtual tables
-V is equivalent to the Programmer's Platform command Smart C++ Virtual
Tables. Use it when you want to generate C++ virtual tables and
inline functions not expanded inline so that only one instance of a
given virtual table or inline function will be included in the
program. This produces the smallest and most efficient executables,
but uses .OBJ and .ASM extensions only available with TLINK 3.0 and
TASM 2.0 or newer.
-Vs is equivalent to the Programmer's Platform command Local C++ Virtual
Tables. Use it when you want Turbo C++ to generate local virtual
tables and inline functions not expanded inline such that each module
gets its own private copy of each virtual table or inline function it
uses. This option uses only standard .OBJ (and .ASM) constructs, but
produces larger executables.
-V0 and -V1 cooperate to produce global virtual tables. If you don't
want to use the Smart or Local options (-V or -Vs), you can use -V0
and -V1 to produce and reference global virtual tables. -V0 generates
external references to virtual tables and inline functions not
expanded inline. -V1 produces global tables and inline functions.
One of the modules in the program must be compiled with the -V1 option
to supply the definitions for the virtual tables and inline functions.
All other modules should be compiled with the -V0 option to refer to
that Public copy of the virtual tables and inline functions.
- Appendix A, Page 230: The WindowsMenu macro is now called the
WindowMenu macro (no s). It works as documented.
PROGRAMMER'S GUIDE
- In Chapter 1, on page 75: the operator precedence table should be
changed in accordance with the notes above for the Getting Started
manual.
- In Chapter 4, on page 200, just after the table, add the following
information. It replaces the list of information on segment pointers
on pages 199-200, and also replaces the two sentences (on page 200,
following the table) describing the _seg modifier.
Segment pointers
Use _seg in segment pointer type declarators. The resulting pointers
are 16-bit segment pointers. The syntax for _seg is:
<datatype> _seg *<identifier> ;
For example,
int _seg *name;
Any indirection through <identifier> has an assumed offset of 0. In
arithmetic involving segment pointers the following rules hold true:
1. You can't use the ++, --, +=, or -= operators with segment
pointers.
2. You cannot subtract one segment pointer from another.
3. When adding a near pointer to a segment pointer, the result is a
far pointer that is formed by using the segment from the segment
pointer and the offset from the near pointer. Therefore, the two
pointers must either point to the same type, or one must be a pointer
to void. There is no multiplication of the offset regardless of the
type pointed to.
4. When a segment pointer is used in an indirection expression, it is
also implicitly converted to a far pointer.
5. When adding or subtracting an integer operand to or from a segment
pointer, the result is a far pointer, with the segment taken from
the segment pointer and the offset found by multiplying the size
of the object pointed to by the integer operand. The arithmetic is
performed as if the integer were added to or subtracted from the far
pointer.
6. Segment pointers can be assigned, initialized, passed into and out
of functions, compared and so forth. (Segment pointers are compared
as if their values were unsigned integers.) In other words, other
than the above restrictions, they are treated exactly like any other
pointer.
- Also in Chapter 4, page 200, just before "Declaring functions to be
near or far," add the following text:
Declaring far objects
You can declare far objects in Turbo C++. For example,
int far x = 5;
int far z;
extern int far y = 4;
static long j;
Turbo C++ creates a separate segment for each far object. The
command-line compiler options -zE, -zF, and -zH (which can also be set
using #pragma option) affect the far segment name, class, and group,
respectively. When you change them with #pragma option, you can change
them at any time and they apply to any ensuing far object declarations.
Thus you could use the following sequence to create a far object in a
specific segment:
#pragma option -zEmysegment -zHmygroup -zFmyclass
int far x;
#pragma option -zE* -zH* -zF*
This will put x in segment MYSEGMENT 'MYCLASS' in the group 'MYGROUP',
then reset all of the far object items to the default values. Note
that by using these options, several far objects can be forced into a
single segment:
#pragma option -zEcombined -zFmyclass
int far x;
double far y;
#pragma option -zE* -zF*
Both x and y will appear in the segment COMBINED 'MYCLASS' with no
group.
LIBRARY REFERENCE
- The examples printed in the Library Reference may not
necessarily match what's in the help file and on the
distribution disks. The help file and distribution disk
examples are the most current.
- Page 43: The return value for function bioskey has been changed. For
subfunction ONE the return value is zero if no key is waiting,
0xFFFF(-1) if control-break was pressed, or the normal code for
any other key.
7. TCTOUR
---------
TCTOUR is a visual introduction to the new Programmer's Platform.
Since the Programmer's Platform is Borland's newest interface,
taking the tour is time well spent even if you are already familiar
with other Borland products.
To start the tour, type "TCTOUR" from the DOS prompt.
- TCTOUR remembers what lessons a user has completed, and if
you quit a lesson before completing it, what screen # you last saw.
This information is stored in a .USR file, and can be recalled by
starting TCTOUR again and typing your user name at the prompt just
after the color rainbow.
Lessons that a user has completed should show up without shading
on the main TCTOUR menu. Only new users (no .USR file) get the
excursion through "Using Tour."
- The Navigator can be pulled up within any lesson file and within
"Using TCTOUR", but nowhere else. It is pulled up by pressing the
Control key, which allows you to move forward, backward, to the
beginning of a lesson, to the end of a lesson, to the lesson summary,
to the main menu, to get a reminder, to quit. Ctrl-B (backwards) is
disabled when you are on the first slide of a lesson.
- Hints (or Reminders) pop up in any lesson files and in "Using TCTOUR".
They pop up if:
1) you wait 30 - 60 seconds before doing any action
2) you press Ctrl-R
3) you make an incorrect action
8. FILES ON THE DISKS
---------------------
DISK 1
------
INSTALL EXE - Installation program
README COM - Reads this README
UNZIP EXE - Program to unzip the .ZIP files
HELP CA2 - File used by install program to create TCHELP.TCH
TOUR ZIP - Turbo C++ demonstration program
TCTOUR EXE - Demonstration program
TCTOUR OVL - Overlay for TCTOUR.EXE
TCTOUR0 CBT - Data file for demonstration program
TCTOUR1 CBT - Data file for demonstration program
TCTOUR2 CBT - Data file for demonstration program
TCTOUR3 CBT - Data file for demonstration program
TCTOUR_M CBT - Data file for demonstration program
TCTOUR_P CBT - Data file for demonstration program
TCTOUR_S CBT - Data file for demonstration program
TCTOUR_U CBT - Data file for demonstration program
README - This file
DISK 2
------
TC CA1 - File used by install program to create TC.EXE
DISK 3
------
HELP CA1 - File used by install program to create TCHELP.TCH
DISK 4
------
TC CA2 - File used by install program to create TC.EXE
TCALC ZIP - Tcalc sources and doc
TCALC C - TurboCalc main program source code
TCALC DOC - TurboCalc documentation
TCALC H - The header file for TurboCalc
TCALC PRJ - The TurboCalc project file
TCDISPLY C - TurboCalc screen display source code
TCINPUT C - TurboCalc input routines source code
TCOMMAND C - TurboCalc commands source code
TCPARSER C - TurboCalc input parser source code
TCUTIL C - TurboCalc utilities source code
TCC ZIP - Command-line compiler
TCC EXE - Command-line version of Turbo C++ Compiler
DISK 5
------
BGI ZIP - Graphics drivers
ATT BGI - Graphics driver for ATT400 graphics card
BGIDEMO C - Graphics demonstration program
BGIOBJ EXE - Conversion program for fonts and drivers
CGA BGI - Graphics driver for CGA
EGAVGA BGI - Graphics driver for EGA and VGA
GOTH CHR - Font for gothic character set
HERC BGI - Graphics driver for Hercules
IBM8514 BGI - Graphics driver for IBM 8514 graphics card
LITT CHR - Font for small character set
PC3270 BGI - Graphics driver for PC3270
SANS CHR - Font for sans serif character set
TRIP CHR - Font for triplex character set
BIN1 ZIP - Miscellaneous binary files
CPP EXE - Turbo C++ preprocessor
EMSTEST COM - Utility program for detecting expanded memory
MAKE EXE - Program for managing projects
TCINST EXE - Installation program for TC.EXE
TLIB EXE - Borland Turbo Librarian
TLINK EXE - Borland Turbo Linker
BIN2 ZIP
GREP COM - Turbo GREP program
GREP2MSG EXE - GREP filter program for IDE
OBJXREF COM - Object file cross-reference utility
PRJCNVT EXE - Utility to convert from Turbo C 2.x project files
to Turbo C++ project files
TASM2MSG EXE - TASM filter program for IDE
TEMC EXE - Turbo editor macro compiler
THELP COM - Pop-up utility to access TCHELP.TCH
TOUCH COM - Program that updates a file's date and time
TRIGRAPH EXE - Trigraph conversion utility
DISK 6
------
HLIB ZIP - Huge model libraries
C0H OBJ - Huge model startup code
CH LIB - Huge model run-time library
MATHH LIB - Huge model math library
OLDSTRMH LIB - C++ 1.x stream library for huge model
LLIB ZIP - Large model libraries
C0L OBJ - Large model startup code
CL LIB - Large model run-time library
MATHL LIB - Large model math library
OLDSTRML LIB - C++ 1.x stream library for large model
SLIB ZIP - Small model libraries
C0S OBJ - Small model startup code
C0T OBJ - Tiny model startup code
CS LIB - Small model run-time library
MATHS LIB - Small model math library
OLDSTRMS LIB - C++ 1.x stream library for small model
STARTUP ZIP - Startup code files
BUILD-C0 BAT - Batch file for building the startup code modules
C0 ASM - Assembler source for startup code
RULES ASI - Assembler include file for interfacing with
Turbo C++
DISK 7
------
CLIB ZIP - Compact model libraries
C0C OBJ - Compact model startup code
CC LIB - Compact model run-time library
MATHC LIB - Compact model math library
OLDSTRMC LIB - C++ 1.x stream library for compact model
EXAMPLES ZIP - Example programs
BARCHART C - C example file
CPASDEMO C - C example module for the Turbo Pascal - Turbo C++
interface demonstration
CPASDEMO PAS - Pascal program that demonstrates Turbo Pascal -
Turbo C++ interface
CIRCLE CPP - C++ example file
CIRCLE PRJ - Project file for CIRCLE.CPP
CTOPAS CFG - Command-line configuration file for Turbo Pascal -
Turbo C++ interface
CTOPAS PRJ - Project file for use with TC.EXE that
creates Turbo C++ modules in the correct format
for linking with Turbo Pascal programs
DCOPY CPP - C++ example file
DEF CPP - C++ example module used by DICTION.CPP
DEF H - Header file for DEF.CPP
DEF2 CPP - C++ example - another version of DEF.CPP
DEF2 H - Header file for DEF.CPP
DICTION CPP - C++ example program
DICTION H - Header file for DICTION.CPP
DYNPOINT CPP - C++ example file
DYNPOINT PRJ - Project file for DYNPOINT.CPP
EX?????? PRJ - C++ example programs
EX?????? PRJ - Project files for C++ example programs
FIGDEMO CPP - C++ example file
FIGDEMO PRJ - Project file for FIGDEMO.CPP
FIGURES CPP - C++ example file
FIGURES H - Header file for FIGURES.CPP
FILTER H - Header file for TASM2MSG.C and GREP2MSG.C
GAME C - C example - simulated baseball game
GETOPT C - Parses options in command line
GREP2MSG C - Example program for Turbo C++ filters
HELLO C - Example Turbo C++ program
INTRO??? C - Examples from Getting Started manual
LIST CPP - C++ example program - linked list implementation
LIST H - Header file for LIST.CPP
LIST2 CPP - Another version of LIST.CPP
LIST2 H - Header file for LIST2.CPP
LISTDEMO CPP - C++ example file
LISTDEMO PRJ - Project file for LISTDEMO.CPP
MATHERR C - Source code for handling math library exceptions
MCIRCLE CPP - C++ example file
MCIRCLE PRJ - Project file for MCIRCLE.CPP
PIXEL CPP - C++ example file
PIXEL PRJ - Project file for PIXEL.CPP
PLANETS C - C++ graphics example
PLOTEMP C - C graphics example
PLOTEMP1 C - C graphics example - bar graphs
PLOTEMP2 C - C example - modification of PLOTEMP1.C
PLOTEMP3 C - C example - modification of PLOTEMP2.C
PLOTEMP4 C - C example - modification of PLOTEMP3.C
PLOTEMP5 C - C example - modification of PLOTEMP4.C
PLOTEMP6 C - C example - modification of PLOTEMP5.C
POINT CPP - C++ example program
POINT H - Header file for POINT.CPP
POINT2 CPP - C++ example program
SALESTAG C - C example from Chapter 4 of Getting Started
SOLAR C - C example from Chapter 4 of Getting Started
STACK CPP - C++ example program - stack implementation
STACK H - Header file for STACK.CPP
STACK2 CPP - Another version of STACK.CPP
STACK2 H - Header file for STACK.CPP
STRING CPP - C++ example program
TASM2MSG C - Example program for Turbo C++ filters
VCIRC CPP - C++ example program
VCIRC PRJ - Project file for VCIRC.CPP
VPOINT CPP - C++ example program
VPOINT H - Header file for VPOINT.CPP
XSTRING CPP - C++ example program
INCLUDE ZIP - Turbo C++ header files
???????? H - Header files
MLIB ZIP - Medium model libraries
C0M OBJ - Medium model startup code
CM LIB - Medium model run-time library
MATHM LIB - Medium model math library
OLDSTRMM LIB - C++ 1.x stream library for medium model
DISK 8
------
DOC ZIP - Miscellaneous documentation
HELPME! DOC - Answers to commonly asked questions
OLDSTR DOC - Information about C++ 1.x streams
UTIL DOC - Information about Turbo C++ utilities
THELP DOC - Information about THELP.EXE
CLASSEXM ZIP - C++ class library example files
DIRECTRY CPP - Directory class example file
DIRECTRY H - Header file for DIRECTRY.CPP
DIRECTRY PRJ - Project file for DIRECTRY.CPP
FILEDATA CPP - FileData class example file
FILEDATA H - Header file for FILEDATA.CPP
LOOKUP CPP - Lookup table example
LOOKUP PRJ - Project file for LOOKUP.CPP
QUEUETST CPP - Queue class example file
QUEUETST PRJ - Project file for QUEUETST.CPP
REVERSE CPP - String class example file
REVERSE PRJ - Project file for REVERSE.CPP
STRNGMAX CPP - String class example file
STRNGMAX PRJ - Project file for STRNGMAX.CPP
TESTDIR CPP - Directory example file
CLASSINC ZIP - Include files for C++ class library
???????? H - Header files
CLASSLIB ZIP - C++ class library
TCLASSS LIB - Library file for C++ classes
CLASSSRC ZIP - Source files to C++ class library
ABSTARRY CPP - Abstract array class definitions
ARRAY CPP - Basic array class definitions
ASSOC CPP - Association class (used by dictionary class)
BAG CPP - Bag class definitions
BUILD BAT - Batch file for building class library
CLASSLIB DOC - C++ class library documentation
CLASSLIB RSP - Response file for building class library
COLLECT CPP - Ordered collection class definitions
CONTAIN CPP - Container class definitions
DBLLIST CPP - Doubly linked list class definitions
DEQUE CPP - Dequeue definitions for queue class
DICT CPP - Dictionary class definitions
HASHTBL CPP - Hash table class definitions
LDATE CPP - Date class definitions
LIST CPP - List class definitions
LTIME CPP - Time class definitions
OBJECT CPP - Base class for other objects
QUEUE CPP - Queue class definitions
SET CPP - Set class definitions
SORTABLE CPP - Sorted table class definitions
SORTARRY CPP - Sorted array class definitions
STACK CPP - Stack class definitions
STRNG CPP - String class definitions
XLIB ZIP - Math and utility libraries
EMU LIB - 8087 emulator library
FP87 LIB - 8087 library
GRAPHICS LIB - Graphics library
OVERLAY LIB - Overlays library
WILDARGS OBJ - Object code for module to expand wildcard arguments
Welcome to Turbo C++ Version 3.0
--------------------------------
This README file contains important information about Turbo C++.
For the latest information about Turbo C++ and its accompanying
programs and manuals, read this file in its entirety.
TABLE OF CONTENTS
-----------------
1. How to Get Help
2. Installation
3. Features
4. Important Information
5. Testing Your Expanded Memory
6. Corrections to the On-line Help
1. HOW TO GET HELP
-------------------
If you have any problems, please read this file, the
HELPME!.DOC and other files in your DOC subdirectory, and the
Turbo C++ manuals first. If you still have a question and need
assistance, help is available from the following sources:
1. Type GO BPROGB on the CompuServe bulletin board system for
instant access to the Borland forums with their libraries of
technical information and answers to common questions.
If you are not a member of CompuServe, see the enclosed
special offer, and write for full details on how to receive
a free IntroPak containing a $15 credit toward your first
month's on-line charges.
2. Check with your local software dealer or users' group.
3. Borland's TECHFAX service. Call (800) 822-4269 for a FAX
catalog of entries.
4. If you have an urgent problem that cannot wait and you have
sent in the license agreement that came with the package,
you may call the Borland Technical Support Department at
(408) 438-5300. Please have the following information ready
before calling:
a. Product name and serial number on your original
distribution disk. Please have your serial number ready
or we will be unable to process your call.
b. Product version number. The version number for Turbo
C++ can be displayed by pressing Alt-H/A.
c. Computer brand, model, and the brands and model numbers of
any additional hardware.
d. Operating system and version number. (The version number
can be determined by typing VER at the DOS prompt.)
e. Contents of your AUTOEXEC.BAT file.
f. Contents of your CONFIG.SYS file.
2. INSTALLATION
----------------
You MUST use the INSTALL program to install Turbo C++. The
files on the distribution disks are all archived and have to be
properly assembled. You cannot do this by hand!
IMPORTANT!
If you want to create backup copies of your disks, make sure
that you put the backup on the same type of disk as the
source. If you're backing up the 5 1/4 inch 1.2 Mb disk set,
use only blank 5 1/4 inch 1.2 Mb disks for backup, etc. The
installation will not work correctly if you do not use the
same media type for the backup disks.
To start the installation, change your current drive to the one
that has the install program on it and type INSTALL. You will
be given instructions in a box at the bottom of the screen for
each prompt. For example, if you will be installing from drive
A:, type:
A:
INSTALL
- This INSTALL handles the installation of both the compiler
and tools in one operation, and allows several new
configuration options.
- After installation, make sure you insert \TC\BIN - or
whatever you selected as your BIN directory - into
your DOS path so the executable files can be found.
- Note: The list of files is contained in a separate file
called FILELIST.DOC, which will appear in the target
directory you specify during installation.
- After your initial installation, you can run INSTALL again to
add elements you omitted the first time. Just select the
items you want to add in the INSTALL options screen. Because
some things you may want to save could be overwritten, review
the following items to make sure you don't lose important
information:
1. Selecting CMD (the Command-line compiler) causes an
overwrite of any existing turboc.cfg & tlink.cfg file
with path information provided in that INSTALL session.
Any switches other than -L (library path) and -I
(include path) will not be preserved.
2. Selecting IDE will reset the include and library paths
to those provided in that INSTALL session.
3. By selecting any one of the following, the help file
paths and choices for THELP.CFG will reflect the current
session's installation choices:
a. CMD - command-line compiler
b. IDE - integrated environment
4. Alterations to headers or startup files will be
overwritten if any library models are selected.
In general, any selection you make of something installed
earlier will cause an overwrite of the earlier version
without prompting.
You should read the rest of this README file to get further
information about this release before you do the installation.
3. FEATURES
------------
Turbo C++ 3.0 includes big speed and capacity gains. Here are
some important features found in this version:
- DPMI services for increased capacity
- C++ 2.1 support, including the new nested class specifications,
and support of C++ 3.0 templates.
- Support for pre-compiled headers for substantial time savings
during subsequent recompiles.
- Color syntax highlighting
- Unlimited Undo/Redo replacing previous 'restore line' capability
- Added library functions for compatibility with other runtime
libraries, and addition of support for long double parameters
in math functions. (Please refer to On-line Help for details.)
- New MAKE features. (Please see the MAKE chapter in the User's
Guide for details.)
- Added BGI (Borland Graphics Interface) fonts and support. (See
"New BGI fonts" below.)
- A resident DPMI kernel program, DPMIRES.EXE. (See "DPMI" below.)
- THELP now allows you to switch between help files without
unloading and reloading. (Please see UTIL.DOC for details.)
NEW BGI FONTS
-------------
Several new fonts have been added to the Borland Graphics Interface:
Name Value Description
-------------------------------------------
SCRIPT_FONT 5 Stroked script font
SIMPLEX_FONT 6 Stroked simplex font
TRIP_SCR_FONT 7 Stroked triplex script font
COMPLEX_FONT 8 Stroked complex font
EURO_FONT 9 Stroked European font
BOLD_FONT 10 Stroked bold font
The fonts in the BGI now support the full ASCII character set.
DPMI
----
TC.EXE, TCC.EXE, and TLINK.EXE are now hosted under DPMI. These files
support protected-mode compilation and replace the files of the same
name in Turbo C++ Second Edition. Turbo C++ Second Edition should
continue to be used in instances where real-mode compilation is desired.
If you encounter a "machine not in database" message while attempting
to run the compiler, run the DPMIINST program to add your machine
configuration to the DPMI server database.
This version includes a resident DPMI host program, DPMIRES.EXE, that
allows you to preload the server before invoking TC, TCC, or any other
DPMI-hosted executables. If you want to run such hosted EXEs in a
Windows Standard Mode DOS window, you should run DPMIRES.EXE before
loading Windows. To do this, enter the following commands at DOS:
set DPMIMEM=MAXMEM 2000
dpmires
win /s
If you want to limit the amount of extended memory used by the
DPMI-hosted executables, an environment variable called DPMIMEM
can be set to do so. For instance, the command
set DPMIMEM=MAXMEM 2000
reserves about 2 Mb of memory for DPMIRES. The number after MAXMEM
can be adjusted, but cannot be lower than 1000.
The hosted executables cannot spawn each other when SHARE is loaded.
For instance, if you run MAKE on a file which in turn calls MAKE
again, you will get a sharing violation. In this specific case,
you can call the real mode version, MAKER, within the given makefile,
and a sharing violation won't occur.
4. IMPORTANT INFORMATION
-------------------------
- When using Brief with THELP, make sure to use Brief's -p
switch to ensure that the thelp window will be visible.
- We recommend that you use the following mouse drivers with
this product:
Microsoft Mouse version 7.04 or later;
Logitech Mouse version 5.01 or later;
Genius Mouse version 9.06 or later.
- If you get a "floating point formats not linked" message at
runtime, put the following somewhere in your source files:
extern void _floatconvert();
#pragma extref _floatconvert
This will force inclusion of floating point formats, which
may not be linked to reduce executable size.
COMPILER
- The default extension for source files to the command-line
compiler is .CPP; that is, if you enter
TCC -c test
the compiler will search for test.cpp, and give an error if a
file of that name cannot be found. If you want to have the
command-line compiler assume a .c extension and C language
source, use the command-line option -P-c. For more
information, see "The command-line compiler" in the User's
Guide.
- Note that the Generate COMDEFs choice under
Options|Compiler|Advanced Code Generation and the -Fc command-
line option are only supported in the C language. Linker errors
will result if you attempt to use a communal variable in C++.
- The macros min() and max() are not defined when stdlib.h is
compiled as C++ (to allow their use in 3rd party libraries,
etc.).
- Note that SYMDEB creates .SYM files for use in debugging;
Turbo C++ creates .SYM files for pre-compiled headers. They
are not compatible and collisions should be avoided by
setting the name of the pre-compiled header file (using -
H=filename).
- There is now full support of distance modifiers (near and
far) used for class member pointers. Here are two sample
declarations and their meanings:
void (A::* far var) ();
this is a far variable 'var' of type 'void (A::*)()';
void (far A::* var) ();
this is a 'default distance' variable 'var' of type
'void (far A::*)()'
- If you use C++ templates, and use a separate TLINK command
line rather than letting TCC invoke TLINK, you should make
sure that you turn on case-sensitive links with the /c switch.
- Incorrect code will be generated if you have a statement of
the type "A op B" where either A or B is an enum and the
other operand is a long, and "op" is one of the following
operators:
+= -= *= /= | ^
The same problem applies when the operands are a non-integer
enum and an int. Cast the enum to long or int respectively
to solve the problem.
IDE
- When debugging a mouse application the Options|Debugger|Display
Swapping option should be set to "Always" for best results.
- In the IDE, the mouse cursor is turned off during compilation
for performance improvements.
- To run or debug an overlaid application in the IDE when DOS
SHARE is loaded, the .EXE file must first be marked as
read-only. Otherwise, unload SHARE.
- Pressing Control-Break twice while running or stepping a
program from the IDE may cause unexpected results. In
particular, avoid pressing Control-Break twice in response
to any function requiring input (scanf, getch, etc.). To
break out of a program during such interaction, press
Control-Break and enter a valid input string. Control will
be returned to the IDE.
EXAMPLE PROGRAMS
- When you are running any example programs that come with .PRJ
files, if you didn't use the standard directories when you
installed Turbo C++ you will have to change the .PRJ file
to reflect your actual directory setup. Do this from inside
Turbo C++ with Alt-O/D.
LINKING C++ WITH C
- Linking C++ modules with C modules requires the use of a
linkage specification. Prototypes for C functions within C++
modules must be in one of the following forms:
extern "C" declaration
extern "C" { declarations }
For example, if a C module contains these functions:
char *SCopy(char*, char*);
void ClearScreen(void)
they must be declared in a C++ module in one of the
following ways:
extern "C" char *SCopy(char*, char*);
extern "C" void ClearScreen(void);
or
extern "C" {
char *SCopy(char*, char*);
void ClearScreen(void);
}
Failure to do so will result in "Undefined symbol" errors
during link. For further examples, see the standard header
files.
CLASS LIBRARY
- Two versions of the class libraries are provided; one that
includes debug information and one that does not. Small
versions of each are provided, and project files are
provided to build other models. Note that the non-debug
versions are used by default. If you would like to use the
debug version, copy it to the non-debug file. For instance,
in the CLASSLIB\LIB directory, copy TCLASDBS.LIB to
TCLASSS.LIB for the small model version.
- In some places the User's Guide incorrectly refers to the
online documentation for the Container Class Libraries as
CONTAIN.DOC. The correct file name is CLASSLIB.DOC, located
in the ..\DOC directory.
5. TESTING YOUR EXPANDED MEMORY: EMSTEST.COM
---------------------------------------------
Included with Turbo C++ is a program to test your Expanded
Memory hardware and software. If you have problems using
Turbo C++ with your EMS, type EMSTEST at the DOS prompt and
follow the instructions.
6. CORRECTIONS TO THE ON-LINE HELP
-----------------------------------
The information for alloca is not available in on-line help.
The correct help screen should read as follows:
------------------------------------------------------------------
Function: alloca
Allocates temporary stack space
Syntax:
#include <malloc.h>
void *alloca(size_t size);
Remarks:
alloca allocates bytes on the stack. The allocated space is
automatically freed up when the calling function exits.
Return value:
o On success (if enough stack space is available), returns a
pointer to the allocated stack area.
o On error, returns null.
Argument size is the number of bytes allocated on the stack.
Because alloca modifies the stack pointer, do no place calls to
alloca in an expression that is an argument to a function.
NOTE: If the calling function does not contain any references to
local variables in the stack, the stack won't be resotored
correctly when the function exits and your program will crash.
To ensure that the stack is restored correctly, use this code in
your calling function:
char *p;
char dummy[1];
dummy[0] := 0;;
...
p = alloca(nbytes);
Because alloca is not defined in ANSI C, you should use malloc
instead.
See also:
malloc
------------------------------------------------------------------
Welcome to Turbo C++ for Windows
--------------------------------
This README file contains important information about Turbo C++
for Windows. For the latest information about Turbo C++ for
Windows and its accompanying programs and manuals, read this
file in its entirety.
TABLE OF CONTENTS
-----------------
1. How to Get Help
2. Installation
3. Features
4. Important Information
5. Testing Your Expanded Memory
6. Corrections to the Documents
1. HOW TO GET HELP
-------------------
If you have any problems, please read this file, the
HELPME!.DOC and other files in your DOC subdirectory, and the
Turbo C++ for Windows manuals first. If you still have a
question and need assistance, help is available from the
following sources:
1. Type GO BPROGB on the CompuServe bulletin board system for
instant access to the Borland forums with their libraries of
technical information and answers to common questions.
If you are not a member of CompuServe, see the enclosed
special offer, and write for full details on how to receive
a free IntroPak containing a $15 credit toward your first
month's on-line charges.
2. Check with your local software dealer or users' group.
3. Borland's TECHFAX service. Call (800) 822-4269 for a FAX
catalog of entries.
4. If you have an urgent problem that cannot wait and you have
sent in the license agreement that came with the package,
you may call the Borland Technical Support Department at
(408) 438-5300. Please have the following information ready
before calling:
a. Product name and serial number on your original
distribution disk. Please have your serial number ready
or we will be unable to process your call.
b. Product version number. The version number for Turbo
C++ for Windows can be displayed by pressing Alt-H/A.
c. Computer brand, model, and the brands and model numbers of
any additional hardware.
d. Operating system and version number. (The version number
can be determined by typing VER at the MSDOS prompt, or
use the Windows utility WINVER for the Windows version.)
e. Contents of your AUTOEXEC.BAT file.
f. Contents of your CONFIG.SYS file.
2. INSTALLATION
----------------
You MUST use the INSTALL program to install Turbo C++ for
Windows. The files on the distribution disks are all archived
and have to be properly assembled. You cannot do this by hand!
Turbo C++ for Windows includes a Windows installation program
that will create the appropriate subdirectories and copy the
software on to your hard disk. To run the installation program
from Drive A type
WIN A:INSTALL
or, if Windows is active, select the program manager's File|Run
command and type
A:INSTALL
Note that this version of the installation program runs under
Windows standard or 386 Enhanced modes only. After
installation, make sure you insert \TCWIN\BIN - or whatever you
selected as your BIN directory - into your DOS path
so the DLL and executable files can be found.
If you use a screen saver such as After Dark or Borland's Screenery,
you should disable it before running the INSTALL program.
- Note: The list of files is contained in a separate file
called FILELIST.DOC, which will appear in the target
directory you specify during installation.
- Make sure you select the "LAN Windows configuration" option
if Windows is executed from your network.
- If you have previously installed Resource Workshop, make sure
that you remove the directory of that version from your path. The
version included on these disks supercedes previous versions.
- If you use a Windows command shell other than Program Manager,
you may not get a Turbo C++ group installed for Windows. If
you don't, use File|New in Program Manager (or the equivalent
command in your shell) to add items for the following files:
Description EXE file Default path
----------- -------- ------------
TURBO C++ TCW.EXE C:\TCWIN\BIN
WORKSHOP WORKSHOP.EXE C:\TCWIN\BIN
IMPORT LIB IMPLIBW.EXE C:\TCWIN\BIN
DEBUG TDW.EXE C:\TCWIN\BIN
FCONVERT FCONVERT.EXE C:\TCWIN\BIN
You should read the rest of this README file to get further
information about this release before you do the installation.
3. FEATURES
------------
Turbo C++ for Windows 3.0 includes complete support for Windows
programming, as well as big speed and capacity gains. Here are
some important features:
- A Windows hosted IDE (TCW.EXE), including a class hierarchy
browser.
- Turbo Debugger support for breakpoints with multiple conditions
and for viewing selectors.
- C++ 2.1 support, including the new nested class specifications,
and support of C++ 3.0 templates.
- Added library functions for compatibility with other runtime
libraries, and addition of support for long double parameters
in math functions. (Please see the Library Reference for details.)
- EasyWin, which includes library support for stdio.h and
conio.h functions under Windows. (Please see the Turbo C++
for Windows User's Guide for details.)
- FCONVERT.EXE - Converts OEM to ANSI Character Set
DOS text files use the OEM character set; Windows text
files generally use the ANSI character set. The demo
program, FCONVERT.EXE converts data back and forth between
these formats. The only text files that will be affected
are those containing international characters (ASCII values
above 128) like the umlaut, etc. Not all OEM characters are
present in the ANSI character set, and vice versa.
Therefore, converting between these character sets may
produce a mapping that is not reversible. Refer to your
Windows documentation for further information about ANSI
vs. OEM character sets.
- IMPLIBW.EXE, a Windows-hosted import librarian.
- ObjectWindows Library, an application framework that will ease
the development of applications for Windows.
4. IMPORTANT INFORMATION
-------------------------
- Turbo C++ for Windows only supports Protected Mode Windows target
files.
- If you get a "floating point formats not linked" message at
runtime, put the following somewhere in your source files:
extern void _floatconvert();
#pragma extref _floatconvert
This will force inclusion of floating point formats, which
may not be linked to reduce executable size.
- Make sure that you use the Options|Compiler|Entry|
Windows <DLL> explicit functions exported when using the
fastcall modifier. The same applies when using the fastcall
compilation option (Options|Compiler|Entry|Register.)
COMPILER
- Note that the Generate COMDEFs choice under
Options|Compiler|Code Generation is only supported in the C
language. Linker errors will result if you attempt to use a
communal variable in C++.
- The macros min() and max() are not defined when stdlib.h is
compiled as C++ (to allow their use in 3rd party libraries,
etc.).
- Note that SYMDEB creates .SYM files for use in debugging;
Turbo C++ for Windows creates .SYM files for pre-compiled
headers. They are not compatible and collisions should be
avoided by setting the name of the pre-compiled header file
(using -H=filename).
- There is now full support of distance modifiers (near and
far) used for class member pointers. Here are two sample
declarations and their meanings:
void (A::* far var) ();
this is a far variable 'var' of type 'void (A::*)()';
void (far A::* var) ();
this is a 'default distance' variable 'var' of type
'void (far A::*)()'
- You must use "smart callbacks" - Options|Compiler|Entry/Exit
Code|Windows smart callbacks - if your application uses
classes whose code is in a DLL. This applies especially in
the case of a class implemented in an EXE which is derived
from another implemented in a DLL, which normally applies for
users of OWL and other object-oriented class libraries.
IDE
- If you run File|Printer setup from the IDE (or another Windows
application which has printer setup support) under the Windows
3.0 debugging kernel, you will get a System Error from Windows.
You must switch to the NODEBUG version to run this option.
EXAMPLE PROGRAMS
- When you are running any example programs that come with .PRJ
files, if you didn't use the standard directories when you
installed Turbo C++ for Windows you will have to change the
.PRJ file to reflect your actual directory setup. Do this
from inside Turbo C++ for Windows with Alt-O/D.
LINKING C++ WITH C
- Linking C++ modules with C modules requires the use of a
linkage specification. Prototypes for C functions within C++
modules must be in one of the following forms:
extern "C" declaration
extern "C" { declarations }
For example, if a C module contains these functions:
char *SCopy(char*, char*);
void ClearScreen(void)
they must be declared in a C++ module in one of the
following ways:
extern "C" char *SCopy(char*, char*);
extern "C" void ClearScreen(void);
or
extern "C" {
char *SCopy(char*, char*);
void ClearScreen(void);
}
Failure to do so will result in "Undefined symbol" errors
during link. For further examples, see the standard header
files.
TURBO DEBUGGER
- You cannot set a window message breakpoint by using a window
handle in an ObjectWindows application. You can, however, set
window message breakpoints with ObjectWindows applications:
enable ObjectWindows support (use TDWINST and choose
Options|Source Debugging|OWL Window Messages), then use
window object names to set message breakpoints.
- The first time a program is run under TDW, mouse messages are
processed normally. However, on every subsequent execution of
that program, you must press a key on the keyboard before
mouse messages can be processed.
Super VGA support
=================
TDW handles most of the popular 2, 4, and 16-color high-
resolution Super VGA modes. If your card isn't supported
correctly, or if you want to debug in a 256-color mode, you'll
need to use a special Super VGA DLL.
Currently, the following DLLs are supplied with your language
compiler to support these SVGA cards and modes:
TSENG.DLL (TSENG ET-3000 /ET-4000 based cards)
640x480x256
800x600x256
1024x768x256
ATI.DLL (ATI VGA Wonder card)
640x480x256 (See the NOTE below)
800x600x256
To use a Super VGA DLL, copy the appropriate DLL file into the
directory that contains the TDW executable (usually the BIN
subdirectory of your language compiler directory) and rename it
to TDVIDEO.DLL.
TDW, upon loading, looks for TDVIDEO.DLL in the same directory
that harbors TDW.EXE. If it finds the file, TDW accesses the
DLL as it's needed. TDW makes calls to the DLL to handle the
entire video screen switching context. The DLL accomplishes the
screen switching by allocating a buffer as it gets loaded.
Graphic screen contents are then saved to this buffer as TDW
enters text mode. The DLL restores the graphics screen from
this buffer as TDW exits text mode. Memory allocated for the
buffer is freed when the DLL is unloaded.
If there is an error loading TDVIDEO.DLL, or if the DLL doesn't
support the selected card or mode, TDW will report the error in
a Windows dialog box. When this happens, TDW will unload
TDVIDEO and exit. If this situation occurs, delete TDVIDEO.DLL,
or select a mode that is supported by the DLL.
If you're debugging an application that's been built with
EasyWin, you may see incorrect screen painting as you step over
lines of code that make calls to STDIO functions. In this case,
edit the TDVIDEO.INI file and set the Int2FAssist option to
"yes" (see the NOTE below).
NOTE: The ATI mode 640x480x256 and EasyWin applications may
require some special handling. An option called Int2FAssist
in the TDVIDEO.INI file allows this mode to work correctly on
most systems. The behaviour is as follows: When you set
"Int2FAssist=yes", TDVIDEO makes Windows tell all sub-windows
on the screen to re-paint themselves as the DLL is loaded.
This allows the user screen to be viewed when Stepping,
Tracing, or Running your application. It will not, however,
switch to the user screen when you press <Alt-F5> since TDW
is still in control (it doesn't allow Windows to process any
messages). If you also set "SaveWholeScreen=yes", then <Alt-
F5> will show the user screen (TDVIDEO will now copy the
screen for you). The drawback to enabling SaveWholeScreen is
that it will take longer to Step or Trace if TDW needs to
switch back to the user screen for that particular
instruction. Also, extra messages are getting passed to your
application that normally would not be passed. This may
effect the debugging of certain pieces of code (like finding
a bug in an owner-draw procedure). In these cases, you will
not want to use this video mode.
TDVIDEO.INI
-----------
You can create the file TDVIDEO.INI with any ASCII text editor.
This file is used to control how TDVIDEO.DLL functions.
TDVIDEO.INI must be located in WINDOW's main directory (usually
C:\WINDOWS). The options in TDVIDEO.INI are handled by the DLL
itself and are therefore subject to change with newer versions
of the DLLs. The DLLs use the following options, written in any
order, under the heading [VideoOptions]:
SaveWholeScreen -- default = 'no'
Int2FAssist -- default = 'no'
DebugFile -- default = '' (no logging will occur)
The SaveWholeScreen and Int2FAssist can be set to either 'yes'
or 'no'. DebugFile can be either blank, or it can be set to a
specific filename.
*** SaveWholeScreen ***
This option, normally set to 'no', determines whether the
entire screen (512k - 64k from 8 planes) will be saved (the
entire graphics screen is cleared when switching to it) or if
only the top 32K of planes 0 through 3 will be saved (the
entire screen is NOT cleared when switching modes.)
Saving the whole screen is rarely needed, but is provided in
case you're using a nonstandard card that needs the whole
screen to be saved.
*** Int2FAssist ***
This option, normally set to 'no', tells TDVIDEO, to make a
special Int 2F call before switching video modes. This call
tells the current Windows screen driver (VGA.DRV for standard
VGA mode) what's happening. The desired side-effect of this
call is to make Windows tell all of its child windows to re-
paint themselves. This option is provided only for support on
an ATI Super VGA video mode and for applications built using
EasyWin (see NOTE above). However, be aware, that this option
can affect the other supported modes if it's enabled (use
this option only if absolutly necessary).
*** DebugFile ***
TDVIDEO.DLL normally doesn't save any debugging information.
If you're having problems using a special DLL, the DebugFile
option can be used to specify the path and filename of a log
file. Information logged to this file can be used if you need
to contact Borland's Technical Support. Information logged
consists of the Date/Time, the version of the DLL, the name
of the Windows screen driver that is currently in use, the
state of all .INI options, and a listing of all the calls to
the DLL's functions.
For example, if you want your DLL to save the entire screen
and log information to a file named C:\WINDOWS\TDVIDEO.LOG,
create a file called TDVIDEO.INI in the WINDOWS directory
that contains the following commands:
[VideoOptions]
SaveWholeScreen=yes
DebugFile=c:\windows\tdvideo.log
CLASS LIBRARY
- If you used the add(), addAt(), or getItemsInContainer()
member functions of the Array class in Turbo C++ for Windows
2.0 applications, note that their behavior has changed
slightly. The following rules apply to these and related
functions:
1. add() will insert its argument at the lowest available
location in the Array. This location is known as the
"insertion point".
2. detach() will remove its argument from the Array, and if
that Object is located below the insertion point, it
will move the elements above the Object being removed
and below the insertion point down one position, so that
the elements below the insertion point remain
contiguous. The insertion point, of course, moves down
one.
3. if the location specified in a call to addAt() is below
or at the insertion point, the elements above the
specified location and below the insertion point are
moved up one position, and the Object is inserted. The
insertion point moves up one.
4. if the location specified in a call to addAt() is above
the insertion point, the Object is inserted at that
location, replacing any Object that may have been placed
there previously.
5. getItemsInContainer() returns the number of elements
below the current insertion point. If you use addAt()
to add elements above the insertion point, they will not
affect the value returned by getItemsInContainer().
This is a change from the behavior in the previous
version of the class library.
- Only the small and dynamic link class libraries are supplied
in this release. If you need other models, use the project
files supplied under the CLASSLIB\OBJS subdirectories to
build them. For instance, to build a medium model library
without templates, create a directory called M under
\CLASSLIB\OBJS, and copy the TCLASSL.PRJ file from the L
directory to a file called TCLASSM.PRJ in your new M
directory. Then load TCW.EXE, used Project|Open to open
TCLASSM.PRJ, and change Options|Compiler|Code generation|
Model to Medium.
OWL
- You must rebuild the class libraries in the appropriate model
for the intended OWL model if they don't already exist - see
paragraph above.
- Note that you must use the TWindow member function AssignMenu
to assign a window's Attr.Menu member and to load a menu for
that window.
6. CORRECTIONS TO THE DOCUMENTS
---------------------------------
ObjectWindows User's Guide
--------------------------
Chapter 2, "Stepping through Windows"
-------------------------------------
Page 22
-------
The sentence that begins "These libraries are located in the library
directories listed in the following table..." should instead read
"Table 2.2 lists the file names of the static ObjectWindows library
and static container class library for each supported memory model."
Chapter 11, "Dialog objects"
----------------------------
Page 151
--------
In the TSampleWindow::GetName fragment shown, a line is in error.
The line that begins
if ( ExecDialog(new TInputDialog(this...
should read
if ( GetApplication()->ExecDialog(new TInputDialog(this...
Chapter 12, "Control objects"
----------------------------
Page 158+
---------
Although it doesn't specifically state so, TListBox and its member
functions can be used with both single- and multiple- selection
list boxes.
Welcome to Borland C++
----------------------
This README file contains important information about Borland C++.
For the latest information about Borland C++, Turbo Debugger,
TASM, and their accompanying programs and manuals, read this
file in its entirety.
TABLE OF CONTENTS
-----------------
1. How to Get Help
2. Installation
3. Features
4. Important Information
5. Testing Your Expanded Memory
6. Corrections to the Documents
1. HOW TO GET HELP
-------------------
If you have any problems, please read this file, the
HELPME!.DOC and other files in your DOC subdirectory, and the
Borland C++ manuals first. If you still have a question and
need assistance, help is available from the following sources:
1. Type GO BPROGB on the CompuServe bulletin board system for
instant access to the Borland forums with their libraries of
technical information and answers to common questions.
If you are not a member of CompuServe, see the enclosed
special offer, and write for full details on how to receive
a free IntroPak containing a $15 credit toward your first
month's on-line charges.
2. Check with your local software dealer or users' group.
3. Write to us at the following address:
Borland International
Borland C Technical Support
1800 Green Hills Road
P.O. Box 660001
Scotts Valley, CA 95066-0001
Please remember to include your serial number or we will be
unable to process your letter.
4. If you have an urgent problem that cannot wait and you have
sent in the license agreement that came with the package,
you may call the Borland Technical Support Department at
(408) 438-5300. Please have the following information ready
before calling:
a. Product name and serial number on your original
distribution disk. Please have your serial number ready
or we will be unable to process your call.
b. Product version number. The version number for Borland
C++ can be displayed by pressing Alt-Space/A.
c. Computer brand, model, and the brands and model numbers of
any additional hardware.
d. Operating system and version number. (The version number
can be determined by typing VER at the MSDOS prompt.)
e. Contents of your AUTOEXEC.BAT file.
f. Contents of your CONFIG.SYS file.
2. INSTALLATION
----------------
You MUST use the INSTALL program to install Borland C++. The
files on the distribution disks are all archived and have to be
properly assembled. You cannot do this by hand!
To start the installation, change your current drive to the one
that has the install program on it and type INSTALL. You will
be given instructions in a box at the bottom of the screen for
each prompt. For example, if you will be installing from drive
A:, type:
A:
INSTALL
- This INSTALL handles the installation of both the compiler
and debugger and tools in one operation, and allows several
new configuration options.
- Note: The list of files is now contained in a separate file
called FILELIST.DOC, which will appear in the target
directory you specify during installation.
You should read the rest of this README file to get further
information about this release before you do the installation.
3. FEATURES
------------
Borland C++ includes complete support for Windows programming,
as well as big speed and capacity gains. Here are some
important features found in this version:
COMPILER
---------
- Windows! We now produce EXE and DLL files for Windows 3.0.
- Protected mode versions of the Programmer's Platform and the
command-line compiler for greater capacity.
- Precompiled header files for faster compilation.
- A built-in assembler.
- A full undo for the Programmer's Platform editor
- The complete Windows API online reference is now provided in the
Borland C++ help file.
- Included on these disks is Turbo Debugger for Windows, a new
version of Turbo Debugger that supports Windows debugging.
- Switches to control the amount of extended/expanded memory to
be used by the compiler.
- Switches to control various aspects of program data for
compatibility with other compilers.
- A new utility called TRANCOPY which copies transfer items
between projects.
- Note: Because the compiler programs in Borland C++ are named
BCC.EXE and BC.EXE, you'll need to rename them if you have
batch or make files that use those names, or you'll have to
change the macros or batch files to supply the correct name.
TURBO DEBUGGER
---------------
- Turbo Debugger for Windows (TDW.EXE), uses "display swapping"
to allow you to debug Windows applications using one machine
and a single display.
- TDW automatically and transparently lets you debug Windows
DLLs. There is a new module view selection dialog that allows
you to manually control this feature; press F3 with a Windows
module loaded, and F1 to find out more about the options.
- The View/Log viewer allows logging of global and local heap
information, as well as the modules currently loaded by
Windows.
- The View/Windows Messages viewer allows you to collect or
break on Windows messages based on window-routine identifiers
or on handles. In addition, you can filter out specific
classes of messages to log, allowing you to view exactly what
you're interested in.
- WREMOTE.EXE allows remote debugging of Windows applications
between two systems. WRSETUP.EXE allows you to set up your
link speed and comm port settings from within Windows.
(Note that this is a Windows-compatible application)
- The utilities have been modified to handle your Windows
programs. See MANUAL.TNT in your DOC directory for detailed
information about using the Turbo Debugger Utilities.
- The File/Get Info window displays global memory information
based on banked and non-banked memory.
TURBO PROFILER
---------------
- Allows you to view text files from within the user interface.
TURBO ASSEMBLER
----------------
- Two versions of Turbo Assembler have been provided. TASMX.EXE
can be run from the Windows DOS prompt, and takes advantage
of the DOS Protected Mode Interface (DPMI) that Windows 3.0
provides. This allows the assembler to take advantage of
Windows' memory management and to dramatically increase
capacity. TASM.EXE uses standard DOS memory, and is provided
for operation in environments without DPMI support such as
DOS and the non-386 enhanced modes of Windows.
- DPMILOAD.EXE handles loading TASM in environments where DPMI
support is a part of the operating system, such as when
running from the Windows 3.0 DOS prompt. DPMILOAD.EXE must
exist on some path within your path statement. TASMX will
automatically detect if DPMI support is present and then use
DPMILOAD to load itself. If DPMI support is not available,
(or if the DPMILOAD.EXE program is not present), TASMX will
load TASM.EXE and Turbo Assembler will run in normal DOS
memory.
4. IMPORTANT INFORMATION
-------------------------
Be sure to look at the files in the DOC subdirectory for more
information about Borland C++. These files have additional
information about the compiler, utilities, debugger and
assembler.
TURBO DEBUGGER
- The following options have been removed from TDW.EXE (and
TD.EXE when using remote debugging):
- File Menu
DOS Shell
Resident
Table relocate
- View Menu
Keystroke Recording
- Breakpoints Menu
Hardware breakpoint
- TDREMOTE/TDRF now have four different link speeds, which
will conflict with any previous versions of TDRF or TDREMOTE
you may have unless you make sure that the settings are the
same on both sides. These link speeds also apply to WREMOTE
for Windows.
- TDINST now has a -w command line option which allows you to
create TDCONFIG.TDW files (or save the configuration to
TDW.EXE) for customized configurations of TDW. You must use
the -w switch to create config files for TDW.EXE. TDW will
not read in your existing TDCONFIG.TD files.
- Many of the command-line options for TDW which cannot be
used have been eliminated, such as setting overlay area
sizes, remote debugging, and the graphics display options.
Use the -? option when loading TDW to see the available
options, or consult the manual.
- The BCWDEMOA example is used to demonstrate the
Ctrl+Alt+Sysrq feature of TDW and is not meant to be run
directly under Windows. If you do this you will not be able
to gain control of Windows again and will have to reboot
your system. There may be problems using the Ctrl+Alt+Sysrq
feature with certain keyboards or environments. Some
keyboards use Alt+Sysrq to activate the Sysrq scan code;
therefore Ctrl+Alt+Sysrq is not possible. Also, there may
be problems using this Windows feature for Zenith.
- TDW is a text-based debugger which runs in the graphics mode
environment of Windows. It supports only the standard
graphics display modes: CGA, EGA, VGA, and Hercules
monochrome graphics. It does not currently support other
video modes, such as the one that supports Super-VGA.
However, the DOS versions of TD (TD.EXE, TD286.EXE, etc.)
are now capable of using this support.
- When you are debugging your application, TDW has control. You
cannot use Ctrl+ESC while in TDW to gain control of Windows.
You can, however, use Ctrl+ESC normally while your program is
active and Windows has control.
- TDW does not load more than one symbol table at a time. If
your program uses more than one symbol table you can load it
explicitly or, if your program makes a call to another
symbol table, TDW will load that table automatically when
tracing (F7) over the calling instruction.
- TDW is only able to use the -p command-line option or
configuration option to activate the mouse if Windows is
installed to use a mouse. If no mouse is specified to be
used in Windows, TDW will not recognize it either.
- THELP is a help menu TSR (Terminate & Stay Resident) program
meant to work in the DOS environment. It will not work when
running TDW under Windows. The normal TDW help is still
available.
- If you wish to debug a DLL loaded by the Windows LoadLibrary
function, you need to use the Add DLL option of the
View|Module dialog to add this DLL to the DLLs & programs
pane. Once the DLL has been added, make sure that you
select Yes for Load symbols and Yes for Debug startup.
TURBO ASSEMBLER
- In order to take advantage of DPMI support feature, you must
be running Windows in 386 enhanced mode. (You may tell if
Windows 3.0 is in 386 enhanced mode by selecting ABOUT from
the Program Manager. It will tell you how much memory is
available to Windows, and it will say that Windows is in
"real mode", "standard mode", or "enhanced 386 mode". If you
are running Windows on a 386 machine, and Windows is not
currently operating in enhanced mode, please see your
Windows manual for additional details on running Windows 3.0
in enhanced mode. Enhanced mode is not available when
Windows 3.0 is run on processor less than a 386.) Also,
DPMILOAD.EXE must be somewhere in your path.
- TASMX is not designed to be a Windows application, so you
must enter a Windows 3.0 DOS prompt to use TASMX. Then to
use TASMX, just type TASMX wherever you would normally type
TASM. All command-line options are the same as the previous
version of TASM. When run within the Windows 3.0 DOS prompt,
TASMX will be able to use almost all the free memory in the
system, if neccessary, for assembling large programs.
- TASM 2.5 will still run without Windows 3.0 DPMI. If DPMI
support is not found, you must have TASM.EXE somewhere in
your path. Then if you load TASMX, it will run TASM.EXE
within the normal 640K DOS environment. Turbo Assembler will
not be able to assemble programs larger than normal without
DPMI support.
- We encourage you to try TASMX on all your assembler source
code, both from the normal DOS prompt and from within a
Windows 3.0 DOS prompt. TASMX should be able to handle all
programs that work properly with TASM 2.01.
WHITEWATER RESOURCE TOOLKIT
You can edit C header files using the Header Editor. The file
to edit may be created in any editor, or as the output of a
resource editing session. There are restrictions on syntax,
however:
- In a C header (.H file), the Header editor supports only
#define statements defining constants with a decimal or
hexadecimal value; an error will result if you attempt to
edit a header file containing anything else except
comments. If you save the result of an edit of a file
containing comments, the comments will be removed.
C++ STREAMS
This will be our last version of C++ to support version
1.2 streams (which currently requires the use of the
OLDSTRM?.LIB files.)
EXAMPLE PROGRAMS
When you are running any example programs that come with
.PRJ files, if you didn't use the standard directories when
you installed Borland C++ you will have to change the .PRJ
file to reflect your actual directory setup. Do this from
inside Borland C++ with Alt-O/D.
LINKING C++ WITH C
Linking C++ modules with C modules requires the use of a
linkage specification. Prototypes for C functions within C++
modules must be in one of the following forms:
extern "C" declaration
extern "C" { declarations }
For example, if a C module contains these functions:
char *SCopy(char*, char*);
void ClearScreen(void)
they must be declared in a C++ module in one of the
following ways:
extern "C" char *SCopy(char*, char*);
extern "C" void ClearScreen(void);
or
extern "C" {
char *SCopy(char*, char*);
void ClearScreen(void);
}
Failure to do so will result in "Undefined symbol" errors
during link. For further examples, see the standard header
files.
IMPORTANT NOTES
- The default extension for source files is .CPP; that is, if
you enter
BCC -c test
the compiler will search for test.cpp, and give an error if a
file of that name cannot be found. If you want to have the
command-line compiler assume a .c extension and C language
source, use the command-line option -P-c. For more information,
see Chapter 6, "The command-line compiler", in the User's Guide.
- Borland C++ only supports Protected Mode Windows target
files. Make sure to use the /t option when using the Resource
Compiler if you want to enforce Protected Mode usage.
- Functions that return structures now take a hidden parameter
that contains the address where the returned structure is to
be placed. If you are writing assembler code to link with C
code you must be sure to allow for this extra parameter.
- When debugging a mouse application the Options|Debugging|Display
Swapping option should be set to "Always" for best results.
- TEMC will not allow a macro to contain multiple commands that
return exit codes.
- Example 2 for the signal() function in the Reference Guide uses
an extension to signal() that is not supported in C++, so the
example will not compile as a C++ program.
- If a directory contains only one project file, invoking
Borland C++ without any parameters will open that project.
If this behavior is not desired, a second "dummy" project
file must be placed in that directory or the current project
file must be removed.
- Note that the Generate COMDEFs choice under
Options|Compiler|Code Generation and the -Fc command-line
option are only supported in the C language. Linker errors
will result if you attempt to use a communal variable in C++.
- When linking in libraries that have COMDEFs, be sure to link
in at least one .OBJ file that contains a COMDEF. The TDUMP
utility can be used to determine if a .LIB file contains a
COMDEF.
- The macros min() and max() are not defined when stdlib.h is
compiled as C++ (to allow their use in 3rd party libraries,
etc.).
- When using Brief with THELP, make sure to use Brief's -p
switch to insure that the thelp window will be visible.
- Note that SYMDEB creates .SYM files for use in debugging; Borland C++
creates .SYM files for pre-compiled headers. They are not compatible
and collisions should be avoided by setting the name of the pre-compiled
header file (using -H=filename).
- If you have an application that uses multiple DLLs at least one of
which references another, you need to obey the following rules:
1. The module names of imported entries specified in module definition
files should be in lower case. This applies to the name specified
after the LIBRARY keyword for DLLs which export the entries, as well
as the module names supplied in the IMPORTS section.
For example:
LIBRARY mydll
not
LIBRARY MYDLL
IMPORTS
mydll.1
not
IMPORTS
MYDLL.1
2. Enable a case-sensitive link using /c for the standalone linker
(TLINK), or the Options|Linker|Case Sensitive Link option in the
Programmer's Platform.
5. TESTING YOUR EXPANDED MEMORY: EMSTEST.COM
---------------------------------------------
Included with Borland C++ is a program to test your Expanded
Memory hardware and software. If you have problems using
Borland C++ with your EMS, type EMSTEST at the DOS prompt and
follow the instructions.
6. CORRECTIONS TO THE DOCUMENTS
---------------------------------
Getting Started
---------------
Pg. 3 The manual says that Borland C++ requires DOS 2.0 or higher.
It should say DOS 3.0 or higher.
Borland C++ Programmer's Guide
------------------------------
Pg. 168 _WINDOWS shown in the last heading should be _Windows.
Borland C++ User's Guide
------------------------
Pg. 122 The section on Dynamic Link Libraries should include
the note that DLLs written in C++ are only supported
in the compact and large memory models; this
restriction does not apply to DLLs with C language
source.
Pg. 158 In the first paragraph it says you need at least 576k of
extended memory. The correct amount is 320k.
Pg. 159 Note that values of at least 120 should be specified in
the TKERNEL kilos parameter.
Pg. 260 Several TLINK error messages are not included; here is a
list of those messages and their meanings:
- Debug info option ignored for .COM files
Borland C++ does not include debug information for .COM
files.
- Overlays ignored in new executable image
This error occurs if you attempt to link an Windows program
with the /o option on.
Windows executables can't be overlaid, although, with
discardable code segments, you should be able to achieve a
similar effect.
- Relocation item exceeds 1MB DOS limit
The DOS executable file format doesn't support relocation
items for locations exceeding 1MB.
Although DOS could never load an image this big, DOS extenders
can, and thus TLINK supports the generation of images greater
than DOS could load.
Even if the image is loaded with a DOS extender, the DOS
executable file format is limited to describing relocation
items in the first 1MB of the image.
-'filename' ('linenum'): Duplicate internal name in exports
Two export functions listed in the EXPORTS section of the
module definition file defined the same internal name.
-'filename' ('linenum'): Duplicate internal name in imports
Two import functions listed in the IMPORTS section of the
module definition file defined the same internal name.
- 'filename' ('linenum'): Duplicate ordinal 'number' in exports
TLINK encountered two exports with the same ordinal value.
Check the module definition file to ensure that there are no
duplicate ordinal values specified in the EXPORTS section.
If not, you are linking with modules that specify exports by
ordinals and one of two things happened:
- two export records specify the same ordinal, or
- the exports section in the module definition file
duplicates an ordinal in an export record.
- Segment alignment factor too small
This error occurs if the segment alignment factor (set with
the /A option) is too small to represent the file addresses
of the segments in the .EXE file.
This error only occurs when linking for Windows.
- Segment too large for segment table
This error should never occur in practice.
It means that a segment was bigger than 64K and its size
can't be represented in the executable file.
This error can only occur when linking for Windows; the
format of the executable file used for Windows does not
support segments greater than 64K.
- Invalid size specified for segment alignment
This error occurs if an invalid value is specified for the /A
option.
The size specified with /A must be an integral multiple of 2
and less than 64K; common values are 16 and 512.
This error only occurs when linking for Windows.
- 'filename' ('linenum'): Duplicate external name in exports
Two export functions listed in the EXPORTS section of a
module definition file defined the same external name.
For example:
EXPORTS AnyProc=MyProc1 AnyProc=MyProc2 - Automatic data
segment exceeds 64K
The sum of the DGROUP physical segment, local heap, and stack
exceeded 64K.
Either specify smaller values for the HEAPSIZE and STACKSIZE
statements in the module definition file, or decrease the
size of your near data in DGROUP.
The map file will show the sizes of the component segments in
DGROUP.
Use the /s TLINK command-line option to find the module.
- Debugging information overflow; try fewer modules with debug
info
Too many modules containing debugging information are
included in the link.
The debugging information executable file specification uses
16-bit fields for many counts. This error message indicates
that one of the count fields have overflowed.
To exclude some modules with debug information from the link,
either:
- use the /v+ and /v- stand-alone linker options, or
- turn on the Exclude Debug Information option
- Limit of 254 segments for new executable file exceeded
You have reached the limit of segments that can be specified
by the New Executable file format.
Only 254 segments can be represented in Windows EXEs and
DLLs.
To reduce the total number of segments to below 254, turn on
the Pack Code Segments option to combine segments.
- Imported references from VIRDEFs not supported
TLINK does not support offset fixups to imported names when
those fixups are associated with VIRDEFs.
This situation is not likely to occur. However, if it does,
- use the -Vs command-line option, or
- set C++ Virtual Tables to Local in the IDE.
VIRDEFs are used for C++ virtual tables and inline functions
which, for debugging purposes, are pulled out-of-line.
- Invalid size specified for segment packing
You have specified an invalid size for the code segment
packing limit. The default is 8192; legal values are from 1
to 65536.
Welcome to Borland C++ & Application Frameworks 3.0
---------------------------------------------------
This README file contains important information about Borland C++.
For the latest information about Borland C++ and its accompanying
programs and manuals, read this file in its entirety.
TABLE OF CONTENTS
-----------------
1. How to Get Help
2. Installation
3. Features
4. Important Information
5. Testing Your Expanded Memory
6. Corrections to the Documents
1. HOW TO GET HELP
-------------------
If you have any problems, please read this file, the
HELPME!.DOC and other files in your DOC subdirectory, and the
Borland C++ manuals first. If you still have a question and
need assistance, help is available from the following sources:
1. Type GO BPROGB on the CompuServe bulletin board system for
instant access to the Borland forums with their libraries of
technical information and answers to common questions.
If you are not a member of CompuServe, see the enclosed
special offer, and write for full details on how to receive
a free IntroPak containing a $15 credit toward your first
month's on-line charges.
2. Check with your local software dealer or users' group.
3. Borland's TECHFAX service. Call (800) 822-4269 for a FAX
catalog of entries.
4. If you have an urgent problem that cannot wait and you have
sent in the license agreement that came with the package,
you may call the Borland Technical Support Department at
(408) 438-5300. Please have the following information ready
before calling:
a. Product name and serial number on your original
distribution disk. Please have your serial number ready
or we will be unable to process your call.
b. Product version number. The version number for Borland
C++ can be displayed by pressing Alt-H/A in the IDE.
c. Computer brand, model, and the brands and model numbers of
any additional hardware.
d. Operating system and version number. (The version number
can be determined by typing VER at the DOS prompt.)
e. Contents of your AUTOEXEC.BAT file.
f. Contents of your CONFIG.SYS file.
2. INSTALLATION
----------------
You MUST use the INSTALL program to install Borland C++. The
files on the distribution disks are all archived and have to be
properly assembled. You cannot do this by hand!
To start the installation, change your current drive to the one
that has the install program on it and type INSTALL. You will
be given instructions in a box at the bottom of the screen for
each prompt. For example, if you will be installing from drive
A:, type:
A:
INSTALL
- This INSTALL handles the installation of both the compiler
and debugger and tools in one operation, and allows several
new configuration options.
- Note: The list of files is contained in a separate file
called FILELIST.DOC, which will appear in the target
directory you specify during installation.
- After installation, make sure you insert \BORLANDC\BIN - or
whatever you selected as your BIN directory - into
your DOS path so the DLL and executable files can be found.
- If you have previously installed Resource Workshop, make sure
that you remove the directory of that version from your path. The
version included on these disks supercedes previous versions.
- If you use a Windows command shell other than Program Manager,
you may not get a Borland C++ group installed for Windows. If
you don't, use File|Run in Program Manager to run the following
command:
GROUPS GROUPS.B$$
You will then have a new group for Borland C++.
- If you chose to put Turbo Debugger files in a non-default
directory which is not on your path, you will need to copy
WINDEBUG.DLL from that directory to one which is on your path if
you want to debug Windows applications with Turbo Debugger.
- After your initial installation, you can run INSTALL again to
add elements you omitted the first time. Just select only the
things you want to add in the INSTALL options screen. Because
some things you may want to save could be overwritten, review
the following items to make sure you don't lose important
information:
1. Selecting CMD (the Command-line compiler) causes an
overwrite of any existing turboc.cfg & tlink.cfg file
with path information provided in that INSTALL session.
Any switches other than -L (library path) and -I
(include path) will not be preserved.
2. Selecting IDE will clear the previous settings for the
desktop and default project and reset them to the
defaults (for instance, 25-line display mode), and the
include and library paths will be reset to the paths
provided in that INSTALL session.
3. By selecting any one of the following, the help file
paths and choices for THELP.CFG will reflect the current
session's installation choices:
a. CMD - command-line compiler
b. IDE - integrated environment
c. TD - Turbo Debugger
d. TASM - Turbo Assembler
e. TV - Turbo Vision
f. OWL - ObjectWindows library
4. Alterations to headers or startup files will be
overwritten if any library models are selected.
5. Selecting the Create BorlandC++ Group option will add an
icon to the existing group.
In general, any selection you make of something installed
earlier will cause an overwrite of the earlier version
without prompting.
You should read the rest of this README file to get further
information about this release before you do the installation.
See also the files in the DOC subdirectory after installation
for general information not included in the manuals.
3. FEATURES
------------
Borland C++ 3.0 includes complete support for Windows
programming, as well as big speed and capacity gains. Here are
some important features found in this version:
- A Windows hosted IDE (TCW.EXE), including a class hierarchy
browser.
- New code optimization features.
- Turbo Debugger support for breakpoints with multiple conditions
and for viewing selectors.
- Profiling under Windows (TPROFW.EXE).
- Remote debugging using a Novell-compatible network.
- DPMI services for increased capacity and operation under Windows
3.0 Enhanced Mode.
- C++ 2.1 support, including the new nested class specifications,
and support of C++ 3.0 templates.
- Added library functions for compatibility with other runtime
libraries, and addition of support for long double parameters
in math functions. (Please see the Library Reference for details.)
- New MAKE features. (Please see the Tools and Utilities Guide
for details.)
- EasyWin, which includes library support for stdio.h and
conio.h functions under Windows. (Please see the Borland C++
User's Guide for details.)
- Object oriented assembler features in Turbo Assembler.
- Added BGI (Borland Graphics Interface) fonts and support.
- A resident DPMI kernel program, DPMIRES.EXE. (See "DPMI",
below.)
- WinSight, a debugging tool for examining Windows messages
and general information about Windows classes. (Please see the
Tools and Utilities Guide for details.)
- FCONVERT.EXE - Converts OEM to ANSI Character Set
DOS text files use the OEM character set; Windows text
files generally use the ANSI character set. The demo
program, FCONVERT.EXE converts data back and forth between
these formats. The only text files that will be affected
are those containing international characters (ASCII values
above 128) like the umlaut, etc. Not all OEM characters are
present in the ANSI character set, and vice versa.
Therefore, converting between these character sets may
produce a mapping that is not reversible. Refer to your
Windows documentation for further information about ANSI
vs. OEM character sets.
- Inline versions of string and memory library functions for
code efficiency. (Please see the section on Intrinsic
Functions in Appendix A in the User's Guide for details.)
- THELP now allows you to switch between help files without
unloading and reloading. (Please see UTIL.DOC for details.)
- Runtime library source code.
NEW BGI FONTS
-------------
Several new fonts have been added to the Borland Graphics Interface:
Name Value Description
-------------------------------------------
SCRIPT_FONT 5 Stroked script font
SIMPLEX_FONT 6 Stroked simplex font
TRIP_SCR_FONT 7 Stroked triplex script font
COMPLEX_FONT 8 Stroked complex font
EURO_FONT 9 Stroked European font
BOLD_FONT 10 Stroked bold font
The fonts in the BGI now support the full ASCII character set.
DPMI
----
BC.EXE, BCC.EXE, MAKE.EXE, and TLINK.EXE are now hosted under
DPMI. These files replace both the files with the same name in
Borland C++ 2.0 and the BCX.EXE, BCCX.EXE, and TLINKX.EXE files
in the same product. There is no longer a TKERNEL.EXE file.
Important!
----------
You must have at least 1Mb of extended memory to run these programs.
If you encounter a "machine not in database" message while attempting
to run the compiler, run the DPMIINST program to add your machine
configuration to the DPMI server database.
This version includes a resident DPMI host program, DPMIRES.EXE,
that allows you to preload the server before invoking BC, BCC, or
any other DPMI-hosted executables. If you want to run such hosted
EXEs in a Windows Standard Mode DOS window, you should run
DPMIRES.EXE before loading Windows. To do this, enter the
following commands at DOS:
set DPMIMEM=MAXMEM 2000
dpmires
win /s
If you want to limit the amount of extended memory used by the
DPMI-hosted executables, an environment variable called DPMIMEM
can be set to do so. For instance, the command
set DPMIMEM=MAXMEM 2000
reserves about 2 Mb of memory for DPMIRES. The number after MAXMEM
can be adjusted, but cannot be lower than 1000.
DPMIRES should not be run before running Windows in Enhanced Mode.
Windows requires its own DPMI services.
The hosted executables cannot spawn each other when SHARE is loaded.
For instance, if you run MAKE on a file which in turn calls MAKE
again, you will get a sharing violation. In this specific case,
you can call the real mode version, MAKER, within the given makefile,
and a sharing violation won't occur.
4. IMPORTANT INFORMATION
-------------------------
- There is now only one version of the DOS IDE, BC.EXE, and
of the command-line compiler program, BCC.EXE. Because the
BCX and BCCX files are no longer in Borland C++, you'll need
to alter batch or make files that use those names.
- Borland C++ only supports Protected Mode Windows target
files. Make sure to use the /t option when using the Resource
Compiler if you want to enforce Protected Mode usage.
- When using Brief with THELP, make sure to use Brief's -p
switch to ensure that the THELP window will be visible.
- We recommend that you use the following mouse drivers with
this product:
Microsoft Mouse version 7.04 or later;
Logitech Mouse version 5.01 or later;
Genius Mouse version 9.06 or later.
- If you use MAKE or the IDE's Project Make to invoke the Resource
Compiler, the .RC files you wish to compile MUST be in the same
directory as your project or makefile. This is because the Microsoft
Resource Compiler does not properly handle relative path names, and
returns a misleading error message that refers to an incorrectly
spelled version of your .RC file.
- If you get a "floating point formats not linked" message at
runtime, put the following somewhere in your source files:
extern void _floatconvert();
#pragma extref _floatconvert
This will force inclusion of floating point formats, which
may not be linked to reduce executable size.
- Make sure that you use the -WE switch (Options|Compiler|Entry|
Windows <DLL> explicit functions exported in the IDE) when
using the fastcall modifier. The same applies when using the
fastcall compilation option (-pr on the command line,
Options|Compiler|Entry|Register in the IDE.)
COMPILER
- The default extension for source files to the command-line
compiler is .CPP; that is, if you enter
BCC -c test
the compiler will search for test.cpp, and give an error if a
file of that name cannot be found. If you want to have the
command-line compiler assume a .c extension and C language
source, use the command-line option -P-c. For more
information, see "The command-line compiler" in the User's
Guide.
- Note that the Generate COMDEFs choice under
Options|Compiler|Code Generation and the -Fc command-line
option are only supported in the C language. Linker errors
will result if you attempt to use a communal variable in C++.
- The macros min() and max() are not defined when stdlib.h is
compiled as C++ (to allow their use in 3rd party libraries,
etc.).
- Note that SYMDEB creates .SYM files for use in debugging;
Borland C++ creates .SYM files for pre-compiled headers. They
are not compatible and collisions should be avoided by
setting the name of the pre-compiled header file (using
-H=filename - see the User's Guide Chapter, "The Command-line
compiler for more details.)
- There is now full support of distance modifiers (near and
far) used for class member pointers. Here are two sample
declarations and their meanings:
void (A::* far var) ();
this is a far variable 'var' of type 'void (A::*)()';
void (far A::* var) ();
this is a 'default distance' variable 'var' of type
'void (far A::*)()'
- You must use "smart callbacks" - -WS from the command line,
Options| Compiler|Entry/Exit Code|Windows smart callbacks in
the IDE - if your application uses classes whose code is in a
DLL. This applies especially in the case of a class
implemented in an EXE which is derived from another
implemented in a DLL, which normally applies for users of OWL
and other object-oriented class libraries.
- If you use C++ templates, and use a separate TLINK command
line rather than letting BCC invoke TLINK, you should make
sure that you turn on case-sensitive links with the /c switch.
IDE
- When debugging a mouse application the Options|Debugger|Display
Swapping option should be set to "Always" for best results.
- In the DOS IDE, the mouse cursor is turned off during compilation
for performance improvements.
- If you run File|Printer setup from TCW.EXE (or another Windows
application which has printer setup support) under the Windows
3.0 debugging kernel, you will get a System Error from Windows.
You must switch to the NODEBUG version to run this option.
- The initial block marking behavior in the IDE is determined
by which version of the IDE is used first after installation.
Invoking TCW.EXE first will cause Windows-style block marking
conventions to be in effect; otherwise the standard DOS IDE
behavior will be used. You can change the behavior by
selecting Options|Environment| Editor and changing the
settings for Persistent blocks and Overwrite blocks.
WinSight
- WinSight traces messages received by GetMessage or SendMessage. It
does not trace messages sent directly by function call such as
WM_INITDIALOG.
- Please note that messages displayed as "dispatched" are actually
intercepted at the time of GetMessage, not DispatchMessage.
EXAMPLE PROGRAMS
- When you are running any example programs that come with .PRJ
files, if you didn't use the standard directories when you
installed Borland C++ you will have to change the .PRJ file
to reflect your actual directory setup. Do this from inside
Borland C++ with Alt-O/D.
LINKING C++ WITH C
- Linking C++ modules with C modules requires the use of a
linkage specification. Prototypes for C functions within C++
modules must be in one of the following forms:
extern "C" declaration
extern "C" { declarations }
For example, if a C module contains these functions:
char *SCopy(char*, char*);
void ClearScreen(void)
they must be declared in a C++ module in one of the
following ways:
extern "C" char *SCopy(char*, char*);
extern "C" void ClearScreen(void);
or
extern "C" {
char *SCopy(char*, char*);
void ClearScreen(void);
}
Failure to do so will result in "Undefined symbol" errors
during link. For further examples, see the standard header
files.
OPTIMIZATIONS
- When Ignore Aliasing is used - -Oa from the command line, or
Options|Compiler|Optimization|Assume no pointer aliasing in
the IDE - some initializations could be skipped. This applies
only when Copy propagation -Op or Options|Compiler|Optimization|
Copy propagation is used as well (which is the case when
using -O2 or Options|Compiler|Optimization|Fastest Code.) The
following case illustrates the issue:
len = 0;
read(help_file, (char *)&len, 1);
read(help_file, (char *)title, len);
The initializion of len to the value 0 above will probably
not be reflected in the first call to read() if aliases are
ignored. If the initialization of len were guaranteed by the
call to read(), the first line would be unnecessary, and the
value in len would be assigned and passed to the second read
correctly. We recommend that you avoid using these options
together when explicit initializations are used in code
sequences like these.
TURBO DEBUGGER/TURBO PROFILER/TURBO ASSEMBLER
- Some Windows mouse drivers are incompatible with Turbo
Debugger, and will cause the mouse cursor to get scrambled
when debugging DOS graphics applications on a second monitor
(-do option). If that happens, you can try a different
driver, or turn off the mouse in TD by using the -p- option on
the TD command line. The mouse will still be active in the
target application.
- You cannot set a window message breakpoint by using a window
handle in an ObjectWindows application. You can, however, set
window message breakpoints with ObjectWindows applications by
enabling ObjectWindows support (use TDINST -w and choose
Options|Source Debugging|OWL Window Messages), then using
window object names to set message breakpoints.
- The MEMPAGE segment attribute in TASM is not currently
supported by TLINK. This option was added to TASM to support
a feature of the Phar Lap linker.
- The first time a program is run under TDW or TPROFW, mouse
messages are processed normally. However, on every subsequent
execution of that program, you must press a key on the
keyboard before mouse messages can be processed.
- On page 10 in Chapter 1 of the "Turbo Profiler User's Guide,"
there is a statement that Pascal versions of the PRIMEn.C
programs are included on disk. Only the C versions of these
sample programs are included on the distribution disks.
- If you don't see the mouse cursor when debugging a
TurboVision application, reload the target program (press
Ctrl-F2), and the mouse will appear.
Super VGA support for TDW & TPROFW
==================================
TDW and TPROFW handles most of the popular 2, 4, and 16-color
high-resolution Super VGA modes. If your card isn't supported
correctly, or if you want to debug in a 256-color mode, you'll
need to use a special Super VGA DLL.
Currently, the following DLLs are supplied with your language
compiler to support these SVGA cards and modes:
TSENG.DLL (TSENG ET-3000 /ET-4000 based cards)
640x480x256
800x600x256
1024x768x256
ATI.DLL (ATI VGA Wonder card)
640x480x256 (See the NOTE below)
800x600x256
To use a Super VGA DLL, copy the appropriate DLL file into the
directory that contains the TDW or TPROFW executable (usually
the BIN subdirectory of your language compiler directory), and
rename it to TDVIDEO.DLL.
TDW (or TPROFW), upon loading, looks for TDVIDEO.DLL in the
same directory that harbors TDW.EXE (or TPROFW.EXE). If it
finds the file, TDW (or TPROFW) accesses the DLL as it's
needed. TDW (or TPROFW) makes calls to the DLL to handle the
entire video screen switching context. The DLL accomplishes the
screen switching by allocating a buffer as it gets loaded.
Graphic screen contents are then saved to this buffer as TDW
(or TPROFW) enters text mode. The DLL restores the graphics
screen from this buffer as TDW (or TPROFW) exits text mode.
Memory allocated for the buffer is freed when the DLL is
unloaded.
If there is an error loading TDVIDEO.DLL, or if the DLL doesn't
support the selected card or mode, TDW will report the error in
a Windows dialog box. When this happens, TDW will unload
TDVIDEO and exit. If this situation occurs, delete TDVIDEO.DLL,
or select a mode that is supported by the DLL.
If you're debugging an application that's been built with
EasyWin, you may see incorrect screen painting as you step over
lines of code that make calls to STDIO functions. In this case,
edit the TDVIDEO.INI file and set the Int2FAssist option to
"yes" (see the NOTE below).
NOTE: The ATI mode 640x480x256 and EasyWin applications may
require some special handling. An option called Int2FAssist
in the TDVIDEO.INI file allows this mode to work correctly on
most systems. The behaviour is as follows: When you set
"Int2FAssist=yes", TDVIDEO makes Windows tell all sub-windows
on the screen to re-paint themselves as the DLL is loaded.
This allows the user screen to be viewed when Stepping,
Tracing, or Running your application. It will not, however,
switch to the user screen when you press <Alt-F5> since TDW
is still in control (it doesn't allow Windows to process any
messages). If you also set "SaveWholeScreen=yes", then <Alt-
F5> will show the user screen (TDVIDEO will now copy the
screen for you). The drawback to enabling SaveWholeScreen is
that it will take longer to Step or Trace if TDW needs to
switch back to the user screen for that particular
instruction. Also, extra messages are getting passed to your
application that normally would not be passed. This may
effect the debugging of certain pieces of code (like finding
a bug in an owner-draw procedure). In these cases, you will
not want to use this video mode.
TDVIDEO.INI
-----------
You can create the file TDVIDEO.INI with any ASCII text editor.
This file is used to control how TDVIDEO.DLL functions.
TDVIDEO.INI must be located in WINDOW's main directory (usually
C:\WINDOWS). The options in TDVIDEO.INI are handled by the DLL
itself and are therefore subject to change with newer versions
of the DLLs. The DLLs use the following options, written in any
order, under the heading [VideoOptions]:
SaveWholeScreen -- default = 'no'
Int2FAssist -- default = 'no'
DebugFile -- default = '' (no logging will occur)
The SaveWholeScreen and Int2FAssist can be set to either 'yes'
or 'no'. DebugFile can be either blank, or it can be set to a
specific filename.
*** SaveWholeScreen ***
This option, normally set to 'no', determines whether the
entire screen (512k - 64k from 8 planes) will be saved (the
entire graphics screen is cleared when switching to it) or if
only the top 32K of planes 0 through 3 will be saved (the
entire screen is NOT cleared when switching modes.)
Saving the whole screen is rarely needed, but is provided in
case you're using a nonstandard card that needs the whole
screen to be saved.
*** Int2FAssist ***
This option, normally set to 'no', tells TDVIDEO, to make a
special Int 2F call before switching video modes. This call
tells the current Windows screen driver (VGA.DRV for standard
VGA mode) what's happening. The desired side-effect of this
call is to make Windows tell all of its child windows to re-
paint themselves. This option is provided only for support for an
ATI Super VGA video mode and for applications built using
EasyWin (see NOTE above). However, be aware, that this option
can affect the other supported modes if it's enabled (use
this option only if absolutly necessary).
*** DebugFile ***
TDVIDEO.DLL normally doesn't save any debugging information.
If you're having problems using a special DLL, the DebugFile
option can be used to specify the path and filename of a log
file. Information logged to this file can be used if you need
to contact Borland's Technical Support. Information logged
consists of the Date/Time, the version of the DLL, the name
of the Windows screen driver that is currently in use, the
state of all .INI options, and a listing of all the calls to
the DLL's functions.
For example, if you want your DLL to save the entire screen
and log information to a file named C:\WINDOWS\TDVIDEO.LOG,
create a file called TDVIDEO.INI in the WINDOWS directory
that contains the following commands:
[VideoOptions]
SaveWholeScreen=yes
DebugFile=c:\windows\tdvideo.log
Turbo Profiler and remote profiling of Windows applications
===========================================================
Some system configurations may cause WREMOTE and TPROF to fail when
profiling Windows applications on a remote system. The problem usually
causes both your program and Windows to abort when you attempt to
execute your program on the remote machine. If you experience this
problem with your system configuration, there are several possible
ways to avoid the problem.
1. Use TPROFW to profile the program directly under Windows on one
machine, rather than using two machines.
2. Run Windows in standard mode (using the DOS command WIN
/S), then load WREMOTE. On the local machine, use TPROF in
passive analysis mode (note that passive analysis is not
available in 386 enhanced mode.)
3. If you require active analysis mode and cannot use TPROFW
directly, the following procedure may provide a solution.
First, load Windows and WREMOTE on the remote machine.
Next, load TPROF on the local machine and, without running
the program, remove all area markers using the Module
window's local menu (Ctrl-R, A, from the Module window).
With this, exit TPROF using Alt-X, thus creating a .TFA
file having no areas marked. Reload TPROF and your
program; there should be no areas marked (you can verify
this by opening an Areas window). Add any areas you are
interested in examining, and begin profiling your program.
CLASS LIBRARY
- If you used the add(), addAt(), or getItemsInContainer()
member functions of the Array class in Borland C++ 2.0
applications, note that their behavior has changed slightly.
The following rules apply to these and related functions:
1. add() will insert its argument at the lowest available
location in the Array. This location is known as the
"insertion point".
2. detach() will remove its argument from the Array, and if
that Object is located below the insertion point, it
will move the elements above the Object being removed
and below the insertion point down one position, so that
the elements below the insertion point remain
contiguous. The insertion point, of course, moves down
one.
3. if the location specified in a call to addAt() is below
or at the insertion point, the elements above the
specified location and below the insertion point are
moved up one position, and the Object is inserted. The
insertion point moves up one.
4. if the location specified in a call to addAt() is above
the insertion point, the Object is inserted at that
location, replacing any Object that may have been placed
there previously.
5. getItemsInContainer() returns the number of elements
below the current insertion point. If you use addAt()
to add elements above the insertion point, they will not
affect the value returned by getItemsInContainer().
This is a change from the behavior in the previous
version of the class library.
- Two versions of the class library sources are provided; one
using an implementation using C++ templates, and one not using
templates. The small and dynamic link libraries are provided, and
a makefile is provided to build other models.
ObjectWindows Library
- You must rebuild the class libraries in the appropriate model
for the intended OWL model if they don't already exist - see
paragraph above.
- Note that you must use the TWindow member function AssignMenu
to assign a window's Attr.Menu member and to load a menu for
that window.
- Before you try the MFILEAPP example, you should change line 10
of MFILEAPP.CPP to
const char DskFile[] = "MFILEAPP.D$$";
The DSK extension is used for desktop files in the Integrated
Development Environment.
Please see OWL.DOC for additional information on ObjectWindows
Library.
TURBO VISION
- For information on the Help compiler, and how to build a help
document, please refer to the comments in the file TVHC.CPP in
the help directory. Also, see TVDemo for an example of how to
add help to your applications.
- Due to the complex interactions among the Turbo Vision classes,
certain situations can arise involving deletion of objects that
cannot be properly handled through destructors. Therefore, we
provide a static member function void destroy( TObject * ) to
the class TObject. Whenever an object of a type derived from
TObject is to be deleted, the function destroy() should be called
instead. This will take care of terminating the object,
correctly freeing the memory that it occupied. For example:
TDialog *dlg = new TDialog( ... );
//delete dlg; // DON'T DO THIS
destroy( dlg ); // DO IT THIS WAY
- The Turbo Vision Source Code is provided for your use and
modification. IMPORTANT: Borland Technical Support will not
answer questions or provide any assistance relating to this
product. Essentially, the Sources are provided "as is" and you
are on your own.
- In order to build the library, you must have Tasm available.
- When building or modifying the library it is better to place
debug info in only those modules in which you are interested.
If you place debug info all the modules, Tlink may not be able
to link your application.
- In order to build an overlayed Turbo Vision application with
BC3, make sure you observe the following:
1. You need to rebuild the Turbo Vision library with
overlays. Change to the SOURCE directory under TVISION
and enter the command
make -DOVERLAY -B
This will produce a new version of TV.LIB which will
support overlays. It will also produce two .OBJ files,
SYSINT.OBJ and TEVENT.OBJ. These two files contain code
for TV's interrupt handlers, so they cannot be
overlayed.
2. When building an overlayed application, you must be sure
to link with the three files SYSINT.OBJ, TEVENT.OBJ, and
TV.LIB. The two .OBJ files must not be in overlays.
Your command line should look something like this:
bcc -ml -Yo myfile -Yo- sysint.obj tevent.obj -Yo tv.lib
See the Programmer's Guide for details on the meanings
of the various Yo switches.
3. To improve performance, increase the size of the global
variable __ovrbuffer to 0x2000 or greater.
- TNSCollection::atFree (page 323)
The atFree member function of TNSCollection is not documented in
the TurboVision User's Guide. The description should read:
Syntax:
void atFree(ccIndex index);
Removes the item at the index position, then destroys the item
with delete(item). The following items are moved up one position,
and count is decremented by 1. If index is greater than or equal
to count, error(1,0) is called.
- messageBox (page 479)
The messageBox function returns an unsigned short integer (ushort)
that has one of the following values, corresponding to the dialog
box standard commands:
cmOk
cmCancel
cmYes
cmNo
cmDefault
Please see TV.DOC for additional information on Turbo Vision.
RUNTIME LIBRARY SOURCE
The Borland C++ Runtime Library Source Code is provided for
your use and modification. IMPORTANT: Borland Technical
Support will not answer questions or provide any assistance
relating to this product. Essentially, the Sources are
provided "as is" and you are on your own. If you find what you
think is a genuine problem with the source code, however, we
would like to hear about it. See "How to Get Help" above.
See CRTL.DOC for more information on building the Runtime
Library from source.
5. TESTING YOUR EXPANDED MEMORY: EMSTEST.COM
---------------------------------------------
Included with Borland C++ is a program to test your Expanded
Memory hardware and software. If you have problems using
Borland C++ with your EMS, type EMSTEST at the DOS prompt and
follow the instructions.
6. CORRECTIONS TO THE DOCUMENTS
---------------------------------
Borland C++ Programmer's Guide
------------------------------
Chapter 8, "Building a Windows application"
-------------------------------------------
Page 321
--------
The TLINK command line should be changed to:
tlink /Tw /v /n /c C:\BORLANDC\LIB\c0ws whello,\
whello,\
,\
C:\BORLANDC\LIB\cws
^^^
Turbo Assembler User's Guide
----------------------------
Page 333 in Appendix D, Utilities, states that Turbo Assembler's online
help facility is called TASMHELP. TASMHELP can be used as documented, but
only if Turbo Assembler is installed in a directory other than the directory
where Borland C++ is installed. If TASM is installed in the same directory
as Borland C++, use the THELP utility for online help. THELP allows you to
access a variety of help files via an easy to use menu system.
Here's how THELP works:
1) After installing Borland C++ and Turbo Assembler, invoke THELP at
your DOS prompt.
2) Type ALT-F to bring up the menu of available help files.
3) Choose TASM.TAH to access help for Turbo Assembler.
Tools and Utilities Guide
-------------------------
Introduction
------------
Information on transfer macros, the Turbo Editor Macro Language
(TEML), and the Turbo Editor Macro Compiler (TEMC) are also
documented in the online file UTIL.DOC.
Chapter 1, "Import library tools"
---------------------------------
Page 7
------
IMPLIBW does allow you to create a single import library from
multiple DLLs or module definition files. At the File Select
dialog box, you can type multiple filenames in the File edit
control. When you choose OK to make the import library,
IMPLIBW will use all the exports from each of the DLLs or
module definition files you listed. Note that you can only
select a single file using the file list box; you must type in
the filenames if you need to specify more than one.
Chapter 2, "Make: The program manager"
--------------------------------------
Page 11
-------
In the sentence that begins "All options that do not specify a
string (-s or ±a, for example)..." the "±a" should be "-a".
Page 33
-------
The last word of the page, "which" should be "while @<".
Chapter 3, "TLIB: The Turbo librarian"
--------------------------------------
- There is an additional TLIB command line option, /0, which is not
documented in the printed TLIB reference (Chapter 3 of the Tools &
Utilities Guide). The /0 option instructs the Turbo Librarian to
remove all "Comment" records from the library. Comment records are
typically used to store information used by the debugger or other
tools, and are not needed to create an executable file. Using this
option will make your libraries (and executable programs created using
the libraries) smaller. The /0 option is equivalent to checking
Purge Comment Records in the Options|Librarian dialog box within the IDE.
Chapter 4, "TLINK: The Turbo linker"
--------------------------------------
Page 58
-------
Change the TLINK format description to:
tlink C0[W|D|F]x myobjs,exe,[map],[IMPORT][mylibs][OVERLAY]
[EMU|FP87 mathx][CWx|Cx],[deffile]
^^^^^^^^^^^^^^^^^^^^^^^^
Page 60
-------
Reverse the order of the two bullet items below:
o CWx.LIB, the run-time library..
o if you are using floating point math, FP87.LIB...
The math libraries should be linked before the run-time library.
Appendix A, "Error messages"
----------------------------
Page 183
--------
In the TLINK warning "filename(linenum): Duplicate internal name
in imports," there is an extraneous right bracket that should be
removed.
Page 197
--------
In the compile-time error "Last parameter of operator must have
type int," "operator-±" should actually read "operator--"
Library Reference
-----------------
Chapter 2, "The run-time library"
---------------------------------
Page 173
--------
Under "Return value" "doserno" should be "_doserrno".
Page 174
--------
Under "Return value" "doserno" should be "_doserrno" and
the entry for ENOENT should be "Path or file name not found".
Page 185
--------
_fpreset() is shown as being available under Windows, which
is not true.
Note that two functions are incorrectly prototyped in the Library
Reference. Here are their correct prototypes:
size_t far _fstrlen(const char far *s);
size_t far _fstrcspn(const char *s1, const char far *s2);
The following functions have some missing documentation in the
Library Reference:
------------------------------------------------------------------
Function: stackavail
Gets the amount of available memory.
Syntax:
#include <malloc.h>
size_t stackavail(void);
╔═══════╤════════╤══════════╤══════════╤═══════════╗
║ DOS │ UNIX │ Windows │ ANSI C │ C++ only ║
╟───────┼────────┼──────────┼──────────┼───────────╢
║ ■ │ │ │ │ ║
╚═══════╧════════╧══════════╧══════════╧═══════════╝
Remarks:
stackavail returns the number of bytes available on the stack. This
is the amount of dynamic memory which alloca may access.
Return value:
stackavail returns a size_t value indicating the number of bytes
available.
See also:
alloca, allocmem, coreleft, _dos_allocmem, farcoreleft,
_stklen (global variable)
Example:
#include <malloc.h>
#include <stdio.h>
int main(void) {
char *buf;
printf("\nThe stack: %u\tstack pointer: %u", stackavail(), _SP);
buf = (char *) alloca(100 * sizeof(char));
printf("\nNow, the stack: %u\tstack pointer: %u", stackavail(), _SP);
return(0);
}
Program output:
The stack: 63528 stack pointer: 65524
Now, the stack: 63424 stack pointer: 65420
------------------------------------------------------------------
Function: strcmp, _fstrcmp
Compares one string to another.
Syntax:
#include <string.h>
Near version: int strcmp(const char *s1, const char *s2);
Far version: int far _fstrcmp(const char far *s1, const char far *s2);
╔═══════╤════════╤══════════╤══════════╤═══════════╗
║ DOS │ UNIX │ Windows │ ANSI C │ C++ only ║
╟───────┼────────┼──────────┼──────────┼───────────╢
Near version ║ ■ │ ■ │ ■ │ ■ │ ║
╟───────┼────────┼──────────┼──────────┼───────────╢
Far version ║ ■ │ │ ■ │ │ ║
╚═══════╧════════╧══════════╧══════════╧═══════════╝
Remarks:
strcmp performs an unsigned comparison of s1 to s2, starting with
the first character in each string and continuing with
subsequent characters until the corresponding characters differ
or until the end of the strings is reached.
Return value:
strcmp returns a value that is
< 0 if s1 is less than s2
== 0 if s1 is the same as s2
> 0 if s1 is greater than s2
See also:
strcmpi, strcoll, stricmp, strncmp, strncmpi, strnicmp
Example:
#include <string.h>
#include <stdio.h>
int main(void)
{
char *buf1 = "aaa", *buf2 = "bbb", *buf3 ="ccc";
int ptr;
ptr = strcmp(buf2, buf1);
if (ptr > 0)
printf("buffer 2 is greater than buffer 1\n");
else
printf("buffer 2 is less than buffer 1\n");
ptr = strcmp(buf2, buf3);
if (ptr > 0)
printf("buffer 2 is greater than buffer 3\n");
else
printf("buffer 2 is less than buffer 3\n");
return 0;
}
------------------------------------------------------------------
Function: strcpy, _fstrcpy
Copies one string into another.
Syntax
#include <string.h>
Near version: char *strcpy(char *dest, const char *src);
Far version: char far * _fstrcpy(char far *dest, const char far *src);
╔═══════╤════════╤══════════╤══════════╤═══════════╗
║ DOS │ UNIX │ Windows │ ANSI C │ C++ only ║
╟───────┼────────┼──────────┼──────────┼───────────╢
Near version ║ ■ │ ■ │ ■ │ ■ │ ║
╟───────┼────────┼──────────┼──────────┼───────────╢
Far version ║ ■ │ │ ■ │ │ ║
╚═══════╧════════╧══════════╧══════════╧═══════════╝
Remarks:
Copies string src to dest, stopping after the terminating null
character has been moved.
Return value:
strcpy returns dest.
See also: stpcpy
Example:
#include <stdio.h>
#include <string.h>
int main(void)
{
char string[10];
char *str1 = "abcdefghi";
strcpy(string, str1);
printf("%s\n", string);
return 0;
}
------------------------------------------------------------------
Function: _dos_open
Opens the specified file and prepares it for reading or writing.
Syntax:
#include <fcntl.h>
#include <share.h>
#include <DOS.H>
unsigned _dos_open(const char *filename, unsigned oflags, int *handlep);
Arguments:
filename -- File that the function opens and prepares for reading and/or
writing
oflags -- Open-mode symbolic constants (defined in FCNTL.H) and
file-sharing symbolic constants (defined in SHARE.H) that
specify the file's open mode (read, write, share, etc.)
handlep -- Points to the location where the function stores
the file's handle.
╔═══════╤════════╤══════════╤══════════╤═══════════╗
║ DOS │ UNIX │ Windows │ ANSI C │ C++ only ║
╟───────┼────────┼──────────┼──────────┼───────────╢
║ Yes │ │ Yes │ │ ║
╚═══════╧════════╧══════════╧══════════╧═══════════╝
Remarks:
Opens the file specified by filename, then prepares it for reading
or writing. The file is always opened in binary mode.
On successfully opening the file, the function sets the file
pointer (which marks the current position in the file) to the
beginning of the file.
The maximum number of simultaneously open files is defined by
HANDLE_MAX.
Return Value:
On success, _dos_open returns 0, stores the file handle at the location
*handlep
On error, _dos_open returns the DOS error code and sets errno to one
of the following:
ENOENT (Path or file not found)
EMFILE (Too many open files)
EACCES (Permission denied)
EINVACC (Invalid access code)
See Also: _dos_creat _dos_read _dos_write _read open sopen
ObjectWindows User's Guide
--------------------------
Chapter 2, "Stepping through Windows"
-------------------------------------
Page 22
-------
The sentence that begins "These libraries are located in
the library directories listed in the following table..."
should instead read "Table 2.2 lists the file names of the
static ObjectWindows library and static container class
library for each supported memory model."
Chapter 11, "Dialog objects"
----------------------------
Page 151
--------
In the TSampleWindow::GetName fragment shown, a line is in error.
The line that begins
if (ExecDialog(new TInputDialog(this...
should read
if (GetApplication()->ExecDialog(new TInputDialog(this...
Chapter 12, "Control objects"
----------------------------
Page 158+
---------
Although it doesn't specifically state so, TListBox and its member
functions can be used with both single- and multiple- selection
list boxes.
Turbo Vision User's Guide
-------------------------
- cmOk has been changed to cmOK to be consistent with all other
uses of 'OK'.
- TView.writeCStr() is not available. Use TView.writeStr(). All
documentation for TView.writeCStr applies exactly to TView.writeStr.
- TProgram has two additional member functions, suspend() and
resume(). They do the same thing as the corresponding functions
in TMouse, TEventQueue, etc. - they encapsulate suspension and
resumption when doing things like a DOS shell.
- The parameter list for the constructor for TSubMenu has been
changed from
TSubMenu( const char *, int, int = 0 )
to
TSubMenu( const char *, ushort, ushort = hcNoContext )
- TNSCollection::atFree (page 323)
The atFree member function of TNSCollection is not documented in
the TurboVision User's Guide. The description should read:
Syntax:
void atFree(ccIndex index);
Removes the item at the index position, then destroys the item
with delete(item). The following items are moved up one position,
and count is decremented by 1. If index is greater than or equal
to count, error(1,0) is called.
- messageBox (page 479)
The messageBox function returns an unsigned short integer (ushort)
that has one of the followin values, corresponding to the dialog
box standard commands:
cmOK
cmCancel
cmYes
cmNo
cmDefault
Welcome to Borland C++ & Application Frameworks 3.1
---------------------------------------------------
This README file contains important information about Borland C++.
For the latest information about Borland C++ and its accompanying
programs and manuals, read this file in its entirety.
TABLE OF CONTENTS
-----------------
1. How to Get Help
2. Installation
3. Features
4. Important Information
5. Testing Your Expanded Memory
6. Corrections to the Documents
1. HOW TO GET HELP
-------------------
If you have any problems, please read this file, the
HELPME!.DOC and other files in your DOC subdirectory, and the
Borland C++ manuals first. If you still have a question and
need assistance, help is available from the following sources:
1. Type
GO BCPPDOS - for questions pertaining to DOS
or
GO BCPPWIN - for questions pertaining to Windows
on the CompuServe bulletin board system for
instant access to the Borland forums with their libraries of
technical information and answers to common questions.
If you are not a member of CompuServe, see the enclosed
special offer, and write for full details on how to receive
a free IntroPak containing a $15 credit toward your first
month's on-line charges.
2. Check with your local software dealer or users' group.
3. Borland's TECHFAX service. Call (800) 822-4269 for a FAX
catalog of entries.
4. If you have an urgent problem that cannot wait and you have
sent in the license agreement that came with the package,
you may call the Borland Technical Support Department at
(408) 461-9133. Please have the following information ready
before calling:
a. Product name and serial number on your original
distribution disk. Please have your serial number ready
or we will be unable to process your call.
b. Product version number. The version number for Borland
C++ can be displayed by pressing Alt-H/A in the IDE.
c. Computer brand, model, and the brands and model numbers of
any additional hardware.
d. Operating system and version number. (The version number
can be determined by typing VER at the DOS prompt.)
e. Contents of your AUTOEXEC.BAT file.
f. Contents of your CONFIG.SYS file.
2. INSTALLATION
----------------
You MUST use the INSTALL program to install Borland C++. The
files on the distribution disks are all archived and have to be
properly assembled. You cannot do this by hand!
Installing to the same directory structure as a previous version
without erasing the directories is not recommended; you may
encounter problems due to old header files, libraries, memory
managers, or configuration files.
To start the installation, change your current drive to the one
that has the install program on it and type INSTALL. You will
be given instructions in a box at the bottom of the screen for
each prompt. For example, if you will be installing from drive
A:, type:
A:
INSTALL
- This INSTALL handles the installation of both the compiler
and debugger and tools in one operation, and allows several
new configuration options.
- Note: The list of files is contained in a separate file
called FILELIST.DOC, which will appear in the target
directory you specify during installation.
- After installation, make sure you insert \BORLANDC\BIN - or
whatever you selected as your BIN directory - into
your DOS path so the DLL and executable files can be found.
- If you have previously installed Resource Workshop, make sure
that you remove the directory of that version from your path. The
version included on these disks supercedes previous versions.
- If you use a Windows command shell other than Program Manager,
you may not get a Borland C++ group installed for Windows. If
you don't, use File|Run in Program Manager to run the following
command:
GROUPS GROUPS.B$$
You will then have a new group for Borland C++.
- After your initial installation, you can run INSTALL again to
add elements you omitted the first time. Select only the
things you want to add in the INSTALL options screen. Because
some things you may want to save could be overwritten, review
the following items to make sure you don't lose important
information:
1. Selecting CMD (the Command-line compiler) causes an
overwrite of any existing TURBOC.CFG & TLINK.CFG file
with path information provided in that INSTALL session.
Any switches that you have added will not be preserved.
2. By selecting any one of the following, the help file
paths and choices for THELP.CFG will reflect the current
session's installation choices:
a. CMD - command-line compiler
b. IDE - integrated environment
c. TD - Turbo Debugger
d. TASM - Turbo Assembler
e. TV - Turbo Vision
f. OWL - ObjectWindows library
3. If you have made any alterations to headers or startup files
they will be overwritten if any library models are selected.
4. Selecting the Create BorlandC++ Group option will add a
group to the desktop and insert the appropriate icons
into that group if this is a first time installation. If
this is a re-installation this option will insert the
appropriate icons into the existing group.
In general, any selection you make of something installed
earlier will cause an overwrite of the earlier version
without prompting.
An attempt to install to a network directory for which you
don't have delete rights will fail with the message "Invalid
directory." Make sure delete rights are secured before
attempting an installation to a network.
You should read the rest of this README file to get further
information about this release before you do the installation.
See also the files in the DOC subdirectory after installation
for general information not included in the manuals.
3. NEW FEATURES
----------------
- Borland C++ for Windows: A Windows-hosted IDE which produces
Optimized code. The same Optimization options available in BC.EXE
are in BCW.EXE.
- Color syntax highlighting: All IDEs now highlight your source
according to syntax. See the choices under Options|Environment|
Colors|Edit Window in the DOS IDE and Options|Environment|
Highlight in the Windows IDEs. This option is enabled by
Options|Environment|Editor|Syntax Highlighting.
- 386 code generation: An option has been added to produce 386
instructions in the generated code. Use -3 at the command line,
or Options|Compiler|Advanced Code Generation|80386 in the IDEs.
- The Object Data calling convention for improved efficiency of C++
code. See the User's Guide chapter, "The Command-line Compiler",
under the option -po for more information. This option is also
available under Options|Compiler|Optimizations|Object data calling
in the IDE.
- Windows 3.1 support: All executables and DLLs have been modified
appropriately for compatibility with Version 3.1 of Windows.
The ObjectWindows Library header files have been modified for
compatibility with the new Windows header files as well.
NOTE CONCERNING USE OF MICROSOFT WINDOWS 3.1 REDISTRIBUTABLES FOR
APPLICATIONS RUNNING ON MICROSOFT WINDOWS 3.0
This Borland language product contains everything you need to develop
applications to run on the most recent version of Microsoft Windows,
version 3.1. In some cases, you may need to copy and include in your
application one or more Microsoft "redistributable" files from a copy
of version 3.1 so that your application will also run on version 3.0.
Microsoft informs us that you may copy the redistributable files from
from Microsoft Windows 3.1 for this purpose. If you do so, you must
comply with the conditions stated in the Borland No-Nonsense License
Statement included in this package as if the redistributable files you
copy were a part of this Borland language product. Microsoft's
redistributable files in Windows 3.1 are:
winhelp.exe, winhelp.hlp, commdlg.dll, ddeml.dll, toolhelp.dll,
vtd.386, olecli.dll, olesvr.dll, ver.dll, lzexpand.dll,
expand.exe, regload.exe, stress.dll, dib.drv, markmidi.exe,
penwin.dll, and shell.dll.
If you do not find any of these files in the BIN directory, they
are also included in the Windows retail distribution, and installed
in your Windows directories.
- WinSpector, a postmortem Windows debugging tool that traps
general protection faults and provides information on where
the fault occurred and the state of the machine at the time.
- You can now increase the number of files that can be open
at one time in a DOS program by a simple modification of the
runtime library.
First, modify _NFILE.H in your INCLUDE directory by changing
the #define for _NFILE_:
#define _NFILE_ n
where n is the number of files you want to open. Make sure the
FILES statement in your CONFIG.SYS file specifies at least
this number.
Then compile the two files FILES.C and FILES2.C in the LIB
directory:
BCC -c -m<model> files.c files2.c
where <model> is the memory model you're using.
Then link them directly with the program which opens the files,
for instance:
BCC myfile.c files.obj files2.obj
If you want the change to apply to all modules, add
FILES.OBJ and FILES2.OBJ created above to the libraries
you use; from the LIB directory, type:
TLIB c<model> +-files.obj +-files2.obj
where <model> matches what you used for the BCC command
above.
DPMI
----
BC.EXE, BCC.EXE, MAKE.EXE, and TLINK.EXE are now hosted under
DPMI. These files replace both the files with the same name in
Borland C++ 2.0 and the BCX.EXE, BCCX.EXE, and TLINKX.EXE files
in the same product. There is no longer a TKERNEL.EXE file.
Important!
----------
You must have at least 1Mb of extended memory to run these programs.
If you encounter a "machine not in database" message while attempting
to run the compiler, run the DPMIINST program to add your machine
configuration to the DPMI server database.
This version includes a resident DPMI host program, DPMIRES.EXE,
that allows you to preload the server before invoking BC, BCC, or
any other DPMI-hosted executables. If you want to run such hosted
EXEs in a Windows Standard Mode DOS window, you should run
DPMIRES.EXE before loading Windows. To do this, enter the
following commands at DOS:
set DPMIMEM=MAXMEM 2000
dpmires
win /s
If you want to limit the amount of extended memory used by the
DPMI-hosted executables, an environment variable called DPMIMEM
can be set to do so. For instance, the command
set DPMIMEM=MAXMEM 2000
reserves about 2 Mb of memory for DPMIRES. The number after MAXMEM
can be adjusted, but cannot be lower than 1000.
DPMIRES should not be run before running Windows in Enhanced Mode.
Windows requires its own DPMI services.
The hosted executables cannot spawn each other when SHARE is loaded.
For instance, if you run MAKE on a file which in turn calls MAKE
again, you will get a sharing violation. In this specific case,
you can call the real mode version, MAKER, within the given makefile,
and a sharing violation won't occur.
Note to OS/2 users: To run any DPMI-hosted executables, like BC, BCC,
or TLINK, in a DOS Window, you need to enable DPMI for that window:
- Click the right mouse button on a DOS window icon in Command
Prompts
- Select Open|Settings|Session|DOS Settings|DPMI_DOS_API and select
ENABLED.
Note to EMM386.SYS users: To run DPMI-hosted EXEs, under the EMM386
included with Windows 3.1, you need to apply a patch to our files
as follows:
- Go to the BIN directory
- Type the following command:
patch server.dif dpmi16bi.ovl
You will now be able to run BC, BCC, etc.
4. IMPORTANT INFORMATION
-------------------------
- There is now only one version of the DOS IDE, BC.EXE, and
of the command-line compiler program, BCC.EXE. Because the
BCX and BCCX files are no longer in Borland C++, you'll need
to alter batch or make files that use those names.
- Borland C++ only supports Protected Mode Windows target
files. Make sure to use the /t option when using the Resource
Compiler if you want to enforce Protected Mode usage.
- When using Brief with THELP, make sure to use Brief's -p
switch to ensure that the THELP window will be visible.
- We recommend that you use the following mouse drivers with
this product:
Microsoft Mouse version 7.04 or later;
Logitech Mouse version 5.01 or later;
Genius Mouse version 9.06 or later.
- If you use MAKE or the IDE's Project Make to invoke the Resource
Compiler, the .RC files you wish to compile MUST be in the same
directory as your project or makefile. This is because the Microsoft
Resource Compiler does not properly handle relative path names, and
returns a misleading error message that refers to an incorrectly
spelled version of your .RC file.
- If you get a "floating point formats not linked" message at
runtime, put the following somewhere in your source files:
extern void _floatconvert();
#pragma extref _floatconvert
This will force inclusion of floating point formats, which
may not be linked to reduce executable size.
- Make sure that you use the -WE switch (Options|Compiler|Entry|
Windows <DLL> explicit functions exported in the IDE) when
using the fastcall modifier. The same applies when using the
fastcall compilation option (-pr on the command line,
Options|Compiler|Entry|Register in the IDE.) Also see the first
entry on using fastcall with main() in "COMPILER" below.
- If the Windows 3.0 home directory precedes the Borland C++ BIN
directory in your path, attempting to access Help will result in the
message "This version of Help file not supported." To enable
Help, either reorder your path or copy WINHELP.EXE to your Windows
3.0 directory.
- This compiler uses more strict checking of C++ syntax and argument
matching than previous versions. You can expect more warning
and error messages based on the ANSI C++ version 3.0 standard.
- If you receive a "bad object record" message from the linker when
building OWL or container class library applications, you are
probably using the Borland C++ version 3.0 class libraries and/or
OWL libraries. Make sure your library path specifies version 3.1
libraries for those applications.
COMPILER
- When using fastcalls (-pr command line option) you are
required to explicitly use the C calling convention, "cdecl",
for main. For example:
int cdecl main( )
In Borland C++ 3.0 the compiler did not correctly name main when
fastcalls were used, with the result that you were not
required to cdecl main (in all cases). This is a dangerous
condition and the compiler now (correctly) names main,
resulting in a linker error in Borland C++ 3.1 for those Borland C++
3.0 compiled programs that didn't cdecl main.
Please correct any "non-cdecl main" definitions, if compiled
with fastcalls.
- In Borland C++ 3.0 the compiler allowed conversions from "const void*"
to "void *", contrary to ANSI; for Borland C++ 3.1 this is no
longer allowed. In addition, several other conversions
regarding const variables have also been restricted. If you
are a user of the const keyword, expect that you may have
conversions that were allowed to exist with Borland C++ 3.0 that
will need to be changed in order to compile using Borland C++ 3.1.
- In Borland C++ 3.0 the following syntax was allowed-
class foo{
...
} // note that the semicolon is missing here
f(){
...
}
The new compiler now requires the semicolon to be added after
the class declaration. The compiler would interpret the
example above as an attempt to return a class declaration to
f().
- A new implicit conversion rule is now enforced for constructors.
From page 573 of The C++ Programming Language 2nd Edition:
"When no constructor for class X accepts the given type, no
attempt is made to find other constructors or conversion
functions to convert the assigned value into a type acceptable
to a constructor for class X."
For example,
class X { /* ... */ X(int); };
class Y { /* ... */ Y(X); };
Y a = 1; // illegal: Y(X(1)) not tried
Note that this rule only applies to constructors with ONE parameter.
- The inport/outport functions have been changed to accept an
unsigned parameter instead of an int. The new prototypes are:
unsigned inport(unsigned)
unsigned char inportb(unsigned)
void outport(unsigned, unsigned)
void outportb(unsigned, unsigned char)
- We have new resource compiler and linker components:
BRCC is the Borland Resource Compiler. RLINK is the resource
linker/binder. BRC.EXE calls BRCC.EXE and RLINK.EXE, and is an
equivalent to Microsoft's Windows 3.1 RC. New features that
may not be found in other products include:
- Binding of multiple RES files is supported under RLINK.
- Resource ID conflicts are detected and resolved during
binding.
For more information, see the file MANUAL.RW located in your
\BORLANDC\DOC directory.
- There is currently support in ObjectWindows for STRICT and
non-STRICT versions of OWL programs for Borland C++ versions
3.0 and 3.1. Simply define the macros WIN30 or WIN31, and add a
definition for STRICT if you need STRICT compliance. For
more details see WIN31.DOC in the DOC directory and
OWL31.DOC in the OWL\DOC directory.
- The default extension for source files to the command-line
compiler is .CPP; that is, if you enter
BCC -c test
the compiler will search for test.cpp, and give an error if a
file of that name cannot be found. If you want to have the
command-line compiler assume a .c extension and C language
source, use the command-line option -P-c. For more
information, see "The command-line compiler" in the User's
Guide.
- Note that the Generate COMDEFs choice under
Options|Compiler|Code Generation and the -Fc command-line
option are only supported in the C language. Linker errors
will result if you attempt to use a communal variable in C++.
- The macros min() and max() are not defined when stdlib.h is
compiled as C++ (to allow their use in 3rd party libraries,
etc.).
- Note that files with the extension .SYM can come from at least
two different sources: Borland's precompiled headers, and the
output of Microsoft's MAPSYM or Borland's TMAPSYM programs,which
can also be used by SYMDEB and other debuggers.
These files do not have compatible formats, so collisions
should be avoided by renaming the precompiled header file
with -H=<filename> on the BCC command line, or as a BCC transfer
option in the IDE.
- There is now full support of distance modifiers (near and
far) used for class member pointers. Here are two sample
declarations and their meanings:
void (A::* far var) ();
this is a far variable 'var' of type 'void (A::*)()';
void (far A::* var) ();
this is a 'default distance' variable 'var' of type
'void (far A::*)()'
- You must use "smart callbacks" - -WS from the command line,
Options| Compiler|Entry/Exit Code|Windows smart callbacks in
the IDE - if your application uses classes whose code is in a
DLL. This applies especially in the case of a class
implemented in an EXE which is derived from another
implemented in a DLL, which normally applies for users of OWL
and other object-oriented class libraries.
- If you use C++ templates, and use a separate TLINK command
line rather than letting BCC invoke TLINK, you should make
sure that you turn on case-sensitive links with the /c switch.
IDE
- When debugging a mouse application the Options|Debugger|Display
Swapping option should be set to "Always" for best results.
- Defines entered under Options|Compiler|Code Generation entered
with semicolons don't apply to RC project items. If you need to
make multiple definitions for resource compilation in the IDE,
enter separate defines in the Project Local Options, for example:
-dDEF1 -dDEF2=1
- In the DOS IDE, the mouse cursor is turned off during compilation
for performance improvements.
- If you run File|Printer setup from BCW.EXE (or another Windows
application which has printer setup support) under the Windows
3.0 debugging kernel, you will get a System Error from Windows.
You must switch to the NODEBUG version to run this option.
- The initial block marking behavior in the IDE is determined
by which version of the IDE is used first after installation.
Invoking BCW.EXE first will cause Windows-style block marking
conventions to be in effect; otherwise the standard DOS IDE
behavior will be used. You can change the behavior by
selecting Options|Environment| Editor and changing the
settings for Persistent blocks and Overwrite blocks.
- The first time you open certain projects in Borland C++ for
Windows (BCW), you will get a dialog indicating that one or
more items will be converted. This will occur for all Windows
projects existing prior to BC 3.1 and for all DOS projects
that you open in BCW. The purpose of the dialog is to
indicate to you that certain changes need to be made to the
project to allow it to compile properly for Windows. DOS
projects that are opened in BCW will need to be changed to
target Windows, and many projects will need to generate 80286
code rather than 8088 code. You have several options
regarding saving the changes:
Don't auto save project
Warn before saving project
Save project now
The first option will be the most likely choice for DOS C++
programs that you bring up in BCW in order to browse classes.
When you close the project, it won't be saved, so that you don't
lose the options you have already set.
If you select the second option, you will be given the choice of
saving the project when you close it.
The last option saves the project with the new settings
immediately. For your current Windows projects, you will
probably want to choose this option so that this dialog will no
longer come up for the project.
- The RC.EXE included in this release targets Windows 3.1. You
will need to include the -30 option for RC files in any project
intended to run under Windows 3.0. Use Options|Transfer|Resource
Compiler|Edit|Command line, and change the entry to:
-30 $RC
If you use PRJ2MAK on a project which uses this option,
you will need to edit the resulting .MAK file, and move
the "-30" option to the RC line which links the .RES
file to the .EXE file. For instance, the line output by
PRJ2MAK may look like:
rc filename.res filename.exe
..
rc -30 <other options> filename.res filename.rc
Change this to
rc -30 filename.res filename.exe
..
rc <other options> filename.res filename.rc
Resource Workshop
- 256-Color bitmaps and RLE4 compression:
Due to problems with many 256-color display drivers for Windows
3.x, saving a bitmap with the RLE4 compression feature of
Resource Workshop enabled can fail to produce valid output files.
Under Windows, the display driver is responsible for providing
RLE compression when it is requested. However, because many
display drivers do not implement this feature correctly, we
recommend that you take the following steps when attempting to
use RLE4 compression:
1. Save the bitmap with the compression option set to "None".
This ensures that you will have a usable copy of your bitmap
if the remaining steps are not successful.
2. Set the compression option to "RLE4".
3. Select Resource|Save Resource As and save the bitmap under a
different file name.
4. Select File|Open Project and load the compressed version of
the bitmap.
If you cannot load the compressed bitmap, you must use the
uncompressed bitmap file you saved in step 1.
If your 256-color driver fails to compress the bitmap correctly,
contact the display driver vendor.
Flood-fill with the paint bucket tool
-------------------------------------
Because of problems inherent to display drivers, flood-filling a
section of a bitmap using the paint bucket tool can fail to
produce the desired result.
Resource Workshop provides an alternate version of the flood-fill
algorithm that is slower but more reliable than the version
provided by most Windows 3.x display drivers.
You can enable Resource Workshop's flood-fill algorithm by adding
a flag called "RWS_OwnFloodFill" to the Icon editor section
([RWS_Icon]) of WORKSHOP.INI. Set the flag to 1.
The edited section of WORKSHOP.INI should look something like
this:
[RWS_Icon]
RWS_OwnFloodFill=1
PercentLeft=50
ZoomLeft=8
ZoomRight=1
bVert=1
Contact the display driver vendor if you experience flood-fill
problems.
WinSight
- WinSight traces messages received by GetMessage or SendMessage. It
does not trace messages sent directly by function call such as
WM_INITDIALOG.
- Please note that messages displayed as "dispatched" are actually
intercepted at the time of GetMessage, not DispatchMessage.
EXAMPLE PROGRAMS
- When you are running any example programs that come with .PRJ
files, if you didn't use the standard directories when you
installed Borland C++ you will have to change the .PRJ file
to reflect your actual directory setup. Do this from inside
Borland C++ with Alt-O/D.
- When run under the Windows 3.1 debug kernel, many OWL examples will
cause a message to be displayed like these:
USER: Invalidation with fErase==FALSE prevents WM_ERASEBKGND
Kernel: GlobalCompact(FFFFFFFF), discarding segments
These messages are valid runtime warnings, but they don't
indicate improper implementation; they are supplied for the
information of the user or programmer under the debug kernel.
- To build the help file for the HELPEX example, go to the
EXAMPLES\WIN30 directory and type
hc helpex
LINKING C++ WITH C
- Linking C++ modules with C modules requires the use of a
linkage specification. Prototypes for C functions within C++
modules must be in one of the following forms:
extern "C" declaration
extern "C" { declarations }
For example, if a C module contains these functions:
char *SCopy(char*, char*);
void ClearScreen(void)
they must be declared in a C++ module in one of the
following ways:
extern "C" char *SCopy(char*, char*);
extern "C" void ClearScreen(void);
or
extern "C" {
char *SCopy(char*, char*);
void ClearScreen(void);
}
Failure to do so will result in "Undefined symbol" errors
during link. For further examples, see the standard header
files.
OPTIMIZATIONS
- When Ignore Aliasing is used - Options|Compiler|Optimization|
Assume no pointer aliasing , or -Oa from the command line -
some initializations could be skipped. This applies
only when Copy propagation -Op or Options|Compiler|Optimization|
Copy propagation is used as well (which is the case when
using -O2 or Options|Compiler|Optimization|Fastest Code.) The
following case illustrates the issue:
len = 0;
read(help_file, (char *)&len, 1);
read(help_file, (char *)title, len);
The initializion of len to the value 0 above will probably
not be reflected in the first call to read() if aliases are
ignored. If the initialization of len were guaranteed by the
call to read(), the first line would be unnecessary, and the
value in len would be assigned and passed to the second read
correctly. We recommend that you avoid using these options
together when explicit initializations are used in code
sequences like these.
TURBO DEBUGGER AND TOOLS
Debugging Multiple Applications under Turbo Debugger for Windows
================================================================
You can debug multiple applications under TDW as follows:
1. Load the first program to be debugged into TDW.
2. Once the application is loaded, press the F3 key to
display the Load Module Source or DLL Symbols dialog box.
3. In the DLL Name text entry box, enter the name of the
.EXE or DLL to add. If the .EXE or DLL resides in
another directory, you need to provide the full path.
4. Press the Enter key. TDW adds the program name to the
DLLs & Programs list box and puts the !! symbol after it.
5. Close the Load Module Source or DLL dialog box, return to
the Module window, and set any necessary breakpoints in
the first program.
6. Press F9 to run the first program.
7. Switch to the Windows Program Manager while the first
program is running and run the second program in the
usual way.
8. You see the display switch back to TDW with the CPU
window showing the start-up information of the second
application. Close the CPU window.
9. In the Module window, set any necessary breakpoints in
the second application, then press the F9 key to run it.
This method is useful for debugging DDE conversations or any
other inter-program communication in the Windows
environment.
TDW.INI, the Windows initialization file for TDW and TPROFW
===========================================================
TDW.INI is located in your local Windows directory. It is the
Windows initialization file used by TDW, TPROFW, and WREMOTE.
TDW.INI specifies the name and location of the Debugger DLL and
the video driver DLL (if any) in the [TurboDebugger] section.
It can also contain two other sections:
o [VideoOptions], where you put settings for the video DLL, if any
o [WRemote], where WRSETUP puts settings for remote debugging
and profiling
[TurboDebugger] section
-----------------------
WINDEBUG.DLL has been replaced by TDWIN.DLL. TDWIN.DLL can be
located anywhere you wish (usually the main Windows directory).
The DebuggerDLL entry must specify the full path to TDWIN.DLL.
For example, if TDWIN.DLL is in the WINDOWS3.1 directory, its
TDW.INI entry is
[TurboDebugger]
DebuggerDLL=c:\windows3.1\tdwin.dll
The VideoDLL entry indicates a video support DLL for 8514 or
Super VGA, because TDW doesn't support these video modes by
default. This entry must specify the full path to the DLL. You
can set various video options for the DLL in the
[VideoOptions] section. See the next section for a complete
explanation of video DLL and options settings.
SVGA support, the VideoDLL entry, and the [VideoOptions] section
----------------------------------------------------------------
TDW and TPROFW handle most of the popular 2, 4, 16, and 256-color
high-resolution Super VGA modes. If your card isn't supported
correctly, you need to use a special Super VGA (SVGA) DLL.
Currently, six DLLs are supplied with your language compiler to
support various SVGA and 8514 video cards and modes. These DLLs are
described in the next section. For information on how to specify the
Video DLL or its options, see the sections "The VideoDLL entry" and
"The [VideoOptions] section," which follow the "Video DLLs" section.
Video DLLs
----------
All the video DLLs described in this section are designed to work
with the most current Windows screen drivers for your video card. If
you're not sure if you're using the latest drivers, contact your video
card manufacturer for more information.
From time to time we have new DLLs for new video cards. These DLLs,
when available, can be downloaded from Compuserve, BIX, GEnie, and our
local BBS (408-439-9096). As new video cards and modes appear on the
market, we will be creating new DLLs for them. If the card you use
isn't supported by one of our DLLs, please contact Tech Support for
the latest video DLL information. Our main Tech Support phone number
is 408-461-9133.
ATI.DLL
-------
Works with the ATI VGA Wonder and XL cards in certain video modes.
The latest ATI Drivers from ATI Technologies Inc. require the
following TDW.INI file entries:
Resolution ATI.DLL Int2FAssist
-----------------------------------
| 640X480 | Yes | Yes |
-----------------------------------
| 800X600 | Yes | Yes |
-----------------------------------
| 1024X768 | No | No |
-----------------------------------
EXPLANATION: ATI.DLL is required in all video modes except
1024 X 768 (this mode is directly supported by TDW and TPROFW).
When the DLL is used (VideoDLL=ATI.DLL), Int2FAssist should be
set to "yes" in the [VideoOptions] section.
TSENG.DLL
---------
Supports TSENG ET-3000 /ET-4000 based cards in certain
video modes.
The latest TSENG drivers are available from the Microsoft
Windows Driver Library on CompuServe. They require the
following TDW.INI file settings:
Resolution TSENG.DLL Int2FAssist
-------------------------------------
| 640X480 | Yes | Yes |
-------------------------------------
| 800X600 | No | No |
-------------------------------------
| 1024X768 | No | No |
-------------------------------------
EXPLANATION: TSENG.DLL should only be used with 640 X 480 X 256
resolution (set VideoDLL=TSENG.DLL and put a "Int2FAssist=Yes"
entry in the [VideoOptions] section). TDW and TPROFW directly
support the other TSENG resolutions.
TDVESA.DLL
----------
Supports any video card that does VESA emulation, whether
through a TSR or video card firmware. Use this DLL with
all resolution settings.
NOTE: You can run VESATEST.EXE from either DOS or
Windows to see if your system provides the proper
VESA functions. If the emulation is not loaded, TDW
(or TPROFW) will display an error message indicating that
the video DLL isn't supported by the current configuration.
The TDVESA.DLL has been tested with the following video
cards:
o Video Seven VRAM II--uses V7VESA TSR supplied with card
o Weitek Power Windows--emulates VESA with firmware.
DUAL8514.DLL
-------------
Supports any dual-screen 8514 cards. This DLL is only for
systems that have two-color monitors, one attached to the VGA
card and one attached to the 8415/A card. It speeds up
performance by preventing TDW (or TPROFW) from doing some
things that aren't required in dual-monitor mode.
NOTE: Using this DLL is not the same as invoking TDW
with the -do parameter, which only specifies using a
monochrome screen.
STB.DLL
-------
Supports the MVP2 series of multi-screen video cards.
ULTRA.DLL
---------
Supports ATI Graphics cards, 8514 Ultra and Vantage cards
(8514/Ultra, 8514/Vantage, Graphics/Ultra, and Graphics/Vantage),
and 8514-based cards configured for a single monitor (including
most IBM 8514/A cards). If you use this DLL with an IBM 8514/A
card, set "ATI=no" in the [VideoOptions] section of TDW.INI.
The VideoDLL entry
------------------
To use an SVGA DLL, simply edit the TDW.INI file that the installation
program puts in your main Windows directory. You can modify TDW.INI
with any ASCII text editor. Under the section heading [TurboDebugger]
there is an option called "VideoDLL". This entry should equal the
path and filename of the DLL you want to use for SVGA support (see the
example later in this file).
If there's an error loading the DLL or if the DLL doesn't support
the selected card or mode, TDW (or TPROFW) reports the error in a
Windows dialog box. When this happens, TDW (or TPROFW) unloads the
DLL and exits. If this situation occurs, remove the DLL's name from
the VideoDLL line in the TDW.INI file or select a video mode that is
supported by that DLL.
The [VideoOptions] section
--------------------------
There are options you can set for the current video DLL. You list
these options under the [VideoOptions] heading in any order you like.
The following list shows all the video options:
o SaveWholeScreen -- default = no
o Int2FAssist -- default = no
o DebugFile -- default = <blank>
o IgnoreMode -- default = no
o ATI -- default = yes
o Rows -- default = 25
o RestoreTextScreen -- default = yes
DebugFile can be either blank or set to a specific filename. The other
four settings must be either "yes" or "no". Rows must be 25 or 50.
SaveWholeScreen (ATI, TSENG, TDVESA)
---------------
This option, normally set to "no", determines whether the entire
screen (512k - 64k from 8 planes) is saved (the entire graphics
screen is cleared when switching to it) or if only the top 32K of
planes 0 through 3 is saved (the entire screen is NOT cleared when
switching modes.)
Saving the whole screen is not usually necessary, but is provided
in case you're using a nonstandard card that requires that the whole
screen be saved. It also provides support for the Alt-F5 key
combination under Int2FAssist mode.
Int2FAssist (ATI, TSENG)
-----------
This option, normally set to "no", tells the DLL to make a special
Int 2F call before switching video modes. This call tells the current
Windows screen driver what's happening. The desired side-effect of this
call is to make Windows tell all its child windows to repaint
themselves. This option is provided mainly to support some ATI Wonder
and TSENG chip set video modes.
DebugFile (ALL DLLs)
---------
The video DLL normally doesn't log any debugging information. If
you're having problems using a particular DLL, you can use the
DebugFile option to specify the path and filename of a log file.
You can use the information logged to this file if you need to
contact Borland's Technical Support.
The information logged is:
o the date and time you ran TDW or TPROFW
o the version & location of the DLL
o the name of the current Windows screen driver
o the state of all TDW.INI options
o a listing of all calls and parameters to the DLL's functions
IgnoreMode (ATI, TSENG)
----------
This option only applies when the video DLL is ATI.DLL or TSENG.DLL.
It tells the DLL to not do any mode or card checking and to force the
Int2FAssist option on. This option is useful for cards that aren't
directly supported by an official DLL yet, such as Paradise, Video-7,
Trident, or any other video card without a graphics coprocessor.
(With this option enabled, the functionality is identical to the
temporary ALL.DLL that we offered in the past.)
ATI (ULTRA)
---
This option is only used by ULTRA.DLL and is on by default. If you
disable it, you can use ULTRA.DLL on regular IBM 8514/A cards.
ROWS (ALL DLLs)
----
This option is only used if you use a configuration file to change
the number of rows to 43/50 from 25. If you choose to have TDW
start in 50-line mode, set the Rows option to 50 in the TDW.INI file.
RestoreTextScreen (DUAL8514, STB)
-----------------
This option is valid only with DUAL8514.DLL and STB.DLL. The
settings are:
o Yes - restores TDW's (or TPROFW's) screen after exiting.
o No - does not touch TDW's (or TPROFW's) screen at all.
o Clear - forces the screen to clear upon exiting TDW (or TPROFW).
Video DLL example
-----------------
If you have an ATI VGA Wonder card and you want it to save
the entire screen and log information to a file named
C:\WINDOWS\TDVIDEO.LOG, the TDW.INI file will look something
like this:
[TurboDebugger]
DebuggerDLL=c:\windows3.1\tdwin.dll
VideoDLL=c:\borlandc\bin\ati.dll
[VideoOptions]
SaveWholeScreen=yes
DebugFile=c:\windows\tdvideo.log
Technical information
---------------------
TDW, upon loading, looks for the video DLL in the following
locations in the following order:
1. The same directory TDW (or TPROFW) is running from
2. The Windows main directory
3. The location specified in TDW.INI
If it finds the file, TDW (or TPROFW) accesses the DLL as needed.
TDW (or TPROFW) makes calls to the DLL to handle the entire video
screen-switching context. The DLL accomplishes the screen switching
by allocating a buffer as it gets loaded. Graphics screen contents
are then saved to this buffer when TDW (or TPROFW)_enters text mode.
The DLL restores the graphics screen from this buffer when TDW
(or TPROFW) exits text mode. Memory allocated for the buffer is freed
when the DLL is unloaded.
Seeing the user screen of an application
----------------------------------------
Some video modes might require some special handling. The Int2FAssist
option allows these modes to work correctly on most systems. The
behavior is as follows:
When you set "Int2FAssist=yes", the DLL notifies Windows to tell
all sub-windows on the screen to repaint themselves while the user
application is running. This allows the user screen to be viewed
when stepping, tracing, or running your application. It will not,
however, switch to the user screen when you press the Alt-F5 key
combination because TDW is still in control (TDW doesn't allow Windows
to process any messages at this point.)
If you also set "SaveWholeScreen=yes", pressing the Alt-F5 key
combination shows the user screen. (The DLL will now copy the screen
back for you.) The drawback to enabling SaveWholeScreen is that it
will take longer to step or trace if TDW needs to switch back to
the user screen for that particular instruction. Also, extra messages
will be passed to your application that normally wouldn't be passed.
This may affect the debugging of certain pieces of code (like finding
a bug in an owner-draw control). In these cases, you won't want to use
this option on the current video mode.
Using TDW in Dual Monitor Monochrome Mode
----------------------------------------
If TDW is activated using the -do switch, there is no need for
a video DLL or a value in the VideoDLL section of TDW.INI. The
value in VideoDLL should be removed as follows:
[Debugger]
VideoDll=
The [WRemote] section
---------------------
If you run WRSETUP to configure WREMOTE, the settings are
saved in the WRemote section of TDW.INI. In previous versions,
these settings were saved in the WRemote section of
WREMOTE.INI. If you have a previous version of TDW or TPROFW
and want to preserve your WREMOTE settings, you can append the
contents of WREMOTE.INI into TDW.INI. Be sure to include the
[WRemote] section heading.
The settings for the [WRemote] section are described in the
"Turbo Debugger User's Guide" in Appendix E, "Remote
Debugging" starting on page 386.
Known Problems
==============
- TD386 and TF386 currently do not support machines with over
16M of memory. You must disable any extra memory to use
these programs.
- On page 10 in Chapter 1 of the "Turbo Profiler User's Guide,"
there is a statement that Pascal versions of the PRIMEn.C
programs are included on disk. Only the C versions of these
sample programs are included on the distribution disks.
- Some mouse drivers are incompatible with TD and will
cause the mouse cursor to get scrambled when debugging DOS
graphics applications on a second monitor (-do option). If
that happens, you can try a different driver or turn off the
mouse in TD by using the -p- option on the TD command line.
The mouse will still be active in the target application.
- If you have any lines in your SYSTEM.INI that rename DLLs, such as
"sound.dll=mysound.drv", TDW might display the error "Can't find
sound.dll" when it loads a program that uses the DLL. To solve this
problem, use the -wd command switch to disable TDW's DLL checking when
you load such a program.
- The first time a program is run under TDW or TPROFW, mouse
messages are processed normally. However, on every subsequent
execution of that program, you must press a key on the
keyboard before mouse messages can be processed.
- TSENG ET-4000 video chip set and Windows 3.1 problems
Under Windows 3.1, if you use the standard Windows VGA or
SuperVga driver with a video card that uses the TSENG
ET-4000 chip set, you might encounter a number of problems
with running TDW on a single monitor.
o The hardware cursor (the white cursor displayed in all
dialog boxes that require text input) is invisible, but
you can still debug your program.
o On certain TSENG 4000-based cards (such as the Diamond
Speedstar VGA card), when you launch TDW the default
character set is replaced by graphic characters.
To overcome this problem please contact Microsoft Corp and ask
for the updated TSENG drivers that were NOT shipped with
Windows 3.1. They are also located in the Microsoft Forum (GO
MSOFT) under the Microsoft Software Library heading in
CompuServe.
Filenames Date
--------- ----
TSENG1.EXE 4/6/92
TSENG2.EXE 4/6/92
TSENG3.EXE 4/6/92
TSENG4.EXE 4/6/92
In the meantime, you can use one of the following alternatives:
- Run Windows Setup and replace your Windows 3.1 VGA or SVGA driver
with the Version 3.0 VGA driver supplied with Windows 3.1.
- Start TDW from the DOS command line. For example,
WIN TDW myprog
- Each time you launch Windows, run a full screen DOS session
and type "exit" to close it. After you do this, when you run
TDW, it will use the correct character set.
CLASS LIBRARY
- If you used the add(), addAt(), or getItemsInContainer()
member functions of the Array class in Borland C++ 2.0
applications, note that their behavior has changed slightly.
The following rules apply to these and related functions:
1. add() will insert its argument at the lowest available
location in the Array. This location is known as the
"insertion point".
2. detach() will remove its argument from the Array, and if
that Object is located below the insertion point, it
will move the elements above the Object being removed
and below the insertion point down one position, so that
the elements below the insertion point remain
contiguous. The insertion point, of course, moves down
one.
3. if the location specified in a call to addAt() is below
or at the insertion point, the elements above the
specified location and below the insertion point are
moved up one position, and the Object is inserted. The
insertion point moves up one.
4. if the location specified in a call to addAt() is above
the insertion point, the Object is inserted at that
location, replacing any Object that may have been placed
there previously.
5. getItemsInContainer() returns the number of elements
below the current insertion point. If you use addAt()
to add elements above the insertion point, they will not
affect the value returned by getItemsInContainer().
This is a change from the behavior in the previous
version of the class library.
- Two versions of the class library sources are provided; one
using an implementation using C++ templates, and one not using
templates. The small and dynamic link libraries are provided, and
a makefile is provided to build other models.
ObjectWindows Library
- You must rebuild the class libraries in the appropriate model
for the intended OWL model if they don't already exist - see
paragraph above.
- Due to restrictions on code size, compact model is no longer
supported for OWL applications.
- Note that you must use the TWindow member function AssignMenu
to assign a window's Attr.Menu member and to load a menu for
that window.
- You must alter project files and makefiles to indicate
compatibility with either Borland C++ version 3.0 or 3.1.
Add WIN30 for OWL projects from Borland C++ 3.0, or WIN31
for projects created under Borland C++ 3.1, to the defines
under Options|Compiler|Code Generation in the IDE, or passing
-DWIN30 or -DWIN31 to MAKE.
- World of ObjectWindows video users need to make modifications
to their Borland C++ 3.0 make or project files in order to
successfully compile their OWL code with Borland C++ 3.1. You
must define the WIN30 flag when compiling the OWL Video code.
In MAKEFILE.INC add the text, "-DWIN30" to the four 'CFLAGS'/
'CFLAGSD' lines. In all project files, you must go to Options|
Compiler|Code Generation and put WIN30 in the Defines combo box
field (at the bottom of this dialog).
Please see OWL31.DOC for additional information on ObjectWindows
Library.
TURBO VISION
- For information on the Help compiler, and how to build a help
document, please refer to the comments in the file TVHC.CPP in
the help directory. Also, see TVDemo for an example of how to
add help to your applications.
- Due to the complex interactions among the Turbo Vision classes,
certain situations can arise involving deletion of objects that
cannot be properly handled through destructors. Therefore, we
provide a static member function void destroy( TObject * ) to
the class TObject. Whenever an object of a type derived from
TObject is to be deleted, the function destroy() should be called
instead. This will take care of terminating the object,
correctly freeing the memory that it occupied. For example:
TDialog *dlg = new TDialog( ... );
//delete dlg; // DON'T DO THIS
destroy( dlg ); // DO IT THIS WAY
- The Turbo Vision Source Code is provided for your use and
modification. IMPORTANT: Borland Technical Support will not
answer questions or provide any assistance relating to this
product. Essentially, the Sources are provided "as is" and you
are on your own.
- In order to build the library, you must have Tasm available.
- When building or modifying the library it is better to place
debug info in only those modules in which you are interested.
If you place debug info all the modules, Tlink may not be able
to link your application.
- In order to build an overlayed Turbo Vision application with
Borland C++ 3.1, make sure you observe the following:
1. You need to rebuild the Turbo Vision library with
overlays. Change to the SOURCE directory under TVISION
and enter the command
make -DOVERLAY -B
This will produce a new version of TV.LIB which will
support overlays. It will also produce two .OBJ files,
SYSINT.OBJ and TEVENT.OBJ. These two files contain code
for TV's interrupt handlers, so they cannot be
overlayed.
2. When building an overlayed application, you must be sure
to link with the three files SYSINT.OBJ, TEVENT.OBJ, and
TV.LIB. The two .OBJ files must not be in overlays.
You also need to specify local virtual tables.
Your command line should look something like this:
bcc -ml -Vs -B -Yo myfile -Yo- sysint.obj tevent.obj -Yo tv.lib
See the Programmer's Guide for details on the meanings
of the various -Yo switches.
3. To improve performance, increase the size of the global
variable __ovrbuffer to 0x2000 or greater.
RUNTIME LIBRARY SOURCE
The Borland C++ Runtime Library Source Code is provided for
your use and modification. IMPORTANT: Borland Technical
Support will not answer questions or provide any assistance
relating to this product. Essentially, the Sources are
provided "as is" and you are on your own. If you find what you
think is a genuine problem with the source code, however, we
would like to hear about it. See "How to Get Help" above.
See CRTL.DOC for more information on building the Runtime
Library from source.
5. TESTING YOUR EXPANDED MEMORY: EMSTEST.COM
---------------------------------------------
Included with Borland C++ is a program to test your Expanded
Memory hardware and software. If you have problems using
Borland C++ with your EMS, type EMSTEST at the DOS prompt and
follow the instructions.
6. CORRECTIONS TO THE DOCUMENTS
---------------------------------
Please see the MANUAL.XXX files in the DOC subdirectory for corrections
to the documents.
WELCOME TO BORLAND C++ 4.0
This README file contains important information about Borland C++.
For the latest information about Borland C++ and its accompanying
programs and manuals, read this entire file.
TABLE OF CONTENTS
-----------------
1. How to Get Help
-Sources of information
2. Installation
3. Features
-Compiler
-Linker
-IDE
-Turbo Debugger
-Resource Workshop
-ObjectWindows Library (OWL)
-VBX Support
-Documentation
4. Important Information
-Object File Format
-Make
-Out of Memory and MAKESWAP
-Threads
-New Tools
-DDVT functions and RTTI
-Inline assembly and interrupts
-BC4 path name
-Creating 16-bit import libraries from .DEF files
-Debugging DDE applications
-Running from a Windows 3.1 DOS Prompt
-Developing under NT
-C/C++ Language Changes
-Developing for NT
-Libraries and Startup Code
-Compiler and Linker Switch Changes
-Creating .COM files
-Converting Borland C++ 3.1 Windows Code to Borland C++ 4.0
-Changes to the Class Libraries
-Casting Macros
-IDE/Integrated Debugging
-Floating Point Formats
-Turbo Debugger for Windows
-Using Tools with NTFS
-Run-time Type Information and Virtual Destructors
------------------
1. HOW TO GET HELP
------------------
SOURCES OF INFORMATION
----------------------
If you have any problems, please read this file, the
HELPME!.DOC and other files in your DOC subdirectory, and
check the on-line help and the Borland C++ manuals first.
If you still have a question and need assistance, help is
available from the following sources:
1. For instant on-line access to the Borland forums with
their libraries of technical information and answers
to common questions, type
GO BCPPDOS - for questions pertaining to DOS
or
GO BCPPWIN - for questions pertaining to Windows
If you are not a member of CompuServe, see the enclosed
special offer, and write for full details on how to receive
a free IntroPak containing a $15 credit toward your first
month's on-line charges.
2. Borland offers a wide variety of Technical Support plans
providing a range of assistance from installation and general
usage of Borland C++ to language syntax, programming, and
debugging help. For information about these support programs,
call 1-800-523-7070.
3. Borland's TECHFAX service. Call (800) 822-4269 for a FAX
catalog of technical document entries.
4. Borland DLBBS. Dial (408) 431-5096 (up to 9600 baud, 8-N-1)
for a host of free technical documents and example programs.
5. For immediate assistance with everything from configuring Borland C++
to programming or debugging, call our C++ Programmer's
Advisor Lines ($2/minute, first minute free):
* Windows / Win32: 1-900-555-1002 or 1-800-782-5558 (MC/Visa)
* DOS : 1-900-555-1004 or 1-800-368-3366 (MC/Visa)
---------------
2. INSTALLATION
---------------
IMPORTANT!
Do not install Borland C++ 4.0 files over previously installed Borland
C++ directories. The files in this distribution will not work
with previously shipped tools and libraries. This is particularly
true for configuration files from previous shipping
releases, like TDCONFIG.TDW and BCCONFIG.BCW.
Also, be especially careful when using object files and libraries
from Borland C++ 3.1 with binaries created with this release. There are
several potential problems when linking with old objects or libraries.
Exceptions won't work correctly (destructors won't get called) when a
pre-BC4 stack frame is unwound due to an exception. Also, if a constructor
or destructor compiled with a pre-BC4 compiler is involved in exception
unwinding, trouble may occur. Another potential problem is when an RTTI class
is shared with pre-BC4 code; some cases of that will be caught by the linker,
but others may fail mysteriously. Try using the -K2 switch to get pre-BC4 code
to link. Note: these problems are C++ specific. C objects between versions
should be more readily compatible.
Installing Borland C++ 4.0 on your hard disk:
--------------------------------------
Installing from floppy disks:
1. Select File|Run from Windows 3.1, Windows for Workgroups 3.1x,
or Windows NT.
2. Enter A:INSTALL (or B:INSTALL) on the input line.
3. Under "Installation Options", you have the option of not
installing Win32s, which should be turned off if you are
installing under Windows NT.
(NOTE that BCW does not run under NT, so if you are only using
NT, you may wish to not install it.)
4. Fill in directories as appropriate, and INSTALL will create
appropriate Windows groups, install Win32s, and install the
new Borland C++ 4.0 software according to the directories you select.
Installing from the CD-ROM:
1. Go to the CD-ROM, and change directories to INSTALL.
2. Select File|Run from Windows 3.1, Windows for Workgroups 3.1x,
or Windows NT.
3. Enter X:INSTALL on the input line (where X: is your CD-ROM drive).
4. Under "Installation Options", you have the option of not
installing Win32s, which should be turned off if you are
installing under Windows NT.
5. Fill in directories as appropriate, and INSTALL will create
appropriate Windows groups, install Win32s, and install the
new Borland C++ 4.0 software according to the directories you select.
To use the built-in transfer tools and Help, make sure their location is
in your path (the \BIN directory for Borland C++ 4.0).
After installing, make sure your path is set correctly, and restart
Windows before using Borland C++ 4.0.
NOTE: If you want to install the Win32s debug kernel, use the
SWITCH.BAT file provided with the Microsoft Win32s tools, found on the
NT SDK CD-ROM distribution. This will ensure that the proper files
are copied to the appropriate places. Not copying the files correctly
will result in obscure load errors.
Configuring Borland Pascal and Borland C++
------------------------------------------
The install program for Borland C++ 4.0 will configure your system to
allow the use of Borland C++ 4.0 and Borland Pascal 7.0 on the same
machine. As long as you have installed Borland Pascal prior to
(rather than after) installing Borland C++ there are very few
guidelines you must follow:
- The two Windows hosted IDEs may not be run simultaneously.
- Each must use their respective copies of tools and utilities that
depend on debug information, most notably Turbo Debugger for Windows
(TDW). You may find it useful to rename the Borland Pascal version
of TDW.EXE to something like BPTDW.EXE to avoid confusing filenames
in your path.
- Both versions of TDW may not be run simultaneously.
- Make sure that old copies of TDW.INI are removed from your system.
(Running the utility TDWINI.EXE will make sure that this takes
place.)
To reduce disk space requirements, you may wish to remove duplicate
versions of utilities that do not require debug information, such as
WinSight and Resource Workshop. Use the versions that came with
Borland C++ 4.0 so that you will have the latest features.
To use TDWGUI.DLL with TDW version 3.1 you need to add UseTimer=Yes
to the VideoOptions section of TDW.INI. This option should not be
set when using TDW version 4.0. This means that you would need to
change your TDW.INI file by hand each time you switched between
versions of TDW. For this reason, we recommend the non-windowed
video DLLs (such as SVGA.DLL) for customers who debug both BP and BC
applications.
If you are installing Borland Pascal 7.0 AFTER Borland C++ 4.0 has
been installed, you will have to change by hand the system settings
that allow these products to coexist:
In your SYSTEM.INI file, check your [386Enh] section for multiple
entries for the device TDDEBUG.386. Remove duplicate entries of
TDDEBUG.386 so that only the version from Borland C++ is loaded. On
disk, you may also want to rename or remove the BP7 versions of
TDDEBUG.386 and TDWIN.DLL to avoid their accidental loading. You
must restart Windows after making changes to SYSTEM.INI.
Win32s and minimum swap file size
---------------------------------
Borland recommends that you have a minimum of 12 MB of memory available to
run Win32s applications. For example, if your machine has 8 MB of memory
available to Windows, you should configure your "Virtual Memory" (swapfile)
to at least 4 MB. This will reduce the risk of out-of-memory errors
occuring in Win32s.
NT console applications and Win32s
----------------------------------
There is no Win32s console, so attempting to run a Win32 console
application without NT loaded will result in an error.
Changes to SYSTEM.INI file
--------------------------
The install program makes these changes to the SYSTEM.INI file:
1) Adds "device=c:\bc4\bin\windpmi.386" to support our 32-bit tools.
2) Adds "device=c:\bc4\bin\tddebug.386" to support our debugger.
Configuring the Windows NT command prompt
-----------------------------------------
To run 16-bit protected-mode programs (bcc, tlink) under an NT command prompt
you need to add the following line to CONFIG.NT:
ntcmdprompt
Under the default NT command-line prompt, DOS COMMAND.COM is run after
returning from a TSR (such as RTM.EXE which bcc and tlink load). Adding the
above line will cause the original NT CMD.EXE to be run.
Outdated versions of Win32s
---------------------------
If you are running an outdated version of Win32s, the INSTALL program will
instruct you to remove it before installation. To remove an old
version of Win32s perform the following steps:
1. Change directory to the WINDOWS directory on your hard drive. This
is most likely C:\WINDOWS.
2. Edit the SYSTEM.INI file and remove the line in the [386Enh]
section that reads:
device=C:\WINDOWS\SYSTEM\WIN32S\W32S.386
(The actual path in the above line may be different to reflect your
configuration.)
3. Change directory to the SYSTEM subdirectory.
4. Remove the following files:
W32SYS.DLL
WIN32S.INI
WIN32S16.DLL
5. Change directory to the WIN32S subdirectory.
6. Remove all files here.
7. Change directory back to SYSTEM and remove the WIN32S subdirectory.
You will now be ready to run the INSTALL program. Be sure to select
<Install Win32s> in the INSTALL program so that the newer version of Win32s
will be installed.
-----------
3. FEATURES
-----------
Compiler:
---------
- Support for writing 16 and 32-bit Windows applications that target
Windows 3.1, Win32s and Windows NT, and 16-bit DOS applications.
- Pentium support.
- Support for ANSI C++ exception handling, structured exception handling
under C, and mixed C/C++ exception handling. All exception handling
constructs are available for both 16- and 32-bit.
- Additional optimizations and faster compile time.
- Support for ANSI C++ operator new[] and operator delete[].
- Runtime Library support for the ANSI C++ string class.
- Support for ANSI C++ runtime type identification (RTTI).
- Support for ANSI C++ new style casts dynamic_cast, static_cast, const_cast,
and reinterpret_cast.
- Support for three character types as provided in ANSI C++.
Linker (16-bit and 32-bit):
---------------------------
- Now handles binding of resources; no need for a separate RC or
RLINK step.
- Linker debug capacity expanded.
IDE
---
- 16-bit DOS and Windows plus 32-bit Windows targeting from a single IDE.
- Integrated GUI debugging for 16-bit Windows applications.
- Includes both 16- and 32-bit tools (compiler, linker, resource
compiler, resource binder, and library manager)
- A new project manager that supports multiple targets, drag-and-drop,
and Style Sheets for associating options.
- AppExpert, which simplifies the process of creating
ObjectWindows applications through code generation.
- ClassExpert, which simplifies adding and managing classes in
your AppExpert application.
- Transfers, Settings Notebook, SpeedMenus, and a configurable SpeedBar.
- Expanded editor support, including column blocking and window
splitting. TEMC now called KEYMAPR.
Turbo Debugger:
---------------
- Turbo Debugger (TD32) for Win32s and Windows NT.
- Support for OS exception handling.
- Support C/C++ exception handling.
- Windows NT thread support.
- Video DLL to run TDW in a window.
- Remote debugging with TDW.
- Session state saving.
- Process attach for Windows NT.
- Turbo Debugger Video Configuration Utility (TDWINI.EXE).
- Built in large model for greater capacity.
Resource Workshop:
------------------
- Support for Win32s, Win32.
- Resource preview
- DialogExpert
- Auto ID numbering
- Auto mapping of accelerators and help hints to menu items
- Support for VBX controls
- SpeedMenus
- Dialog editor property inspector
- Integrated with ClassExpert and IDE project manager
ObjectWindows Library (OWL)
---------------------------
- Complete coverage of Windows API, including GDI
- Single source for Win 3.1, Win 32s, and NT
- Built in exception handling using standard C++ exceptions for robust error
handling
- Built-in type safety using standard C++ templates
- Toolbars, status lines, and print preview
- Flexible Document/View architecture
- Supports VBX 1.0 controls in a dialog or window
- Layout Windows
- Mix-in architecture
- Support for 3d controls
- Support for BWCC controls
- Gadgets and Widgets
- Multi threading support
- Printing and print previewing support
VBX Support
-----------
Borland's visual tools, such as Resource Workshop, provide support of VBX 1.0
controls via a DLL called BIVBX10.DLL. You can freely distrubute this DLL
with programs you create that use VBX controls.
BIVBX10.DLL has been tested with a large number of VBX controls written to the
Microsoft Visual Basic 1.0 CDK specification. If you have a problem with a
specific control, make sure that it does not require VB 2.0 or VB 3.0 CDK
functionality. VBX 2.0 and 3.0 controls will usually display a message saying
that they require VB 2.0 or 3.0 support. In some cases, though, the control may
appear to work but exhibit instability. Please contact the control vendor and
explain the problem. They may have an updated control or may be able to contact
Borland to find a solution.
Documentation:
--------------
This distribution includes printed books and online help to assist
you in understanding and using the new features of Borland C++ 4.0.
For C++ Language and Programming information:
See the Library Reference, the
Programmer's Guide, and the DOS Reference.
See also the online Help.
For information on using MAKE, TLINK, and resource tools:
See the User's Guide.
See also the online Help.
For information on keyboard mapping and KEYMAPR (used to be called TEMC):
See the online Help.
For information on using the IDE, AppExpert & ClassExpert, the Integrated
Debugger, and compiling options:
See the User's Guide.
See also the online Help.
For information on using the new Project Manager:
See the online Help.
For information on converting your ObjectWindows 1.0 code to
ObjectWindows 2.0:
See the ObjectWindows Programmer's Guide.
See also the online text file owldoc.wri.
For information on programming in ObjectWindows 2.0:
See the ObjectWindows Reference Guide, and the
ObjectWindows Programmer's Guide.
See also the online text file, owldoc.wri.
For help using Turbo Debugger:
See the online text files helpme!.tdw and hints.tdw.
See also the online Help.
To use the online Help, make sure the Borland C++ 4.0 \BIN directory is
on your path.
------------------------
4. IMPORTANT INFORMATION
------------------------
Object File Format
------------------
This product is designed to use and generate only object files which
adhere to the Intel OMF (Object Module Format) specification. TLINK32
and TLIB only accept files of this format, and all provided libraries
use this format. There is no support in the linker or librarian for
COFF object modules produced by Microsoft C tools.
MAKE
----
MAKE will not put a space between two sets of file list macros as in BC++ 3.1
and before. The example makefile below illustrates this; simply execute MAKE
in the directory containing the makefile. The output is:
ALLOBJS1 = one onetwo two
ALLOBJS2 = one one two two
makefile:
OBJS1 = \
one \
one
OBJS2 = \
two \
two
ALLOBJS1 = $(OBJS1)$(OBJS2)
ALLOBJS2 = $(OBJS1) $(OBJS2)
..:
@@echo ALLOBJS1 = $(ALLOBJS1)
@@echo ALLOBJS2 = $(ALLOBJS2)
Out of Memory and MAKESWAP
--------------------------
If you get "Out of Memory" errors from DOS when running the
command-line tools, or if you have only 8 MB of RAM and have
out-of-memory problems building and using 32-bit applications,
then create a swap file with the MAKESWAP utility. (Note that
this applies to DOS only, not to DOS boxes opened under
Windows.) MAKESWAP takes the size of the file to create in
KBytes, for example
MAKESWAP 12000
will create a 12MB swap file in the current directory called EDPMI.SWP
for use by Borland command-line tools. To enable the swap file, use
the DPMI32 environment variable by issuing the following command at
the DOS prompt:
set DPMI32=SWAPFILE <location of swap file>\EDPMI.SWP
You must clear this environment variable by issuing the command
set DPMI32=
before running Paradox or other 16-bit DPMI-hosted executables,
such as Borland C++ 3.1 command-line tools.
Threads
-------
When creating secondary threads, the _beginthread or _beginthreadNT
and _endthread() RTL functions must be used to ensure the proper RTL
initialization and cleanup. Using NT's CreateThread and ExitThread
functions will result in undefined behavior if an implicit or
explicit call is made to the RTL. Both exception handling and RTTI
can lead to implicit RTL calls.
DDVT functions and RTTI
-----------------------
When compiling code that contains DDVT functions, do not use run-time
type information or you will receive an error message. In order to
compile without using run-time type information, compile all code
that uses DDVTs (for instance OWL 1.0x libraries and applications)
with the -RT- switch (Options|Project|C++ Options|Exception
handling\RTTI in the IDE).
Inline assembly and interrupts
------------------------------
If your inline assembly code includes an interrupt call, the compiler does not
preserve any registers altered by the call. You must write code to save and
restore registers when using interrupt calls within inline assembly code.
BC4 path name
------------------
Any occurrence of BORLANDC in the BC++ 4.0 path should be replaced with BC4.
Creating 16-bit import libraries from .DEF files
------------------------------------------------
Use the /o implib switch when creating 16-bit import libraries from .DEF files
to prevent implib from generating extensions for import entry module names.
Debugging DDE applications
--------------------------
DDE applications must be debugged in hard mode.
New Tools
----------
The 16-bit linker has been modified in this version to allow for more than 64K
symbols in the executable's symbol table. The following tools have changed to
conform to the resulting new debug information format:
TDW
TDUMP
Turbo Debugger (standalone)
IDE Debugger
IDE Browser
These tools have versioning information, so that if you attempt to use any of
them with executables created in prior versions, an error message will result.
You will then need to relink your executables.
If you don't see correct dump information when using TDUMP version 4.1 on your
executables, check the header at the top of the output. If it does not indicate
version 4.0 debug information, the associated .EXE file must be recompiled with
version 4.0 tools.
Running from a Windows 3.1 DOS Prompt
-------------------------------------
If you run BCC or TLINK from a Windows DOS box and you get
out of memory errors, increase the XMS memory (in the 'Maximum'
setting) allocated for the DOS box by editing the appropriate .PIF
file (usually DOSPRMPT.PIF). BCC.EXE needs about 4MB to compile
medium-sized .CPP files, and might need more memory for large .CPP
files with debugging information.
NOTE: You must set the 'Maximum:' setting to the amount needed, not
the 'Required:' setting. Using the 'Required:' setting only
sets aside memory for XMS, NOT for DPMI services and hence
any amount set in the 'Required:' setting box is unavailable.
Developing under NT
-------------------
To do development on NT, use the command-line tools, Resource
Workshop, and TD32. The IDE is not currently supported under Windows
NT.
C/C++ Language Changes
----------------------
Many changes were made to the compiler in compliance with the
latest changes proposed by the ANSI C++ committee. These include
three distinct char types, enhancements to templates, support for
virtual functions differing in return types, and other improvements
listed here. See the Library Reference and the Programmer's Guide
for complete details on these changes and how they affect your
code.
wchar_t is a fundamental data type in C++ programs. In C programs it
continues to be a typedef defined in stddef.h. See online Help.
Enum operator overloading is also supported.
The runtime library now supports the ANSI C++ string class. If you
already have a string class, it must be renamed for Borland C++ 4.0.
In addition, operator new and operator new[] now throw an
exception (xalloc), as specified by the ANSI C++ committee.
To get the old behavior, you can issue set_new_handler(0).
(set_new_handler(0), however, does not work with ObjectWindows
or string classes.) See Chapter 3 of the Programmer's Guide.
Arrays are now being allocated through operator new[]() and deleted
by operator delete[](). An example is provided in Chapter 3 of the
Programmer's Guide.
Borland C++ 4.0 implements ANSI C++ runtime type identification (RTTI). See
the Library Reference, "C++ runtime support", for a description of
class Type_info. RTTI and operator typeid() are fully described in
Chapter 3 of the Programmer's Guide.
Borland C++ 4.0 provides a full implementation of exception handling
under C++ and C. C exceptions can be handled in C or C++ code;
C++ exceptions can be handled only in C++ code. The C++ exceptions are
described in the Library Reference, "C++ run-time support." See Chapter 4
of the Programmer's Guide for a full description of how to use exception
handling.
Borland C++ 4.0 also implements the accepted ANSI C++ new style casts.
See the Chapter 3 of the Programmer's Guide for information and
examples.
Libraries and Startup Code
--------------------------
The contents of the LIB directory are described in the online Help.
See the DOS Reference for a description of DOS-only libraries and
start-up code.
There are two new functions that provide access to 32-bit operating system
file handles. See online Help for a description of _open_osfhandle and
_get_osfhandle.
Member function Type_info::fname() is not available.
Several global variables and library functions have been renamed. See the
Library Reference, Chapter 1.
Compiler and Linker Switch Changes
----------------------------------
See the User's Guide for information on new compiler and linker switches.
You may get this 32-bit Linker warning:
Warning: External symbol <XX> was not qualified with __import in
module <YY>
If the symbol <XX> is a function, you can ignore this warning. If
the symbol <XX> is data, then you must qualify the symbol with __import.
BCC32 provides support for the Pentium processor. This support is enabled
by the -5 compiler switch.
Creating .COM Files
-------------------
Creating .COM files requires setting the compiler to the tiny memory
model, telling the linker to make a .COM file, and linking to the
CT.LIB library. The IDE does not generate .COM files but the
command-line tools do. For example:
bcc -mt -lt file.cpp ct.lib
Converting Borland C++ 3.1 Windows Code to Borland C++ 4.0
----------------------------------------------------------
To get your BC++ 3.1 code to compile and run under Borland C++ 4.0,
modify your code to reflect three character types where compiler
errors occur when using the Borland C++ 4.0 RTL includes.
Alternatively, you can use the -K2 compiler option with the RTL
includes from BC++ 3.1. This option provides for only two character
types. (Note that -K2, a backward compatibility switch, is supported
only in the 16-bit compiler.) Also, use operator new[]() and
delete[]() syntax for class arrays.
Certain 32-bit to 8-bit conversions allowed by ANSI are flagged by
BCC32 with "Conversion may lose significant digits in function
XXXXX". You can safely ignore this message if you are doing certain
types of 32-bit to 8-bit casts (for instance, int to char) and you're
not worried about losing significant digits in those cases.
Changes to the Class Libraries
------------------------------
Only the version of the class library implemented with C++ templates
is distributed and directly supported in Borland C++ 4.0.
The class library "object-based" include files are provided in the
\BC4\INCLUDE\CLASSLIB\OBSOLETE subdirectory. The object-based
libraries themselves are not supplied, but can be built using the
instructions found in the \BC4\SOURCE\CLASSLIB makefile (see the
comments located there).
TSArray and TSArrayIterator classes have been added to the class libraries.
They are aliases for TSArrayAsVector and TSArrayAsVectorIterator.
The Flush and Delete member functions for direct containers (except
dictionaries) no longer take a delete parameter (this parameter had been
ignored since direct containers have their own copy of the contained element).
For example:
TMArrayAsVector<double> arr(10);
arr.Flush(); // legal
arr.Flush(1); // illegal - causes syntax error
arr.Detach(index); // legal
arr.Detach(index,1); // illegal - causes syntax error
TMIArrayAsVector<double> arr1(10);
arr1.Flush(); // legal
arr1.Flush(1); // legal.
arr1.Detach(index); // legal
arr1.Detach(index,1); // legal
Bag and set container member function FindMember is now called Find.
It takes the same parameters.
Association containers now have a member function called DeleteElements:
void DeleteElements()
The dictionary containing the associations determines whether pointed-to
objects should be deleted, and, if so, calls DeleteElements for each of
the associations it holds. The Detach and Flush member functions for the
TMDictionaryAsHashTable template (and all templates derived from it)
have been changed to the following:
int Detach( const T &t, DeleteType dt = DefDelete )
void Flush( DeleteType dt = DefDelete )
These changes to the direct versions of the dictionary templates make
them similar to an indirect container in how they handle object
ownership. Here is an example:
TDIAssociation<int,int> assoc( 3, new int(4) ); //create an association
TDictionaryAsHashTable<int,int> dict; //create a dictionary
dict.Add( assoc ); //copy assoc into the dictionary
dict.OwnsElements(); //tell dict that it should delete pointed-to objects
dict.Flush(); //delete the int created by new in the first line
All list and double-list containers now have the DetachAtHead member
function. This function removes items from the head of a list
without searching for a match. The syntax is
int DetachAtHead() // for direct lists
int DetachAtHead( int del = 0 ) //for indirect lists
Example:
TMListImp<MyObject>list; //create list to hold MyObjects
list.Add(MyObject()); //construct a MyObject, add to list
list.Add(MyObject()); //add second MyObject
list.DetachAtHead(); //remove MyObject at head of list
Changes to class diagnostics
----------------------------
Previously, in order to create a diagnostic group you had to declare it
and define it in the same file:
DIAG_DECLARE_GROUP(Sample);
DIAG_DEFINE_GROUP(Sample, 1, 0);
We also provided a macro that did both together:
DIAG_CREATE_GROUP(Sample, 1, 0);
A change in the diagnostic software makes it illegal to have both
DECLARE and DEFINE in the same file. So code that creates a diagnostic
group now does it in one step:
DIAG_DEFINE_GROUP(Sample, 1, 0);
DIAG_CREATE_GROUP has been removed. DIAG_DECLARE_GROUP still creates an
extern declaration for a diagnostic group (see file CHECKS.H and CHECKS.CPP).
Code that uses both DIAG_DECLARE_GROUP and DIAG_DEFINE_GROUP in the same
file must be changed to remove DIAG_DECLARE_GROUP.
Old code:
DIAG_DECLARE_GROUP(Sample);
DIAG_DEFINE_GROUP(Sample, 1, 0);
New code:
DIAG_DEFINE_GROUP(Sample, 1, 0);
Any use of DIAG_CREATE_GROUP must be changed to DIAG_DEFINE_GROUP.
Old code:
DIAG_CREATE_GROUP(Sample, 1, 0);
New code:
DIAG_DEFINE_GROUP(Sample, 1, 0);
Also if a header file uses DIAG_DECLARE_GROUP (so that the group
declaration is automatically available to files that #include the
header) the source file that contains the DIAG_DEFINE_GROUP
invocation for that group will generate a redefinition error (this
isn't done anywhere in OWL or class lib). The solution here is to
conditionalize the header file so that the declaration goes away when
the source file with the DIAG_DEFINE_GROUP invocation is built:
foo.h
-----
#if !defined( BUILD_FOO_GROUP )
DIAG_DECLARE_GROUP( Foo );
#endif
foo.cpp
-------
#define BUILD_FOO_GROUP
#include "foo.h"
Changes to Object Streaming
---------------------------
The implementation of Object Streaming formerly used in ObjectWindows
and Turbo Vision has been moved into the class library. Several
changes have been made to the streaming mechanism, but they should be
transparent to existing class library code. See the Programmer's
Guide for details on streaming.
The header file OBJSTRM.H defines several macros that will make creating
streamable objects easier. See that header file for details.
There are two types of streamable objects:
- Resident objects which may be streamed out but which are not reconstructed
when streamed back in
- Dynamic objects which are reconstructed when streamed in
Resident objects include static objects and objects present when an
application starts, such as its main window. These objects must be streamed
out via a reference rather than via a pointer.
Dynamic objects, on the other hand, must be streamed out via pointers,
causing them to be reconstructed when streamed back in.
Resident objects must be streamed out before any objects which stream out
pointers to the resident objects, else duplicate objects will be constructed
when streaming in.
When streaming objects in, Streamer::Read must insure that all data fields
are initialized because the streaming constructor doesn't initialize any of
the data fields. Any data members not streamed in must be set to meaningful
values. Care must be taken to initialize the members before streaming in base
class data or pointers to objects which have pointers back to the current
object. Virtual functions are enabled in Streamer::Read.
Changes to the string class
---------------------------
The following sections correct string class member function definitions.
size_t find_first_of( const string _FAR &s ) const
Locates the first occurrence in the target string of any character contained
in string s. If the search is successful find_first_of returns the character
location. If the search fails it returns NPOS.
size_t find_first_of( const string _FAR &s, size_t pos ) const
Locates the first occurrence in the target string of any character contained
in string s after position pos. If the search is successful, it returns the
character position within the target string. If the search fails or if
pos > length(), it returns NPOS.
size_t find_first_not_of( const string _FAR &s) const
Locates the first occurrence in the target string of any character not
contained in string s. If the search is successful, find_first_not_of returns
the character position within the target string. If the search fails it
returns NPOS.
size_t find_first_not_of( const string _FAR &s, size_t pos ) const
Locates the first occurrence in the target string of any character not
contained in string s after position pos. If the search is successful
find_first_not_of returns the character position within the target string.
If the search fails or if pos > length(), find_first_not_of returns NPOS.
size_t find_last_of( const string _FAR &s ) const
Locates the last occurrence in the target string of any character contained in
string s. If the search is successful find_last_of returns the character
position within the target string. If the search fails it returns 0.
size_t find_last_of( const string _FAR &s, size_t pos ) const
Locates the last occurrence in the target string of any character contained in
string s after position pos. If the search is successful find_last_of returns
the character position within the target string. If the search fails or if
pos > length(), find_last_of returns NPOS.
size_t find_last_not_of( const string _FAR &s ) const
Locates the last occurrence in the target string of any character not
contained in string s. If the search is successful find_last_not_of returns
the character position within the target string. If the search fails it
returns NPOS.
size_t find_last_not_of( const string _FAR &s, size_t pos ) const
Locates the last occurrence in the target string of any character not
contained in string s after position pos. If the search is successful
find_last_not_of returns the character position within the target string. If
the search fails or if pos > length(), find_last_not_of returns NPOS.
The assign member funtion
assign(const string&, size_t = NPOS);
was changed to
assign(const string&, size_t = 0, size_t = NPOS);
The size_t parameter in the old version was the number of characters
to copy. In the new version that is the second size_t parameter; the
first one is the position in the passed string to start copying.
For example:
string s1 = "abcdef";
string s2;
s2.assign( s1, 2, 3 );
After executing this code, s2 should contain "cde".
The same change was made in several other functions.
string(const string _FAR &, size_t, size_t);
string(const char _FAR *, size_t, size_t);
string(const char __far *, size_t, size_t);
assign(const string _FAR &, size_t, size_t);
append(const string _FAR &, size_t, size_t);
append(const char _FAR *, size_t, size_t);
prepend(const string _FAR&, size_t, size_t);
prepend(const char _FAR*, size_t, size_t);
compare(const string _FAR&, size_t, size_t);
insert(size_t, const string _FAR&, size_t, size_t);
replace(size_t, size_t, const string _FAR&, size_t, size_t);
Casting Macros
--------------
The following casting macros have been provided, and are defined in
\BC4\INCLUDE\CLASSLIB\DEFS.H:
TYPESAFE_DOWNCAST(object,toClass)
Converts the pointer referred to by 'object' into a pointer to an object of
type 'toClass'. The macro parameters to TYPESAFE_DOWNCAST are in the
opposite order from the rest of the macros here. When using a compiler that
supports new style casts and runtime type information this is done with
dynamic_cast<> and will return 0 if the cast cannot be done. When using a
compiler that does not support new-style casts and runtime type information
this is done with fake runtime type information generated by the
IMPLEMENT_CASTABLE macro.
STATIC_CAST(targetType,object)
Converts the data object referred to by 'object' into the type referred to
by 'targetType'. When using a compiler that supports new style casts, this is
done with static_cast<> and will fail if the cast cannot be done without
runtime type information. When using a compiler that does not support new-style
casts, this is done with an old-style dangerous cast.
CONST_CAST(targetType,object)
Converts the data object referred to by 'object' into the type referred to
by 'targetType'. When using a compiler that supports new style casts, this
is done with const_cast<> and will fail if the cast changes the type of the
object in any way other than adding or removing const and volatile qualifiers.
When using a compiler that does not support new-style casts, this is done with
an old-style dangerous cast.
REINTERPRET_CAST(targetType,object)
Converts the data object referred to by 'object' into the type referred to
by 'targetType'. When using a compiler that supports new style casts, this
is done with reinterpret_cast<>. When using a compiler that does not support
new-style casts, this is done with an old-style dangerous cast.
IDE/Integrated Debugging
------------------------
Using the IDE under NT is not currently supported.
The default extension for Borland C++ 4.0 project files is .IDE.
Using the Microsoft DBWIN utility interferes with the Event log's
ability to display those same messages. To see those messages in
the Event log, either quit DBWIN or select Options|No Output in DBWIN.
Project style sheets are inherited from the default project when you select
Project|New. You can set inheritance using the following option in the BCW.INI
file:
[projects]
inherit=0
where 0 inherits from the default project, 1 from the previous project,
and 2 from the shipping defaults (which are unchangeable).
The following listing explains some of the more useful BCW.INI settings:
[ToolDir] ;BCW's default paths
BcInclude=\bc4\include ;Default Include path, MPD Directories
BcLib=\bc4\lib ;Default Lib path, MPD Directories
[Project]
saveastext=1 ;PDL file with Style Sheets and Modified tools
readastext=1 ;Read Style Sheets and Tools
[IDE]
HelpDir=C:\BC4\BIN ;where to find the help files
DefaultDesktopDir=C:\BC4\BIN\ ;where to find bcconfig.bcw,
;bcwdef.bcw/dsw,*.tok,*.ckb
If you step over or into a throw() call, the application will run
until it reaches a breakpoint or program termination, instead of
stopping at the appropriate catch() function. To debug catch()
functions, you must set breakpoints within them.
Run to Cursor (F4) will do nothing if the source line you wish to run
to is the same source line that the execution point is on. Thus,
using F4 to iterate through any loop structure will not work.
Instead, set a breakpoint on a line in the loop and use Ctrl-F9
(Debug|Run) to iterate through the loop. Once finished with the loop,
the breakpoint can be removed.
The following combination of events will cause unusual behavior:
- Placing breakpoints in Windows procedures or OWL event handler which will
receive WM_KILLFOCUS or WM_WINDOWPOSCHANGED messages.
- Shifting focus from this application while debugging, directly to the IDE.
When focus is changed from the application being debugged to the IDE,
Windows initiates an intertask SendMessage from the IDE to the
application. But the breakpoint prevents SendMessage from completing,
putting Windows into an unstable state. Many GUI debuggers silently
ignore a breakpoint in this situation. The Borland Integrated
Debugger displays a message box warning of this situation giving you
the choice of ignoring the breakpoint and continuing the application
or aborting the application so you can make further changes to the
code or placement of breakpoints before running again. The best way
to avoid this situation is to not click on the IDE when you have a
breakpoint in the Window procecure or OWL event handler that could
stop due to an intertask SendMessage from the IDE. Instead click on
some other application like the Program Manager. This will still
result in the WM_KILLFOCUS and related messages and the intertask
SendMessage, but the initiating task will not be the IDE and thus
completely avoids the Windows instability.
A further note: the first click of the mouse on the IDE immediately
initiates the MessageBox and the click in the OK box is the next
mouse event captured, so interesting visual effects may occur
depending on where that first mouse click occurred. For example, if
the first click was in the title bar of the IDE, the second click (in
the MessageBox OK) will result in a move of the IDE Window from its
original location to the location of the OK mouse click. If this
happens, move the IDE back to where you want it.
Floating Point Formats
----------------------
Floating point formats are a collection of formatting information used to
manipulate floating point numbers in certain runtime library functions such as
scanf() and atof().
This section discusses why you might get the error
FLOATING POINT FORMATS NOT LINKED : ABNORMAL PROGRAM TERMINATION and tells
you how to resolve it.
There are no current plans to fix this because it is not a bug. The
intent is to avoid linking the floating point formats (about 1K of
overhead) when they are not required. The tradeoff is that the
programmer must explicitly request that the floating point formats be
linked in for some programs that manipulate floats in a limited and
specific fashion.
Because you can get the error in a number of different ways, check the
following list of potential causes to find out how to resolve the error.
These are listed in order of most common to least common causes.
1. CAUSE: Floating point set to <None>. You have your
floating point option set to None when it should be set to
either Fast or Normal.
FIX: Set Floating Point to Fast or Normal.
2. CAUSE: Either the compiler is overoptimizing, or the
floating point formats really do need to be linked in because
your program manipulates floats in a limited and specific
fashion. Under certain obscure conditions, the compiler will
ignore floating point usage in scanf(). (e.g., trying to
read into a float variable that is part of an array contained
in a structure.)
FIX: Add the following to one source module:
extern _floatconvert;
#pragma extref _floatconvert
3. CAUSE: Forgetting to put the address operator & on the scanf
variable expression. For example,
float foo;
scanf("%f", foo);
FIX: Change the code so that the & operator is used where it
is needed. For example, the above code should be
float foo;
scanf("%f", &foo);
Turbo Debugger for Windows
--------------------------
You can use TD32 to debug under Win32s. However, to do so, you must
ensure you use SVGA.DLL or equivalent support in the VideoDLL entry
in the [TurboDebugger] section of TDW.INI.
TD32 can support dual monitor debugging under Win32s. Ensure that
a monochrome adapter is installed in your machine and set the
Mono=yes flag in the [VideoOptions] section of TDW.INI:
[VideoOptions]
MONO=yes
See the online text file called td_help!.txt for more information on
using TD32 and TDW.
Using Tools with NTFS
---------------------
When using Borland C++ 4.0 tools under NTFS, be aware of assumptions
about file extensions. If Borland C++ 4.0 tools see an extension,
they assume no default. Therefore, with "bcc32 test.1.cpp", BCC32
spawns TLINK32 with "-ap c0x32.obj test.1, test.1, import32 cw32".
As TLINK32 sees an extension on test.1, it makes NO assumptions about
a .obj or .exe extension. It attempts to look for test.1 (instead of
test.1.obj) and to create test. (instead of test.1.exe).
Embedded blanks in filenames are not currently supported. For
instance, under the Windows NT NTFS file system it is legal to have a
file named "This is an interesting file name.cpp". The response file
processing in our 32-bit tools cannot handle this type of file.
16-bit tools running on NT cannot use NTFS filenames.
Run-time Type Information and Virtual Destructors
-------------------------------------------------
When -xd is enabled, a pointer to a class with a virtual destructor can't
be deleted if that class is not compiled with -RT. The -RT and -xd options
are on by default.
EXAMPLE
// Compiled with -RT- and -xd
class A {
public:
virtual ~A() {}
};
void func(A *Aptr ) {
delete Aptr; // Error. 'A' is not a polymorphic class type
}
-------------------------------
Borland C++ 4.0 UPDATE PATCHES
-------------------------------
---------------
*** Notice ***
---------------
These patches are intended for use only with Borland language
products. The resulting file(s) are subject to the terms of the
No-nonsense License Agreement which shipped with the Borland
language product you purchased.
---------------
README CONTENTS
---------------
-Instructions for installing patches
-Troubleshooting
-BC4P01: Purpose
-BC4P01: Files Modified
-BC4P02: Purpose
-BC4P02: Files Modified
-BC4P03: Purpose
-BC4P03: Files Modified
-BC4P04: Purpose
-BC4P04: Files Modified
-TA4P01: Purpose
-TA4P01: Files Modified
-Creating .COM Files
-----------------------------------
Instructions for installing patches
-----------------------------------
The INSTALL.BAT file uses PATCH.EXE to apply a series of five
update patches to your installed Borland C++ directories.
INSTALL.BAT must run from the floppy drive where the update disk
is inserted. To perform the install, first change to your floppy
drive and then type the following command:
install base_dir windows_dir [/b]
base_dir is the base directory where BC4 is installed.
windows_dir is the directory where Windows is installed. The
optional /b switch creates backups of the original file versions.
For example, you might type these two commands:
a:
install c:\bc4 c:\windows /b
If you use the optional /b switch, then backup copies of the old
versions of the files modified will be placed into directories
called BACKUP in your BC4 top-level directory and your Windows
SYSTEM directory. You may omit the /b flag if you do not wish to
keep these old versions. Be sure that you have enough extra disk
space before using the backup switch (20 MB).
In most cases INSTALL.BAT will be sufficient and it will not be
necessary to do anything more. However, if for any reason you
need to apply any of the supplied patches individually, you can do
so by copying PATCH.EXE and the desired patch file to your BC4 top
level directory and executing the following command from that
directory:
PATCH -BACKUP PATCHFILE.RTP
In the above example, substitute the name of the desired patch.
Patches should be applied in order by the number indicated in the
filename of the patch.
---------------
Troubleshooting
---------------
If PATCH.EXE is unable to locate the correct files to
patch, you will see the message:
Warning wpt0015: Old File does not exist
This may indicate one of the following cases:
1) You have previously deleted one or more files from BC4
that PATCH.EXE has attempted to patch. In this case,
PATCH.EXE will skip the files you have deleted. If you
wish to replace a missing file, you must first reinstall
from your Borland C++ 4.0 master diskettes before
applying the patch.
2) You have specified the wrong top level directory for
Borland C++. In this case, verify the directory name in
which you have installed Borland C++ 4.0 and use the
correct directory name when running INSTALL.BAT.
3) When you installed BC4, you chose not to install one or
more of the files that PATCH.EXE has attempted to patch.
In this case, PATCH.EXE will skip the files you did not
install. If you wish to add a missing file, you must
first install from your Borland C++ 4.0 master diskettes
before applying the patch.
4) Install is attempting to patch Turbo Assembler 4.0 which
you do not own or have not installed. PATCH.EXE will
safely skip the files you do not have, and you may ignore
this message. If you wish to order the Turbo Assembler
upgrade to Borland C++ 4.0, you can contact the Borland
Order Desk at 1-800-331-0877.
5) You have installed a LAN installation of Borland C++ and
thus your Borland Windows Custom Controls (BWCC) are not
installed in your Windows SYSTEM directory. In this case
copy PATCH.EXE and BC4P04.RTP from your patch disk to the
directory above the directory in which you have BWCC.DLL
installed. In most cases this will be your Borland C++ top
level directory, C:\BC4 by default. From this directory,
execute the following command from a DOS command prompt:
PATCH -BACKUP BC4P04.RTP
PATCH.EXE will report the following message if it
determines that a file does not need to be patched:
New Version of File 'FILENAME' already exists.
This may indicate one of the following cases:
1) You have purchased a recent copy of Borland C++ 4.0 in
which the software changes have already been introduced.
2) You have already applied the patch.
In either case, PATCH.EXE has verified that your software is
up to date and you need not take further action.
PATCH.EXE may terminate and report the following message when
running under Windows NT:
error ept0017: Failure Opening Old File: FILENAME
It is recommended that you run INSTALL.BAT under DOS, rather than
under Windows NT, if possible. Otherwise, shut down all unnecessary
applications under NT and restart INSTALL.BAT. PATCH.EXE will skip over
any files that were previously patched, printing a message for each file
skipped, and continue where it left off. You may have to restart
INSTALL.BAT more than one time.
---------------
BC4P01: Purpose
---------------
Updates VBX files to correct a problem when debugging
applications in the IDE integrated debugger under the debugging
kernel of Windows 3.1
----------------------
BC4P01: Files Modified
----------------------
bivbx10.dll
bivbx.lib
---------------
BC4P02: Purpose
---------------
Updates Borland C++ 4.0 header files and introduces CT.LIB to
allow for the creation of COM files.
----------------------
BC4P02: Files Modified
----------------------
c0t.obj
constrea.h
cstring.h
fstream.h
iostream.h
setjmp.h
stdiostr.h
strstrea.h
typeinfo.h
---------------
BC4P03: Purpose
---------------
This BC4P updates Borland C++ 4.0 for use with Microsoft Windows 4.0
beta, code named Chicago, and also corrects the following problems
unrelated to use under Chicago:
Integrated Development Environment (BCW):
+ canceling a compile when using precompiled headers caused a sharing
violation
+ alt-n lost the cursor position (also fixed when loading
pane via BufferList)
+ editor printing did not restart line numbers or start each file at
the top of a page when more than one file is printed
+ editor bookmarks were not saved and restored properly
+ "replace all" in selected text caused display errors
+ using TrueType fonts the visual caret position was different than
the edit position
+ using bitmap fonts text became horizontally stretched under some
conditions
+ rescan failures would occur in the case of some user modifications to
generated code
----------------------
BC4P03: Files Modified
----------------------
bc40rtl.dll
bcc32.exe
bcw.exe
bcwdbk16.dll
bcwdbv16.dll
bcws16.dll
bcws32.exe
brc.exe
brc32.exe
brcc.exe
brcc32.exe
brcwin.dll
brush.cpp
buttonga.cpp
c0c.obj
c0fc.obj
c0fh.obj
c0fl.obj
c0fm.obj
c0fs.obj
c0ft.obj
c0h.obj
c0l.obj
c0m.obj
c0s.obj
cc.lib
ch.lib
cl.lib
cm.lib
codegen.dll
compat.txt
cpp32.exe
crtldll.lib
cs.lib
cw32.dll
cw32.lib
cw32mt.dll
cw32mt.lib
cwc.lib
cwl.lib
cwm.lib
cws.lib
ideedit.dll
idepane.dll
impdef.exe
implib.exe
make.exe
objxref.exe
owl200f.dll
owldoc.wri
owlwf.lib
rescan.snp
rlink.exe
td32.exe
td32inst.exe
tdstrp32.exe
tdump.exe
tlib.exe
tlink32.exe
tvwrite.obj
version.rc
worked1.dll
worked2.dll
worked3.dll
worked4.dll
worked5.dll
worklib1.dll
worklib2.dll
workop32.dos
workop32.w32
workopt.dos
workopt.w32
workres.dll
workshop.exe
---------------
BC4P04: Purpose
---------------
Updates Borland Windows Custom Controls (BWCC) for Chicago
compatibility.
----------------------
BC4P04: Files Modified
----------------------
bw32000c.dll
bw320007.dll
bw320009.dll
bwcc.dll
bwcc000c.dll
bwcc0007.dll
bwcc0009.dll
bwcc32.dll
---------------
TA4P01: Purpose
---------------
Changes Turbo Assembler 4.0 to be compatible with Chicago.
----------------------
TA4P01: Files Modified
----------------------
h2ash.exe
h2ash32.exe
tasm32.exe
-------------------
Creating .COM Files
-------------------
Creating .COM files requires setting the compiler to the tiny memory model,
telling the linker to make a .COM file, and linking to the CT.LIB library.
The IDE does not generate .COM files; this must be done from the command line.
Use a command like this:
bcc -mt -lt file.cpp ct.lib
README.TXT File
README file for Microsoft(R) C/C++, Version 7.0
(C) Copyright Microsoft Corporation, 1992
This document contains release notes for version 7.0 of Microsoft
C/C++ and its libraries for MS-DOS(R) and Microsoft Windows(TM)
operating systems.
========================< IMPORTANT REQUIREMENT >==========================
Microsoft C/C++ version 7.0 requires DPMI services. If you wish
to use Windows as your development environment, Windows provides
DPMI services for you. TO USE MS-DOS AS YOUR DEVELOPMENT
ENVIRONMENT YOU MUST INSTALL 386-Max TO PROVIDE THESE SERVICES.
================================< CONTENTS >===============================
This file has the following sections:
Part 1: ESSENTIAL WINDOWS 3.0 COMPATIBILITY INFORMATION
Part 2: Setup and Configuration Notes
Part 3: Support for Windows 3.1 in the Microsoft Foundation Classes
Part 4: List of Additional Readme Files
Part 5: List of Topics in the DETAILS.TXT file
=======< Part 1: ESSENTIAL WINDOWS 3.0 COMPATIBILITY INFORMATION >======
To make it easy for you to update to the latest Windows APIs
and the new features of Windows 3.1, MS C/C++ supports
Windows 3.1 by default. Windows 3.0 applications that are
rebuilt with C/C++ will target Windows 3.1 by default.
Therefore, attempting to run them under Windows 3.0
generates an error.
If you do not wish to take advantage of new Windows 3.1
functionality, or if you want your applications to run on either
Windows 3.0 or Windows 3.1, then follow these instructions for
building Windows 3.0 applications.
Building Windows 3.0 Projects with PWB
--------------------------------------
New projects:
Choose one of the four Windows 3.0 project templates when
prompted for a project template.
Rebuilding existing projects:
Reset the current project template by choosing Project
Templates from the Options menu and then selecting Set
Project Template. Note: This resets all build options,
so check the resulting options to ensure they are
appropriate for your project.
An alternative method is to add the WINVER=0x300 macro in
the Additional Global C/C++ Options dialog box and to
modify the RC Build command in the Customize Project Template
dialog box. This dialog box can be accessed from the Project
Templates option on the Options menu. To make this modification,
change:
command rc_exe "$(RC) $(RESS) $@"
to:
command rc_exe "$(RC) /30 $(RESS) $@"
Building Windows 3.0 Projects from the Command Line
---------------------------------------------------
The two methods for building Windows 3.0 projects from the
command line are described in this section.
Using the WINVER Macro
----------------------
To compile Windows 3.0 applications, you must either add
the line:
#define WINVER 0x0300
to your source file before the line including the WINDOWS.H
include file, or add the /DWINVER=0x0300 option when compiling
all modules in the Windows 3.0 project. This prevents any
Windows 3.1-specific types, functions, or definitions from
being included.
Using the RC /30 Switch
-----------------------
In order to ensure that your application is Windows
3.0-compatible, use the RC /30 option when combining
your .EXE and .RES files. Use this option whenever RC
is invoked after your .EXE file is linked, but do
not use the /30 option with the /r option.
Using Windows 3.1 Features in Windows 3.0 Applications
------------------------------------------------------
You can also build a Windows 3.0-compatible application that
conditionally makes use of new Windows 3.1 features if the
application is running on a Windows 3.1 system. To do this,
use the RC /30 command-line option, but do not use the
#define directive to define WINVER equal to 0x0300. Use the
GetVersion() API to determine the version of Windows that is
running before calling any new Windows 3.1 APIs.
The sample code below demonstrates how the global constant
fWin31 can be set to TRUE if Windows version 3.1 or greater
is running on the system. You can use similar code in your
application initialization.
extern BOOL fWin31;
{
UINT version;
fWin31 = FALSE;
version = LOWORD(GetVersion());
if (((LOBYTE(version) << 8 ) | HIBYTE(version)) >= 0x030a)
{
fWin31 = TRUE;
}
}
You can call new Windows 3.1 functions directly in your
source as long as you link to the Windows 3.1 LIBW.LIB. In
this case, no call to GetProcAddress() is needed. However,
on a computer running Windows 3.0, you must make sure new
Windows 3.1 functions are not called. Here's an example of
how this can be done:
extern BOOL fWin31;
if (fWin31)
{
ScrollWindowEx(hwnd, ...);
}
else
{
ScrollWindow(hwnd, ...);
}
Using the MFC Library with Windows 3.0 and Windows 3.1
------------------------------------------------------
The MFC library header files can build applications targeted for
either Windows 3.0 or Windows 3.1. Windows 3.1 is the default
target. This means that all of the new Windows 3.1 APIs are available
for use. If you must target an application for Windows 3.0 only, you
should define WINVER=0x0300 before including AFXWIN.H in your source
files. This restricts the Windows and MFC interfaces to Windows
3.0-compatible versions only.
The compiled MFC library (object code) must always be built for
Windows 3.1. It will fail to compile if WINVER is defined to be 0x0300.
The library is compatible with both Windows 3.0 and Windows 3.1
run-time systems. If you customize the MFC library, you should not
redefine WINVER; the default value (WINVER=0x030A) is sufficient.
===================< Part 2: Setup and Configuration Notes >===============
Getting Help on Error Messages
------------------------------
To find information on any error message, you can access Help by
using the stand-alone utility QuickHelp, by using the Help menu in
the Programmer's WorkBench (PWB), or by checking the "Comprehensive
Index and Errors Reference" manual.
To find out about an error message using QuickHelp, at the
operating-system prompt type:
QH cxxxx
where <c> is the error's alphabetic prefix and <xxxx> is the
four-digit error number.
To find out more about how to view errors from within PWB, choose
"Errors" from the Microsoft Advisor Contents screen in PWB.
(The Microsoft Advisor Contents screen appears when you choose
"Contents" from the Help menu in PWB.)
Some errors are documented in Help but are not in the "Comprehensive
Index and Errors Reference" manual. See ERRATA2.TXT for a listing of
these errors.
Copying a Single File from Installation Disks
---------------------------------------------
See the ANSWERS.TXT file for instructions.
Installation of Graphics Sample Files
-------------------------------------
Setup does not create the SORTDEMO and GRAPHICS subdirectories,
or copy their associated graphics samples, unless you request that
Setup install the graphics libraries.
Loading Windows From Your AUTOEXEC.BAT File
-------------------------------------------
If you allow Setup to modify your AUTOEXC.BAT file, and your
AUTOEXEC.BAT file contains a statement that loads Windows, the
resulting behavior may cause unexpected system problems. Therefore,
if your AUTOEXEC.BAT file loads Windows, do not allow Setup to
modify your AUTOEXEC.BAT file. Save the changes during Setup and
modify your file once Setup has finished.
Using Windows 3.0 and HIMEM.SYS with More Than 16 MB RAM
--------------------------------------------------------
Installing C/C++, which provides a new version of HIMEM.SYS, may
cause a system crash if your computer has more than 16 MB of RAM.
This is not an issue for Windows 3.1 users or 386-Max users.
If you do not want to upgrade to Windows 3.1 or you want to run
both versions of Windows, replace the HIMEM.SYS driver installed
by C/C++ with the HIMEM.SYS driver from Windows 3.0.
Incorrect Drivers May Prevent Windows From Running
--------------------------------------------------
The Setup program adds a DEVICE statement for the CVW1.386 driver to
your SYSTEM.INI file. If your SYSTEM.INI file also contains a DEVICE
statement for CV1.386, a driver no longer necessary for C/C++,
Windows 3.x will not run. Remove the DEVICE statement for CV1.386
to solve this problem.
Avoiding Data Loss When Using SMARTDRV.EXE
------------------------------------------
SMARTDRV.EXE does not write data to disk immediately. If your computer
should crash after the time data is written to the cache and before
the data is written to the disk, data can be lost. Issuing the
following command causes SMARTDRV to write all data in the cache to
the disk:
SMARTDRV /c
Setup May Not Detect Foreign Disk Cache
---------------------------------------
Setup may install SMARTDRV.EXE if it does not detect the foreign
disk cache installed on your system. Remove the DEVICE statements
for SMARTDRV.EXE from your AUTOEXEC.BAT and CONFIG.SYS files to
resolve this problem.
Fragmented Memory May Cause Internal Compiler Error
---------------------------------------------------
The compiler generates an internal error R6900 if memory has been
fragmented in such a way that chunks of free memory greater than
4K exist between allocated memory blocks. To determine if memory
fragmentation is the cause of the problem, check memory usage with
the techniques described in Chapter 3 of the "Getting Started"
manual. Changing the way memory is allocated, or modifying the
behavior of TSRs, may reduce memory fragmentation.
Programs That May Be Incompatible with SMARTDRV.EXE
---------------------------------------------------
The following applications may be incompatible with SMARTDRV.EXE,
version 4.0:
- The Disk Protect feature in Norton Utilities version 6.0
Do not use the Disk Protect feature in Disk Monitor. If you do,
you will encounter an error and your system may hang if you try
to write to the protected drive. If you want to write to and
cache a protected drive, use the Norton cache program when using
Disk Monitor.
- The Calibrate program in Norton Utilities version 6.01
Calibrate fails on the Disk Mapping test if SMARTDRV is enabled.
- DoubleDisk from Vertisoft
Do not enable write-behind caching for DoubleDisk compressed
partitions.
- Storage Dimensions SCSI Driver (SSTOR.SYS)
Using the SSTOR.SYS driver, the SCSI drive appears corrupted when
SMARTDRV is loaded. The disk's contents are not altered, but they
are inaccessible when using SMARTDRV.
The following drivers, installed in a CONFIG.SYS file, are
incompatible with SMARTDRV.EXE version 4.0:
- The SuperStor utility from Addstor (SSTORDRV.SYS)
Do not use the Create Mountable Drive or Mount and Dismount features
of SuperStor after SMARTDRV is loaded. You must configure your
SuperStor partitions before loading SMARTDRV. If your AUTOEXEC.BAT
file includes "mount" configuration commands, make sure that the
SMARTDRV command line follows the SuperStor configuration command
lines.
Also, you will receive read-write errors if you use SMARTDRV to
cache a SuperStor compressed drive. To prevent SMARTDRV from
caching the compressed drive, you must include the driver letter-
option on the SMARTDRV command line.
For example, if drive C is the uncompressed drive, and drives E
and F are the compressed SuperStor drives, you would type the
following command line or include it in your AUTOEXEC.BAT file:
smartdrv e- f-
- The network driver from DNA Networks Inc. (STATION.SYS)
Using both STATION.SYS and SMARTDRV may cause your system to hang.
- Versions prior to version 7.x of the driver for the
Bernoulli Box (RCD.SYS)
The RCD.EXE program requires that driver RCD.SYS be installed to
use the Bernoulli Box. When SMARTDRV is running, RCD.EXE does
not recognize that RCD.SYS has been installed.
- The Norton Antivirus utility (NAV_.SYS and NAV&.SYS)
The NAV_.SYS and NAV&.SYS drivers for the Norton Antivirus utility
may generate "Not enough memory" errors or hang your system when
loading SMARTDRV.EXE. One workaround is to use the /L command-line
option to load SMARTDRV.EXE into low memory. An alternative is using
the /B option with NAV&.SYS to avoid the NAV&.SYS bug that causes
your system to hang.
The following driver, installed in an AUTOEXEC.BAT file, is
incompatible with SMARTDRV.EXE version 4.0:
- DataMonitor version 7.1 by PC Tools (DATAMON.*)
Loading DataMonitor after SMARTDRV is installed may cause your
system to hang.
Setup Generates a "Cannot write to library file" Error
-------------------------------------------------------
If your TMP environment variable is pointing to a RAM drive that
doesn't have enough space for the temporary files that Setup uses
during the library-building process, this error can result. To solve
this problem, set the TMP variable to your hard disk, if your hard
disk has sufficient space, or select fewer libraries from the Custom
Installation Setup screen. You can run Setup again later to build
additional libraries.
Installation Order May Affect 386-Max Performance
-------------------------------------------------
Installing MS C/C++ before 386-Max can improve 386-Max's capability
for managing the upper memory area.
Using Earlier Versions of 386-Max with C/C++
--------------------------------------------
If you already use 386-Max, be sure to upgrade your system with the
version of 386-Max that is supplied with Microsoft C/C++. This newer
version includes bug fixes that affect the performance of C/C++.
===< Part 3: Support for Windows 3.1 in the Microsoft Foundation Classes >===
The Microsoft Foundation classes provide support for the
enhancements provided in Windows version 3.1. The following
features are described in technical notes in the
\C700\MFC\DOC directory and demonstrated in sample programs in
\C700\MFC\SAMPLES. These API functions are documented only in
the Help system. The following list describes the enhancements
that can be used to develop applications for both Windows 3.0
and Windows 3.1.
- The development and use of custom controls is supported. In
addition, owner draw controls and bitmap buttons are provided.
See TN014.TXT and the sample application CTRLTEST.
- To improve robustness, the Microsoft Foundation Class Library
fully supports the STRICT data types defined in the Windows 3.1
interface file, WINDOWS.H.
- Common dialog operations are now supported with easily
customized classes including CFileDialog (for both File Open
and File Save As), CFindReplaceDialog (to implement modeless
find and replace), CColorDialog (for color selection),
CPrintDialog (for both print setup and print), and
CFontDialog (for font selection). These new dialogs are
described in TN013.TXT.
- The Microsoft Foundation Classes were designed and implemented
using the Windows 3.1 Debug Kernel. If your application issues
any Debug Kernel warnings, they are most likely due to the way you
structured your application code. If you receive any Fatal Exit
messages, the cause is most likely a result of an incorrectly
used feature. Some Debug Kernel warnings (such as 'Invalidate with
fErase == FALSE prevents EraseBackground') will be issued even
when features are used correctly .
- Dialog boxes now feature a gray background that is easily
customized.
- OLE servers now register themselves at startup so that
users do not need to use REGEDIT.EXE.
- Microsoft Foundation Classes now support the Microsoft Pen Windows
controls (see TN015.TXT). A sample application, SPEAKN.EXE,
is provided to demonstrate the use of Pen and MultiMedia.
A pen palette and/or MultiMedia extensions are NOT required.
Applications developed with the Microsoft Foundation classes
are automatically "pen-aware."
- Using multiple inheritance with Microsoft Foundation
classes is demonstrated in the sample application MINSVRMI,
a small OLE server that uses multiple inheritance.
- For applications that target Windows 3.1 only, the Microsoft
Foundation Class Library supports the most useful of the new
Windows 3.1 API functions and messages.
==================< Part 4: List of Additional Readme Files >==============
FILE CONTENTS
---- --------
ANSWERS.TXT Answers to commonly asked questions
DETAILS.TXT Product notes for Microsoft C/C++. See Part 5
of this file for a list of topics in DETAILS.TXT
ERRATA1.TXT Documentation additions and corrections for
"Environment and Tools," "C++ Tutorial,"
"C Language Reference," "C++ Language
Reference," and "Programming Techniques."
ERRATA2.TXT Documentation additions and corrections for
"Run-Time Library Reference," "Class Libraries
Reference," "Class Libraries User's Guide,"
"Comprehensive Index and Errors Reference,"
CLANG.HLP, CL.HLP, LINK Help, header files, and
Microsoft Class Libraries Quick-Reference Card
BIN\MSD.TXT Documentation for diagnostics utility
SOURCE\MOVE\MOVEAPI.TXT Move - Help document
SOURCE\STARTUP\README.TXT Startup build instructions
From the C700\SAMPLES directory:
IOSTUTOR\README.TXT Instructions for building iostream demo
CPPTUTOR\OOD\OODEMO.TXT Notes on the OODEMO sample
SAMPLES.TXT Samples document
MFC README Files:
MFC\README.TXT Introduction to the MFC library
MFC\SRC\README.TXT How to build the libraries
MFC\LIB\README.TXT Information file for MFC Libraries
MFC README Files from the MFC\DOC directory:
README.TXT Overview of tech notes
TN001.TXT Tech note on class registration
TN002.TXT Tech note on persistence
TN003.TXT Tech note on handle maps
TN004.TXT Tech note on templates
TN005.TXT Tech note on MDI
TN006.TXT Tech note on message maps
TN007.TXT Tech note on Windows debugging aids
TN008.TXT Tech note on Foundation OLE support
TN009.TXT Tech note on writing an OLE client with MFC
TN010.TXT Tech note on writing an OLE server with MFC
TN011.TXT Tech note on DLL support
TN012.TXT Tech note on robustness issues
(including WIN 3.1 STRICT)
TN013.TXT Tech note on standard dialog classes
TN014.TXT Tech note on custom controls
TN015.TXT Tech note on Pen Windows
TN016.TXT Tech note on multiple inheritance
MFC README Files from the MFC\SAMPLES directory:
ABOUT2\README.TXT Information file for About2
HELLO\README.TXT Hello/Generic application
README.TXT Explanation of the MFC Samples
TEMPLDEF\README.TXT Instructions
TESTCLNT\README.TXT MFC OLE Test Client Sample
TESTSERV\README.TXT MFC OLE Test Server Sample
TUTORIAL\CHAR\README.TXT Tutorial samples applications
TUTORIAL\README.TXT Tutorial samples applications
TUTORIAL\WIN\README.TXT Tutorial samples applications
IMPORTANT: See README.SDK for release information relating to the
Windows 3.1 SDK product. Documentation for the Windows 3.1 functions
is available in Help only.
=================< Part 5: Topics Covered in DETAILS.TXT >=================
See the DETAILS.TXT file for information on the following topics:
- Using PWB
Running PWB in a Window
Using Precompiled Headers from PWB
New PWB Switches: Friction and Factor
Minimum Memory Requirement for Accessing Help in PWB
- Command-Line Options
New CL Default is /Od if Optimizations Not Specified
Mixing P-Code and Fully Optimized Machine Code
- C++ Topics
Destructors for Objects in Global and Static Arrays
Defining const struct Parameters for Member Functions
Return Types for Based Virtual Functions
Calling Temporary Objects of Types with Destructors
Explicit Conversion Recommended for Member Functions
Function-Style Initializers Starting with Casts
- Specifying Program Starting Execution Points
Windows 3.x Executable Files (EXE)
Windows 3.x Dynamic-Link Libraries (DLL)
Windows 3.x and the NOCRT Libraries
- Run-Time Support for Windows Exit Procedure Routines
Information on the Windows WEP Routine
Providing Your Own DLL Termination Routine
General Notes
Library Initialization Code in Windows DLLs
- New Function and Pragma Behavior
Using the Intrinsic Version of strlen
The check_pointer Pragma
The data_seg Pragma
- Identifier Naming Issues
Finding Local Static Variables in Browser Information
Missing Symbol Names for enums
Long Identifier Names Create Problems for LIB.EXE
- Using the CodeView(R) Debugger with MS C/C++
CodeView Now Runs in a Windows-Like Environment
CodeView Error When Debugging Programs Built With Class Libraries
Extended-Line Modes Enabled for CodeView Debugger
Remote Debugging with CodeView
Debugging Locally on an 80286
Running CodeView on an 80286 Computer
Debugging P-Code
CodeView's Access to Function Code in Libraries
Unloading DLLs When CodeView Terminates
Removing CodeView 3.07 from SDK Program Manager Group
Unsuccessful Connection to Remote Terminal
Running Screen Saver Programs While Debugging
DOS Session Running in a Window Does Not Have Mouse Support
Application I/O When Debugging Can Cause Screen Corruption
Recovering From "Internal Debugger Error"
Debugging Applications That Use a Mouse
Debugging Basic or FORTRAN in the Windows Environment
Setting the Scope of the Show Address Option in CodeView
Disable the Minimize On Use Option When Debugging
=============================================================================
Microsoft, MS, MS-DOS, and CodeView are registered trademarks, and
Windows is a trademark of Microsoft Corporation.
386-Max is a trademark of Qualitas, Inc.
Bernoulli Box is a trademark of Iomega Corporation.
Norton Utilities is a registered trademark of Peter Norton Computing.
SuperStor is a trademark and Addstor is a registered trademark of
Addstor, Inc.
NOTE: Microsoft improves its languages documentation at the time of
reprinting, so some of the information in this file may already be
included in your manuals.
=================================
C Runtime Library Startup Sources
=================================
The directory \startup and its subdirectories contain the files
necessary for building the startup portion of the C runtime library.
The \startup directory contains the startup source files, the include
files, the batch file, and the make files used to build the startup
object files. The subdirectories of \startup contain OS specific
sources.
The startup object files can be built by invoking cstartup.bat (DOS/WIN)
from within the \startup directory. This batch file assumes the following:
* Nmake.exe, link.exe, the C compiler, and the assembler must
be in the execution path. MASM 6.0 and C 8.0 or later are
required to build the startup sources.
* Environment variable INCLUDE must be set to the directory that
contains your C include files.
* Environment variable LIB must be set to the directory that
contains your C library files. The library files for your OS
target must exist in that directory (e.g., ?libcer.lib for DOS,
?libcewq.lib for WIN, etc.).
* For WIN, libw.lib must be in the directory specified by the LIB
environment variable and windows.h must be in the directory specified
by the INCLUDE environment variable.
Cstartup will create memory model specific subdirectories and place the
appropriate object files there. Under each memory model subdirectory,
cstartup creates additional subdirectories where OS specific objects reside.
OBJ Directories Contents
--------------- --------
S, M, C, L Small, medium, compact, large model
directories which contain OS specifc
objects
S/DOS, M/DOS, etc. MS-DOS startup objects
S/WIN, M/WIN, etc. Windows EXE startup objects
S/DLL, M/DLL, etc. Windows DLL startup objects
The message "<cEnd - nogen>" is generated when some of the assembly language
source files are assembled. This message is expected and is totally benign.
Running C Startup
-----------------
Use the cstartup batch file to build the various C runtime startup objects.
The cstartup batch file allows you to select various combinations of
OS platforms and models. The interface is:
Usage: cstartup [?] [os] [models]
[?] displays this help message.
[os] is an optional list of one or more OS designators
seperated by spaces (DOS, WIN); default is all.
[model] is an optional list of memory model designators
seperated by spaces (S, M, C, L); default is all.
Examples:
cstartup dos s /* build small model DOS objects */
cstartup win s l /* build small and large model WIN objects */
cstartup /* build all startup objects */
cstartup ? /*** display a help message ***/
[Note: You may need to delete old objects from previous startup builds
if you alter build options, startup sources, etc.]
Startup Files
-------------
The following files are contained in the \startup directory:
Startup source files:
CHKSTK.ASM
CHKSUM.ASM
CRT0FP.ASM
FILE.ASM
FMSGHDR.ASM
RCHKSTK.ASM
SETARGV.ASM
WILD.C
_FILE.C
DOS\CRT0.ASM
DOS\CRT0DAT.ASM
DOS\CRT0MSG.ASM
DOS\EXECMSG.ASM
DOS\NMSGHDR.ASM
DOS\STDALLOC.ASM
DOS\STDARGV.ASM
DOS\STDENVP.ASM
WIN\CRT0.ASM
WIN\FATAL.ASM
WIN\NOQWIN.ASM
WIN\QWCINIT.ASM
WIN\STUBMAIN.ASM
WIN\STUBWEP.ASM
WIN\WCHKSTK.ASM
WIN\WEP.ASM
WIN\WFILE.ASM
WIN\WINDGRP.ASM
WIN\WINDGRPX.C
WIN\WNULL.ASM
Include files:
CMACROS.INC
CMSGS.INC
DEFSEGS.INC
FCNTL.INC
HEAP.INC
MSDOS.INC
RTERR.INC
STDLIB.INC
STDIO.INC
VERSION.INC
FILE2.H
INTERNAL.H
MSDOS.H
REGISTER.H
Build files:
CSTARTUP.BAT ;builds objs and links null program on DOS and WIN
CSUB.BAT ;(used by cstartup)
MAKEFILE.DOS ;makefile used in DOS build
MAKEFILE.WIN ;makefile used in WIN build
WINDLL.MKF ;makefile used in WIN DLL build
WINEXE.MKF ;makefile used in WIN EXE build
NULBODY.C ;null C program
DOS\NULBODY.LNK ;DOS link script for null program
WIN\NULBODY.DEF ;WIN def file for null program
WIN\NULBODY.LNK ;WIN link script for null program
Documentation:
README.TXT ;information about \startup directory structure
;and contents
[Note: Startup sources written in assembly language have been edited with
tab stops set to 8. Startup sources written in C have been edited with
tab stops set to 4.]
Placing the Stack outside of DGROUP
-----------------------------------
If your program requires a large amount of stack space, the run time
library can be configured to place the stack in a seperate segment
outside of DGROUP. By doing this, the stack can be up to 64K in size
without reducing the amount of storage available in DGROUP for near
data. In order to do this your program must be either compact, large,
or huge model. You must also direct the compiler to assume that
that SS != DS. Thus, your memory model specification should be -ACw,
-ALw, or -AHw. See the compiler documentation for more information
about these options.
To use a far stack, you must assemble the startup sources provided
with C 8.0. In the startup sources directory is a file called "makefile.dos"
which controls the startup module build process for the run time library.
To enable a far stack, you need to edit the makefile. Near the top of
the file are two lines which begin "CFLAGS=" and "ASMFLAGS=". You should
add the text " -DFARSTACK" to the end of these two lines. Then build
the startup modules according to instructions given previously in this
file. You should then use the LIB utility to replace the startup modules
in your library with the new modules you have built. When linking, the
size of the stack can be controlled with the /STACK command line option.
If you are creating DOS programs, the size of your .EXE file will be
increased by the size of your stack. This is a consequence of the DOS
.EXE format. To reduce the size of your .EXE file, link with the
/EXEPACK option.
[Note: The far stack option is not supported in the Windows
startup files.]
--- End ---
Microsoft QuickC for Windows SETUP Program A mouse is not required to run the SETUP program. You can turn options on or off either by clicking the option you want or by using the TAB key and then pressing the SPACEBAR. Pressing the SPACEBAR toggles the installation option on or off. The remainder of this file describes the options available at setup time. Each option is explained in its own section below. For additional technical information on using Microsoft QuickC for Windows, see the README.TXT file located in your Microsoft QuickC for Windows install directory. This file can be opened using any text editor or word processor, such as Microsoft Windows Notepad. The amount of disk space required for each option and the total amount of disk space required to install all of the selected options are displayed at the bottom of the dialog box. Use this information and the following information on the options to determine which options you want to install. 1) Development Environment Choosing this option installs the minimum file set necessary for using Microsoft QuickC for Windows. If you are installing Microsoft QC/Win for the first time, you must turn on this option. 2) QuickCase:W Choosing this option installs the QuickCase:W user interface prototyper. It will either work independently or in conjunction with the QC/Win development environment. 3) Resource Editors Choosing this option installs the necessary applications to edit dialog boxes, bitmaps, icons and cursors for Windows applications. 4) Runtime Libraries Choosing this option installs the necessary runtime libraries to write both Windows and DOS applications. These libraries also include the QuickWin routines to allow easy porting of applications from DOS to Windows. 5) Sample Programs Choosing this option installs the sample programs for QC/Win. 6) On-line Help Files Choosing this option installs on-line help files for the Quick Development Environment as well as the Windows API reference and the C Languages Reference.
Copyright (C) 1991 MetaWare Incorporated; All Rights Reserved.
High C Version 2.31
Globally Optimizing Compiler
for Extended DOS 80386/486
April 1991
Table of Contents
-----------------
1. Introduction
2. Release Notes
3. New Features
4. Additions/Corrections to Printed Documentation
5. Wildcard Expansion
6. Driver Notes
7. New Command-Line Options
8. GFX Graphics Functions
9. Known Problems
1. Introduction
----------------
This product is an entirely new version of the High C 386 compiler for MS-
DOS. The compiler includes global optimizations and a function inliner
that greatly enhance the performance of the generated code. The full power
of protected mode on the 386 and 486 is supported in conjunction with Phar
Lap's 386|DOS-Extender. Specific support for the 486 is provided under
toggle control. Version 2.3 enhances program development with support for
the 32-bit source-level debugger, an execution profiler, a one-step compile-
and-link driver, an editor, a graphics library for the 386/486 in protected
mode, and MetaWare's DOS Helper (a set of UNIX-style utilities for MS-DOS).
There are many internal differences between the 1.x and 2.x versions of High
C. However, the source-language syntax and command-line options are almost
identical (except for the points mentioned in file ETC\DIFFER.DOC).
2. Release Notes
-----------------
* For installation instructions, read the Installation Guide provided with
your documentation.
* For differences from prior versions, read the New Information! document.
* Last-minute-supplied or unclassified software is in subdirectory ETC.
* See file WEITEK.DOC in the WEITEK subdirectory for detailed information
about Weitek ABACUS coprocessor support.
3. New Features
----------------
* MetaWare Profiler: see file README.PRF for information about the Profiler.
* MetaWare Debugger: if you have also licensed the MetaWare Debugger, see file
README.MDB for information.
* Microsoft Graphics compatibility functions.
* SIGNAL.H functions raise() and signal() implemented.
* Interrupt vector functions added to DOS.H:
_getrvect()
_getpvect()
_setrvect()
_setpvect()
_setrpvectp()
These functions have been added to the High C Extended DOS 80386 Run-Time
Library. Their counterparts in the 80x86 product are _dos_getvect() and
_dos_setvect().
* Optimization Levels
The compiler now has five optimization levels, numbered 0 through 4. You
specify the optimization level on the command line with option -On, where O
is the letter O and n is a number 0 through 4 (for instance, specify -O2 for
optimization level 2). The default level is 0. In general, the higher the
optimization level, the faster the generated code will run, usually at the
expense of compile time.
Here is a summary of the additional optimizations performed at each level:
Level 0 (Default)
-----------------
- One iteration of local common subexpression elimination (CSE), copy
propagation, and constant propagation.
- One iteration of live/dead analysis.
- Numerous strength reductions (such as multiply converted to shift).
- Global register allocation.
Level 1
-------
- Multiple iterations of local common subexpression elimination
(CSE), copy propagation, and constant propagation.
- Global CSE elimination (multiple iterations).
- Removal of invariant expressions from loops.
- Multiple iterations of live/dead analysis.
- Register lifetime analysis prior to register allocation (can improve
global register allocation).
- Back-substitution of epilogue code to avoid unconditional jumps.
- Expression simplification by applying law of associativity.
For example, (x+k1)+k2 -> x+(k1+k2)
- Improved spill analysis when performing register allocation.
- Cross jumping (tail merging).
Level 2
-------
- Local CSE elimination phase is re-invoked to clean up register
spill code.
Level 3
-------
- The Behaved toggle is initialized to On. Consequently, the compiler
assumes that the program being compiled is "well behaved". See
Section 4 below for a description of this toggle.
Level 4
-------
- Same as Level 3 as of this writing.
* Warning Levels
The compiler now supports four levels of warning diagnostics, numbered 0
through 4. Setting the warning level to n means that warning diagnostics
with severity level n or less are displayed. A setting of 0 suppresses all
warnings. The default warning level is 3. Level 1 warnings should be of
most interest to programmers. Levels 2 and 3 are less so; level 4 is merely
informational.
You can set the warning level on the command line with option -wn, where n
is a number 0 through 4; or you can use pragma Warning_level in your source.
Pragma Warning_level has the following form:
#pragma Warning_level(n)
where n is a decimal integer constant denoting the level.
Messages and classifications may change as the compiler is revised. As of
this writing, warning messages are classified as follows:
Level 4 (Initializes VP_UP_warn toggle to On)
-------
Old-style K&R C would possibly produce different results for
relational.
Level 3
-------
'=' encountered where '==' may have been intended.
Function called but not defined.
Unsigned compare with zero always false/true.
Variable "name" is never referenced.
Level 2
-------
Expression has no side effects.
Prototype causes non-standard conversion from "type1" to "type2".
(Also under control of Prototype_conversion_warn toggle.)
Static function is not referenced.
Toggle "name" is unrecognized.
Variable "name" is possibly referenced before set.
All other warning messages are level 1.
4. Additions/Corrections to Printed Documentation
--------------------------------------------------
* Toggle Behaved -- default Off at optimization levels 0-2, On at level 3 and
above.
When this toggle is On, the compiler assumes that the program being
compiled is "well behaved". A "well behaved" program follows these rules:
- No address of a union member is ever assigned to a pointer.
- No value of a pointer type is ever cast to an incompatible pointer type.
With these assumptions, the compiler may be able to generate substantially
better code when referencing pointer-based variables.
The compiler issues an appropriate warning if any of the above assumptions
is violated in a way that affects assumptions made by the optimizer. You
must judge whether the warnings can be safely ignored, or if the program
needs to be compiled at a lower optimization level.
WARNING: The compiler may not catch all instances of misbehaved code. For
example, a pointer-to-char may be passed to an undeclared
external function expecting a pointer-to-int. Therefore, it is
possible for a program to compile at level 3 without warnings
(and yet run incorrectly), but run correctly when compiled at a
lower optimization level.
* Toggle Callee_pops_when_possible
Callee_pops_when_possible works with non-prototyped functions and is
completely SAFE. The compiler marks those functions that are "safe" with a
bit. If the function is non-prototyped and is called before it is defined,
or called with an argument list inconsistent with its definition, then the
"safe" bit is turned off.
* Toggle Use_UP_rules -- Default: Off
In C there are two rules for implicitly widening an unsigned char or
unsigned short operand in an arithmetic expression: value-preserving (VP)
and unsignedness-preserving (UP).
The VP rule widens an unsigned char or unsigned short to signed int. This
is the rule used in Standard C.
The UP rule widens such operands to unsigned int. This rule is used by
older compilers, such as those based on the AT&T Portable C Compiler.
Some programs can behave differently depending on which rule is in force.
For example:
unsigned char c;
...
if (c-1 > 0) foo();
If c happens to have the value zero when the if statement is executed, the
relational expression will be false if the VP rule is used, true if the UP
rule is used. This latter characteristic occurs because c is widened to an
unsigned int; therefore, the type of the expression c-1 is also unsigned
int.
If you are compiling code that was originally developed under a UP
compiler, turn On toggle Use_UP_rules.
* Toggle VP_UP_warn - Default: Off if Warning_Level < 4; On otherwise.
When On, the compiler issues a warning when it encounters an expression
that could have a different value depending on whether value-preserving or
unsignedness-preserving rules are used. See the description of toggle
Use_UP_rules.
* -Hansi and in-line transcendentals
If you are using the -Hansi switch and would like to get faster transcen-
dentals, but are not concerned about errno values, you may turn off the
toggle Strict_ansi_math:
-Hansi -Hoff=Strict_ansi_math
By default, when -Hansi is specified on the command line, Strict_ansi_math
is also set by the driver. Strict_ansi_math causes the compiler to
generate calls to library functions for the transcendentals, instead of
inlining them. This is necessary for ANSI conformance. Without the calls,
the compiler will inline many trancendentals; and after the Common Sub-
expression Elimination phase of optimization, errno may not always be set.
* log(), log10()
The log() and log10() functions are documented to return -HUGE_VAL if
passed a value <= 0.0 when, in fact, the functions return 0.0. This
behavior is outside ANSI specifications ("A domain error occurs if the
argument is negative. A range error may occur if the argument is zero.")
and should not be relied upon.
* Memory-model override
In both Version 2.3 and Version 1.7 of the High C compiler for Extended
DOS 80386, command-line option -Mx overrides any "pragma Memory_model"
specification in the program. However, Versions 1.7 and 2.3 differ in how
multiple "pragma Memory_model" specifications are handled. In 1.7 the last
instance overrides any previous specifications; in 2.3 the first instance
takes precedence.
* Optimize_for_space toggle is recognized, but is not yet supported.
* PCC_msgs toggle
The PCC_msgs toggle has been replaced by a more general warning level
capability. You can set the warning level on the command line with
option -wn, where n is a number 0 through 4; or you can use pragma
Warning_level in your source. See the New Features section of this
readme for more information about warning levels.
* _setlogorg() library function
This function was incorrectly documented to take void as its argument.
The proper usage is:
struct xycoord{ short xcoord, short ycoord } _setlogorg(short x,short y);
The return value is the previous logical coordinate of the origin.
* _setvideomode() library function
The macro _ERESCOLOR was incorrectly documented to supply 64 colors
and 640x480 resolution. The correct attributes are 16 colors and
640x350 resolution.
* Stack dump
The stackdump(int handle) routine does not include any routine names. It
does include the "will return to" address, and eight arguments from the
stack. It cannot provide any arguments that were passed in registers.
* Use_wtlbase_for_weitek toggle
This toggle has been added for Weitek support. With flat-model code, use
_mwWTLBASE as the base address of the Weitek instructions.
5. Wildcard Expansion
----------------------
ETC\WCARD.C is a program that examines DOS wildcards in the argc/argv
array and expands them. If compiled with TEST defined, the program
executes and shows the arguments before and after expansion. Compiled
without TEST, it is suitable for inclusion in your program.
6. Driver Notes
----------------
When you invoke High C with the command hc386, you are invoking a driver
program which in turn invokes the compiler. See the Programmer's Guide
chapter Invoking and Controlling the Compiler.
7. New Command-Line Options
----------------------------
-fsoft Causes the compiler to generate emulation code and link with the
emulation library.
-f287 Causes the compiler to generate 287 floating-point code and link
with the coprocessor library.
-f387 Causes the compiler to generate 387 floating-point code and link
with the coprocessor library.
-f4167 See file WEITEK.DOC in the WEITEK subdirectory, and Programmer's
-f3167 Guide chapter Floating-Point Support, for information about these
-f1167 options.
-sched Turns scheduling on when used with toggle -486 or option -f1167,-
f3167, or -f4167.
-w67seg (MS-DOS hosts only.) Enables segmented code generation for
Weitek instructions.
-w67flat (MS-DOS hosts only.) Enables flat-model code generation for
Weitek instructions. Also causes the compiler to use _mwWTLBASE
as the base address of the Weitek instructions.
-weitek Used in conjunction with -f1167, -f3167, or -f4167, this toggle
enables options -sched, -w67flat, and -O.
8. GFX Graphics Functions
-------------------------
If you use option -Hansi (for strict ANSI conformance), GFX Graphics
functions will not be available to you with the original all-uppercase
versions of the function names unless you explicitly link non-ANSI library
NA.LIB. This is because these non-ANSI function names appear only in
NA.LIB, which is omitted from the link when you specify -Hansi on the
driver command line.
You can use the functions as documented, with option -Hansi specified, by
linking NA.LIB and specifying #define __HIGHC__ before including GFX.H.
For example:
#define __HIGHC__
#include <GFX.H>
#undef __HIGHC__
Link NA.LIB by specifying driver command-line option -lNA.LIB.
NA.LIB includes all the non-ANSI function names. GFX Graphics functions
have also been provided in the ANSI library, with their names lowercased
and prefixed by _gfx_. For example, SCREEN becomes _gfx_screen. The GFX
macro names are prefixed with an underscore. For example, DFLT becomes
_DFLT.
NOTE: The GFX functions are not prototyped in accordance with the ANSI
Standard, so you may get copious warning messages from the compiler
indicating that a called function does not conform to its prototype.
If you do not require strict ANSI conformance, you may ignore such
warning messages about GFX functions.
NOTE: The GFX Graphics functions work only if linked with a linker that
produces Phar Lap .EXP type executables.
9. Known Problems
------------------
* Function _bios_disk() does not support read, write, or verify operations.
* The graphics functions provided work only if linked with a linker that
produces Phar Lap .EXP type executables.
* You must call _setvideomode() before using any of the graphics functions
in graph.h.
* The graphics function _setlogorg() sets the wrong origin when used in
conjunction with _setcliprgn(). The origin it sets is relative to the
upper lefthand corner of the viewport or current clipping region. It
should be relative only to the viewport origin. This will affect all
the graphics procedures which use the origin to calculate where to
write pixels.
* The functions _outtext(), _settextwindow(), and _settextposition() support
only 25 rows of text output. When _setvideomode() is called, it resets
the text screen to 80x25 or 40x25 text resolution, depending on which text
resolution is supported by the video mode you set. _setvideomode() must
be called before any of the graphics functions from graph.h can be called.
* A bug in fgets() causes the end-of-file flag not to be set when end-of-file
is reached while reading a file in binary mode. When end-of-file is
reached, fgets() returns NULL.
* If the first character of an I/O buffer was a '\n', it was not correctly
translated by fwrite() to CR LF when writing to a file. This bug is
fixed in this version.
* At the hardware level, the signal() and raise() functions support only
Ctrl-C and the critical-error exceptions. All other signals are supported
at the software level (via raise()).
WARNING: If a hardware interrupt occurs during a DOS or BIOS operation, it
may not be possible to execute the signal handler. In this case,
the results are undefined, and may result in a system crash. See
the Library Reference Manual for descriptions of signal() and
raise().
* It is not possible to install the first function in the code segment as
a signal handler. The address of the first function is cs:0, which when
passed to signal() (for example, signal(SIGINT,foo)) is interpreted as
SIG_DFL (#define'd to 0 in signal.h). This causes the program to execute
an exit(3) instruction (the default action) instead of the intended
handler. To solve this problem, move the handler away from the beginning
of the file in which it resides, or change the order in which the object
modules are linked.
* BlackStar C Function Library interrupt functions in_remint(), in_setint(),
sy_setintf(), and sy_setintv() are not supported.
* BlackStar C Function Library mouse functions ms_cget(), ms_cset(),
ms_csof(), ms_cson(), ms_field(), ms_init(), ms_intr(), ms_motion(),
ms_press(), ms_rels(), ms_shape(), and ms_stat() are not supported.
* Running program SI_TEST.C in the BlackStar C Function Library may hang
your machine.
Other Problems
--------------
If you think you have discovered a compiler problem, send a problem report to
MetaWare Technical Support. If possible, please send a test case that
demonstrates the problem.
All problem reports must include your serial number and specify which version
of the compiler you are using. If your sample code exceeds 15 lines, please
send it by diskette to the address below, or by E-mail to:
uunet!acad!metaware!tech
-or-
Internet tech@metaware.com
-or-
INTERNET:tech@metaware.com
MetaWare Customer Service can be reached at (408) 429-6111, 8:00 am to 4:30 pm
Monday through Friday.
MetaWare Incorporated
2161 Delaware Avenue
Santa Cruz, CA 95060-5706
(408)429-6382 FAX:(408)429-9273
Copyright (C) 1993 MetaWare Incorporated; All Rights Reserved.
High C/C++ Version 3.04
Globally Optimizing Compiler and Tools
for Extended DOS 80386/486 and Windows 3.0
January 1993
READMEs included in this distribution
-------------------------------------
README -- This general README.
The following files are located in your HIGHC\DOC subdirectory:
README.ADS -- Developing an ADS Application
README.CPP -- C++ Specifics
README.EMB -- Embedded Applications Notes
README.LIB -- Additions to Run-Time Library Documentation
README.MDB -- MetaWare Debugger (MDB) Specifics
README.PRF -- MetaWare Profiler Specifics
README.WIN -- MetaWare 32-Bit Windows 3.0 Application Development Kit
WEITEK.DOC -- Weitek ABACUS Support
REMINDER.DOC -- Troubleshooting Tips
Table of Contents
-----------------
1. Introduction
2. Release Notes
3. Additions/Corrections to Printed Documentation
4. New Toggles
5. Wildcard Expansion
6. Rogue Wave tools.h++ Examples and Documentation
7. Driver Notes
8. GFX Graphics Functions
9. Known Problems
1. Introduction
----------------
Version 3.0 highlights and features include:
* C compiler and C++ compiler in one executable for gradual migration
* full implementation of the C++ language (minus exception handling)
* C++ I/O streams library
* Rogue Wave's tools.h++ library
* support for Microsoft Windows 3.0 development using the MetaWare ADK
(NOTE: compatibility with Microsoft Windows 3.1 is under development)
* improved compile speed
* additional global optimizations
* a switch to specify optimization levels 0 through 7, or level s
* 32-Bit Source-Level Debugger (MDB and MDBW)
* a compile-and-link driver
* function inlining
* profiler
* editor
* disk cache
* keyboard and screen enhancers.
2. Release Notes
-----------------
* For installation instructions, read the Installation Guide provided with
your documentation.
* For differences from and compatibility with prior versions, read the New
Information! document.
* Last-minute-supplied or unclassified software is in subdirectory ETC.
3. Additions/Corrections to Printed Documentation
--------------------------------------------------
* See README.LIB for additions to the Run-Time Library documentation.
* See README.EMB for additional information about developing embedded
applications.
* The High C++ Language Manual does not specify where the SHOWARGS.CPP program
is located. It is in the \HIGHC\DEMOS\CPP directory.
* The High C Extensions Manual lists keywords _packed and _unpacked. These
are now _Packed and _Unpacked.
* The file CVARS.C has been renamed _IOB.C and is located in the HIGHC\LIB\SRC
directory.
NOTE: A copy of the original CVARS.C is located in the \V1x directory. You
must compile with -Hloclib to use this version.
* Toggle Callee_pops_when_possible.
This toggle works with non-prototyped functions and is completely SAFE. The
compiler marks those functions that are "safe" with a bit. If the function
is non-prototyped and is called before it is defined, or called with an
argument list inconsistent with its definition, then the "safe" bit is
turned off.
* -Hansi and in-line transcendentals.
If you are using the -Hansi switch and would like to get faster transcenden-
tals, but are not concerned about errno values, you may turn off the toggle
Strict_ansi_math:
-Hansi -Hoff=Strict_ansi_math
By default, when -Hansi is specified on the command line, Strict_ansi_math
is also set by the driver. Strict_ansi_math causes the compiler to
generate calls to library functions for the transcendentals, instead of
inlining them. This is necessary for ANSI conformance. Without the calls,
the compiler will inline many transcendentals; and after the Common Sub-
expression Elimination phase of optimization, errno may not always be set.
* Memory-model override.
In both Version 3.0 and Version 1.7x of the High C compiler for Extended
DOS 80386/486, command-line option -Mx overrides any "pragma Memory_model"
specification in the program. However, Versions 1.7x and 3.0 differ in
how multiple "pragma Memory_model" specifications are handled. In 1.7x the
last instance overrides any previous specifications; in 3.0 the first
instance takes precedence.
* Stack dump.
The stackdump(int handle) routine does not include any routine names. It
does include the "will return to" address, and eight arguments from the
stack. It cannot provide any arguments that were passed in registers.
* Inliner.
The meaning of inliner option -His has changed; the compiler can now safely
inline all functions. -His=n is used instead to flag the inliner not to
inline functions with stack size greater than n bytes.
4. New Toggles
---------------
Toggle C_include -- Default: Off
When On, this toggle causes all #include directives to behave like
#c_include directives: a file is included only if it hasn't been included
before. See the description of #c_include in the High C/C++ Programmer's
Guide, Section "Include Pragmas: Including Source Files." Turning this
toggle On can potentially save a lot of file I/O time during compilation.
5. Wildcard Expansion
----------------------
ETC\SRC\WCARD.C is a program that examines DOS wildcards in the argv[argc]
array and expands them. If compiled with TEST defined, the program executes
and shows the arguments before and after expansion. Compiled without TEST,
it is suitable for inclusion in your program.
6. Rogue Wave tools.h++ Examples and Documentation
---------------------------------------------------
To compile and run the Rogue Wave examples:
1. Go to the HIGHC\RW\TOOLEXAM directory.
2. To compile example1.cpp type:
hc386 example1.cpp -lRWTOOL
where RWTOOL is the tools library located in the HIGHC\SMALL directory.
3. To run the example type:
run386 example1
Documentation for tools.h++ is in three ASCII files, located in the DOC
subdirectory:
TOOLS4_1.DOC -- Class Library Version 4.0, Part I
TOOLS4_2.DOC -- Class Library Version 4.0, Part II
TOOLS5.DOC -- Class Library Version 5.0 supplement
Printed, bound versions of these manuals are included if you license the
source code, either from MetaWare or from Rogue Wave. Word-wrap problems in
generating the ASCII files caused some tables to be misaligned. Contact Rogue
Wave if you have questions about the documentation.
7. Driver Notes
----------------
When you invoke High C/C++ with the command hc386, you are invoking a driver
program which in turn invokes the compiler. See the Programmer's Guide for
further information.
8. GFX Graphics Functions
-------------------------
Whenever possible you should use the Microsoft-compatible graphics
functions documented in the High C Library Reference Manual, instead of
calling GFX functions directly. Future releases of MetaWare compilers may
not support GFX Graphics.
When you specify option -Hansi (for strict ANSI conformance), GFX Graphics
functions are not available to you with the original all-uppercase versions
of the function names unless you explicitly link non-ANSI library HCNA.LIB.
This is because these non-ANSI function names appear only in HCNA.LIB, which
is omitted from the link when you specify -Hansi on the driver command
line.
You can use the functions as documented, with option -Hansi specified, by
linking HCNA.LIB and specifying #define __HIGHC__ before including GFX.H.
For example:
#define __HIGHC__
#include <GFX.H>
#undef __HIGHC__
Link HCNA.LIB by specifying driver command-line option -lHCNA.LIB.
HCNA.LIB includes all the non-ANSI function names. GFX Graphics functions
have also been provided in the ANSI library, with their names in lowercase
and prefixed by _gfx_. For example, SCREEN becomes _gfx_screen. The GFX
macro names are prefixed with an underscore. For example, DFLT becomes
_DFLT.
NOTE: The GFX functions are not prototyped in accordance with the ANSI
Standard, so you may get copious warning messages from the compiler
indicating that a called function does not conform to its prototype.
If you do not require strict ANSI conformance, you may ignore such
warning messages about GFX functions.
NOTE: The GFX Graphics functions work only if linked with a linker that
produces Phar Lap .EXP type executables.
Many of the GFX Graphics functions have been rewritten for greater speed,
and numerous bugs have been fixed.
9. Known Problems
------------------
* Function _bios_disk() does not support read, write, or verify operations.
* The graphics functions provided work only if linked with a linker that
produces Phar Lap .EXP type executables.
* You must call _setvideomode() before using any of the graphics functions
in graph.h, except for _clearscreen() and _getvideoconfig().
* At the hardware level, the signal() and raise() functions support only
Ctrl-C and the critical-error exceptions. All other signals are supported
at the software level (via raise()).
WARNING: If a hardware interrupt occurs during a DOS or BIOS operation, it
may not be possible to execute the signal handler. In this case,
the results are undefined, and may result in a system crash. See
the Library Reference Manual for descriptions of signal() and
raise().
* It is not possible to install the first function in the code segment as
a signal handler. The address of the first function is cs:0, which when
passed to signal() (for example, signal(SIGINT, foo)) is interpreted as
SIG_DFL (#define'd to 0 in signal.h). This causes the program to execute
an exit(3) instruction (the default action) instead of the intended
handler. To solve this problem, move the handler away from the beginning
of the file in which it resides, or precede it with a dummy stub function;
or change the order in which the object modules are linked.
* DOS Helper program sc.exe does not work with MS-DOS 5.0, because the system
call sc.exe uses has been nullified in this version of MS-DOS.
* If you use the -P command-line option to generate a preprocessed .i file,
you cannot compile the file. You can work around the problem by editing
the following section of file hc386.cnf:
##########
# Define source-file suffixes recognized by the driver.
#
# Place CPP as the first element of these lists, to say for which
# languages CPP is supported. Currently, just for C; do not confuse
# CPP with "C++".
AEXT=.s .asm %; # Assembly
CEXT=CPP .c %; # C
CPPEXT=CPP .cc .cpp %; # C++
You can change the CPPEXT line to add the .i extension as follows:
CPPEXT=CPP .cc .cpp .i %; # C++
or, alternatively, specify -Hcppext=i on the driver command line.
Other Problems
--------------
If you think you have discovered a compiler problem, send a problem report to
MetaWare Technical Support. If possible, please send a test case that
demonstrates the problem.
All problem reports must include your serial number and specify which version
of the compiler you are using. If your sample code exceeds 15 lines, please
send it by diskette to the address below, or by E-mail to:
tech@metaware.com
MetaWare Technical Support can be reached at (408) 429-6111, 8:00 am to 4:30 pm
Monday through Friday.
MetaWare Incorporated
2161 Delaware Avenue
Santa Cruz, CA 95060-5706
(408)429-6382 FAX:(408)429-9273
------------------------------------------------------------------------------
The installation program used to install MetaWare High C/C++, INSTALL, is
based on licensed software provided by Knowledge Dynamics Corp, P.O. Box 1558,
Canyon Lake, Texas 78130-1558 (USA). INSTALL is Copyright (c) 1987-1991 by
Knowledge Dynamics Corp which reserves all copyright protection worldwide.
INSTALL is provided to you for the exclusive purpose of installing this
MetaWare product. MetaWare has made modifications to the software as provided
by Knowledge Dynamics Corp, and thus the performance and behavior of the
INSTALL program shipped with this MetaWare product may not represent the
performance and behavior of INSTALL as shipped by Knowledge Dynamics Corp.
MetaWare is exclusively responsible for the support of this MetaWare product,
including support during the installation phase. In no event will Knowledge
Dynamics Corp. be able to provide any technical support for MetaWare products.
------------------------------------------------------------------------------
NDP C-386
Version 2.1
Overview
Version 2.1 of the NDP compilers provide all the functionality of
the previous release (v2.0.8), with the addition of increased
compatibility with the new C standard ANSI X3.159-1989 and with
Microsoft C Version 5.0.
NDP Fortran and Pascal users should note that, although there are no
major changes that impact those compilers, there are bug fixes and
other minor enhancements meant to increase the reliability of the
entire line of NDP compilers.
This file also clarifies the use of binary file I/O as it applies to
all the compilers.
Installation
For DOS users, a utility simplifies the installation process. To use
it, insert Disk 1 into drive A, type "A:INSTALL", press <Enter>, and
follow the instructions that appear on the screen.
You can also install the compiler using the directions in Chapter 1
of the User's Manual. It is recommended that you install it in a
new directory (e.g., \NDP21), to facilitate the compilation and
testing of existing source code.
ANSI Compatibility (C only)
This version of the compiler is intended to be compatible with ANSI
X3.159-1989. This compatiblity is achieved with library LIBA.LIB
and changes to header files. There are two incompatible INCLUDE
directories. \INCL contains the standard NDP include files; \INCL_A
contains header files that support the ANSI standard. These
directories contain files which may share a common name but which
have different contents. Copying these files into the same
directory may cause problems.
To compile a program written to the ANSI standard, do the following:
1. Set the INCLUDE environment variable to be equal to the name
of the directory where the ANSI include files are installed.
For example:
set include=c:\ndp21\ansi
2. Use the -ansi switch when compiling. For example:
cc hi.c -ansi
The ANSI compatible keywords supported in this release are:
auto extern sizeof
break float static
case for struct
char goto switch
const if typedef
continue int union
default long unsigned
do register void
double return volatile
else short while
enum signed
The functions and/or macros that provide ANSI compatibility:
Function Header file Function Header file
-------- ----------- -------- -----------
abort (stdlib.h) mbstowcs (stdlib.h)
abs (stdlib.h) mbtowc (stdlib.h)
acos (math.h) memchr (string.h)
asctime (time.h) memcmp (string.h)
asin (math.h) memcpy (string.h)
assert (assert.h) memmove (string.h)
atan (math.h) memset (string.h)
atan2 (math.h) mktime (time.h)
atexit (stdlib.h) modf (math.h)
atof (stdlib.h) perror (stdio.h)
atoi (stdlib.h) pow (math.h)
atol (stdlib.h) printf (stdio.h)
bsearch (stdlib.h) putc (stdio.h)
calloc (stdlib.h) putchar (stdio.h)
ceil (math.h) puts (stdio.h)
clearerr (stdio.h) qsort (stdlib.h)
clock (time.h) raise (signal.h)
cos (math.h) rand (stdlib.h)
cosh (math.h) realloc (stdlib.h)
ctime (time.h) remove (stdio.h)
difftime (time.h) rename (stdio.h)
div (math.h) rewind (stdio.h)
exit (stdlib.h) scanf (stdio.h)
exp (math.h) setbuf (stdio.h)
fabs (math.h) setjmp (setjmp.h)
fclose (stdio.h) setlocale (locale.h)
feof (stdio.h) setvbuf (stdio.h)
ferror (stdio.h) signal (signal.h)
fflush (stdio.h) sin (math.h)
fgetc (stdio.h) sinh (math.h)
fgetpos (stdio.h) sprintf (stdio.h)
fgets (stdio.h) sqrt (math.h)
floor (math.h) srand (stdlib.h)
fmod (math.h) sscanf (stdio.h)
fopen (stdio.h) strcat (string.h)
fprintf (stdio.h) strchr (string.h)
fputc (stdio.h) strcmp (string.h)
fputs (stdio.h) strcoll (string.h)
fread (stdio.h) strcpy (string.h)
free (stdlib.h) strcspn (string.h)
freopen (stdio.h) strerror (string.h)
frexp (math.h) strftime (time.h)
fscanf (stdio.h) strlen (string.h)
fseek (stdio.h) strncat (string.h)
fsetpos (stdio.h) strncmp (string.h)
ftell (stdio.h) strncpy (string.h)
fwrite (stdio.h) strpbrk (string.h)
getc (stdio.h) strrchr (string.h)
getchar (stdio.h) strspn (string.h)
getenv (stdlib.h) strstr (string.h)
gets (stdio.h) strtod (stdlib.h)
gmtime (time.h) strtok (string.h)
isalnum (ctype.h) strtol (stdlib.h)
isalpha (ctype.h) strtoul (stdlib.h)
iscntrl (ctype.h) strxfrm (string.h)
isdigit (ctype.h) system (stdlib.h)
isgraph (ctype.h) tan (math.h)
islower (ctype.h) tanh (math.h)
isprint (ctype.h) time (time.h)
ispunct (ctype.h) tmpfile (stdio.h)
isspace (ctype.h) tmpnam (stdio.h)
isupper (ctype.h) tolower (ctype.h)
isxdigit (ctype.h) toupper (ctype.h)
labs (stdlib.h) ungetc (stdio.h)
ldexp (math.h) va_arg (stdarg.h)
ldiv (stdlib.h) va_end (stdarg.h)
localeconv (locale.h) va_start (stdarg.h)
localtime (time.h) vfprintf (stdio.h,stdarg.h)
log (math.h) vprintf (stdio.h,stdarg.h)
log10 (math.h) vsprintf (stdio.h,stdarg.h)
longjmp (setjmp.h) wcstombs (stdlib.h)
malloc (stdlib.h) wctomb (stdlib.h)
mblen (stdlib.h)
Microsoft C compatibility (C only)
Version 2.1 of the compiler is intended to be compatible with
Microsoft C v5.0. This compatiblity is achieved with a new library
and changes to header files, as follows:
LIBMS LIB Microsoft compatible functions library
MALLOC H new header file for MS compatibility
DOS H altered header file
FLOAT H new header file for MS compatibility
STDLIB H altered header file
STDIO H altered header file
The following is a list of the new functions and macros contained in
the libarary and header files. Items followed by a header file name
are macros; items follows by "n/i" will be implemented in a later
release.
alloca eof _nfree (malloc.h)
bdos fcloseall _nheapchk (malloc.h)
_bios_disk _ffree (malloc.h) _nheapset (malloc.h)
_bios_equiplist fgetchar (stdio.h) _nheapwalk (malloc.h)
_bios_keybrd _fheapchk (malloc.h) _nmalloc (malloc.h)
_bios_memsize _fheapset (malloc.h) _nmsize (malloc.h)
_bios_printer _fheapwalk (malloc.h) onexit (stdlib.h)
_bios_serialcom fieeetomsbin (n/i) putch
_bios_timeofday filelength putenv
cgets flushall rmdir
chdir _fmalloc (malloc.h) rmtmp (n/i)
chmod fmsbintoieee (n/i) _rotl
chsize _fmsize (malloc.h) _rotr
_clear87 (float.h) _fpreset _searchenv
_control87 (float.h) fputchar (stdio.h) segread
cprintf _freect sopen
cputs fstat (n/i) spawnl
cscanf ftime spawnle
dieeetomsbin (n/i) getch spawnlp
dmsbintoieee (n/i) getche spawnlpe
_disable (dos.h) getcwd spawnv
_dos_allocmem halloc (malloc.h) spawnve
_dos_close _heapchk spawnvp
_dos_creat _heapset spawnvpe
_dos_creatnew _heapwalk _splitpath
dosexterr hfree (malloc.h) stackavail
_dos_findfirst int86 stat (n/i)
_dos_findnext int86x _status87
_dos_freemem intdos strcmpi
_dos_getdate intdosx _strdate
_dos_getdiskfree itoa strdup
_dos_getdrive kbhit _strerror
_dos_getfileattr lfind stricmp
_dos_getftime locking strlwr
_dos_gettime _lrotl strnicmp
_dos_keep _lrotr strnset
_dos_open lsearch strrev
_dos_read ltoa strset
_dos_setblock _makepath _strtime
_dos_setdate matherr (n/i) strupr
_dos_setdrive max (stdlib.h) tell
_dos_setfileattr _memavl tempnam
_dos_setftime _memmax tzset
_dos_settime min (stdlib.h) ultoa
_dos_write mkdir umask (n/i)
dup movedata ungetch
dup2 _msize utime
_enable (dos.h)
The following Microsoft C functions are NOT supported:
_dos_getvect execlp execvp
_dos_setvect execlpe execvpe
execl execv _expand
execle execve
Compatibility with Microsoft's graphics was initially available in
NDP C-386 Version 2.0.8. The following functions are supported:
_clearscreen _putimage
_ellipse _rectangle
_floodfill _remapallpalette
_getbkcolor _remappalette
_getch _setactivepage
_getcurrentposition _setbkcolor
_getimage _setcliprgn
_getlogcoord _setcolor
_getphyscoord _setlogorg
_getpixel _setpixel
_gettextcolor _settextcolor
_gettextposition _settextposition
_getvideoconfig _settextwindow
_imagesize _setvideomode
_lineto _setviewport
_moveto _setvisualpage
_outtext _wrapon
The following graphics functions are NOT supported:
_arc _pie
_displaycursor _selectpalette
_getfillmask _setfillmask
Please see Chapter 11 of the NDP C-386 User's Manual for more
information about the graphic functions that are supported.
Binary File I/O (all compilers)
Support for binary file I/O was available in previous releases;
however, there has been some confusion regarding it. The type of
I/O performed depends on the setting of the global variable _pmode.
Setting _pmode to 8000hex will cause files to be opened in binary
mode. The default is _pmode = 4000hex (text mode).
The file I/O type is set when the file is opened. Subsequent
changes to _pmode will have not alter the I/O type of an already
open file.
Bug Fixes
1. Text I/O has been accelerated with a change to UNGETC in run time
library.
2. SCANF now correctly reports EOF.
3. The compiler driver now passes the full path name of .OBJ files
to the linker. Previously, a command such as:
f77 c:\subdirectory\fm001.f
caused the linker to look for fm001.obj in the current directory.
4. The compiler driver now recognizes the SRC (source) environment
variable.
5. The count register used by REP MOV no longer is corrupted by
fixup routine.
6. In the FORTRAN library (module F_CLOS.C), direct access formatted
files are not overwritten when opened with READONLY.
7. In the MATH library LIBM1167 (FORTRAN, C, and Pascal compilers),
the Weitek single precision math function RACOS is now correctly
working with negative values.
Technical Support
If you have any questions, you can contact MicroWay's technical
support staff at:
Voice: (508) 746-7341
FAX: (508) 746-4678
Please refer to your User Number, product name, version number, and
hardware configuration when contacting us.
You should register your purchase by completing and returning the
User Registration card.
C-Worthy Version 2.0 Release Notes
[February 26, 1991]
Welcome to C-Worthy 2.0.
We're pleased that you have selected C-Worthy as your user interface
development system. This version of C-Worthy owes a great deal to comments and
suggestions from C-Worthy users like yourself; if you have any problems or
suggestions for improvements we are eager to listen to you.
This file contains the latest information on this version of C-Worthy, as well
as hints on solving common problems and using some of C-Worthy's features.
Compiler Support Notes
These disks contain libraries to support Microsoft C versions 5.1 and 6.0,
Borland Turbo C (not C++) version 2.0, and Borland Turbo C++ version 1.0.
Support for Microsoft C 5.1, Turbo C 2.0, and Turbo C++ 1.0 may not be included
in future versions of C-Worthy, as these compilers have been superseded by more
recent versions.
We have not yet had the opportunity to do extensive testing with the newly
released Borland C++ 2.0. However, source code customers will note that all
the library source code compiles correctly if the Turbo C++ 1.0 batch files are
modified to call bcc instead of tcc.
Upgrade Notes
See the file "upgrade.doc" on the C-Worthy Install Disk if you are upgrading
from a previous version of C-Worthy.
Help System
The file "h_lib.doc" on the install disk has information on how to use the help
librarian to implement context-sensitive help.
Unresolved Externals at Link Time
If, when linking, you encounter numerous errors of the form "unresolved
external" or "undefined symbol", one of the following conditions probably
applies:
A. Your application has been compiled with the old versions of the
C-Worthy header files. You must recompile with the new header files.
If the undefined symbols are preceded by an underscore, this is the
most likely source of the problem.
B. Your application has been compiled without defining your compiler
version on the command line. One of the following preprocessor symbols
must be defined before any of the C-Worthy include files are processed:
If you are using Microsoft C 6.0: MSC600 (example: cl -c -DMSC600 my.c)
If you are using Microsoft C 5.1: MSC510 (example: cl -c -DMSC510 my.c)
If you are using Turbo C 2.0: BTC200 (example: tcc -c -DBTC200 my.c)
The best way to ensure that the correct command line options are used
is to compile using the C-Worthy compiler batch files CWCL.BAT for
large model and CWCM.BAT for medium model.
If the undefined symbols are all capitalized, and are not preceded by
an underscore, or if they are preceded by an '@', this is the most
likely source of the problem.
C. If your application has been compiled correctly, you could be linking
with the old version of the C-Worthy libraries.
_CDECL and _FASTCALL calling conventions
All C-Worthy routines are now declared as either _CDECL or _FASTCALL. These
identifiers are defined in CWGEN.H. For Microsoft C 6.0, the statements are
#define _CDECL _cdecl
#define _FASTCALL _fastcall
For Microsoft C 5.1 and Borland Turbo C, the statements are
#define _CDECL cdecl
#define _FASTCALL pascal
These statements allow C-Worthy to take advantage of special calling
conventions available with these compilers, resulting in slightly smaller and
faster code. In addition, you may now use one of these calling conventions as
the default in your own program which uses C-Worthy.
Note that the compiler will convert symbols declared as _pascal to all
uppercase, with no prepended underscore (example: "STRING_LENGTH"). Symbols
defined as _fastcall will have '@' prepended by the compiler (example:
"@string_length"), while _cdecl symbols will have a prepended '_' (example:
"_string_length").
See "Unresolved Externals at Link Time" in this file for a description of
possible linking problems related to these naming conventions.
For additional details, see your compiler documentation.
If you need to disable this feature (for instance, if you are recompiling
C-Worthy with a compiler that does not support any of the above calling
conventions), just change the lines in CWGEN.H to read
#define _CDECL
#define _FASTCALL
Note for rebuilders of cwArchitect
As in past versions of C-Worthy, we have included library and source files to
enable the intrepid customer to modify and rebuild cwArchitect to handle
user-defined data types. See the contents of the CWA directory for specifics.
Because of the greatly increased functionality of cwArchitect, it would no
longer function usefully within 640k unless we overlaid it. We selected
Borland's VROOM technology to accomplish this; therefore, users who wish to
rebuild cwArchitect will need to use the Turbo C++ version of the libraries for
that task, and CWA.LIB is provided only for that compiler. You may, of course,
continue to use the modified version of cwArchitect in support of Microsoft C
programming.
Additional toggle in cwArchitect Preferences
Because of the large amount of data associated with a menu being constructed
within cwArchitect, cwArchitect may be unable to handle menus with very many
choices. If this occurs, cwArchitect will simply refuse to accept new menu
options in the Choices box.
If this happens to you (it should occur only with menus with very many choices,
such as a Windows-style menu with many pulldowns), select Preferences
cwArchitect from the main menu and set the Conserve Memory option to On. This
will cause cwArchitect to save menu options to disk more frequently, resulting
in more capacity at the cost of slower performance.
As a side effect, with Conserve Memory on it is not possible to abandon changes
made to pulldowns by pressing Escape on the Choices box.
On-line reference for Microsoft PWB/Quickhelp
The file ISV.HLP in the C-Worthy Help directory contains the entire C-Worthy
reference manual in on-line form for users of Microsoft C 6.0.
Copy ISV.HLP into the directory containing your PWB help and it will be
instantly accessible from PWB or Quickhelp. To try it, type QH and the name of
a C-Worthy function or data type - for example,
QH menu
A reference page about C-Worthy's menu() function will appear.
Using the Palette Editor in your application
You may include cwArchitect's Palette Editor in your application, to allow
end-users to customize screen colors.
Simply call the function palette_editor() (documented in the Reference Manual)
from the menu choice you designate.
The palette editor requires two functions in the procedure table generated by
cwArchitect. The functions are:
text_style_action_proc
palette_display_proc
To enter the procedures, just go to any field in a cwArchitect form that
requires a procedure name (for example, the Entry Procedure field on the Form
Information form). Bring up the list of procedures by pressing <Grey+>, then
enter the two functions by pressing <Ins> and typing in their names. After you
have entered the two procedures, press Escape to leave the list without
selecting a new Entry Procedure for your form.
Known Bugs
This section contains descriptions of known problems in the current version.
Where possible, we provide a workaround.
Menu Choice Help Contexts may give wrong help.
If you use cwArchitect to specify help contexts for menu choices, then add
or delete contexts using H_LIB, you may get the wrong help for the menu
choices in your application.
cwArchitect normally stores the name of the context for each menu, form, or
field that has a help context. In the case of menu choices, the number is
stored. When help contexts are added or deleted, it is possible for some
contexts to be re-numbered; therefore, stored numbers may no longer
correspond to the correct help.
The workaround for this version is to check your menu choice help contexts
using cwArchitect after you make changes with H_LIB. If the help context
that appears for the option in the Option Information box is incorrect,
change it back to the correct help context.
Help contexts for forms, fields, and menus work correctly.
Windows-Style Menu Pulldowns don't have Destroy Objects bit set by default.
If you use cwArchitect to attach an object (a menu or a form) to a pulldown
choice, the memory associated with the object won't be automatically freed
after you access it in your application.
To automatically free the memory, read the pulldown menu in cwArchitect,
select Menu Information, and set the Destroy Object bit in the Control Flags
field.
H_LIB Write Ascii buffer pointer off by two.
The Write Ascii function of H_LIB.EXE writes two nonsense characters at the
start of each help context, and truncates the last two characters of the
context.
This does not affect the operation of the help system, only conversion from
help files to ascii files.
Errors occur in H_LIB when trying to open currently open file.
If, while working in a file in H_LIB, you select File Open and enter the
name of the currently open file, errors will occur if you immediately save
the current file or proceed to reread the current file.
If you enter the name of the currently open file in the File Open box by
mistake, do not accept the "Save <filename>" prompt if it comes up.
Instead, escape back to the main menu and save your work.
Blank help contexts may confuse H_CONVRT.
If you are upgrading from a prior version of C-Worthy, and your help files
contain help contexts with no attached help, H_CONVRT may convert the files
incorrectly. If this occurs, simply use the HELPLIB that came with the old
version of C-Worthy you have to attach a small amount text to each of the
blank help contexts in your old help library. H_CONVRT will then convert
the file correctly. You can then use H_LIB to make the contexts blank
again, if you wish.
WELCOME TO TURBO PASCAL 6.0
---------------------------
This README file contains important, last minute information about
Turbo Pascal 6.0. In addition to this file, there are several .DOC
files in the \TP\DOC directory that you should browse. The HELPME!.DOC
file answers many common Technical Support questions. The FIXES.DOC
file provides corrections to the printed documentation. And the
TVISION.DOC file gives additional information (reference and tutorial)
about programming in Turbo Vision.
TABLE OF CONTENTS
-----------------
1. How to Get Help
2. Installation
3. Take a Tour
4. Turbo Help
5. New Features
6. Turbo Vision Examples
7. Important Documentation Information
8. Compatibility Notes
9. Testing Expanded Memory
10. TPCX
11. Complete List of Files
1. HOW TO GET HELP
-------------------
If you have any problems, please read this file, the *.DOC files in
\TP\DOC, and the Turbo Pascal manuals first. If you still have a
question and need assistance, help is available from the following
sources:
1. Type GO BPROGA on the CompuServe bulletin board system. If you are
not a member of CompuServe, see the enclosed special offer.
2. Check with your software dealer or user group.
3. Write to us:
Borland International
Turbo Pascal 6.0 Technical Support
1800 Green Hills Road
P.O. Box 660001
Scotts Valley, CA 95067-0001
Please include your serial number or we will be unable to process
your letter.
4. If you have an urgent problem and you have sent in the license
agreement that accompanied this package, you may call the Borland
Technical Support Department at (408) 438-5300. Please have the
following information ready before calling:
a. Product name and serial number from the distribution disks.
b. Product version number. Both the IDE and the command-line
compiler display a version number when they are executed.
c. Computer brand, model, and the brands and model numbers of
any additional hardware.
d. Operating system and version number. (The version number can
be determined by typing VER at the DOS prompt.)
e. Contents of your AUTOEXEC.BAT and CONFIG.SYS files.
2. INSTALLATION
---------------
Use the INSTALL program to install Turbo Pascal. The files on the
distribution disks are all archived and INSTALL will de-archive them
for you. INSTALL will place them into subdirectories and automatically
create configuration files for both the command-line compiler and the
Integrated Development Environment (IDE). All further references to
directory paths in this README file assume you've used INSTALL's
default directory structure.
To start the installation, place the disk labeled INSTALL in Drive A:,
change to Drive A: and type A:INSTALL.
A:
INSTALL
INSTALL works on both hard disk and dual-floppy systems. If you decide
to de-archive files manually, just run the UNZIP program (found on the
INSTALLATION disk) on any .ZIP file. For example, to de-archive
TPC.EXE and TURBO.TPL from the TURBO.ZIP file on Drive A:, type:
unzip a:turbo turbo.tpl tpc.exe
This places TURBO.TPL and TPC.EXE onto the current drive or directory
(and assumes UNZIP.EXE is already in the current drive or directory).
3. TAKE A TOUR
--------------
Take an online tour of the new Integrated Development Environment. Run
TPTOUR from the \TP directory for a 10-minute introduction to editing,
compiling and running programs in the new IDE.
4. TURBO HELP
-------------
The fastest way to get help on any Turbo Pascal feature is to use the
newly expanded online help system. Pull down the Help menu by typing
Alt-H and then browse topics (via the Contents menu) or lookup
identifiers (by selecting Topic search). If it's in Turbo Pascal, it's
in the help system! And if you use the command-line compiler and your
own editor, you can still get Turbo Help using THELP.COM. THELP is a
TSR that can be found in the \TP\UTILS directory.
5. NEW FEATURES
---------------
Turbo Pascal 6.0 offers many new features, including:
o Borland's new Integrated Developer's Environment (IDE), our new
generation user interface that includes all the features you're used
to, plus:
o Mouse support.
o Multiple overlapping windows.
o Multi-file editor that can edit files up to 1 mbyte in size.
o Cut, copy and paste using the Clipboard.
o Turbo online help system that has been expanded, with
copy-and-paste program examples for practically every function.
Includes full reference to Turbo Vision objects, methods,
variables and constants.
o Conditional breakpoints.
o CPU Register window.
o Makes full use of EMS to enhance performance and increase
capacity.
o Built-in customization for color and startup options.
o Turbo Vision, an object-oriented, high-performance application
framework and library. Programs written in Turbo Vision inherit
everything from mouse support, dialogs, menus, overlapping windows,
and automatic desktop management to the online help system,
calculator, and other tools that you'll find in the \TP\TVDEMOS
directory.
Programming with Turbo Vision is so efficient and powerful, we used
it to build the IDE itself!
o Built-in, inline assembler. Combine the best of both worlds: write
assembly language instructions inside your Turbo Pascal programs.
o Turbo-driven compiler let's you build very large applications by
using extended memory on 80286-compatible systems.
o Private fields and methods are now supported in an object
declaration. This enables you to "enforce" encapsulation. Object
privacy is implemented consistently with the existing data hiding
capabilities of a unit. See P-87 in the User's Guide and P-35 in the
Programmer's Guide for more information.
o Other enhancements include:
o New Objects unit with better collections and streams.
o New heap manager is faster and safer.
o Extended syntax compiler directive {$X} allows you to
optionally discard function results.
o New procedure directives: far, near and assembler.
o 80286 code generation directive {$G}.
o Minor code generation improvements.
o Address references in typed constant pointers.
o Link in initialized data from .OBJs {$L}.
6. TURBO VISION EXAMPLES
------------------------
There are three different kinds of Turbo Vision example programs
provided. You'll find all the example programs from the Turbo Vision
Guide in the \TP\DOCDEMOS directory. You'll find several Turbo Vision
application support units in the \TP\TVISION directory. And you'll
find several Turbo Vision demonstration programs in the \TP\TVDEMOS
directory.
If you're trying to run one of the Turbo Vision demos from inside the
IDE, we recommend that you set Compile|Destination to disk and the
Link Buffer option to Disk (in the Options|Linker dialog box). Many of
these examples are large programs and require full memory capacity to
compile and run. Depending on your system configuration, you may need
to compile and run them from DOS. Here's how to use the command-line
compiler on TVDEMO.PAS:
cd \tp\tvdemos
tpc /m tvdemo
Then run TVDEMO.PAS from DOS by typing:
tvdemo
In order to facilitate compiling these demos on a wide variety of
system configurations, we've turned off debug information {$D-} in all
Turbo Vision units. If you have a system with lots of memory and EMS,
you might want to enable the {$D} compiler directive in selected units
in \TP\TVDEMOS so you can step through the code.
7. IMPORTANT DOCUMENTATION INFORMATION
--------------------------------------
All source code examples from the Turbo Vision Guide and from the
User's Guide's chapter on object-oriented programming (chapter 4) can
be found in the \TP\DOCDEMOS directory.
8. Compatibility notes
-----------------------
Turbo Pascal 6.0 Heap Manager
-----------------------------
The new heap manager is faster and more efficient than in Turbo Pascal
5.x. FreeMin is no longer needed and you can simply delete all
references to it in your programs. FreePtr has been replaced. If
you're relying on implementation-dependent features of the old heap
manager, you'll have to modify your code to eliminate references to
FreePtr. (If you just need to compress the heap, you can call the
SetMemTop procedure from the Turbo Vision Memory unit.) See Chapter 16
in the Programmer's Guide for more information about how the new heap
manager works.
If you are using a HeapError function, make sure it exits quickly when
passed a Size value of 0:
function HeapError(Size: Word): Integer; far;
begin
if Size > 0 then
begin
{ ... perform HeapError processing here ... }
end;
end;
In version 6.0, HeapError is called with a value of 0 whenever an
allocation moves the HeapPtr upwards.
Turbo Pascal 6.0 and the Toolboxes
----------------------------------
The 4.0 toolboxes all work with Turbo Pascal 6.0. (The Turbo Editor
Toolbox needs 2 easy source code modifications to work with 6.0. See
the file HELPME!.DOC in \TP\DOC for more information.)
Turbo Pascal 5.5 Object Unit
----------------------------
All the demo units and programs from Turbo Pascal 5.5 will work with
version 6.0 if you recompile them. However, we recommend that you use
the new Object unit's streams and collections in any new programs you
write. Note that you cannot use the 5.5 Objects unit with Turbo
Vision.
9. Testing Expanded Memory: EMSTEST.COM
---------------------------------------
EMSTEST.COM is in the \TP\UTILS directory and can be used to test your
Expanded Memory (EMS) hardware and software. If you have problems
using Turbo Pascal with your EMS, type EMSTEST at the DOS prompt and
follow the instructions. (To disable the IDE's EMS usage, specify /X-
on the commandline when you load TURBO. To determine how much EMS the
IDE is using, load TURBO and select GET INFO on the FILE menu.)
10. TPCX
--------
TPCX, the extended memory command-line compiler, provides more
compilation capacity by running in protected mode. It only may be used
on 80286-compatible machines (80386, 80486, etc.) that have at least 1
mbyte of extended memory.
TPCX and Ctrl-Break
-------------------
WARNING: When you run TPCX, it loads a DOS-extender kernel into memory
and then begins compiling. If you load TPCX and then want to terminate
the compilation early, do not press Ctrl-C or Ctrl-Break while the
kernel is being loaded! Instead, wait until you see the compilation
begin before interrupting. (Once you see the signon and copyright text
on the screen, it is safe to press Ctrl-C or Ctrl-Break.)
TPCX, disk caches and RAM disks
-------------------------------
Some older disk caches and RAM disks do not follow current industry
conventions for allocating extended memory and thus TPCX has no way to
detect their presence. If you've loaded a disk cache or RAM disk that
uses extended memory, you must make sure it's "well-behaved" before
running TPCX. You might do so by running TDMEM with and without these
disk utilities and comparing the amount of extended memory available.
When in doubt, remove your disk cache from extended memory before
running TPCX.EXE or TD286.EXE.
11. Complete List of Files
--------------------------
The INSTALL program will place all of the following on your hard disk
during the installation process (the floppy installation installs only
TURBO.TPL and TURBO.EXE or TPC.EXE):
Install/Compiler
----------------
INSTALL.EXE - Installs Turbo Pascal on your system
README.COM - Program to display README file
UNZIP.EXE - De-archiving program
TURBO.ZIP - Archived file containing:
TURBO.EXE - Turbo Pascal Integrated Development Environment
TURBO.TPL - Resident units for Turbo Pascal
TURBO.TP - Configuration file for TURBO.EXE
TPC.EXE - Command-line version of Turbo Pascal
README - This file!
Turbo Vision/Tour
-----------------
TVISION.ZIP - Archived file containing Turbo Vision units:
APP.PAS - Application unit source
BUFFERS.PAS - Buffers unit source
COLORSEL.PAS - Color installation unit source
EDITORS.PAS - Editors unit source
MSGBOX.PAS - Message box unit source
STDDLG.PAS - Standard dialogs unit source
APP.TPU - Application unit
BUFFERS.TPU - Buffers unit
COLORSEL.TPU - Color installation unit
DIALOGS.TPU - Dialogs unit
DRIVERS.TPU - Drivers unit
EDITORS.TPU - Editors unit
HISTLIST.TPU - History list unit
MEMORY.TPU - Memory management unit
MENUS.TPU - Menus unit
MSGBOX.TPU - Messagebox unit
OBJECTS.TPU - Objects unit
STDDLG.TPU - Standard dialogs unit
TEXTVIEW.TPU - Simple text window unit
VIEWS.TPU - Views unit
TVDEMOS.ZIP - Archived file containing Turbo Vision demos:
TVDEMO.PAS - Turbo Vision demo application
DEMOHELP.HLP - Compiled help file for TVDEMO
ASCIITAB.PAS - ASCII table viewer
CALC.PAS - Desktop calculator
CALENDAR.PAS - Desktop calendar (monthly viewer)
DEMOHELP.PAS - Context file produced by running HC on DEMOHELP.TXT
FVIEWER.PAS - Text file viewer
GADGETS.PAS - Desktop gadgets (clock, heap viewer)
HELPFILE.PAS - Help system manager
MOUSEDLG.PAS - Mouse options dialog
PUZZLE.PAS - Simple brain teaser puzzle
DEMOCMDS.PAS - Command constants for TVDEMO.PAS
TVHC.PAS - Help text compiler
DEMOHELP.TXT - Help file source for TVDEMO.PAS
TVRDEMO.PAS - Resourced and overlaid version of TVDEMO.PAS
MKRDEMO.BAT - Builds TVRDEMO.EXE
GENRDEMO.PAS - Used by TVRDMAKE.BAT to build resources for TVRDEMO.PAS
TVEDIT.PAS - Application that demonstrates the EDITORS unit
TVFORMS.PAS - Form entry and edit application
FORMCMDS.PAS - Command constants
DATACOLL.PAS - Data record collection
LISTDLG.PAS - List dialog manager
FIELDS.PAS - Edit/entry fields
FORMS.PAS - Form dialog manager
PARTS.TVF - Sample data file
PHONENUM.TVF - Sample data file
GENFORMS.BAT - Generates sample data files for TVFORMS.PAS
GENFORM.PAS - Used by GENFORMS.BAT
GENPARTS.PAS - Used by GENFORMS.BAT
GENPHONE.PAS - Used by GENFORMS.BAT
FILEVIEW.PAS - Simple disk & file browser program
TVTXTDMO.PAS - Demonstrates TEXTVIEW unit
TVBGI.PAS - Demonstrates BGI support unit (GRAPHAPP)
GRAPHAPP.PAS - Support unit for swapping between Turbo Vision and BGI
INTRFACE.ZIP - Archived file containing the interface sections
of Turbo Vision and runtime library units
TURBO3.ZIP - Archived file containing TURBO3 and GRAPH3
compatibility units and interface documentation
TOUR.ZIP - Archived file containing the IDE Tour and its
overlay files.
Online Help
-----------
HELP.ZIP - Archived file containing:
TURBO.HLP - Online help data file
BGI/Utilities
-------------
BGI.ZIP - Archived file containing BGI driver and support
files:
GRAPH.TPU - Borland Graphics Interface (BGI) Graph unit
ATT.BGI - AT&T 6300 driver
CGA.BGI - CGA and MCGA driver
EGAVGA.BGI - EGA and VGA driver
HERC.BGI - Hercules mono driver
PC3270.BGI - 3270 PC driver
IBM8514.BGI - IBM 8514 driver
GOTH.CHR - Gothic font
LITT.CHR - Small font
SANS.CHR - Sans serif font
TRIP.CHR - Triplex font
BGIDEMO.PAS - Graph unit demo
ARTY.PAS - Graph unit demo
BGILINK.PAS - Graph unit demo
BGIDRIV.PAS - BGILINK.PAS demo unit
BGIFONT.PAS - BGILINK.PAS demo unit
BGILINK.MAK - BGILINK.PAS demo makefile
UTILS.ZIP
THELP.COM - TSR online help utility
TPUMOVER.EXE - Unit mover utility
TEMC.EXE - Turbo Editor Macro Compiler
MAKE.EXE - UNIX-style project management utility
GREP.COM - Text file search utility
TOUCH.COM - Changes a file's timestamp to force re-compilation
BINOBJ.EXE - Converts a binary data file to an .OBJ file
EMSTEST.COM - Expanded Memory (EMS) hardware/software diagnostic
utility
DOCDEMOS.ZIP - Archived file containing source code examples
from the User's Guide and Turbo Vision Guide.
TCALC.ZIP - Archived file contain the source code to the Turbo
Calc demo program
DEMOS.ZIP - Archived file contain numerous demo programs
ONLINE.ZIP - Archived file contain online documentation files:
HELPME!.DOC - Answers to commonly asked questions
FIXES.DOC - Corrections to the printed documentation
TVISION.DOC - Enhancements to Turbo Vision
BUFFERS.DOC - Documents the Turbo Vision buffers unit
EDITORS.DOC - Documents the Turbo Vision editors unit
TEMC.DOC - Turbo Editor Macro Compiler documentation
THELP.DOC - Turbo Help (TSR) documentation
UTILS.DOC - TPUMOVER, MAKE, GREP, TOUCH, BINOBJ documentation
TPCX
----
TPCX.EXE - Extended memory, command-line version of Turbo Pascal
TPCXINST.EXE - Installation program for TPCX.EXE
CPUTEST.EXE - CPU diagnostic utility for TPCX.EXE
----------------------------------------------------------------------
Borland Pascal with Objects 7.0
Run-time Library Source Code
-------------------------------
Please read this document carefully. It is the only documentation
for the Borland Pascal with Objects run-time library source code.
TABLE OF CONTENTS
-----------------
1. System requirements
2. Run-time library source code support policy
3. Installing the run-time library source code
4. Run-time library source code overview
5. Building the run-time library
6. Modifying the run-time library source code
1. SYSTEM REQUIREMENTS
----------------------
The Borland Pascal with Objects run-time library source code
requires:
o MS-DOS 3.0 or later
o 2Mb of available extended memory
o 80286 or later processor
o approximately 1.6Mb of disk space (source only)
o Borland Pascal with Objects 7.0
2. RUN-TIME LIBRARY SOURCE CODE SUPPORT POLICY
----------------------------------------------
IMPORTANT: Borland Technical Support will not answer questions or
provide any assistance relating to this product. This product is
provided "as is."
If you find a genuine problem with the source code, please send a
written description to our Technical Support Department by one of
two methods:
1. Type GO BPROGA on the CompuServe bulletin board system for
instant access to the Borland forums.
2. Or you can write to:
Borland International
Borland Pascal RTL Source Code Technical Support
P.O. Box 660001
1800 Green Hills Road
Scotts Valley, CA 95067-0001
Please include the following information in your
correspondence:
A. Product name and serial number from your original
distribution disk.
B. Computer brand, model, and the brands and model numbers
of any additional hardware.
C. Operating system and version number. The version number
can be determined by typing VER at the DOS prompt.
D. Contents of your AUTOEXEC.BAT file.
E. Contents of your CONFIG.SYS file.
F. A complete description of the problem.
3. INSTALLING THE RUN-TIME LIBRARY SOURCE CODE
----------------------------------------------
The Borland Pascal with Objects run-time library source code
installation program, INSTALL.EXE, sets up the run-time library
source code on your system. To use INSTALL on Drive A, for
example, place the distribution disk in Drive A and type
A:INSTALL
You can select the base directory for the run-time library by
selecting the "Run-time library directory" option, and entering
the desired path. The install program will create several other
directories below the directory you specify.
The MAKEFILE included with the run-time library assumes that you
have installed Borland Pascal with Objects to the \BP directory,
and that you will accept the default RTL directory of \BP\RTL.
If you change either of these paths, you need to modify the
RTL's MAKEFILE accordingly. The remainder of this document
assumes that you are using the default directories.
4. RUN-TIME LIBRARY SOURCE CODE OVERVIEW
----------------------------------------
The source and object modules contained in this package
correspond to Borland Pascal with Objects 7.0. We assume that
you own a copy of Borland Pascal with Objects 7.0 (including
Turbo Assembler 3.2), which you need to compile the run-time
library sources.
Borland Pascal with Objects' run-time library consists of source
code for the standard units, the Turbo Vision and ObjectWindows
application frameworks, and the Windows 3.1 interface files.
Sources are not supplied for following items: the 8087 emulator
part of the System unit, the assembly language parts of the
Overlay unit, the Graph unit, the .BGI or .CHR files, the GRAPH3
unit, or the TURBO3 unit.
Also included in the run-time library source code package is the
file MAKEFILE, which contains a script for building the entire
run-time library and application frameworks. In order to process
this script, you need the MAKE.EXE utility which comes with
Borland Pascal with Objects 7.0.
5. BUILDING THE RUN-TIME LIBRARY
--------------------------------
For each run-time library component, MAKEFILE defines which object
files depend on which source files, and what commands to execute
to update those object files. To do a "make" of the run-time
library source code, first make sure that MAKE.EXE, BPC.EXE, and
TASM.EXE are on your DOS PATH; then change to the \BP\RTL
directory and type:
MAKE
MAKE will execute all necessary commands to completely update the
run-time libraries (TURBO.TPL, TPP.TPL, and TPW.TPL), Turbo
Vision, ObjectWindows, and the Windows 3.1 interface.
Don't be alarmed if MAKE doesn't assemble or compile anything;
that's just an indication that everything is up-to-date (i.e.,
all object files are more recent than their corresponding source
files).
The compiled versions of the run-time libraries and application
frameworks are written to directories under the \RTL\BIN
directory. Below is a map of the directory structure, and what
files you should expect to find there:
\RTL\BIN - contains TURBO.TPL, TPP.TPL and TPW.TPL
\RTL\BIN\TPU - contains the .TPU files from TURBO.TPL
\RTL\BIN\TPP - contains the .TPP files from TPP.TPL
\RTL\BIN\TPW - contains the .TPW files from TPW.TPL
\RTL\BIN\TV - contains the Turbo Vision .TPU/.TPP files
\RTL\BIN\OWL - contains the ObjectWindows .TPW files
\RTL\BIN\WIN31 - contains the Windows 3.1 .TPW files
In order to use the newly built versions of the run-time library,
you must copy the file(s) to the appropriate working directory.
By default, the .TPL files should be copied to the \BP\BIN
directory, and the Turbo Vision, ObjectWindows and Windows 3.1
interface files to the \BP\UNITS directory.
Creating a debug version of the run-time library
------------------------------------------------
You can build a version of the run-time library which contains
debug information, by using the following command line:
MAKE -DDEBUG
Note: If you have already built the RTL, you will need to
instruct MAKE to do a build instead of a make. Use the -B switch
to force MAKE to rebuild all files even if they are up to date:
MAKE -B -DDEBUG
Once you have compiled the debug version, you can use the IDE's
integrated debugger (or other debugger) to trace into the RTL
itself. To allow the IDE to find RTL assembler source, use the
Options|Directories menu to set the INCLUDE directory path to
\BP\RTL and then re-compile your program.
Building parts of the run-time library
--------------------------------------
You can build specific parts of the run-time library by supplying
additional command line parameters to the MAKE utility. For
example, you might want to rebuild only TURBO.TPL, the DOS
real-mode library, or only the ObjectWindows application
framework. Below is a table of run-time library components you
can build separately, and the command lines to use for each:
Component Command line
-------------- ---------------
TURBO.TPL MAKE rtldos
TPP.TPL MAKE rtldpmi
TPW.TPL MAKE rtlwin
Turbo Vision MAKE tv
ObjectWindows MAKE owl
Win 3.1 interface MAKE win31
6. MODIFYING THE RUN-TIME LIBRARY SOURCE CODE
---------------------------------------------
With the exception of the System unit, all RTL units are "normal"
Borland Pascal with Objects units. The System unit, however, has
a number of special properties.
The interface part of SYSTEM.PAS defines only variables and typed
constants--the remaining symbols are contained in a bootstrap
symbol table contained in the file SYSTEM.TPS. Furthermore, you
will notice a number of external procedures in the implementation
part; these "semi-hidden" procedures cannot be called directly
(since they are not exported), but the compiler knows about them.
When you call a built-in procedure or function, such as Writeln,
the compiler translates the reference into one or more calls to
hidden procedures in the System unit. Since the compiler depends
upon the hidden routines' order of declaration, it is very
important that you don't change their ordering.
We strongly recommend that you refrain from changing the System
unit's interface section, and only modify the implementation
section and the assembly language files. Very few changes are
possible in the interface section, and any change, however minor,
will cause a unit version mismatch between the System unit and
ALL OTHER UNITS compiled with the shipping RTL.
* * * * * *
This describes the content of the companion disk that is included with Borland Pascal Developer's Guide. Each file on the disk is an executable self-extracting archive. When you run the appropriate .EXE program, the program automatically extracts and decompresses its content into one or more text and program source files. The disk contains the following four subdirectories: \SOURCE--Contains the source code to most example programs in the text, organized by chapter. Not every chapter has source code, so not every chapter has an .EXE archive file. \TPR-BOOK--Contains an additional 400 pages of documentation and sample programs that you can use. This bonus information is not included in the text. \MR_ED--Contains the Mister ED shareware editor. Mister ED is a high-quality, easy-to-use, and very powerful programmer's editor that is optimized for use in editing program source code. \PVGA--Contains 256-color support routines so that Turbo Pascal programs can support the full range of a Super VGA display. These routines require that your video card be Paradise-compatible. To access these files, copy the desired file to your hard disk and then run the program. For example, to extract the source code examples from Chapter 11, copy \SOURCE\CHAP11.EXE to the desired subdirectory on your hard disk. Then, run CHAP11.EXE. The program extracts and decompresses the source code examples used in Chapter 11 of the text. After the files are extracted, you can delete CHAP11.EXE from your hard disk.
This describes the content of the companion disk that is included with Borland Pascal Developer's Guide. Each file on the disk is an executable self-extracting archive. When you run the appropriate .EXE program, the program automatically extracts and decompresses its content into one or more text and program source files. The disk contains the following four subdirectories: \SOURCE--Contains the source code to most example programs in the text, organized by chapter. Not every chapter has source code, so not every chapter has an .EXE archive file. \TPR-BOOK--Contains an additional 400 pages of documentation and sample programs that you can use. This bonus information is not included in the text. \MR_ED--Contains the Mister ED shareware editor. Mister ED is a high-quality, easy-to-use, and very powerful programmer's editor that is optimized for use in editing program source code. \PVGA--Contains 256-color support routines so that Turbo Pascal programs can support the full range of a Super VGA display. These routines require that your video card be Paradise-compatible. To access these files, copy the desired file to your hard disk and then run the program. For example, to extract the source code examples from Chapter 11, copy \SOURCE\CHAP11.EXE to the desired subdirectory on your hard disk. Then, run CHAP11.EXE. The program extracts and decompresses the source code examples used in Chapter 11 of the text. After the files are extracted, you can delete CHAP11.EXE from your hard disk.
Welcome to Turbo Pascal for Windows
-----------------------------------
This README file contains important, last minute information
about Turbo Pascal for Windows. There are three ways to program
Windows using Turbo Pascal:
1) By simply using the WinCrt unit, you can write "standard"
Pascal programs that do Readln, Writeln in a scrollable
window. For more information about the WinCrt unit, refer to
Chapter 14 in the Programmer's Guide (and see WELCOME.PAS in
the \TPW directory).
2) You can write Windows applications the "traditional" way.
For examples of this style of Windows programming, see
GENERIC.PAS and FDLGDEMO.PAS in the \TPW\WINDEMOS directory.
3) The best way to write full-featured Windows applications is
by using the ObjectWindows application framework.
ObjectWindows uses object-oriented techniques to make
Windows programming much easier and more efficient.
ObjectWindows is described in detail in both the Windows
Programmer's Guide and Windows Reference Guide. See
HELLOAPP.PAS and the many other ObjectWindows demo programs
in the \TPW\OWLDEMOS directory.
In addition to the release notes in this file, there are several
text files in the \TPW\DOC directory that you should browse. Make
sure you look at the MANUAL.TPW and MANUAL.TDW files which
provide corrections to the printed documentation.
A complete list of all files is provided in the FILELIST.DOC in
the \TPW directory.
TABLE OF CONTENTS
-----------------
1. How to Get Help
2. Installation
3. System Requirements
4. Turbo Help
5. Features
6. Release Notes
1. HOW TO GET HELP
-------------------
If you have any problems, please read this file, the *.DOC files in
\TPW\DOC, and the Turbo Pascal manuals first. If you still have a
question and need assistance, help is available from the following
sources:
1. Type GO BPROGA on the CompuServe bulletin board system. If you are
not a member of CompuServe, see the enclosed special offer.
2. Check with your software dealer or user group.
3. If you have an urgent problem and you have sent in the license
agreement that accompanied this package, you may call the Borland
Technical Support Department at (408) 438-5300. Please have the
following information ready before calling:
a. Product name and serial number from the distribution disks.
b. Computer brand, model, and the brands and model numbers of
any additional hardware.
c. Operating system and version number. (The version number can
be determined by typing VER at the DOS prompt. The Windows
version number is displayed in the Program Manager's About
Box.)
d. Contents of your AUTOEXEC.BAT, CONFIG.SYS, TPW.INI and WIN.INI
files.
2. INSTALLATION
---------------
Use the INSTALL program to install Turbo Pascal for Windows. The files
on the distribution disks are all archived and INSTALL will de-archive
them for you, place them into subdirectories and automatically create
configuration files for both the command-line compiler and the
Integrated Development Environment (IDE). All further references to
directory paths in this README file and in FILELIST.DOC assume you've
used INSTALL's default directory structure.
To run the installation program from Drive A type
WIN A:INSTALL
or, if Windows is active, select the program manager's File|Run
command and type
A:INSTALL
Install will unpack the compressed archive files (*.PAK) into
subdirectories on your hard disk. These files also can be
unpacked manually using the UNPAK.EXE utility. Your system must
have at least two megabytes of memory available to run Turbo
Pascal for Windows. Neither the Install program nor Turbo Pascal
for Windows will run in real mode.
After installation, make sure you add the Turbo Pascal for Windows
directories (e.g. C:\TPW;C:\TPW\UTILS) in your DOS path.
3. SYSTEM REQUIREMENTS
----------------------
Turbo Pascal for Windows requires at least 2 Mbytes of RAM and
runs on EGA, VGA and Hercules monochrome video adapters. Note
that dual monitors are required in order to debug your program in
SVGA mode.
4. TURBO HELP
-------------
The fastest way to get help on any Turbo Pascal or Windows API
feature is to use the online help system. Pull down the Help menu
by typing Alt-H or press F1 for more information. If it's in
Turbo Pascal for Windows, it's in the help system! TDW has its
own help system and help file as well.
5. FEATURES
-----------
Turbo Pascal for Windows has many features including:
o Windows IDE - A Windows-hosted environment that is a full MDI
application. You can edit and compile files in the IDE and
then call TDW to debug your programs. (The IDE even has
optional Wordstar compatible keys. Select the alternate
command set on the Options|Preferences dialog.)
o The compiler and RTL have many extensions for programming
under Windows (see below). Refer to the demo programs in the
\TPW\WINDEMOS directory.
o ObjectWindows - An application framework and library that
provides an objected-oriented layer to Windows programming.
Use ObjectWindows' object-oriented techniques to build
powerful Windows applications quickly. ObjectWindows (OWL)
demo programs are in the \TPW\OWLDEMOS directory. OWL itself
is in the \TPW\OWL directory.
o WRT - Interactively build and edit Windows' resources with
the Whitewater Resource Toolkit. Create and edit icons,
cursors, dialogs, menus, accelerators, bitmaps and strings.
o TDW - A special version of the Turbo Debugger that debugs
Windows 3.0 applications. TDW runs in text mode and can be
launched from the IDE via the RUN|DEBUGGER menu.
o uses display swapping to support single monitor debugging
o full support for Windows DLLs
o break on Windows messages
See MANUAL.TDW in the \TPW\DOC directory for information about
the various utilities that come with TDW.
o Help system compiler - Use the help compiler to create
Windows' online help for your programs. The help compiler
(HC.EXE) is in the \TPW\UTILS directory. The help examples are
in the \TPW\DOCDEMOS\HELPEX directory.
o Other compiler and runtime library features:
o Windows Crt unit (WinCrt) for writing "standard" programs
that use Writeln and Readln (see \TPW\WELCOME.PAS).
o Dynamic Method Tables
o Full support for Windows-style null-terminated strings
o Link in Windows resource Files ($R directive)
o Full support for DLLs (Dynamic Link Libraries. See
\TPW\OWLDEMOS\BITBTN.PAS).
A full suite of DOS command-line utilities, including a DOS
command-line compiler (TPCW.EXE) that produces Windows programs,
MAKE.EXE, and a Windows' resource compiler (RC.EXE) are also
provided.
6. RELEASE NOTES
----------------
Paradox Engine Sample Program
-----------------------------
o Turbo Pascal for Windows can access Paradox data tables using
the Paradox Engine 2.0 Dynamic Link Library (DLL). An example
program that shows how this is done is included in the files
\TPW\OWLDEMO\PXDEMO.PAS and \TPW\OWLDEMOS\PXACCESS.PAS. Note
that you will need the PXENGWIN.DLL and the sample Paradox
data files that are included with the Paradox Engine 2.0 in
order to run PXDEMO. The Paradox Engine 2.0 is available
separately from Borland and includes support for DOS and
Windows programming using Turbo Pascal, Borland C and C++, and
other languages.
WRT Release Notes
-----------------
o If your system has plenty of memory (3 MBytes or more), you
can speed up the WRT by inserting the following 3 lines in
your WIN.INI file:
[WRT]
Static = 250
Dynamic = 100
This increases the memory available to the WRT and speeds up
its editing operations.
o Include file support - The WRT allows you to create include
files that contain Pascal constant definitions. These files
can be included in your TPW programs using the {$I Filename}
directive. Note that these files can contain ONLY a const
clause and constant declarations. No other language
constructs, including comments, are allowed. The WRT can read
and write these files from within the Header editor.
o The WRT can edit resources, even if they're already bound into
an .EXE file. Note that in this case, however, any TDW debug
information already bound into the .EXE will be removed.
Help Compiler Release Notes
---------------------------
o TPW provides the Windows help compiler, HC.EXE, in the
\TPW\UTILS directory. A complete help example, HELPEX.PAS is
located in \TPW\DOCDEMOS\HELPEX. There is also a complete
ObjectWindows version of this example (OWLHELP.PAS). You can
use the HELPEX.MAK file to make both examples by typing
make -fhelpex.mak
Make sure the command-line compiler (TPCW.EXE), the help
compiler (HC.EXE), the resource compiler (RC.EXE) and MAKE.EXE
are all on your DOS path. If you did not use the installation
program's default directory structure, you'll need to modify
HELPEX.MAK accordingly. See the printed documentation on the
help compiler for more information about HC.EXE and
HELPEX.PAS.
OEM vs. ANSI Character Sets
---------------------------
o DOS text files use the OEM character set; Windows text files
generally use the ANSI character set. The demo program,
FCONVERT.PAS (located in \TPW\OWLDEMOS) converts data back and
forth between these formats. The only text files that will be
affected are those containing international characters (ASCII
values above 128) like the umlaut, etc. Not all OEM characters
are present in the ANSI character set, and vice versa.
Therefore, converting between these character sets may produce
a mapping that is not reversible. Refer to your Windows
documentation for further information about ANSI vs. OEM
character sets.
Turbo Pascal for DOS
--------------------
o A DOS version of Turbo Pascal that produces DOS programs is
also available. Contact your dealer or distributor, or call
Borland for more information.
* * *
Welcome to Turbo Pascal for Windows 1.5
---------------------------------------
This README file contains important, last minute information
about Turbo Pascal for Windows.
In addition to the release notes in this file, browse the
following text files in the \TPW\DOC directory:
MANUAL.TPW, MANUAL.RW, README.RW, and README.TDW
These contain corrections to the printed documentation and other
useful information.
A complete list of all files is provided in the file FILELIST.DOC
in the \TPW directory.
TABLE OF CONTENTS
-----------------
1. How to Get Help
2. Installation
3. System Requirements
4. Turbo Help
5. Features
6. Release Notes
7. Windows 3.1 Redistributable license
1. HOW TO GET HELP
-------------------
If you have any problems, please read this file, the *.DOC files
in \TPW\DOC, and the Turbo Pascal manuals first. If you still
have a question and need assistance, help is available from the
following sources:
1. Type GO BORLAND on the CompuServe bulletin board system. If
you are not a member of CompuServe, see the enclosed brochure.
2. Check with your software dealer or user group.
3. If you have an urgent problem and you have sent in the license
agreement that accompanied this package, you may call the
Borland Technical Support Department at (408) 461-9144. Please
have the following information ready before calling:
a. Product name and serial number from the distribution disks.
b. Computer brand, model, and the brands and model numbers of
any additional hardware.
c. Operating system and version number. (The version number
can be determined by typing VER at the DOS prompt. The
Windows version number is displayed in the Program
Manager's About Box.)
d. Contents of your AUTOEXEC.BAT, CONFIG.SYS, TPW.INI and
WIN.INI files.
2. INSTALLATION
---------------
NOTE: Before running the INSTALL program, you should disable any
Windows screen savers. The install process will not complete
properly if interrupted by a screen saver.
NOTE: The installation program needs at least 1MB of free memory
to run.
Use the INSTALL program to install Turbo Pascal for Windows. The
files on the distribution disks are all archived and INSTALL will
de-archive them, place them into subdirectories and automatically
create configuration files for both the command-line compiler and
the Integrated Development Environment (IDE). All further
references to directory paths in this README file assume you've
used INSTALL's default directory structure.
To run the installation program from Drive A type
WIN A:INSTALL
or, if Windows is active, select Program Manager's File|Run
command and type
A:INSTALL
Install will unpack the compressed archive files (*.PAK) into
subdirectories on your hard disk. These files can also be
unpacked manually using the UNPAK.EXE utility. Your system must
have at least two megabytes of memory available to run Turbo
Pascal for Windows. Neither the Install program nor Turbo Pascal
for Windows will run in real mode.
Path Information
----------------
If you want to use the command line utilities provided with TPW
1.5, you will need to add the \TPW\UTILS directory to your DOS
path. Other than these utilities, TPW does not require any of
its components to be listed on the DOS path.
Installing over Turbo Pascal for Windows Version 1.0
----------------------------------------------------
You can install Turbo Pascal for Windows Version 1.5 to the same
directory as version 1.0. You can delete the Whitewater Resource
Toolkit (located in \TPW\UTILS) in favor of using Resource
Workshop, if desired. The files you can delete are: WRT.DAT,
WRT.EXE, WRT.FON, WRT.IMA, and WRT.HLP. In addition, updated
versions of some Resource Workshop demos are located in the
Resource Workshop demo directory (\TPW\RWDEMOS). You can delete
any duplicates of these newer files (located in \TPW\OWLDEMOS)
also.
Online Help under Windows 3.0
-----------------------------
In order to access online help for Turbo Pascal or Resource
Workshop, you must have the help system from Windows 3.1. If the
Install program detects that you are running Windows 3.0, it will
attempt to rename your current versions of WINHELP.EXE and
WINHELP.HLP, and replace them with the newer Windows 3.1 versions
of the same files. If this process fails (the Install program
will alert you if this happens), you will need to manually copy
the WINHELP.EXE and WINHELP.HLP from the \TPW directory to your
Windows directory.
Note: If you installed under Windows 3.1, these files were not
copied to your hard disk, since you already have the correct
versions in your \WINDOWS directory.
3. SYSTEM REQUIREMENTS
----------------------
Turbo Pascal for Windows requires at least 2 MB of RAM and runs
on EGA, VGA (and above) and Hercules monochrome video adapters
under Windows 3.0 and 3.1.
4. TURBO HELP
-------------
The fastest way to get help on any Turbo Pascal or Windows API
feature is to use the online help system. Pull down the Help menu
by typing Alt-H or press F1 for more information. TDW has its own
help system and help file as well.
5. FEATURES
-----------
New features in Turbo Pascal for Windows 1.5 include
o Syntax Highlighting in the editor - Language elements (e.g.,
reserved words, identifiers) are highlighted with selectable
colors and fonts. Refer to the "Syntax Highlighting" help
topic for complete documentation on this feature.
o SpeedBar - Click an icon to perform common IDE operations,
such as File|Open or Compile|Make. Refer to the "SpeedBar"
help topic (Help|Search) for complete documentation on this
feature.
o Resource Workshop - Use Borland's award-winning tool to
create and modify your menu, dialog, and other Windows 3.0
and 3.1 resources.
o Full Access to Windows 3.1 - All the TPUs, DLLs and utilities
you need to take full advantage of the new Windows 3.1
features including Object Linking and Embedding (OLE),
Multimedia, TrueType fonts, PenWindows, etc. Note: you must
have Windows 3.1 to take advantage of these features.
o New demo programs:
COMMDLGS.PAS - How to access new Common Dialogs DLL
DDEMLCLI.PAS - Example of a DDE client application
DDEMLSVR.PAS - Example of a DDE server
MCISOUND.PAS - Using MCI sound capabilities
(requires special hardware)
OLECLI.PAS - OLE client application
OLESERVR.PAS - OLE server application
OWLPEN.PAS - PenWindows example
(requires Pen or MS compatible mouse)
PAINT.PAS - Complete paint program
SHELLDEM.PAS - Win 3.1 Shell API demo
TTDEMO.PAS - Shows how to access new TrueType fonts
(These programs and their accompanying files are located in
the \TPW\OWLDEMOS directory. PAINT.PAS is in
\TPW\OWLDEMOS\PAINT.)
o Easy access to Borland Window Custom Controls (BWCC) by using
the BWCC unit provided. Place this unit in your "uses" clause
to convert all dialogs and windows from StdDlgs and StdWnds
to BWCC style. The BWCC unit replaces the WObjectB and
StdDlgsB units that came with previous versions of Resource
Workshop.
Other Turbo Pascal for Windows features include
o Windows IDE - A Windows-hosted environment that is a full MDI
application. You can edit and compile files in the IDE and
then call TDW to debug your programs. (The IDE even has
optional Wordstar compatible keys. Select the alternate
command set on the Options|Preferences dialog.)
o The compiler and RTL have many extensions for programming
under Windows (see below). Refer to the demo programs in the
\TPW\WINDEMOS directory.
o ObjectWindows - An application framework and library that
provides an object-oriented layer to Windows programming. Use
ObjectWindows' object-oriented techniques to build powerful
Windows applications quickly. ObjectWindows (OWL) demo
programs are in the \TPW\OWLDEMOS directory. OWL itself is in
the \TPW\OWL directory.
o TDW - A special version of the Turbo Debugger that debugs
Windows 3.0 and 3.1 applications. TDW runs in text mode and
can be launched from the IDE via the RUN|DEBUGGER menu.
o uses display swapping to support single monitor debugging
o full support for Windows DLLs
o break on Windows messages
See README.TDW in the \TPW\DOC directory for the latest
information about TDW.
o Help system compiler - Use the help compiler to create
Windows' online help for your programs. The help compiler
(HC.BAT) is in the \TPW\UTILS directory. The help examples
are in the \TPW\DOCDEMOS\HELPEX directory.
o Other compiler and runtime library features:
o Windows Crt unit (WinCrt) for writing "standard" programs
that use Writeln and Readln (see \TPW\WELCOME.PAS).
o Dynamic Method Tables
o Full support for Windows-style null-terminated strings
o Link in Windows resource Files ($R directive)
o Full support for DLLs (Dynamic Link Libraries).
A full suite of DOS command-line utilities, including a DOS
command-line compiler (TPCW.EXE) that produces Windows programs,
MAKE.EXE, and a Windows resource compiler (RC.EXE) are also
provided.
6. RELEASE NOTES
----------------
Configuration Files
-------------------
o TPW 1.5 uses the TPW.CFG to store configuration data. This
file is intended to be modified only through the Integrated
Development Environment's dialog boxes. Editing this file in
any other way may result in loss of configuration data.
Runtime Libraries
-----------------
o This version of the Turbo Pascal compiler is fully backwards
compatible with version 1.0. However, WOBJECTS.TPU has been
updated. Any third party units which list WOBJECTS in their
"uses" clause will therefore report a "Unit version mismatch"
error when compiling. If you do not have the source code to
these third party units, you can either: a) continue to use
the WOBJECTS.TPU from TPW 1.0, or b) contact the author for
an updated unit. Units to which you do have source code can
be recompiled using the Compile|Build option.
Integrated Development Environment
----------------------------------
o The editor's Block Overwrite option is set to ON by default.
This is a change from version 1.0.
o The Tile command's shortcut key is now Shift-F4, and Cascade
is now Shift-F5. This is a change from version 1.0. These
commands have also exchanged positions on the Window menu.
Paradox Engine Sample Program
-----------------------------
o Turbo Pascal for Windows can access Paradox data tables using
the Paradox Engine 2.0 Dynamic Link Library (DLL). An example
program that shows how this is done is included in the files
\TPW\OWLDEMOS\PXDEMO.PAS and \TPW\OWLDEMOS\PXACCESS.PAS. Note
that you will need the PXENGWIN.DLL and the sample Paradox
data files that are included with the Paradox Engine 2.0 in
order to run PXDEMO. The Paradox Engine 2.0 is available
separately from Borland and includes support for DOS and
Windows programming using Turbo Pascal, Borland C and C++,
and other languages.
Resource Compiler
-----------------
o Turbo Pascal for Windows 1.5 produces EXE files that will run
under Windows 3.0 and later. Here's a sample command line
that uses the resource compiler to produce an EXE that runs
only under Windows 3.1
rc -31 myprog.exe
Help Compiler
-------------
o The Help Compiler for Windows 3.0 (HC.EXE) has been replaced
by HC.BAT. This batch file can run either the Windows 3.0
Help Compiler (HC30.EXE) or the Windows 3.1 Help Compiler
(HC31.EXE).
By default, HC.BAT executes HC30.EXE, to produce a help file
that works with the versions of WINHELP.EXE in either Windows
3.0 or Windows 3.1. To take advantage of the new Help
features of Windows 3.1, use "-n" as the first parameter to
HC.BAT, which will then execute HC31.EXE.
HC.BAT, HC30.EXE, HC31.EXE are located in the utilities
directory. To use these utilities, you'll need to have the
\TPW\UTILS directory listed on your DOS PATH.
o There is a complete help example, HELPEX.PAS, in the
directory \TPW\DOCDEMOS\HELPEX. There is also a complete
ObjectWindows version of this example (OWLHELP.PAS). You can
use the HELPEX.MAK file to make both examples by typing
make -fhelpex.mak
Make sure the command-line compiler (TPCW.EXE), the help
compiler (HC.BAT), the resource compiler (RC.EXE) and
MAKE.EXE are all on your DOS path. If you did not use the
installation program's default directory structure, you'll
need to modify HELPEX.MAK accordingly.
OEM vs. ANSI Character Sets
---------------------------
o DOS text files use the OEM character set; Windows text files
generally use the ANSI character set. The demo program,
FCONVERT.PAS (located in \TPW\OWLDEMOS) converts data back
and forth between these formats. The only text files that
will be affected are those containing international
characters (ASCII values above 128) like the umlaut, etc. Not
all OEM characters are present in the ANSI character set, and
vice versa. Therefore, converting between these character
sets may produce a mapping that is not reversible. Refer to
your Windows documentation for further information about ANSI
vs. OEM character sets.
Out of Date Drivers
-------------------
o If your TPW IDE dialog boxes are unreadable, first delete
TPW.DSK, TPW.CFG and TPW.INI files and then run the IDE
again. If the problem persists, contact your video card
manufacturer for an update of your video drivers, or use the
VGA.DRV driver supplied with Windows by Microsoft.
o If you experience difficulty in printing from the IDE, make
sure you have the newest Windows 3.1 printer drivers from
Microsoft or from your printer vendor.
Using the Windows 3.1 Debugging Kernel
--------------------------------------
o The Turbo Pascal for Windows version 1.5 IDE works under
either the retail or the debugging kernel of Windows 3.1.
However, you might experience problems with printing from the
IDE under the debugging kernel.
Using Adobe Type Manager
------------------------
o Older versions of Adobe Type Manager can cause some fonts to
not appear in the Options|Preferences dialog box. Adobe Type
Manager version 2.0 or later corrects this problem. You can
contact Adobe about upgrades at 1-800-521-1976.
Turbo Pascal for DOS
--------------------
o A DOS version of Turbo Pascal that produces DOS programs is
also available. Contact your dealer or distributor, or call
Borland for upgrade information at 1-800-331-0877 (U.S.
customers only).
7. WINDOWS 3.1 REDISTRIBUTABLE LICENSE
--------------------------------------
NOTE CONCERNING USE OF MICROSOFT WINDOWS 3.1 REDISTRIBUTABLES FOR
APPLICATIONS RUNNING ON MICROSOFT WINDOWS 3.0
This Borland language product contains everything you need to
develop applications to run on the most recent version of
Microsoft Windows, version 3.1. In some cases, you may need to
copy and include with your application one or more Microsoft
"redistributable" files from a copy of version 3.1 so that your
application will also run on version 3.0. Microsoft informs us
that you may copy the redistributable files from Microsoft
Windows 3.1 for this purpose. If you do so, you must comply with
the conditions stated in the Borland No-Nonsense License
Statement included in this package as if the redistributable
files you copy were a part of this Borland language product.
Microsoft's redistributable files in Windows 3.1 are:
WINHELP.EXE, WINHELP.HLP, COMMDLG.DLL, DDEML.DLL, TOOLHELP.DLL,
VTD.386, OLECLI.DLL, OLESVR.DLL, VER.DLL, LZEXPAND.DLL,
EXPAND.EXE, REGLOAD.EXE, STRESS.DLL, DIB.DRV, MARKMIDI.EXE,
SHELL.DLL and PENWIN.DLL.
Note that some of these files are distributed with Turbo Pascal
for Windows 1.5 while others are part of the Windows 3.1 retail
product.
* * *
WELCOME TO TURBO ASSEMBLER VERSION 2.01
---------------------------------------
This README file contains important information about Turbo
Assembler Version 2.01. For the latest information about
Turbo Assembler 2.01, the accompanying programs, and the manual,
read this file in its entirety. The UPDATE.DOC file contains
information on the new features in Turbo Assembler version 2.01.
The HELPME!.DOC file answers many common Technical Support
questions.
TABLE OF CONTENTS
-----------------
1. How to Get Help
2. Installation
3. Important Notes
4. Files on the Disks
1. HOW TO GET HELP
-------------------
If you have any problems, please read this file, HELPME!.DOC,
UPDATE.DOC, and the Turbo Assembler manuals first. If you still
have a question and need assistance, help is available from the
following sources:
1. Type GO BOR on the CompuServe bulletin board system for
instant access to the Borland forums with their libraries of
technical information and answers to common questions.
If you are not a member of CompuServe, see the enclosed
special offer, and write for full details on how to receive
a free IntroPak containing a $15 credit toward your first
month's online charges.
2. Check with your local software dealer or users' group.
3. Write to us at the following address:
Borland International
Turbo Assembler Technical Support
1800 Green Hills Road
P.O. Box 660001
Scotts Valley, CA 95066-0001
Please remember to include your serial number or we will be
unable to process your letter.
4. If you have an urgent problem that cannot wait and you have
sent in the license agreement, you may call the Borland
Technical Support Department at (408) 438-5300 Monday through
Friday between the hours of 6 a.m. and 5 p.m. Pacific Time.
Please have the following information ready before calling:
a. Product name and serial number on your original
distribution disk. Please have your serial number ready
or we will be unable to process your call.
b. Product version number. The version number for Turbo
Assembler is displayed when you run the program.
c. Computer brand, model, and the brands and model numbers
of any additional hardware.
d. Operating system and version number. (The version number
can be determined by typing VER at the DOS prompt.)
e. Contents of your AUTOEXEC.BAT and CONFIG.SYS files.
2. INSTALLATION
----------------
You should read the rest of this README file to get further
information about this release before you do the installation.
The Turbo Assembler/INSTALLATION disk contains a program called
INSTALL.EXE that will assist you with the installation of Turbo
Assembler 2.01.
To start the installation, change your current drive to the one
that has the install program on it and type INSTALL. You will
be given instructions in a box at the bottom of the screen for
each prompt. For example, if you will be installing from drive
A:, type
A: <Enter>
INSTALL <Enter>
If you have difficulty reading the text displayed by the INSTALL
program, use the /B command-line parameter to force it to use
black and white colors:
a:install /B - Forces INSTALL into BW80 mode
Specifying the /B parameter may be necessary if you are using an
LCD screen or a system that has a color graphics adapter and a
monochrome or composite monitor.
Notes for installation:
INSTALL copies all Turbo Assembler files onto your hard disk
and puts them into subdirectories. The default subdirectories
are
Turbo Assembler Directory: C:\TASM
Examples Subdirectory: C:\TASM
By default, all files from the distribution disks are placed in
the Turbo Assembler Directory. If you would rather separate the
examples programs into their own subdirectory, edit the default
example files path before selecting START INSTALLATION.
The Turbo Assembler distribution disks contain several files
with a .ZIP file extension: TASM.ZIP, MANUAL.ZIP, etc. These
files contain one or more other files that have been compressed
and placed inside an archive. You can de-archive them yourself
by using the UNZIP.EXE utility. For example,
unzip /o tasm
unpacks all the files stored in the TASM.ZIP archive into the
current directory.
INSTALL gives you a choice of copying the .ZIP files intact or
de-archiving and copying all the individual files onto your hard
disk during the installation process.
3. IMPORTANT NOTES
-------------------
o Updated QUIRKS mode list
The following apply to QUIRKS mode:
1) NEAR or SHORT jumps are generated even if FAR is specified,
if source and destination segments are the same.
2) Type checking for some two-argument instructions is disabled,
for example, MOV ES,BYTEPTR is allowed.
3) Forces an EQU to an expression with PTR in it to be a text
macro.
4) Forces an EQU to an expression with : in it to be a
text macro.
5) Forces an EQU to an expression with OFFSET in it to be a text
macro.
6) Forces SHL operator to lose track of sign info.
7) Forces numeric equates (= or numeric EQU) to lose complex
expression information such as segment, fixup type.
8) Reduces priority of GLOBAL, UNION keywords so that they may
be overridden.
9) Causes warning instead of error to be generated if the second
argument is missing in a two-argument instruction.
10) Allows REPT without argument to be interpreted as REPT 0.
11) Disables test for extra stuff on line after IF conditional.
The following apply to QUIRKS with MASM51:
1) @@, @F, and @B are enabled.
2) Trailing language ID after NEAR or FAR in procedure
declaration is allowed.
3) All procedure symbols are published globally.
4) :: label definitions are allowed.
o MASM compatibility pass
Using TASM's /m command-line switch will generate a MASM-style
second pass (compatibility pass) when the following
constructions are present:
o IF1 and IF2 directives
o .ERR1 and .ERR2 directives
o ELSEIF1 and ELSEIF2 directives
o Forward references with IFDEF or IFNDEF
o Forward references with the .TYPE operator
o Recursively defined numbers (FOO=FOO+1)
o Forward-referenced or recursively defined text macros
(FOO CATSTR FOO,<1>)
o Forward referenced macros
The execution of the compatibility pass effectively disables
the advantages associated with Turbo Assembler's multiple pass
capabilities.
o Updated example files
The WHEREIS example file has been updated to reflect some of
the new TASM 2.01 features. In addition, IWHGLOBL.INC and
IWHEREIS.ASM in TAEXMPL1.ZIP and GLOBALS.INC in TAEXMPL2.ZIP
have been changed to remove the warning message "Global type
doesn't match symbol type."
o SMART/NOSMART directives
One of the optimizations that TASM 2.01 performs is to change
FAR calls to an address in the same segment into a PUSH CS
followed by a CALL NEAR. Any FAR procedures that have an
EXTRN definition declared inside a segment are considered to
be in that segment, and TASM will generate the PUSH CS, CALL
NEAR instructions for them. To avoid this, put a procedure's
EXTRN definition inside of a segment only if the procedure
is actually in that segment, or put NOSMART and SMART
directives around calls to the procedure in that segment.
o Turbo Assembler 2.01 Reference Guide corrections
P. 187 In the section titled "Examples," make the following
changes:
prog.exe: myprog.asm prog2.asm include\stdio.inc
tasm /t myprog.asm # Recompile myprog using Turbo Assembler
tasm /t prog2.asm # Recompile prog2 using Turbo Assembler
tlink myprog prog2, prog
Here are some better examples:
prog.exe: myprog.obj prog2.obj
tlink myprog prog2, prog
myprog.obj: myprog.asm include\stdio.inc
tasm myprog.asm
prog2.obj: prog2.asm include\stdio.inc
tasm prog2.asm
P. 196 The directives in Table D.1 should be uppercase.
P. 212 Ignore the second paragraph under the section "Turbo Link";
TASM does not call TLINK.
4. FILES ON THE DISK
---------------------
TURBO ASSEMBLER/INSTALLATION
----------------------------
INSTALL EXE - Turbo Assembler installation program
README COM - Reads this README
UNZIP EXE - Program to unzip the .ZIP files
TASM ZIP - Turbo Assembler 2.01 and Utilities
TASM EXE - Turbo Assembler 2.01
TLINK EXE - Borland Turbo Linker
MAKE EXE - Program for managing projects
GREP COM - Turbo GREP program
TCREF EXE - Turbo Assembler cross-reference utility
OBJXREF COM - Object file cross-reference utility
TOUCH COM - Program that updates a file's date and time
TLIB EXE - Borland Turbo Librarian
MANUAL ZIP - Turbo Assembler 2.01 Documentation files.
UPDATE DOC - Complete description of new TASM 2.01 features
TLINK DOC - Updated information on TLINK.EXE
GREP DOC - Updated information on GREP.COM
TCREF DOC - Updated information on TCREF.EXE
OBJXREF DOC - Updated information on OBJXREF.COM
HELPME! DOC - Text file with the answers to many common
questions. Please read HELPME!.DOC before
contacting Technical Support
BASIC DOC - Interfacing Turbo Assembler with Turbo Basic
PROLOG DOC - Interfacing Turbo Assembler with Turbo Prolog
MMACROS ZIP - MASM Mode Macros
BIOS INC - Equates representing the BIOS services
DOS INC - Equates representing the DOS services
KBD INC - Equates representing the IBM PC keyboard keystrokes
MBIOS MAC - Macros used to interface with the IBM PC BIOS.
MASM Mode
MDOS MAC - Macros to interface with DOS. MASM Mode
MMACROS MAC - General macros. MASM Mode
README - This file
TURBO ASSEMBLER/EXAMPLES
------------------------
TAEXMPL1 ZIP - Ideal mode example and macros
BIOS INC - Equates representing the BIOS services
BIOSMAC DOC - Documentation for macros implemented in ?BIOS.MAC
DEMO1 BAT - Batch file to make Whereis.exe
DOS INC - Equates representing the DOS services
DOSMAC DOC - Documentation for macros implemented in ?DOS.MAC
IASCIIZS ASM - Routine to display an ASCIIZ string
IBIOS MAC - Ideal mode macros used to interface with the
IBM PC BIOS
IBYTECPY ASM - Routine that copies an array of bytes from one
location to another
IDELCHAR ASM - Routine that deletes n characters from a
Pascal-style string starting at position i
IDOS INC - Type declarations used to interface with DOS
IDOS MAC - Macros to interface with DOS. Ideal Mode
IEXECDOS ASM - Routines to handle calling DOS to perform a
command on a file
IFINDBYT ASM - Routine that searches an array of bytes, looking
for a value; routine that returns the length of
an ASCIIZ string.
IFINDFIL ASM - Routine that does a recursive search of a hard disk
looking for a file
IFINDREP ASM - Routine that searches through an array of
bytes, replacing all instances of a value
with another value.
ILOCSTRG ASM - Routine that searches through memory looking
for the nth Pascal-style string
IMACROS MAC - General macros. Ideal Mode
IPARAM ASM - Routines to return the # of command-line
parameters and the contents of an individual
parameter
IPARSEFN ASM - Routine that parses a file name into Drive,
Path, and File spec
ISKPWHIT ASM - Routine to advance a pointer past any whitespace
in an array of bytes
IWHEREIS ASM - Main module for Whereis program
IWHGLOBL INC - Global declarations for Whereis
IWRITEPS ASM - Routine to display a Pascal-style string
KBD INC - Equates representing the IBM PC keyboard keystrokes
WHEREIS DOC - Documentation for Whereis file locator program
WHEREIS MAK - Make file for creating Whereis.exe using the Make
utility
WHUSAGE INC - Usage screen text
TAEXMPL2 ZIP - FILT and standard segmentation (SHOW87) examples
CONVERT1 INC - Converts from binary numbers to strings
CONVERT2 INC - Converts from floating point to integer numbers
DEMO3 BAT - Batch file to make Filt.exe text filter program
DEMO2 BAT - Batch file to build Show87
FILT ASM - Text filter main file
FILT DOC - Documentation file for Filt.exe text filter
program
FILT MAK - Make file for creating Filt.exe using the
make utility
FILT RSP - Linker response file for linking Filt.exe
GLOBALS INC - Declares procedures and symbols needed by
the modules of FILT
OBYTEHI ASM - Processes the current high byte value in AL
OBYTELOW ASM - Processes the current low byte value in AL
OBYTENRM ASM - Processes the current normal byte value in AL
OCMDNUM ASM - Parses the command line
OERREXIT ASM - Handles the printing of error messages
OFCREATE ASM - Creates or truncates a file; the file is opened
for writing
OFILALOC ASM - Allocates a read/write buffer
OFILCLOS ASM - Closes a file
OFILEFIL ASM - Fills a read buffer
OFILFREE ASM - Deallocates a read/write buffer
OFILREAD ASM - Reads from a file
OFILWRIT ASM - Writes to a file
OFLFLUSH ASM - Flushes the write buffer
OFOPENR ASM - Opens a file for reading
OFOPENW ASM - Opens a file for writing
OLOCASE ASM - Routine converts a letter to lowercase
OPARSCMD ASM - Parses the command line
OPRCBYTE ASM - Processes a byte
OPROCDOC ASM - Processes an entire document, one line at a time
OPROCLIN ASM - Processes a line
OSETOPTN ASM - Sets options for FILT
OSPACES ASM - Stores a specified number of spaces at
particular location
OSTORSPC ASM - Stores any currently stored spaces
OSTORTAB ASM - Stores a tab character if there are any spaces
to compress
OTABCLR ASM - Clears all tab stops
OTABNEXT ASM - Returns the number of spaces to the next tab stop
OTABRSET ASM - Sets tab stops every eight columns
OTABSET ASM - Sets a tab stop at a specified column location
OUPCASE ASM - Converts a letter to uppercase
SHOW87 ASM - Standard Segmentation Demo Program
SHOW87 DOC - Documentation for Show87 8087 register display
program
VIDEO1 INC - Routines to display text and control the screen
VIDEO2 INC - Routines to display formatted text strings
CHAPXMPL ZIP - Example Programs from the Manual
Note: This file is not automatically unzipped when Turbo Assembler
is installed to a hard disk. To unzip these files you
will first need to switch to the drive and
subdirectory containing this file and then give the
command
unzip /o chapxmpl
Example Pre-2.01 Doc 2.01 Doc
HELLO ASM - Pg 9 Pg 11
HELLO2 ASM - Pg 13 Pg 15
HELLOPRN ASM - Pg 15 Pg 17
REVERSE ASM - Pg 16 Pg 18
ECHOCHAR ASM - Pg 55 Pg 72
MODCHAR ASM - Pg 80 Pg 78
DELAY ASM - Pg 88 Pg 87
DSLYSTR ASM - Pg 109 Pg 105
USE_ES ASM - Pg 110 Pg 107
STDSEG ASM - Pg 115 Pg 111
STRINGS ASM - Pg 132 Pg 127
PRNTSTR ASM - Pg 175 Pg 163
CNTWORDS ASM - Pg 181 Pg 168
MAIN ASM - Pg 207 Pg 191
SUB1 ASM - Pg 208 Pg 191
PLUSONE C - Pg 282 Pg 262
SQRETBLE C - Pg 287 Pg 266
SQRTBLE2 C - Pg 287 Pg 266
STRINGUP C - Pg 293 Pg 271
DOTOTAL ASM - Pg 305 Pg 283
SHOWTOT C - Pg 306 Pg 284
DOTOTAL2 ASM - Pg 307 Pg 285
TOGLFLAG C - Pg 313 Pg 290
TOGFLAG ASM - Pg 313 Pg 290
COUNT ASM - Pg 327 Pg 304
CALLCT C - Pg 328 Pg 305
COUNTLG ASM - Pg 329 Pg 305
CALCAVG C - Pg 334 Pg 311
AVERAGE ASM - Pg 334 Pg 312
SAMPLE PAS - Pg 344 Pg 322
ASMPROC ASM - Pg 344 Pg 322
TSAMPLE PAS - Pg 345 Pg 323
HEXSTR ASM - Pg 357 Pg 334
HEXTEST PAS - Pg 358 Pg 336
XCHANGE ASM - Pg 360 Pg 337
XCHANGE PAS - Pg 361 Pg 338
ENVSTR ASM - Pg 362 Pg 340
ENVTEST PAS - Pg 364 Pg 342
SCROLLH PRO - Pg 387 see Prolog.doc
SCROL ASM - Pg 388 see Prolog.doc
MYPROLOG PRO - Pg 391 see Prolog.doc
MYASM ASM - Pg 391 see Prolog.doc
ADDPRO PRO - Pg 393 see Prolog.doc
ADD ASM - Pg 393 see Prolog.doc
SHOWMESS PRO - Pg 395 see Prolog.doc
FROM_ASM ASM - Pg 395 see Prolog.doc
SHOWNEW PRO - Pg 396 see Prolog.doc
FROM_NEW ASM - Pg 396 see Prolog.doc
FUNC PRO - Pg 398 see Prolog.doc
IFUNC ASM - Pg 398 see Prolog.doc
MULT_C&D ASM - Pg 469 Pg 404
PRIMES ASM - Pg 521 Pg 449
MASEXMPL ASM - Pg 548 Pg 476
IDLEXMPL ASM - Pg 549 Pg 477
THELP ZIP - Turbo Help files for Turbo Assembler 2.01
THELP COM - Borland Turbo Help
TASM TAH - Turbo Assembler Help text file
THELP DOC - Information about THELP.COM
TFEXMPL2 ZIP - Turbo Profiler example files
PRIME0 C
PRIME0 EXE
PRIME1 C
PRIME1 EXE
PRIME2 C
PRIME2 EXE
PRIME3 C
PRIME3 EXE
PRIME4 C
PRIME4 EXE
PRIME5 C
PRIME5 EXE
PRIME6 C
PRIME6 EXE
TFHELP ZIP - Turbo Help file for Turbo Profiler 1.01
TFHELP TFH
NOTE: If you have the 3.5" version of Turbo Assembler, you can
find all files on one disk.
WELCOME TO TURBO DEBUGGER 2.01
------------------------------
This README file contains important information about Turbo
Debugger Version 2.01. For the latest information about Turbo
Debugger 2.01, the accompanying programs, and the manual, read
this file in its entirety.
TABLE OF CONTENTS
-----------------
1. How to Get Help
2. Installation
3. Notes and Restrictions
4. About Turbo Debugger 2.01
5. Files on the Disks
1. HOW TO GET HELP
-------------------
If you have any problems, please read this file, HELPME!.DOC,
MANUAL.DOC, and the Turbo Debugger User's Guide first. If you still
have questions and need assistance, help is available from the
following sources:
1. Type GO BOR on the CompuServe bulletin board system for
instant access to the Borland forums with their libraries of
technical information and answers to common questions.
If you are not a member of CompuServe, see the enclosed
special offer, and write for full details on how to receive
a free IntroPak containing a $15 credit toward your first
month's online charges.
2. Check with your local software dealer or users' group.
3. Write to us at the following address:
Borland International
Turbo Debugger Technical Support
1800 Green Hills Road
P.O. Box 660001
Scotts Valley, CA 95066-0001
Please remember to include your serial number or we will be
unable to process your letter.
4. If you have an urgent problem that cannot wait and you have
sent in the license agreement, you may call the Borland
Technical Support Department at (408) 438-5300 Monday through
Friday between the hours of 6 a.m. and 5 p.m. Pacific Time.
Please have the following information ready before calling:
a. Product name and serial number on your original
distribution disk. Please have your serial number ready
or we will be unable to process your call.
b. Product version number. The version number is displayed
when running Turbo Debugger and pressing the <Alt - space>
keys to bring up the System menu and choosing the
About... option.
c. Computer brand, model, and the brands and model numbers
of any additional hardware.
d. Operating system and version number. (The version number
can be determined by typing VER at the DOS prompt.)
e. Contents of your AUTOEXEC.BAT and CONFIG.SYS files.
2. INSTALLATION
----------------
You should read the rest of this README file to get further
information about this release before you do the installation.
The Turbo Debugger/INSTALLATION disk contains a program called
INSTALL.EXE that will assist you with the installation of Turbo
Debugger 2.01.
To start the installation, change your current drive to the one
that has the install program on it and type INSTALL. You will be
given instructions in a box at the bottom of the screen for each
prompt. For example, if you are installing from drive A:,
you type
A: <Enter>
INSTALL <Enter>
If you have difficulty reading the text displayed by the INSTALL
program, use the /B command-line parameter to force it to use
black and white colors:
a:install /B - Forces INSTALL into BW80 mode
Specifying the /B parameter may be necessary if you are using an
LCD screen or a system that has a color graphics adapter and a
monochrome or composite monitor.
Notes for installation:
INSTALL copies all Turbo Debugger files onto your hard disk
and puts them into subdirectories. The default subdirectories
are
Turbo Debugger Directory: C:\TD
Examples Subdirectory: C:\TD
By default, all files from the distribution disks are placed in
the Turbo Debugger Directory. If you would rather separate the
example programs into their own subdirectory, edit the default
example files path before selecting START INSTALLATION.
The Turbo Debugger distribution disks contain several files
with a .ZIP file extension: TD.ZIP, TDUTIL.ZIP, TDEXMPL.ZIP,
etc. These files contain one or more other files that have been
compressed and placed inside an archive. You can de-archive
them by using the UNZIP.EXE utility. For example,
unzip /o tdexmpl
unpacks all the files stored in the TDEXMPL.ZIP archive into the
current directory.
INSTALL gives you a choice of copying the .ZIP files intact or
de-archiving and copying all the individual files onto your hard
disk during the installation process.
3. NOTES AND RESTRICTIONS
--------------------------
o You need to set the files directive in your CONFIG.SYS file to
at least FILES = 10, preferably FILES = 20. If you have trouble
doing the File|DOS Shell command or if TD can't find your source
modules, make sure the FILES directive is in your CONFIG.SYS.
o FNxxxx variants of floating-point instructions are not
supported in the built-in assembler in the CPU window.
o The Fxxxx instructions do not generate an FWAIT in Turbo
Debugger. You must manually code an FWAIT before floating-point
instructions if needed.
o A single Ctrl-Break inside a DOS function call waiting for
console input will not interrupt DOS and return control to Turbo
Debugger. You can either press Ctrl-Break once and then end the
console input function by pressing Enter, or press Ctrl-Break
twice. You will then interrupt DOS and Turbo Debugger will bring
up a CPU Viewer showing code inside DOS. At this point, you can
look around inside your program, but you might not be able to
use F7 or F8 to trace or step inside DOS. You should use only F9
at this point, possibly after setting a breakpoint inside your
program.
o If you are using TD386, make sure that you use the -e option if
you have loaded any TSRs or device drivers that are using
extended memory allocated using the VDISK method. The value to
indicate after the -e is the total amount (in Kbytes) of
extended memory at the bottom of the extended memory area that
is being used by other applications before loading TD386. If you
do not use this option, TD386 may overwrite extended memory that
is being used by the other applications. For example, if a
disk-caching program that uses extended memory is loaded and you
do not use the -e option, the program may write incorrect
information to your hard disk.
NOTE: If your programs use the INT 0x15, function 0x88 method
to allocate memory, DO NOT count this memory, as TD386 will
automatically leave that memory alone.
o TDINST contains two new options in the Display dialog box.
'Floating precision' allows you to set the floating-point
precision for variables entered in the Evaluate/Modify dialog
box and Watches window. 'Range inspect' lets you set the
default range for the number of elements to show in inspectors.
o You can set the way display updating is performed using either
command line options (-do, -dp, -ds) or TDINST (selecting
Display from its main menu shows the Display Options dialog
box). For both methods, user screen updating now defaults to
Swap. You might want to select Flip for faster operation;
however, this option can cause display problems in some
circumstances (usually involving memory-resident programs'
assuming the active display page has not changed). If you set
user screen updating to Flip and the File|Dos shell command
causes display problems, changing back to Swap should solve the
problem.
o In version 2.01, TDINST contains two new options in the
Miscellaneous Options dialog box.
- Full Trace History enables you to set whether Turbo Debugger
begins with full Backtrace capability. This option defaults
to OFF because saving Backtrace information slows execution
of the program. If the Full Trace History option is off,
you can't use Run|Backtrace in Turbo Debugger until you turn
this option on, by choosing the Full History option on the
local menu of the Execution History window.
- Link Speed now has a setting for 19200 baud. New command
line options controlling baud rate in TD and TDREMOTE are:
-rs1 9600 baud (unchanged from version 2.0)
-rs2 19200 baud (new)
-rs3 38400 baud (previously -rs2)
-rs4 115000 baud (default, previously -rs3)
o In version 2.01, the default setting for the NMI intercept is
OFF. If you are using a hardware debugging board, you might need
to turn this option on. Use caution, however, as several types
of machines have incompatibilities that might cause mysterious
crashes, possibly causing loss of data in memory or on disk. If
you are using a Tandy 1000, we strongly recommended that you
leave the NMI intercept off.
o For those of you using TD286.EXE, note that you may have to run
TD286INS.EXE so that TD286 recognizes your machine
configuration. In doing so, a file may be generated which has a
.db extension. It is necessary that we have this file in order
to make TD286 a better product. You may, if you wish, upload
this file to our BBS (Bulletin Board Service) here at Borland.
When doing so you should call (408) 438-5300 and give our
representatives your serial number so that they may allow you to
upload your file. They will help you with any questions you
have regarding the use of our BBS. You can use TD286 with
programs that are VCPI compliant, such as 386MAX, CEMM, & QEMM.
However, to do so, there MUST be at least 640K of available EMS
provided by these programs. You can determine how much free EMS
is available by using TDMEM.
o If you are using TD386, and you are receiving a "not enough
memory to load symbol table" message, you need to enable EMS
emulation for TD386. To do this, use the -F option. For
instance, to set up EMS for TD386 at segment 0D000h, invoke
TD386 with "-FD000".
o If you are using an HP-Vectra, and you get an Unexpected Interrupt
06 when trying to run TD386, you need to set an option in the
CMOS setup. By default the Vectra series uses a protected mode
instruction as part of the HP-HIL. To work around this, contact
Hewlett Packard for instruction on disabling this function.
o If an Exception 06 occurs after running for awhile in TD386,
your code has probably been overwritten. An Exception 6 is
generated by the 80386 when an illegal opcode is encountered.
Common causes of this problem are using uninitialized pointers,
etc.
o Exception 06, Exception 13, and Unexpected Interrupt 0D can also
occur if you are using an old mouse driver, network driver, or
other device driver. If you get these errors in TD386, try
removing device drivers one at a time, starting with your mouse
driver, then your network driver, and so on until you identify
the offending driver. If an upgrade is available for the driver,
see if installing it corrects the problem. The last resort is to
remove the driver entirely, if possible.
o If stepping through your program seems extremely slow there are
two common causes.
- If you are using a PS/2 mouse driver, either remove the
mouse driver or use a non-PS/2 mouse driver. Alternatively,
you can disable the use of the mouse through the -p-
command line option for TD.
- Otherwise, slow execution is usually due to excessive disk
swapping. Try using the "-y##" command line option (changes
the size of your overlay pool) and experiment with higher
or lower ## values.
o If you have a problem with TDCONVRT, you can get the latest
version either from CompuServe, forum BPROGB section 7, or by
calling the Borland Support BBS at (408)439-9181 and downloading
TDCONVRT.ZIP. You will need the serial number from your Turbo
Debugger installation diskette.
o If you get a "Cannot run TD386: Processor is already in V8086
mode" error message when trying to load TD386, then you are
using a program which uses the virtual mode of the 80386 (such
as QEMM). At this time, it is not possible to use these
programs and TD386 at the same time. If you need to use these
memory managers, try using TD286 instead of TD386.
o If you're having problems with the mouse cursor disappearing or
behaving erratically, you probably need an updated version of your
mouse driver. Because Turbo Debugger 2.01 demands more from the
mouse driver than most previous programs, you might not experience
a problem with your current driver until you use Turbo Debugger 2.01.
At this time, the current major mouse driver revisions are:
Logitech 4.10
Genius 9.03
Microsoft 7.04
Contact the manufacturer of your mouse for information about
obtaining a newer version.
4. ABOUT TURBO DEBUGGER 2.01
-----------------------------
o Version 2.01 of Turbo Debugger has been designed to support the
C++ language of Turbo C++. Earlier versions of Turbo C, Turbo
Pascal, and TASM are still compatible with the new Turbo
Debugger 2.01 as follows:
TASM 1.0 (or later)
Turbo C 2.0
Turbo Pascal 5.0 (or later)
o The Utilities and Hardware Debugging appendices from the Turbo
Debugger User's Guide have been incorporated into the
MANUAL.DOC file on the Turbo Debugger disks.
o The file HELPME!.DOC on the distribution disks has more
information about using the new mouse capabilities of Turbo
Debugger 2.01.
o By default, TD286 will use all of your extended memory. If you
are debugging programs which use extended memory you can
specify the amount of extended memory that TD286 is allowed to
use by creating a file in the root directory of your current
drive, called CONFIG.286. This file can contain the following
command:
MEGS=#
{Where # = the amount of extended memory TD286 is allowed to use}
Also note p. 254 of the Turbo Debugger User Manual states that TD286.EXE
uses all the same command-line options as TD.EXE. This holds with some
exceptions. The -sm# option is not used by TD286.EXE since it runs in
protected mode and automatically defines the necessary space for your
programs spare symbol table. The -r<X> options are not used since it
is not necessary to perform remote debugging and the -y<#> options since
TD286 does not use overlays.
5. FILES ON THE DISKS
----------------------
TURBO DEBUGGER/INSTALLATION
---------------------------
INSTALL EXE - Turbo Debugger installation program
README COM - Program to display README file
UNZIP EXE - Program to unpack archive programs
TD ZIP - Packed file containing the Turbo Debugger program
TD EXE - Turbo Debugger Program
HELPME! DOC - Lists answers to common questions about TD
MANUAL DOC - Explains corrections to the user's guide
README - This file
TURBO DEBUGGER/UTILITIES
------------------------
TDUTIL ZIP - Packed help and utility programs
TD386 EXE - 80386 virtual debugging
TDCONVRT EXE - Converts CodeView information to Turbo Debugger format
TDH386 SYS - Device driver for TD386.EXE and the 80386 debug registers
TDMAP EXE - Extracts debug information from .MAP files
TDNMI COM - TSR to clear NMI every half second
TDPACK EXE - Compresses debug information
TDREMOTE EXE - Remote debugging kernel
TDRF EXE - Remote file transfer utility
TDSTRIP EXE - Strips debug information off executable files
TDUMP EXE - Dumps executable and object file information
TDINST EXE - Custom configuration program
TDHELP TDH - Turbo Debugger help file
TDMEM EXE - Displays the contents of memory
TDDEV EXE - Displays any device drivers that are loaded
TDEXMPL ZIP - Packed file that contains Turbo Debugger examples
TCDEMO C - Turbo C Program To Demonstrate Debugger Features
TCDEMO EXE - Executable File For Turbo C Program
TCDEMOB C - Turbo C Program To Demonstrate Debugger Features
TCDEMOB EXE - Executable File For Turbo C Program
TPDEMO PAS - Turbo Pascal Program To Demonstrate Debugger Features
TPDEMO EXE - Executable File For Turbo Pascal Program
TPDEMOB PAS - Turbo Pascal Program To Demonstrate Debugger Features
TPDEMOB EXE - Executable File For Turbo Pascal Program
TFUTIL2 ZIP - Packed Turbo Profiler utility
TF386 EXE - Utility For 80386 virtual profiling
TURBO DEBUGGER/TD286
--------------------
TD286 ZIP - Archive containing the Protected Mode Turbo Debugger
TD286 EXE - Protected Mode Turbo Debugger program
TD286INS EXE - Kernel Configuration Program for Installing TD286.EXE
TFEXMPL1 ZIP - Archive containing Turbo Profiler examples
PLOST C
PLOST EXE
PLOSTPAS PAS
PLOSTPAS EXE
PTOLL C
PTOLL EXE
PTOLLPAS PAS
PTOLLPAS EXE
CALLTEST C
CALLTEST EXE
OVRDEMO PAS
OVRDEMO1 PAS
OVRDEMO2 PAS
OVRDEMO EXE
OVRDEMO OVR
TFEXMPL3 ZIP - Archive containing Turbo Profiler examples
PRIME0PA PAS
PRIME0PA EXE
PRIME1PA PAS
PRIME1PA EXE
PRIME2PA PAS
PRIME2PA EXE
PRIME3PA PAS
PRIME3PA EXE
PRIME4PA PAS
PRIME4PA EXE
PRIME5PA PAS
PRIME5PA EXE
PRIME6PA PAS
PRIME6PA EXE
NOTE: If you have the 3.5" version of Turbo Debugger, the disk
layout is as follows.
The TURBO DEBUGGER/INSTALLATION disk is combined with
the TURBO DEBUGGER/UTILITIES disk.
The TURBO PROFILER/INSTALLATION disk is combined with
the TURBO DEBUGGER/TD286 disk.
README.DOC File
Release Notes for the Microsoft(R) COBOL
Professional Development System
Version 4.5
(C) Copyright Microsoft Corporation, 1991
This document contains essential information for version 4.5 of the
Microsoft COBOL Professional Development System for MS-DOS(R) and the
Microsoft Operating System/2 (MS(R) OS/2(R)). The information in this
document is more up to date than that in the manuals.
Microsoft improves its languages documentation at the time of reprinting,
so some of the information in this file may already be included in your
manuals.
NEW FEATURES
o Support for Windows 3.0
The following types of programs are supported under Windows 3.0 :
- Existing DOS applications can be linked with a new runtime library
(COBAPIDW) to produce an application that runs under Windows.
- Programs that call the Windows API can now be written in
COBOL. Note that if you do not have the Windows Software
Development Kit (SDK) and plan to create true COBOL Windows
applications by calling the Windows API directly, you may be
interested in using the Dialog Editor from the SDK. The Dialog
Editor is available through PSS by calling 637-7096.
- Dynamic-link libraries that can be called from programs written
in other programming languages can be written in COBOL.
o Intrinsic Functions
The 1989 Addendum to the ANSI 85 COBOL Standard introduced a set of
intrinsic functions. These functions are fully supported in
Microsoft COBOL 4.5. Functions are provided for Trigonometric,
Financial, Statistical and String handling.
o Floating Point
COMP-1 (32 bit Real) and COMP-2 (64 bit Real) data types have been
added to this release of COBOL. The syntax support is the same as
defined for IBM OSVS COBOL and IBM VS COBOL II, and an Intel Floating
Point Co-Processor will be used if available.
o Table Sort
The SORT verb can now apply to a Data Division table, which will be
sorted in place.
o EXIT PERFORM
Control of program flow is enhanced with a new EXIT PERFORM statement.
o 'IF 78-level DEFINED' syntax for conditional compilation
o Support for X/Open XPG3 COBOL definition
o Compilation up to 10% faster
o General performance improvements in generated code
o Save and Restore Environment enables you to save the break-points and
monitors from one Animator session and reload them next time.
o Breakpoint when data value changes.
o Monitoring a subscripted item will follow a changing subscript.
o Data compression
You can supply your own data compression routines, which can be
tuned to the data that will be in the file.
o OS/2 Database Manager (SQL) enhancements
Support for: qualified host variables; more than 100 host variables in
one SQL statement; EXEC SQL WHENEVER SQLWARNING.
o Screens index program
The Screens program will generate an index program which can be used
for simple data entry applications.
NEW DIRECTIVES
These are the new compiler directives introduced in this product:
ALIAS Subscripts
BROWSE Create .SBR file
CHECKDIV Allow divide by zero
DEFAULTCALLS CALL convention
DETECTLOCK Detect record locks
DLL DLL or EXE
FLAGAS Show flags as errors etc.
HIDEMESSAGE Set message to hide
INFORETURN Info msg return value
INTLEVEL Portability level
LOCKTYPE Read locked records
MF(7) Micro Focus COBOL syntax
SQLDB2 Mainframe compatibility
SQLFORMAT Define date format
SQLPROT Protect database
WRITETHROUGH Unbuffered writes
XOPEN X/Open
THE COBOL SOFTWARE
Compatibility with Previous Releases
====================================
This product is generally compatible with previous releases, However,
there are some differences. These are described in the ASCII text file,
CBL-CMPT.DOC, supplied with this product. Before you use this product with
programs created with earlier versions, we recommend that you read
CBL-CMPT.DOC.
Restrictions in the COBOL Software
==================================
o Cooperative Animation only allows 4 breakpoints to be set.
o In general, the components in this product support the High
Performance File System complex filenames. However, the directory
facility in some components will not work correctly when complex names
are present. Also, names are restricted to a maximum of 65 characters.
o NODYNAM currently impacts both CALL literal and CALL identifier. To
get mainframe-type link-edit, use NOLITLINK with DYNAM and LITLINK
with NODYNAM when compiling to OBJ.
o The ANIMATOR Do command will not work with:
- the CHAIN verb when parameters are supplied
- CALL procedure-pointer
- CALL .... BY VALUE
- CANCEL of nested program
- EXIT PERFORM/PARAGRAPH/SECTION
- intrinsic functions.
o The program-id of a called subprogram must be the same as the name
used for the .OBJ file created by the compiler. Otherwise, a new copy
will be loaded whenever the program is called.
o Under OS/2 you cannot redirect input to the compiler or Animator.
o On OS/2, any DLL that is to be loaded by the shared run-time that is
not specified with a path must exist on a path given in the COBDIR
environment variable, as well as on the OS/2 LIBPATH.
o EXTERNAL data items are limited to a maximum of 64K bytes each.
o The DISPLAY UPON PRINTER syntax does not work on OS/2.
o Any computation which has an intermediate result greater than 18
digits may give an incorrect final result. This will affect arithmetic
expressions such as those used in COMPUTE statements.
o Floating-point data is currently not supported in QuickWin applications.
o When interfacing with Microsoft C programs, the following C graphics
library routines should not be called as this will corrupt the COBOL
environment:
- _outtext
- _outmem
- _floodfill
- any routine that uses floodfill where you specify the
_GFILLINTERIOR option (namely _ellipse and _pie)
o You should not use cross-session animation on a network server since
this can prevent cross-session animation operating on other machines
on the network.
o You cannot have more than ten files in the USING or GIVING phrase of a
MERGE statement.
o In VS COBOL II Releases 1 and 2, and OS/VS COBOL, the "PERFORM stack"
is preserved between calls to a program. Thus, on re-entry to the
program, the PERFORM state will be as it was when the program was last
exited. This means that the code to return to the PERFORM statement
which exists at the end of any piece of code that had been performed
but had not exited when the program itself was exited will remain
active, and may cause unexpected program flow when the program is
re-entered.
This COBOL behaves the same way as VS COBOL II Release 3 and
initializes the PERFORM stack each time a program is called
irrespective of the existence of the VSC2(1), VSC2(2) or OSVS
directives.
o When interfacing with a C program, floating point items may only be
passed as BY REFERENCE parameters, not as BY VALUE or BY CONTENT
parameters.
Restrictions in Related Software
================================
Novell(R) network
-----------------
o When sharing files across a Novell network, it is essential that all
the workstations using the network are configured so that they do not
use local buffering (CACHE DATA BUFFERING). Failure to do this may
result in loss of data.
Novell version 2.0A, and prior to 2.15 are all configured with local
buffering on by default. To disable this buffering, in version 2.0A
you require a patch from Novell. In other versions, insert the line:
CACHE BUFFERS = 0
into the file SHELL.CFG on each workstation.
o Use of the NETBIOS option on a Novell network can cause loss of data
on files shared across the network. (NETBIOS is activated by entering
the NETBIOS command after connecting to the network. To avoid loss of
data, do not use this command.)
o When creating multi-user programs to run on a Novell network, it is
necessary to ensure that all disk mapping assignments are beyond E:.
i.e. do not use assignments A: thru E:.
DOCUMENTATION
On-disk Documentation
=====================
The disks supplied with this product contain additional documentation.
The following on-disk documents should be regarded as additional chapters,
or additions to chapters, in your Operating Guide:
MFCOMPAT.DOC - Compatibility with Micro Focus COBOL
OPTIMIZE.DOC - Creating Optimized Programs
TIMEOUT.DOC - Timeout Support in ACCEPT
Omissions and Errors
====================
This section contains information that is either incorrect or missing from
your Microsoft COBOL manuals. This information is organized according
to the manual in which it appears. You may want to mark the changes in
your manuals.
Language Reference
------------------
Page 5-24. There is an optional phrase within the WITH DUPLICATES phrase
of the ALTERNATE RECORD KEY clause of the SELECT statement for an indexed
file. Its syntax is:
SUPPRESS [WHEN] { ZEROS }
{ SPACES }
{ [ALL] literal }
SUPPRESS, ZEROS, SPACES, and ALL are all keywords.
Page 5-32. Insert a new General Rule (13a) between rules 13 and 14:
"If a file is defined as EXTERNAL and the operating system file name is
assigned by means of a file name (for example, by use of either the
DYNAMIC directive or keyword, using data-name-1 in the SELECT/ASSIGN
statement, or using format 2 of the VALUE OF phrase of an FD), then the
following rules should be followed:
1) An identifier with the same name should be used to contain the
physical file name in all programs which reference the file.
2) Each definition of the identifier which contains the physical file
name should also contain the EXTERNAL attribute.
Any violation of these rules will not be detected at compile time.
However, if any program in the run-unit violates these rules, the results
at run time are unpredictable. That is, they may or may not execute as
expected."
Page 5-83. After General Rule 27, add:
"28. The I-O phrase permits the opening of a file for both input and
output operations (except for file with ORGANIZATION LINE SEQUENTIAL). If
the file does not exist it will be created and used as an empty file for
input unless NOT OPTIONAL was specified in the SELECT statement. An
attempt to WRITE it will cause an error."
Page 5-120. Add a new General Rule 13a:
"The phrases ADVANCING PAGE and END-OF-PAGE must not both be specified in
a single WRITE statement."
Page 10-11, replace the entire second boxed extension with the following:
"If a file is defined as EXTERNAL and the operating system file name is
assigned by means of a file name (for example, by use of either the
DYNAMIC directive or keyword, using data-name-1 in the SELECT/ASSIGN
statement, or using format 2 of the VALUE OF phrase of an FD), then the
following rules should be followed:
1) An identifier with the same name should be used to contain the
physical file name in all programs which reference the file.
2) Each definition of the identifier which contains the physical file
name should also contain the EXTERNAL attribute.
Any violation of these rules will not be detected at compile time.
However, if any program in the run-unit violates these rules, the results
at run time are unpredictable. That is, they may or may not execute as
expected."
Page 15-34, General Rule 4 of the FOREGROUND-COLOR clause. In the first
sentence, change "contains a BACKGROUND-COLOR clause" to "contains a
FOREGROUND-COLOR clause".
Page 16-43, before the description of the ORD-MAX function insert a
description of the ORD-MIN function. Its description is exactly the same
as that of ORD-MAX, but replacing "ORD-MAX" by "ORD-MIN", "maximum" by
"minimum" and "greatest" by "least" everywhere that they occur.
Operating Guide
---------------
General
A number of the executable files are supplied with .PIF files for use
with Microsoft Windows 3.0 or later. Using these .PIF files, the
components of this system can be run as Windows applications, and can
be added to a group for direct execution from Program Manager. From
the DOS command line, these applications can be invoked using the
command
WIN prog.PIF
where prog is the name of the relevant component.
Chapter 9 (Packaging and Shipping Applications):
There is a module RMSTAT.OBJ, which must be linked into your
application if you want to get RM file statuses.
Chapter 19 (SQL):
There is no support for using COMP-1 items with SQL.
Chapter 34 (Converting C Header Files with H2CPY)
There is a utility called SPLIT78. It splits the constants file
produced by H2CPY into several files.
It uses the first set of characters before the first hyphen to name
the files. For example, if OS2.78 contains:
78 ABB-COLOR VALUE H"01".
78 ABB-BACK-COLOR VALUE H"02".
78 ABB-MIX-MODE VALUE H"04".
78 ABB-BACK-MIX-MODE VALUE H"08".
78 ABB-SET VALUE H"10".
78 ABB-SYMBOL VALUE H"20".
78 ABB-REF-POINT VALUE H"40".
78 AF-CHAR VALUE H"01".
78 AF-VIRTUALKEY VALUE H"02".
78 AF-SCANCODE VALUE H"04".
78 AF-SHIFT VALUE H"08".
78 AF-CONTROL VALUE H"10".
78 AF-ALT VALUE H"20".
78 AF-LONEKEY VALUE H"40".
78 AF-SYSCOMMAND VALUE H"0100".
78 AF-HELP VALUE H"0200".
78 HWND-DESKTOP VALUE 1.
78 HWND-OBJECT VALUE 2.
78 HWND-TOP VALUE 3.
78 HWND-BOTTOM VALUE 4.
78 HWND-THREADCAPTURE VALUE 5.
78 HWND-PARENT VALUE 0.
then typing the command, "SPLIT78 OS2.78" will create 3 files:
ABB.78
AF.78
and HWND.78
The contents of OS2.78 will be unaffected. If any of the output files
already exist they will be extended, so make sure your working
directory contains no ".78" files other than the source file before
you enter the command SPLIT78.
Appendix B (Compiler Directives):
The default for the directive CHECKDIV is NOCHECKDIV, not CHECKDIV as
stated in the manuals.
There is an additional directive FLAGCD. Its syntax is [NO] FLAGCD.
When it is set, selecting flagging for the dialect SAA, ANS85, OSVS or
VSC2 release 2 or 3 will not only flag syntax outside that dialect,
but will also flag any directive settings that cause behavior
incompatible with that dialect. The default is NOFLAGCD.
There are two additional directives, HOST-NUMCOMPARE and ZWB which
direct the results of comparing a numeric display field with SPACE,
" " and "0". The directives are provided to ensure compatibility with
mainframe COBOL operation. If NOHOST-NUMCOMPARE or ZWB are specified,
the results of comparing are as now. If HOST-NUMCOMPARE and NOZWB are
specified together, the results are the exact opposite. Hence, if
PIC-9 contains spaces, the results of the comparison with SPACES, " "
and "0" are:
PIC-9 = SPACE PIC-9 = " " PIC-9 = "0"
NOZWB and HOST-NUMCOMPARE TRUE TRUE FALSE
ZWB or NOHOST-NUMCOMPARE FALSE FALSE TRUE
These results are the same independent of the setting of the F
run-time switch.
There is an additional generator directive SIGNCOMPARE. Its syntax is
[NO] SIGNCOMPARE. When it is set in an EBCDIC program, it changes the
way some numeric comparisons are performed so that, for example, an
unsigned data item containing 1234 is equal to a signed data item
containing +1234. This does, however, cause these comparisons to be much
less efficient. The default is NOSIGNCOMPARE. If you are using an
add-on product, note that the behavior in intermediate code is the
same as you get in generated code with SIGNCOMPARE; thus with the
default setting of this directive, the behavior in intermediate code
and generated code is different.
There is an error in the example given for STICKY-LINKAGE. The name
of the data item referenced in the Procedure Division code should be
HOURLY-RATE, not RATE.
There is an additional directive ZEROLENGTHFALSE. Its syntax is
[NO] ZEROLENGTHFALSE. When it is set, all class tests of zero length
group items return false. Otherwise they all return true. The default
is NOZEROLENGTHFALSE. For conformance to ANSI and SAA you must set
ZEROLENGTHFALSE.
Appendices C and D (COBOL System Library Routines)
The following passage is relevant to both these appendices:
The COBOL system library routines generally supply features that
cannot be accessed using COBOL syntax, such as operating system
functions. Under OS/2, many of the features can be accessed directly
by calling the OS/2 API functions. However, this ties the program to
OS/2, with DOS capability available only for those API calls which are
part of the Family API, and only then when the program is bound.
Parameters to the call-by-name routines can be defined anywhere
provided they do not cross a segment boundary. (See the CHIP "16" and
FLAG-CHIP compiler directives.) Parameters to the call-by-number
routines must not be defined in the Linkage Section or Local-Storage
Section of your program, and must be in the first 64K of the Data
Division.
Error Messages
--------------
Page 2-2. The reference to the E switch is only appropriate if you have
the Toolset or Workbench add-on products. Consequently, the effect of the
E switch is not documented in the Operating Guide as stated.
Pocket Guide
------------
Reserved Words List
The words SECONDS is shown as a reserved word. This is incorrect.
==============================<README.DOC file>==============================
Release Notes for the Microsoft(R) FORTRAN Optimizing Compiler, Version 5.00
(C) Copyright Microsoft Corporation, 1989
This file contains information about Version 5.00 of the Microsoft(R) FORTRAN
Optimizing Compiler and libraries for MS-DOS(R) and the Microsoft Operating
System/2 (MS(R) OS/2). It also contains information about the utility
programs supplied with this product.
This file is more up-to-date than the manuals. If the manuals conflict with
this file, you should assume this file is correct.
Microsoft updates language documentation when it is reprinted, so some of the
information in this file may already be in your manuals.
Microsoft documentation uses the term "OS/2" to refer to the OS/2 systems --
Microsoft Operating System/2 (MS OS/2) and IBM(R) OS/2. Similarly, the term
"DOS" refers to both the MS-DOS and IBM Personal Computer DOS operating
systems. The name of a specific operating system is used when it is necessary
to note features that are unique to that system.
====================<Requesting Assistance from Microsoft>===================
(1-206-454-2030)
When reporting problems, the following information will help Microsoft
resolve the problem quickly:
* The compiler version number (from the logo that appears on the screen
when you invoke the compiler with the FL command).
* The version of DOS you are running. Use the DOS "VER" command.
* Your system configuration (the machine, total memory, and total free
memory at compiler execution time). Use the DOS "CHKDSK" command.
* The command line used for compilation.
* All object files/libraries used to link, if necessary. You need not
use standard object files/libraries, but please specify which ones you
did use.
Please have this information ready when you call.
=================================<Contents>==================================
This file has five parts:
Part Note
---- ----
1 Additional information about the SETUP program
2 Changes and additions to "Microsoft FORTRAN Reference"
3 Changes and additions to "Microsoft FORTRAN Advanced Topics"
4 Changes and additions to "Microsoft Editor User's Guide"
5 Changes and additions to "Microsoft CodeView(R) and Utilities
User's Guide"
=========================<Part 1: The SETUP Program>=========================
Disk Space for Additional Libraries
-----------------------------------
Each library for a different combination of memory model and floating-
point arithmetic requires up to 220K of disk space. If you intend to
create more than one library when running SETUP, be sure to take into
account the additional disk space required.
Standard and High-Density Disks
-------------------------------
If you select full installation for OS/2 Protected Mode (as opposed to
creating only protected-mode libraries), SETUP prompts you to insert
high-density disks. See PACKING.LST on the SETUP disk for the specific
disk layout.
File Facility Program
---------------------
SETUP does not support the IBM File Facility utility program (or any
similar programs that search for data files). They should be removed
before running SETUP.
====================<Part 2: Microsoft FORTRAN Reference>====================
$NOTRUNCATE Metacommand
-----------------------
$NOTRUNCATE is now the default. As a result, it is possible to create
variable names, common block names, and function or subroutine names that
are longer than the 26-character space allotted in a .LST file. If these
identifiers do not differ in the first 26 characters, the .LST file shows
them with the same name.
New NINT Functions
------------------
Three NINT intrinsic functions have been added: NINT1, NINT2, and NINT4.
These return integer values of one, two, and four bytes respectively.
The /4I2 Switch and the INT and NINT Functions
----------------------------------------------
The length of the value returned by the INT and NINT intrinsic functions
is determined by the integer storage switch: two bytes if /4I2 is used,
four bytes if /4I4 (the default) is used.
If you want these functions to return a value with a length different
from the length set by the integer storage switch, use INT1, INT2, or
INT4 instead of INT, and use NINT1, NINT2, or NINT4 instead of NINT.
Interaction of AUTOMATIC Variables and the Large Memory Model
-------------------------------------------------------------
The $LARGE metacommand overrides the /4Ya switch or an AUTOMATIC command
without specified variables. All arrays are made FAR or HUGE, rather than
being placed on the stack.
80387 Coprocessor Instructions
------------------------------
The run-time libraries recognize the presence of an 80387 coprocessor. If
you are not using the alternate math package, the library uses the 80387
SIN and COS instructions, rather than deriving sines and cosines from the
FPTAN instruction.
Array Conformity in Functions and Subroutines
---------------------------------------------
A formal array argument in a subroutine or function does not have to have
the same number of dimensions or total size as the actual array argument
passed to it. This permits the procedure to contain a formal array that
is as large as you think you will ever need; the calling program can then
pass any array of the same size or smaller.
Note, however, that if the formal and actual dimensions do not match in
quantity and size, the formal array elements do not point to the same
memory locations as the actual array elements with the same subscripts.
In this case, your program has to calculate the correct subscripts.
Reading and Writing RECORD (structure) Variables
------------------------------------------------
Section 1.4 of the Microsoft FORTRAN Reference, "Records," states that
structure variables may not be written as a whole to files. This is true
only for formatted reads and writes. A whole structure variable may be
written or read in unformatted form.
"Out of Memory" Error Message
-----------------------------
This compiler error does not have an error number. It occurs when the
FL program does not have sufficient memory, as in the following cases:
1. You used wildcard characters to specify the files to be compiled
(for example, FL *.FOR) and there were too many files. The exact
number of files that can be handled depends on the amount of system
memory.
2. The computer did not have enough free memory. This may occur when
other processes are running under Microsoft Windows or OS/2.
Additional Compiler Error Messages
----------------------------------
F2399: <name> : COMMON (or EQUIVALENCE) : automatic variable illegal.
A variable previously declared as AUTOMATIC cannot appear in a COMMON
block or an EQUIVALENCE statement.
F4187: Debugging information exceeds 64K - extra ignored.
There was more debugging information than could fit in the allotted 64K
space. The additional information (which is usually symbols) was
discarded.
Revised Compiler Error Message
------------------------------
The <attribute> in error message F2384 can be "common block" or
"equivalenced," in addition to ALLOCATABLE, EXTERN, FAR, or HUGE.
Linker Path Specification
-------------------------
The /link option does not allow you to specify the linker's path. FL
assumes the linker is in the same directory as the compiler.
Linker EXEPACK Option
---------------------
You can create a packed executable (.EXE) file by specifying the /E
(EXEPACK) linker option.
Linker Error Message Corrections
--------------------------------
error L1006 /STACK : stack size exceeds 65535 bytes
The value given as a parameter to the /STACK option exceeds the maximum.
error L1041 resident-name table overflow
The resident-name table exceeds 65,534 bytes. (An entry in the resident-
name table is made for each exported routine without a designated
ordinal, or with an ordinal if RESIDENTNAME is given. An entry consists
of the name plus three bytes of information. The first entry is the
module name.)
error L1042 nonresident-name table overflow
The nonresident-name table exceeds 65,534 bytes. (An entry in the
nonresident-name table is made for each exported routine which designates
an ordinal and does not say RESIDENTNAME. The entry consists of the name
plus three bytes of information. The first entry is the DESCRIPTION
statement.)
Errors L1041 and L1042 can be handled by reducing the number of exported
routines, or by changing some of them to resident status.
Reserved File Names
-------------------
The following file names are reserved for operating system devices. If
one of these names is specified in the FILE= option of a FORTRAN OPEN
statement, the connection is always to the device, even if a disk file
with the same name already exists.
File Name Device
--------- ------
AUX communications port (COM1)
COM1 communications port
CON keyboard and screen
ERR standard error output (screen)
LINE communications port (COM1)
LPT1 printer
NUL null device
PRN printer (LPT1)
USER keyboard and screen
You can use READ and WRITE statements (as appropriate) to access these
devices, and CLOSE statements to disconnect them, just as you would with
other files. FORTRAN carriage-control characters are recognized for
these devices.
We recommend that you not use the names of these devices for disk files.
FL Switch Default Values
------------------------
If no switches appear in the FL command line, the source code is compiled
with the following defaults:
1. The Large memory model is used
2. The 8086/8088 instruction set is used
3. 8087/287/387 in-line instructions are used for floating-point
calculations
4. Variable, subroutine, or function names are not truncated
5. All integer and single-precision floating-point numbers are four bytes
6. All Microsoft extensions to FORTRAN are enabled
7. FORTRAN 66-style DO statements are disabled
8. Full optimization is performed
9. Debugging (extended run-time error handling) is disabled
Any metacommands in a source code file override these defaults.
Default Stack Size
------------------
The default stack size is 2,048 bytes (hexadecimal #800). This value can
be changed with the /F option when running FL, or the /STACK option when
running LINK.
Compiling Extremely Large Programs
----------------------------------
This release has an additional disk labeled HIGH-CAPACITY COMPILER,
which contains an alternate form of the Compiler Pass 1 named F1L.EXE.
SETUP does not install F1L.EXE; you must copy it from the distribution
disk if you need it.
This compiler pass is used to compile programs that receive error message
"F1901: program too large for memory." The F1L.EXE pass is invoked by
adding the /B1 option to the FL command line, as follows:
FL /B1 <path>\F1L.EXE <sourcefile>.FOR
where <path> is the path (including drive and directory) where F1L.EXE
resides, and <sourcefile> is the name of the FORTRAN source file you are
compiling. Alternatively, you can rename F1L.EXE to F1.EXE to make the
high-capacity version the default.
=================<Part 3: Microsoft FORTRAN Advanced Topics>=================
Page Note
---- ----
191 The plus sign (+) used as a continuation character in front of the
WRITE statement should be removed.
Huge Arrays in Bound Programs under DOS
---------------------------------------
If a huge array is initialized with DATA statements, and the program is
bound, the array will not be properly initialized when the program is run
under DOS or OS/2 real mode. The array is properly initialized when the
program runs under OS/2 protected mode. This is due to a problem with the
OS/2 version 1.1 API.LIB.
There are two workarounds:
1. Initialize the huge array with assignment statements.
2. Instead of binding the program, build a "dual-mode" executable file.
Compile and link your program for real mode. Then insert the following
statement in your definitions file (or create a definitions file with
this statement):
STUB '<file>.EXE'
where <file> is the base name of the real-mode executable file you
created.
Compile and link the program a second time for protected mode,
specifying this definitions file. Be sure to select a different base
name for the .EXE file, so that this protected-mode version will not
overwrite the real-mode version.
The resulting executable file now contains both a real-mode and a
protected-mode program (rather than a single bound program). The
appropriate program is automatically loaded at run time.
Hercules(R) Graphics Support
----------------------------
This release of Microsoft FORTRAN supports the Hercules(R) display
adapter. This is a brief summary of the feature:
1. The Hercules Graphics Card, Graphics Card Plus, InColor(TM) Card, and
100%-compatible cards are supported.
2. Only monochrome text and graphics are supported. The screen resolution
is 720 x 348 pixels. The text dimensions are 80 columns by 25 rows,
with a 9 x 14 character box. The bottom two scan lines of the 25th row
are not visible.
3. You must load the Hercules driver MSHERC.COM before running your
program. Place this driver in one of the directories specified in the
system PATH environment variable, then type MSHERC at the command line
prompt. You can also add this command to your AUTOEXEC.BAT file.
If you have both a Hercules monochrome card and a color video card you
should invoke MSHERC.COM with the /H (/HALF) option. The /H option
limits the driver to a single graphics page, so that the two cards do
not attempt to use the same memory.
If you develop commercial applications that use graphics, you should
include MSHERC.COM with your products. A license is not required.
(MSHERC.COM is identical to QBHERC.COM, the Hercules driver supplied
with Microsoft QuickBASIC 4.0 and Microsoft BASIC Compiler 6.0.)
4. To use a mouse, you must follow the special instructions for Hercules
cards in the Microsoft Mouse Programmer's Reference Guide. (This
product must be ordered separately. It is not supplied with Microsoft
FORTRAN or the Microsoft Mouse package.)
5. In the file FGRAPH.FD, the manifest constant $HERCMONO sets the video
mode to 720 x 348 monochrome for Hercules graphics, and the constant
$HGC has been added in the section "videoconfig adapter values."
Calling the Graphics Libraries
------------------------------
Unlike the FORTRAN intrinsic functions, which the linker recognizes and
automatically searches for in the libraries, the linker has no record of
the names of the graphics library routines. Therefore, the appropriate
graphics library must be explicitly specified in the FL command line or
when linking manually. You do not need to use the /link switch. For
example, the following FL command line compiles the source file FONTS.FOR
and links it with GRAPHICS.LIB:
FL FONTS.FOR GRAPHICS.LIB
Additional Graphics Routines
----------------------------
Two routines have been added to the graphics library.
ScrollTextWindow (lines)
------------------------
The ScrollTextWindow subroutine scrolls text within the defined text
window. Any text or graphics outside the window is unaffected.
ScrollTextWindow takes a single integer argument which equals the number
of lines to be scrolled. Positive values scroll the screen up; negative
values scroll the screen down.
GetTextWindow (r1, c1, r2, c2)
------------------------------
The GetTextWindow subroutine takes four integer arguments, which return
the upper-left-hand and lower-right-hand corner boundaries of the current
text window (as established by SetTextWindow). The first two are the row
and column of the upper-left-hand corner. The second two are the row
and column of the lower-right-hand corner.
Proper Use of Include Files with IMPLICIT NONE
----------------------------------------------
If you use both IMPLICIT NONE and INCLUDE 'FGRAPH.FI', the correct order
is
INCLUDE 'FGRAPH.FI'
IMPLICIT NONE
Here is a sample file with two subroutines and a main program. (The
PROGRAM Main statement is still optional but using it if you also use
IMPLICIT NONE is clearer.) Note that INCLUDE 'FGRAPH.FI' appears once
per file, while INCLUDE 'FGRAPH.FD' appears once in each routine.
INCLUDE 'FGRAPH.FI'
PROGRAM Main
IMPLICIT NONE
INCLUDE 'FGRAPH.FD'
.
.
.
END
SUBROUTINE One
IMPLICIT NONE
INCLUDE 'FGRAPH.FD'
.
.
.
END
SUBROUTINE Two
IMPLICIT NONE
INCLUDE 'FGRAPH.FD'
.
.
.
END
===================<Part 4: Microsoft Editor User's Guide>===================
Version 1.02 (shipped with FORTRAN)
Autostart Mode
--------------
If an "autostart" assignment appears in the TOOLS.INI file, the macro on
the right of the assignment is executed automatically each time the
editor is run. An autostart assignment takes the form
autostart:=macro
where macro is any valid Microsoft Editor function assignment, switch
setting, or macro.
Stream Mode Default
-------------------
The editor now always starts in stream mode, regardless of the mode set
when you exited.
enterboxmode Switch
-------------------
The enterboxmode switch, when set to "yes," starts the editor in box
mode. Its default value is "no."
Setting Editor Modes
--------------------
Some editor modes are set with functions that toggle the mode between two
states, rather than setting the mode directly. For example, the boxstream
function switches between box mode and stream mode; it does not set
either mode directly.
This inability to set the mode directly can cause problems if you want to
use an autostart command to set a specific mode (for example, stream)
every time the editor is run. There is no default status for boxstream;
the current status is retained when you exit. Consequently, an
autostart:=boxstream statement in TOOLS.INI toggles the existing mode,
whether it's box or stream.
The boxstream function returns a TRUE/FALSE flag indicating the
function's status. In the case of boxstream, TRUE is returned if the mode
was set to box, FALSE if it was set to stream. You can test this flag and
use the test results to determine whether boxstream should be called a
second time to reset the mode to the desired value.
For example, suppose you want the editor to always start up in stream
mode. You would enter the following autostart macro in your TOOLS.INI
file:
autostart:=boxstream -> boxstream
The initial call to the boxstream function toggles the existing mode to
either box or stream. The macro conditional -> terminates the macro if
the returned value is FALSE. Therefore, if the initial boxstream command
switched to stream mode, FALSE is returned and the macro terminates. If
the initial boxstream command switched to box mode, TRUE is returned, the
macro does not terminate, and the boxstream function is repeated to
toggle the mode to stream. Regardless of the initial condition, you are
now in stream mode.
Default Values for Help Switches
--------------------------------
There are four switches that set the text colors for Help files:
helpboldcolor, helpitalcolor, helpundcolor, and helpwarncolor. The value
you specify for the high-order digit of these colors is automatically
replaced by the high-order digit of the value for the fgcolor switch.
This replacement assures that one of the Help colors always matches one
of the foreground colors, to promote visual consistency.
===========<Part 5: Microsoft CodeView and Utilities User's Guide>===========
CodeView Support for FORTRAN Record Variables
---------------------------------------------
CodeView 2.3 supports the display of record elements as well as ordinary
variables. For example, if the record variable 'employee' is declared
with the following structure
STRUCTURE /emprec/
INTEGER years
REAL raises(10)
CHARACTER*10 empname(3)
END STRUCTURE
RECORD /emprec/ employee
the elements of 'employee' can be displayed individually. The CodeView
command
?employee.raises(2)
displays the current value of the second array member of the record
element 'raises' of the record variable 'employee'.
ERROUT Utility
--------------
The ERROUT utility is no longer supplied with Microsoft FORTRAN. All
compiler, linker, and utility error messages are now directed to "stdout"
instead of "stderr," so DOS redirection may be used to write error
messages to any file. The header information (product name, version
number, and Microsoft copyright notice) is still sent to "stderr."
EXEPACK Utility
---------------
The EXEPACK utility is no longer supplied with Microsoft FORTRAN. Use the
/E link option to create a packed executable file.
NMAKE Utility
-------------
The MAKE utility has been replaced with the NMAKE utility. NMAKE is not
compatible with existing MAKE files. Please read the section on NMAKE
before running MAKE files.
README.DOC File
Release notes for the Microsoft(R) FORTRAN
Professional Development System, Version 5.1
This document contains release notes for version 5.1 of the Microsoft
FORTRAN Professional Development System for MS-DOS(R) and the Microsoft
Operating System/2 (MS(R) OS/2). The information in this document is
more up-to-date than that in the manuals and the Microsoft Advisor
(online help).
Microsoft improves its languages documentation at the time of reprinting,
so some of the information in this file may already be in your manuals.
=================================< Contents >==================================
This file has 5 parts:
Part Contents
---- --------
1 The SETUP Program
2 FORTRAN Programming with Microsoft Windows
3 Additions to the Microsoft FORTRAN Reference
4 Additions to the Microsoft FORTRAN Environment and Tools
5 Miscellaneous
=============================< The SETUP Program >=============================
Disk Space for Additional Libraries
-----------------------------------
Each library for a different combination of memory model and floating-
point arithmetic requires a minimum of 220K of disk space. If you intend
to create more than one library when running SETUP, be sure to take into
account the additional disk space required.
DECOMP.EXE
----------
The files on the FORTRAN 5.1 disks are compressed. SETUP uses a utility
called DECOMP.EXE to decompress the files before copying them to your hard
disk. Normally you should use SETUP to copy files, and they will be
decompressed automatically.
Occasionally, however, you may want to copy a file from the SETUP disks
directly to your hard disk without using the SETUP program. In that case,
you will have to use the DECOMP.EXE utility to decompress the file. The
syntax for DECOMP.EXE is:
DECOMP filename.ab$ filename.abc
where filename.abc is the decompressed filename.
All compressed files end with $. If the filename extension is three
characters long, the final character will be replaced with a $. If the
extension is two characters, the two characters will be retained and a
$ will be placed in the third position. If the extension has one
character, then that character will be retained and followed by a $. If
there is no extension, then the filename will be given a suffix of a
single $.
For example:
f1.ex$ -> f1.exe
source.do$ -> source.doc
flib.fd$ -> flib.fd
mulmix.c$ -> mulmix.c
makefile.$ -> makefile
================< FORTRAN Programming with Microsoft Windows >================
Requirement for Windows Dynamic-Link Libraries
----------------------------------------------
All FORTRAN 5.1 dynamic-link libraries (DLLs) must explicitly export the
symbol WEP. To do this, the statement
EXPORTS
WEP
should be added to the DLL's module definition file. The WEP routine is
included in the FORTRAN 5.1 startup code. If a DLL already has a user-
defined WEP routine (for example, in a mixed-language DLL with existing C
code), the WEP routine should be renamed _WEP. The FORTRAN 5.1 startup
code will call _WEP, if present, during DLL termination. For additional
information concerning the WEP function, see the Windows 3.0 SDK
documentation.
Close All Files Before Exiting a Windows DLL
--------------------------------------------
When a Windows DLL written in FORTRAN terminates, any information
left in a file output buffer will be lost. This is a result of how DLLs
are terminated in Windows. To insure that all data is written to a
file, explicitly CLOSE any open files in a DLL before the DLL is terminated.
One way of doing this is by adding a function to the DLL code that closes all
files, and calling this function just before the application terminates.
MessageBox Support
-------------------
FORTRAN supports two modes of MessageBox for QuickWin applications,
TASKMODAL and SYSTEMMODAL. TASKMODAL requires that you respond to the
message box before the application will perform any further calculations;
however, all other applications currently running will not be affected.
SYSTEMMODAL requires you to respond before any application may run.
Maximizing Windows
------------------
To maximize the frame window of a QuickWin application, place the
following statement in the WIN.INI file:
[<appname>]
QWINMaximized=1
where <appname> is the base name of your executable file. For example, if
the executable file is called PROGRAM.EXE, the value for <appname> would
be PROGRAM.
Windows DLLs and Subprograms with String Arguments
--------------------------------------------------
Don't pass char*(*) arguments to a subprogram residing in a Windows DLL.
This is because the runtime in the calling DLL or EXE cannot communicate
the length of the string with the runtime in the called DLL.
==============< Additions to the Microsoft FORTRAN Reference >=================
/Gt option
----------
The /Gt, or data threshold, compiler option can remedy a number of link-
time and run-time errors in FORTRAN 5.1. The /Gt option sets a threshold
value that determines where data items are stored in memory. Data items
that are greater in size than the threshold value, and that would normally
be stored in the default data segment, or DGROUP, are moved to a far
segment of data. This frees up more room in DGROUP for variables less
than the threshold value and for other uses, such as the program STACK
and NEAR HEAP.
Using the /Gt switch can often help eliminate the LINK errors:
L1070: 'segment name':Segment exceeds 64K
where segment can be _BSS or _DATA
L2041: Stack Plus Data exceeds 64K
and the run-time error:
F6700: Heap Space Limit Exceeded
In each of these cases, too much data is being stored in DGROUP, and using
the /Gt switch may free up the required space. See Section 7.6 of the
FORTRAN 5.1 Reference for more information.
/Oc Option
----------
When you use the /Oc (default common subexpression optimization), the
compiler examines only short sections of code for common subexpressions.
You can disable default common subexpression optimization with the /Od
option.
Special Device Names
--------------------
The list of special device names in the FORTRAN Reference Manual is
incomplete. The complete list of special device names is:
Device Name Comments
=========== ========
CON stdout, stdin
USER stdout, stdin
COM1 COM1 port
AUX COM1 alias
LINE COM1 alias
LPT1 stdprn
PRN stdprn
LPT2
LPT3
LPT4
ERR stderr
NUL null device
Note that COM2, COM3, and COM4 are not special device names in FORTRAN
5.1.
To access these devices, use an OPEN statement of the form:
OPEN (10, FILE='lpt1')
For connections to LPT2 or COM2, you are also required to specify
STATUS='old'. These two devices are not treated as standard devices
like LPT1 and COM1. Output to these devices is of the same form as to a
file, i.e. the output is buffered and carriage control characters in
column 1 are ignored.
/ND Option
----------
When using the /ND option in a module, you must also set the loadds
attribute on all subprograms called from outside the module.
Restrictions on String Assignment
---------------------------------
The right and left sides of a string assignment may not reference the
same memory location. For example, the following may fail because the
generated code overlays the input as it produces the output:
character *10 string/'0123456789'
string = '#' // string
write (*,*) 'string = ' string
end
IBM VS Extensions in Microsoft FORTRAN
-----------------------------------------
Microsoft FORTRAN supports only the following IBM VS FORTRAN
extensions:
- 31-character names
- Allowing integer arrays to contain FORMAT specifications
- DO statements without specified labels
- DO WHILE statement
- END DO statement
- Equivalence of character and non character items
- Mixing of character and non-character items in COMMON
- NAMELIST
- Specification of common block items in DATA outside block data
subprograms
- Initialization on the declaration line
- IMPLICIT NONE
- INCLUDE
- Length specification within declarations
- Noninteger array subscripts
- Z edit descriptor
- ! comments
- $ and _ in identifiers
$NOTRUNCATE Metacommand
-----------------------
$NOTRUNCATE is now the default. As a result, it is possible to create
variable names, common block names, and function or subroutine names that
are longer than the 26-character space allotted in a .LST file. If these
identifiers do not differ in the first 26 characters, the .LST file shows
them with the same name.
New NINT Functions
------------------
Three NINT intrinsic functions have been added: NINT1, NINT2, and NINT4.
These return integer values of one, two, and four bytes respectively.
The /4I2 Switch and the INT and NINT Functions
----------------------------------------------
The length of the value returned by the INT and NINT intrinsic functions
is determined by the integer storage switch: two bytes if /4I2 is used,
four bytes if /4I4 (the default) is used.
If you want these functions to return a value with a length different
from the length set by the integer storage switch, use INT1, INT2, or
INT4 instead of INT, and use NINT1, NINT2, or NINT4 instead of NINT.
80387 Coprocessor Instructions
------------------------------
The run-time libraries recognize the presence of an 80387 coprocessor. If
you are not using the alternate math package, the library uses the 80387
SIN and COS instructions, rather than deriving sines and cosines from the
FPTAN instruction.
Array Conformity in Functions and Subroutines
---------------------------------------------
A formal array argument in a subroutine or function does not have to have
the same number of dimensions or total size as the actual array argument
passed to it. This permits the procedure to contain a formal array that
is as large as you think you will ever need; the calling program can then
pass any array of the same size or smaller.
Note, however, that if the formal and actual dimensions do not match in
quantity and size, the formal array elements do not point to the same
memory locations as the actual array elements with the same subscripts.
In this case, your program has to calculate the correct subscripts.
"Out of Memory" Error Message
-----------------------------
This compiler error does not have an error number. It occurs when the FL
program does not have sufficient memory, as in the following cases:
1. You used wildcard characters to specify the files to be compiled (for
example, FL *.FOR) and there were too many files. The exact number of
files that can be handled depends on the amount of system memory.
2. The computer did not have enough free memory. This may occur when
other processes are running under Microsoft Windows or OS/2.
Additional Compiler Error Messages
----------------------------------
F2399: <name> : COMMON (or EQUIVALENCE) : automatic variable illegal.
A variable previously declared as AUTOMATIC cannot appear in a COMMON
block or an EQUIVALENCE statement.
F4187: Debugging information exceeds 64K - extra ignored.
There was more debugging information than could fit in the allotted 64K
space. The additional information (which is usually symbols) was
discarded.
Revised Compiler Error Message
------------------------------
The <attribute> in error message F2384 can be "common block" or
"equivalenced," in addition to ALLOCATABLE, EXTERN, FAR, or HUGE.
Linker Path Specification
-------------------------
The /link option does not allow you to specify the linker's path. FL
assumes the linker is in the same directory as the compiler.
FL Switch Default Values
------------------------
If no switches appear in the FL command line, the source code is compiled
with the following defaults:
1. The Large memory model is used
2. The 8086/8088 instruction set is used
3. 8087/287/387 in-line instructions are used for floating-point
calculations
4. Variable, subroutine, or function names are not truncated
5. All integer and single-precision floating-point numbers are four bytes
6. All Microsoft extensions to FORTRAN are enabled
7. FORTRAN 66-style DO statements are disabled
8. Full optimization is performed
9. Debugging (extended run-time error handling) is disabled
Any metacommands in a source code file override these defaults.
Compiling Extremely Large Programs
----------------------------------
This release contains the file F1L.EXE, which is an alternate form of the
Compiler Pass 1 disk if you need it.
This compiler pass is used to compile programs that receive error message
"F1901: program too large for memory." The F1L.EXE pass is invoked by
adding the /B1 option to the FL command line, as follows:
FL /B1 F1L.EXE <sourcefile>.FOR
where <path> is the path (including drive and directory) where F1L.EXE
resides, and <sourcefile> is the name of the FORTRAN source file you are
compiling. Alternatively, you can rename F1L.EXE to F1.EXE to make the
high-capacity version the default.
Compiler Errors and Warnings Generated by $DEBUG and /4Yb
---------------------------------------------------------
In addition to the expanded run-time error handling and testing
that $DEBUG and /4Yb enable, there are a number of compiler errors and
warnings that appear if $DEBUG or /4Yb are used. They are:
Error F2367: INTEGER : range error
Error F2533: lower substring bound exceeds upper bound
Error F2534: upper substring bound exceeds string length
Error F2535: lower substring bound not positive
Error F2536: subscript out of range
Warning F4501: subscript out of range (array argument)
======< Additions to the Microsoft FORTRAN Environment and Tools >======
Displaying FORTRAN Arrays in CodeView
-------------------------------------
CodeView allows you to expand arrays and examine the individual elements
of an array. This feature, however, only works on one-dimensional arrays.
Arrays of two dimensions or more cannot be expanded in CodeView.
Another limitation of CodeView is that it cannot keep track of elements
of HUGE arrays beyond the first 64K, or first segment, of the array. An
attempt to display an array element beyond the first segment will fail to
give the proper value.
TXTONLY.OBJ
-----------
TXTONLY.OBJ is useful for programs that may use _clearscreen, _outtext,
_settextcolor, _settextwindow, and so on, but do not use graphics. If you
have a program that never has to work in or switch into graphics modes and
never changes the palette, linking TXTONLY.OBJ into your DOS .EXE file (in
the .OBJ field) will save about 12K of .EXE size.
================================< Miscellaneous >=============================
APPEND.EXE
----------
Do not use the APPEND.EXE utility (shipped with DOS 4.01 and later
versions) with FORTRAN applications. FORTRAN 5.1 does not set the
APPEND path and the results are unpredictable.
To: Jack Riegel From: Lisa Papineau Here's another new disk. Give this one a try. Like I said in our phone conversation I've made changes to the routines: - RoundAxes \ Rounding errors - ConvertNum / - OneTimeInit - Font Path - All routines which uses allocate/dealloc now check ierr for non zero I eliminated all of the Status Report stuff from the 3 *.out files you sent me. I've included 3 programs which I used to test your data, test.for, test2.for and test3.for on your original disk. Be sure to set stdhdr.for to maxr = 1350 or so before compiling. Give this a try and let me know if any problems persist.
NDP C-386
Version 2.1
Overview
Version 2.1 of the NDP compilers provide all the functionality of
the previous release (v2.0.8), with the addition of increased
compatibility with the new C standard ANSI X3.159-1989 and with
Microsoft C Version 5.0.
NDP Fortran and Pascal users should note that, although there are no
major changes that impact those compilers, there are bug fixes and
other minor enhancements meant to increase the reliability of the
entire line of NDP compilers.
This file also clarifies the use of binary file I/O as it applies to
all the compilers.
Installation
For DOS users, a utility simplifies the installation process. To use
it, insert Disk 1 into drive A, type "A:INSTALL", press <Enter>, and
follow the instructions that appear on the screen.
You can also install the compiler using the directions in Chapter 1
of the User's Manual. It is recommended that you install it in a
new directory (e.g., \NDP21), to facilitate the compilation and
testing of existing source code.
ANSI Compatibility (C only)
This version of the compiler is intended to be compatible with ANSI
X3.159-1989. This compatiblity is achieved with library LIBA.LIB
and changes to header files. There are two incompatible INCLUDE
directories. \INCL contains the standard NDP include files; \INCL_A
contains header files that support the ANSI standard. These
directories contain files which may share a common name but which
have different contents. Copying these files into the same
directory may cause problems.
To compile a program written to the ANSI standard, do the following:
1. Set the INCLUDE environment variable to be equal to the name
of the directory where the ANSI include files are installed.
For example:
set include=c:\ndp21\ansi
2. Use the -ansi switch when compiling. For example:
cc hi.c -ansi
The ANSI compatible keywords supported in this release are:
auto extern sizeof
break float static
case for struct
char goto switch
const if typedef
continue int union
default long unsigned
do register void
double return volatile
else short while
enum signed
The functions and/or macros that provide ANSI compatibility:
Function Header file Function Header file
-------- ----------- -------- -----------
abort (stdlib.h) mbstowcs (stdlib.h)
abs (stdlib.h) mbtowc (stdlib.h)
acos (math.h) memchr (string.h)
asctime (time.h) memcmp (string.h)
asin (math.h) memcpy (string.h)
assert (assert.h) memmove (string.h)
atan (math.h) memset (string.h)
atan2 (math.h) mktime (time.h)
atexit (stdlib.h) modf (math.h)
atof (stdlib.h) perror (stdio.h)
atoi (stdlib.h) pow (math.h)
atol (stdlib.h) printf (stdio.h)
bsearch (stdlib.h) putc (stdio.h)
calloc (stdlib.h) putchar (stdio.h)
ceil (math.h) puts (stdio.h)
clearerr (stdio.h) qsort (stdlib.h)
clock (time.h) raise (signal.h)
cos (math.h) rand (stdlib.h)
cosh (math.h) realloc (stdlib.h)
ctime (time.h) remove (stdio.h)
difftime (time.h) rename (stdio.h)
div (math.h) rewind (stdio.h)
exit (stdlib.h) scanf (stdio.h)
exp (math.h) setbuf (stdio.h)
fabs (math.h) setjmp (setjmp.h)
fclose (stdio.h) setlocale (locale.h)
feof (stdio.h) setvbuf (stdio.h)
ferror (stdio.h) signal (signal.h)
fflush (stdio.h) sin (math.h)
fgetc (stdio.h) sinh (math.h)
fgetpos (stdio.h) sprintf (stdio.h)
fgets (stdio.h) sqrt (math.h)
floor (math.h) srand (stdlib.h)
fmod (math.h) sscanf (stdio.h)
fopen (stdio.h) strcat (string.h)
fprintf (stdio.h) strchr (string.h)
fputc (stdio.h) strcmp (string.h)
fputs (stdio.h) strcoll (string.h)
fread (stdio.h) strcpy (string.h)
free (stdlib.h) strcspn (string.h)
freopen (stdio.h) strerror (string.h)
frexp (math.h) strftime (time.h)
fscanf (stdio.h) strlen (string.h)
fseek (stdio.h) strncat (string.h)
fsetpos (stdio.h) strncmp (string.h)
ftell (stdio.h) strncpy (string.h)
fwrite (stdio.h) strpbrk (string.h)
getc (stdio.h) strrchr (string.h)
getchar (stdio.h) strspn (string.h)
getenv (stdlib.h) strstr (string.h)
gets (stdio.h) strtod (stdlib.h)
gmtime (time.h) strtok (string.h)
isalnum (ctype.h) strtol (stdlib.h)
isalpha (ctype.h) strtoul (stdlib.h)
iscntrl (ctype.h) strxfrm (string.h)
isdigit (ctype.h) system (stdlib.h)
isgraph (ctype.h) tan (math.h)
islower (ctype.h) tanh (math.h)
isprint (ctype.h) time (time.h)
ispunct (ctype.h) tmpfile (stdio.h)
isspace (ctype.h) tmpnam (stdio.h)
isupper (ctype.h) tolower (ctype.h)
isxdigit (ctype.h) toupper (ctype.h)
labs (stdlib.h) ungetc (stdio.h)
ldexp (math.h) va_arg (stdarg.h)
ldiv (stdlib.h) va_end (stdarg.h)
localeconv (locale.h) va_start (stdarg.h)
localtime (time.h) vfprintf (stdio.h,stdarg.h)
log (math.h) vprintf (stdio.h,stdarg.h)
log10 (math.h) vsprintf (stdio.h,stdarg.h)
longjmp (setjmp.h) wcstombs (stdlib.h)
malloc (stdlib.h) wctomb (stdlib.h)
mblen (stdlib.h)
Microsoft C compatibility (C only)
Version 2.1 of the compiler is intended to be compatible with
Microsoft C v5.0. This compatiblity is achieved with a new library
and changes to header files, as follows:
LIBMS LIB Microsoft compatible functions library
MALLOC H new header file for MS compatibility
DOS H altered header file
FLOAT H new header file for MS compatibility
STDLIB H altered header file
STDIO H altered header file
The following is a list of the new functions and macros contained in
the libarary and header files. Items followed by a header file name
are macros; items follows by "n/i" will be implemented in a later
release.
alloca eof _nfree (malloc.h)
bdos fcloseall _nheapchk (malloc.h)
_bios_disk _ffree (malloc.h) _nheapset (malloc.h)
_bios_equiplist fgetchar (stdio.h) _nheapwalk (malloc.h)
_bios_keybrd _fheapchk (malloc.h) _nmalloc (malloc.h)
_bios_memsize _fheapset (malloc.h) _nmsize (malloc.h)
_bios_printer _fheapwalk (malloc.h) onexit (stdlib.h)
_bios_serialcom fieeetomsbin (n/i) putch
_bios_timeofday filelength putenv
cgets flushall rmdir
chdir _fmalloc (malloc.h) rmtmp (n/i)
chmod fmsbintoieee (n/i) _rotl
chsize _fmsize (malloc.h) _rotr
_clear87 (float.h) _fpreset _searchenv
_control87 (float.h) fputchar (stdio.h) segread
cprintf _freect sopen
cputs fstat (n/i) spawnl
cscanf ftime spawnle
dieeetomsbin (n/i) getch spawnlp
dmsbintoieee (n/i) getche spawnlpe
_disable (dos.h) getcwd spawnv
_dos_allocmem halloc (malloc.h) spawnve
_dos_close _heapchk spawnvp
_dos_creat _heapset spawnvpe
_dos_creatnew _heapwalk _splitpath
dosexterr hfree (malloc.h) stackavail
_dos_findfirst int86 stat (n/i)
_dos_findnext int86x _status87
_dos_freemem intdos strcmpi
_dos_getdate intdosx _strdate
_dos_getdiskfree itoa strdup
_dos_getdrive kbhit _strerror
_dos_getfileattr lfind stricmp
_dos_getftime locking strlwr
_dos_gettime _lrotl strnicmp
_dos_keep _lrotr strnset
_dos_open lsearch strrev
_dos_read ltoa strset
_dos_setblock _makepath _strtime
_dos_setdate matherr (n/i) strupr
_dos_setdrive max (stdlib.h) tell
_dos_setfileattr _memavl tempnam
_dos_setftime _memmax tzset
_dos_settime min (stdlib.h) ultoa
_dos_write mkdir umask (n/i)
dup movedata ungetch
dup2 _msize utime
_enable (dos.h)
The following Microsoft C functions are NOT supported:
_dos_getvect execlp execvp
_dos_setvect execlpe execvpe
execl execv _expand
execle execve
Compatibility with Microsoft's graphics was initially available in
NDP C-386 Version 2.0.8. The following functions are supported:
_clearscreen _putimage
_ellipse _rectangle
_floodfill _remapallpalette
_getbkcolor _remappalette
_getch _setactivepage
_getcurrentposition _setbkcolor
_getimage _setcliprgn
_getlogcoord _setcolor
_getphyscoord _setlogorg
_getpixel _setpixel
_gettextcolor _settextcolor
_gettextposition _settextposition
_getvideoconfig _settextwindow
_imagesize _setvideomode
_lineto _setviewport
_moveto _setvisualpage
_outtext _wrapon
The following graphics functions are NOT supported:
_arc _pie
_displaycursor _selectpalette
_getfillmask _setfillmask
Please see Chapter 11 of the NDP C-386 User's Manual for more
information about the graphic functions that are supported.
Binary File I/O (all compilers)
Support for binary file I/O was available in previous releases;
however, there has been some confusion regarding it. The type of
I/O performed depends on the setting of the global variable _pmode.
Setting _pmode to 8000hex will cause files to be opened in binary
mode. The default is _pmode = 4000hex (text mode).
The file I/O type is set when the file is opened. Subsequent
changes to _pmode will have not alter the I/O type of an already
open file.
Bug Fixes
1. Text I/O has been accelerated with a change to UNGETC in run time
library.
2. SCANF now correctly reports EOF.
3. The compiler driver now passes the full path name of .OBJ files
to the linker. Previously, a command such as:
f77 c:\subdirectory\fm001.f
caused the linker to look for fm001.obj in the current directory.
4. The compiler driver now recognizes the SRC (source) environment
variable.
5. The count register used by REP MOV no longer is corrupted by
fixup routine.
6. In the FORTRAN library (module F_CLOS.C), direct access formatted
files are not overwritten when opened with READONLY.
7. In the MATH library LIBM1167 (FORTRAN, C, and Pascal compilers),
the Weitek single precision math function RACOS is now correctly
working with negative values.
Technical Support
If you have any questions, you can contact MicroWay's technical
support staff at:
Voice: (508) 746-7341
FAX: (508) 746-4678
Please refer to your User Number, product name, version number, and
hardware configuration when contacting us.
You should register your purchase by completing and returning the
User Registration card.
Microsoft Macro Assembler Package Version 5.00 Text files on the Macro Assembler disks are tabbed to save disk space. If your printer does not automatically handle tabs during printing, you must use a print program that expands tabs. For example, use the DOS PRINT program to print this and other document or source files on the disk. Note to DOS 3.0 Users Because of an incompatibility between DOS 3.0 and the batch file enhancer on this disk, you cannot run the setup batch files under DOS 3.0. Instead, follow the setup instructions in Chapter 1 of the Programmer's Guide. You can run the CodeView demo on Disk 2. Type DEMO to run DEMO.BAT. ==( MASM.EXE )== New Feature The /LA option has been added to specify a complete listing of all symbols, macros, and false conditionals. It is equivalent to using the .LIST, .LFCOND, .LALL, and .CREF directives throughout the source file. The option overrides any conflicting directives in the source file. Clarification The PTR operator can be used to specify the size of a register indirect operand for a CALL or JMP instruction. However, the size cannot be specified with NEAR or FAR. Use WORD or DWORD instead. (In 80386 32-bit segments, use DWORD or FWORD.) Examples are shown below: ; 8086, 80826, or 80386 16-bit mode jmp WORD PTR [bx] ; Legal near jump call NEAR PTR [bx] ; Illegal near call call DWORD PTR [bx] ; Legal far call jmp FAR PTR [bx] ; Illegal far jump ; 80386 32-bit mode only jmp DWORD PTR [bx] ; Legal near jump call NEAR PTR [bx] ; Illegal near call call FWORD PTR [bx] ; Legal far call jmp FAR PTR [bx] ; Illegal far jump This limitation only applies to register indirect operands. NEAR or FAR can be applied to operands associated with labels. Examples are shown below: jmp NEAR PTR pointer[bx] ; Legal call FAR PTR location ; Legal è Correction When evaluating expressions, MASM does 16-bit arithmetic except when the 80386 processor is enabled. If the .386 or .386P directive has been given, MASM does 32-bit arithmetic. This behavior is consistent with earlier versions of MASM, which always did 16-bit arithmetic. The notes in Sections 9.2.1 and 9.2.1.5 of the Programmer's Guide are incorrect. They should say that MASM always does 16-bit arithmetic. Clarification The description of declaring external symbols in Section 8.2 is incomplete and the example is incorrect. You cannot access the segment of an external far data variable with the @FARDATA equate. Instead you must use the SEG operator as shown below: .FARDATA EXTRN fvar:WORD ; FAR variable in far data .CODE start: ASSUME es:SEG fvar ; Tell the assembler mov ax,SEG fvar ; Tell the processor mov es,ax This is the same limitation described for communal variables in Section 8.4. The reason is that under the DOS segment conventions, multiple far data segments share the same name (FAR_DATA) and have private combine type. Segments with the same name can only be distinguished indirectly using the SEG operator. Clarification The .286P and .386P processor directives enable instructions that are normally used in systems programming. However, some of these instructions do not necessarily require that the processor be in privileged or protected mode. Correction Public absolute symbols must be declared during pass 1. This means that aliases for absolute symbols or other forward references to them will cause errors. For example, the following code generates an error: PUBLIC lines lines EQU rows rows EQU 25 This behavior is different than in previous versions of MASM and contrary to the note in Section 8.1. è Behavior Change Some errors and questionable practices that were ignored by earlier versions are now flagged as errors. As a result, existing source code may produce errors or warnings. The following are examples: - Labels defined only during pass 1 will cause errors if used in expressions. - A CS assume that changes from pass 1 to pass 2 causes an error. - Constants are now checked for type overflow. - Reserved words used as labels produce warnings. - The OFFSET operator used with a constant causes an error. ==( CREF.EXE )== New Feature Cross-reference listing files created with CREF now have an additional symbol. A line number followed by + indicates that a symbol is modified at the given line. For example: TST . . . . . . . . . . . . . . 134# 237 544+ The symbol TST is defined at line 134, used at line 237, and modified at line 544. ==( MASM.EXE and LINK.EXE )== Clarification The description of STACK combine type in Section 5.2.2.3 does not explain how multiple initialized stack segments are combined. The total size of the stack is the total size of all stack definitions. LINK puts initialized data for each defined stack segment at the end of the stack. Data initialized in the last segment linked overrides data initialized in previoussegments. This behavior is usually not relevant, since most programs only define one stack of uninitialized data. Stack data cannot be initialized with simplified segment directives. ==( CodeView Debugger )== New Feature The /R option has been added to enable the CodeView debugger to use the debug registers (DR0, DR1, DR2, and DR3) of the 80386 processor. The option is ignored if you do not have an 80386 processor. The display does not change to indicate that the debug registers are in use, but debugger operations with è tracepoint or trace memory statements (but not with watchpoint statements) will be much faster. Any of the following conditions will prevent the debugger from using debug registers: 1) /E is used. 2) More than four tracepoints are set. 3) A tracepoint watches more than four bytes of memory. 4) A watchpoint is set. Clarification The Pascal expression evaluator described in the CodeView and Utilities manual is not implemented in this version of the CodeView debugger. It will be implemented in the debugger supplied with the next version of Pascal, which will also produce executable files with CodeView symbolic information. Current versions of Pascal do not work with the CodeView debugger. Clarification Section 4.2, "FORTRAN Expressions," of the CodeView and Utilities manual should mention that FORTRAN relational operators do not work with string variables or constants. Warning Some versions of the GENOA EGA short card are incompatible with CodeView when used with a mouse. You can work around this problem by turning off the mouse with /M. ==( LINK.EXE )== New Feature The following new LINK message warns about a practice that is legal in real mode, but illegal in protected mode: warning L4003: intersegment self-relative fixup at <position> In assembly-language, the warning only occurs if the DOSSEG directive or /DOSSEG linker option is used. It indicates a 16-bit jump to an address in another segment. For example, the following code produces the error: _TEXT SEGMENT EXTRN doit:NEAR jmp _TEXT2:doit . . . _TEXT ENDS _TEXT2 SEGMENT è PUBLIC doit doit PROC NEAR . . . doit ENDP _TEXT2 ENDS The warning usually indicates a fatal error in high-level- language programs. It can occur when the /NT option is used to compile a small-model C program. ==( Mixed-Languages Programming Guide )== Clarification Naming convention rules on page 10 are incomplete. If you combine BASIC with other high-level languages, avoid using symbolic names longer than eight characters. Pascal and C will recognize only the first eight characters, whereas BASIC will recognize more than eight characters. Clarification The example programs for BASIC in Chapter 6 will not work with QuickBASIC Versions 2.0 or 3.0. They will work if you rewrite the function as a subprogram, and omit the DECLARE statement. Functions and DECLARE statements will be supported in future versions of Microsoft BASIC compilers. ==( Macro Files )== New Feature Macro files have been added to the Macro Assembler package. The following files are provided: MIXED.INC For defining assembler procedures that can be called from high-level languages MIXED.DOC Documentation for the macros in MIXED.INC. DOS.INC For calling common DOS interrupts BIOS.INC For calling common BIOS interrupts used on IBM and IBM-compatible computers MACRO.DOC Description, syntax, and reference for using the macros in DOS.INC and BIOS.INC.
README.DOC File
Release Notes for the Microsoft(R) Macro Assembler
Professional Development System, Version 6.0
(C) Copyright Microsoft Corporation, 1991
This document contains release notes for version 6.0 of the
Microsoft Macro Assembler Professional Development System for
MS-DOS(R) and the Microsoft Operating System/2 (MS(R) OS/2). The
information in this document and in the Microsoft Advisor (online
help) is more up-to-date than that in the manuals.
Microsoft improves its languages documentation at the time of
reprinting, so some of the information in this file may already be
included in your manuals.
================================< Contents >================================
This file has 7 parts:
Part Contents
---- --------
1 Information for MASM 5.1 programmers
2 Notes on "Installing and Using"
3 Notes on "MASM 6.0 Reference"
4 Notes on "MASM 6.0 Programmer's Guide"
5 Using the DOS-Extended assembler
6 Changes to CMACROS.INC
7 Known assembler bugs
===============< Part 1: Information for MASM 5.1 programmers >=============
"Quick Start" booklet
---------------------
If you have programs that assemble with previous versions of MASM,
this booklet will help you to use MASM 6.0.
=================< Part 2: Notes on "Installing and Using" >================
Installation Program Notes
--------------------------
- Use "SETUP /M" if you are using a monochrome display adapter
as your primary display.
- Under OS/2, if you are already running QuickHelp as a keyboard
monitor, disable it before running SETUP so that it can copy
new versions of QuickHelp and MSHELP.DLL to your hard disk.
==================< Part 3: Notes on "MASM 6.0 Reference" >=================
Page Note
---- ----
16 MASM /D Option
--------------
The /D Option is translated as follows:
/D Creates a Pass 1 listing. Translated to /Fl /Sf.
17 ML /VM Option
-------------
/VM Enables virtual memory under MS-DOS.
33 EXITM Directive
---------------
The EXITM directive takes an optional textitem, not an
expression.
152 XCHG Instruction
----------------
The second example line should be as follows:
xchg dl, dh
==============< Part 4: Notes on "MASM 6.0 Programmer's Guide" >============
Reserved Words
--------------
Add this paragraph to the description of reserved words in Section
1.21, "Reserved Words," and Appendix D, "MASM Reserved Words":
With the /Zm command-line option or OPTION M510, keywords and
instructions that are not available in the current CPU mode (such as
ENTER under .8086) are not treated as keywords. The USE32, FLAT, FAR32,
and NEAR32 segment types and the 80386/486 registers are not keywords
with processor selection directives less than .386.
ALIGN, EVEN, and ORG in Structures and Unions
---------------------------------------------
Add this paragraph to Section 5.2, "Structures and Unions."
The ALIGN, EVEN, and ORG directives can be used during structure
definition to modify how offsets of elements are defined. The EVEN
and ALIGN directives will round the current field offset up to the
specified align value by inserting padding bytes into the skipped
space. The ORG directive may be used to change the current field
offset to a new value, either positive or negative. If the ORG
directive is used in a structure definition, you cannot create an
instance of the structure.
Nested Structure Example
------------------------
Change this line in the first example of Section 5.2.2, "Defining
Structure and Union Variables."
ITYPE UNION
should be:
UNION ITYPE
PUSHCONTEXT/POPCONTEXT Table
----------------------------
The table in Section 9.7.2, "Testing for Argument Type and
Environment" should be as follows:
Option Description
------ -----------
ASSUMES Saves segment register information
LISTING Saves listing and CREF information
CPU Saves current CPU and processor
RADIX Saves current default radix
ALL All of the above
New Anonymous Bitfield Syntax
-----------------------------
Add these paragraphs to Section 16.3.5, "Bit Fields."
H2INC translates anonymous bitfields by padding with a tag
corresponding to the bit position.
For example,
struct s
{
int :8;
int j:8;
}
becomes:
s RECORD j@s:8,
@8@s:8
Basic/MASM Far Externs
----------------------
Add these paragraphs to Section 20.3.3, "The Basic/MASM Interface."
When interfacing with Basic, all EXTERNs that are far must be
declared outside of a code or data segment.
This is incorrect:
.MODEL medium
.CODE
EXTERN StringAddress:FAR
This is correct:
.MODEL medium
EXTERN StringAddress:FAR
.CODE
New Command-line Options
------------------------
Add these paragraphs to Appendix C, "Generating and Reading Assembly
Listings."
With the PAGE directive, the default page length is 0 (infinite), and
the default page width is 0 (infinite). The allowable range of values
is 0 and 60-255 for page width, 0 and 10-255 for page length.
With the /Sf option, a first-pass listing will be generated even if
a fatal error occurs. The symbol table will be appended onto the end
of the listing file unless you give the /Sn option.
The first-pass listing is controlled by the same set of commands that
are used with the final listing.
Additional Error Messages
-------------------------
Add these new or changed error messages to Appendix F, "Error
Messages."
MASM fatal error A1006
invalid command-line option: 'option'
ML did not recognize the given parameter as an option.
This error is generally caused when there is a syntax error on the
command line. It can also be generated by trying to assemble multiple
assembly language files on the MLX driver command line.
MASM fatal error A1017
out of near memory
There was insufficient memory to assemble the program.
One of the following may be a solution:
- If you are using the NMAKE utility, try using NMK or
assembling outside of NMAKE.
- in PWB, try exiting and assembling using ML.
- In OS/2, try increasing the swap space.
- In DOS, remove terminate-and-stay-resident (TSR) software.
- If you have extended memory available, use the MLX.EXE driver.
- Change CONFIG.SYS to specify a lower number of buffers (the
BUFFERS= command) and fewer drives (the LASTDRIVE= command).
- Eliminate unnecessary INCLUDE directives.
MASM fatal error A1019
invocation failed : retry command line with /VM option
ML tried to restart itself with the /VM option but failed.
Enter the ML command line again, but add the /VM virtual-memory
option explicitly.
MLX fatal error A1800
processor not 80286 or above
You can only run MLX.EXE on an 80286 or above processor.
Use ML.EXE if you do not have an 80286 or 80386/486 processor.
MLX fatal error A1801
processor in protected or virtual 8086 mode
The MLX driver cannot run from XMS memory when in protected or
virtual 8086 mode.
MLX fatal error A1802
DPMI, VCPI, or XMS driver not installed
The MLX driver cannot find a compatible driver in memory.
You must have a DPMI, VCPI, or XMS driver, such as HIMEM.SYS,
installed before running MLX.EXE.
MLX fatal error A1803
unexpected initialization error
The MLX driver was unable to initialize the memory manager.
Make sure that you have a compatible DPMI, VCPI, or XMS driver
installed. HIMEM.SYS is a compatible XMS driver and is included in
this package.
MLX fatal error A1804
not enough near memory to load MLX.EXE
There was insufficient memory to start the DOS-extended assembler.
One of the following may be a solution:
- If you are using the NMAKE utility, try using NMK or
assembling outside of NMAKE.
- Remove terminate-and-stay-resident (TSR) software.
- Change CONFIG.SYS to specify a lower number of buffers (the
BUFFERS= command) and fewer drives (the LASTDRIVE= command).
MLX fatal error A1805
unable to run under Windows in standard mode
You can only run MLX.EXE in a Windows DOS box when running real or
386 enhanced mode.
MLX fatal error A1806
insufficient extended memory to load ML.EXE
There is not enough extended memory available to load the assembler
into high memory.
Change your configuration to give more memory to the DOS extender.
This may involve reducing the size of a RAM disk or cache.
MLX fatal error A1807
disk I/O error while loading program
The assembler encountered an error when trying to load ML into high
memory.
One of the following may be a cause:
- The disk has a bad sector.
- The file-access attribute is set to prevent reading.
- The drive is not ready.
MLX fatal error A1808
out of space in GDT
The MLX driver could not add enough entries to the Global
Descriptor Table (GDT).
You may be able to overcome this problem by rebooting your system
and running MLX.EXE before starting other programs.
MLX fatal error A1809
bad environment table
There was an invalid environment table passed to MLX.EXE.
The calling program passed a bad environment table. This error can
be caused by a corrupt version of COMMAND.COM.
MLX fatal error A1810
cannot load ML.EXE
The ML driver could not be found in the current path.
Make sure that the DOS version of ML.EXE was copied from the
distribution disks and is in the current path.
MLX fatal error A1811
ML.EXE not protected-mode compatible
An obsolete version of ML.EXE was found in the current path.
Make sure that the DOS version of ML.EXE was copied from the
distribution disks and is in the current path.
MLX fatal error A1850
unrecoverable fault
The MLX driver called ML.EXE, which generated a system error.
Note the circumstances of the error and notify Microsoft
Corporation by following the instructions in the Microsoft Product
Assistance Request form at the back of one of your manuals.
MASM error A2007
non-benign record redefinition
A RECORD definition conflicted with a previous definition.
One of the following occurred:
- There were different numbers of fields.
- There were different numbers of bits in a field.
- There was a different label.
- There were different initializers.
MASM error A2202
illegal use of segment register
You cannot use segment overrides for the FS or GS segment registers
when generating floating-point emulation instructions with the /FPi
command-line option or OPTION EMULATOR.
MASM error A2203
cannot declare scoped code label as PUBLIC
A code label defined with the "label:" syntax was declared PUBLIC.
Use the "label::" syntax, the LABEL directive, or OPTION NOSCOPED
to eliminate this error.
MASM error A2204
.MSFLOAT directive is obsolete : ignored
The Microsoft Binary Format is no longer supported.
You should convert your code to the IEEE numeric standard, which is
used in the 80x87-series coprocessors.
MASM error A2205
ESC instruction is obsolete : ignored
The ESC (Escape) instruction is no longer supported. All numeric
coprocessor instructions are now supported directly by the assembler.
MASM warning A4005
unknown default prologue argument
An unknown argument was passed to the default prologue.
The default prologue understands only the FORCEFRAME and LOADDS
arguments.
MASM warning A4013
line number information for segment without class 'CODE'
There were instructions in a segment that did not have a class
name that ends with "CODE". The assembler did not generate
CodeView information for these instructions.
CodeView cannot process modules with code in segments with
class names that do not end with "CODE".
MASM warning A4014
instructions and initialized data not supported in AT segments
An instruction or initialized data was found in a segment defined
with the AT attribute. The code or data will not be loaded at run
time.
Data in AT segments must be declared with the ? initializer.
MASM warning A6004
procedure argument or local not referenced
You passed a procedure argument or created a variable with the LOCAL
directive that was not used in the procedure body.
Unnecessary parameters and locals waste code and stack space.
MASM warning A6005
IF condition may be pass-dependent
Under the /Zm command-line option or the OPTION M510 directive,
the value of an IF condition changed between passes.
This error message may indicate that the code is pass-dependent and
must be rewritten.
H2INC fatal error HI1801
incomplete model specification
Only part of a custom memory-model specification was specified on
the command line.
When you specify a custom memory model with the /A command-line
option, you must specify code pointer distance, data pointer distance,
and DS register setup. This error is equivalent to the D2013 error
message for CL.
=================< Part 5: Using the DOS-extended assembler >===============
MLX: The DOS-Extended Assembler
-------------------------------
There is a new DOS-extended driver for ML called MLX. MLX loads
ML.EXE into high memory so that the assembler takes up very little
space in the first 640K of memory.
MLX uses extended memory to run ML in protected mode. If you have
multiple extended memory drivers available, MLX will select the
driver to use in this order:
- DPMI
- VCPI
- XMS
The HIMEM.SYS XMS driver is included in the MASM 6.0 package and
is automatically copied by setup into the real-mode executables
directory as MLX.EXE. To use HIMEM.SYS, put the following line
into your CONFIG.SYS file:
DEVICE = <path>HIMEM.SYS
Where <path> is the path to the location of HIMEM.SYS.
Use MLX only if running ML with the /VM virtual-memory option fails
due to an out of memory error. Because it runs in real mode, ML
with the /VM command-line option can run significantly faster than
MLX.
MLX Requirements
----------------
MLX requires an active DPMI, VCPI or XMS driver and at least 384K
of available extended memory to operate.
Differences between ML and MLX
------------------------------
The MLX DOS-extended driver can only assemble one source file at
a time. You must split multiple-file assemblies into several
invocations of MLX.
If you want to use MLX from the PWB command line, you must manually
change your makefile to reflect the name of the MLX driver. Change
the line:
ASM = ML
to
ASM = MLX
======================< Part 6: Changes to CMACROS.INC >====================
Using CMACROS.INC
-----------------
There is a new, MASM 6.0-compatible version of CMACROS.INC included
with the assembler. If you work with the Windows 3.0 Software
Development Kit, or the C 6.0 or FORTRAN 5.0 startup code, use the
new version of CMACROS.INC.
C and FORTRAN Startup Sources
-----------------------------
To build the C or FORTRAN start-up sources, change the ASMFLAGS line
of MAKEFILE from
ASMFLAGS= -Mx -Dmem_$(MODEL) -I$(INC)
to
ASMFLAGS= -Mx -Dmem_$(MODEL) -I$(INC) -DMS_STARTUP
=====================< Part 7: Known assembler bugs >===================
Ambiguous Radix Characters
--------------------------
The assembler accepts numeric characters outside the range of the
current radix. These characters are given their appropriate
values but are handled under the current radix. For example,
.RADIX 10
mov ax, 1F
mov bx, 1Fh
loads ax with 25 (10 from the tens digit and 15 from the ones).
The bx register is loaded properly.
ATMEL-ABEL
ATV5000
File
Source Description Comments
|---------|------------------------------------------------|---------------|
USEV5K Using V5000 features in ABEL 4.x syntax Please Read.
V5KAPP Example using state machine, Boolean equations
ATV2500
File
Source Description Comments
|---------|------------------------------------------------|---------------|
ABELNODE List of Nodes for the Buried Registers Please Read.
T45 Emulates 7445 - BCD to Decimal Decoder Truth Table
T47 Emulates 7447 - BCD to 7 Segment Decoder Truth Table
T56 Emulates 7456 - Synchronous/Asynchronous Boolean Eqns,
Frequency Divider State Diagram
T83 Emulates 7483 - 4-bit Adder with Fast Carry Boolean Eqns
T85 Emulates 7485 - 4-bit Magnitude Comparator Boolean Eqns
T138 Emulates 74138 - 3 to 8 Decoder Truth Table
T148 Emulates 74148 - 8 to 3 Priority Encoder Truth Table
T166 Emulates 74166 - Serial/Parallel-Load 8 Bit Boolean Eqns
Shift Registers (Buried Reg)
T167 Emulates 74167 - Synchronous Decade Rate Boolean Eqns,
Multiplier (Buried Registers) State Diagram
T180 Emulates 74180 - 8-bit Even/Odd Parity Generator Boolean Eqns
AT160 Emulates 74160 - Synchronous Decade Counter Macro
AT161 Emulates 74161 - Synchronous Binary Counter Macro
EXMACRO Example using macros @include
OSC Build an Oscillator using a ATV2500 App. Note
ATV750
File
Source Description Comments
|---------|------------------------------------------------|---------------|
ABELNODE List of Nodes for the Buried Registers Please Read
FEEDBACK Using the Correct Feedback Paths Boolean Eqns,
Observing Register State when Output is High Z State Diagram
IOEX3 Writing Test Vectors for I/O pins I/O Pins
EX375 Asychrounous 20-bit Counter Asych Clocking
DUCK When to Use Special Constants .D.,.U.,.C.,.K. Test Vectors
T885 Emulates 74885 - 8-bit Magnitude Comparator Boolean Eqns
GCOUNT 8-bit Pseudo Gray Code Counter(include decoding) Boolean Eqns
Release Notes for CUPL - Universal Compiler for Programmable Logic
CUPL Release
Version Date NOTES
-----------------------------------------------------------------------
1.01a 9/10/83 First production release of CUPL with universal
design support for 29 devices.
1.01b 10/31/83 Fixes for various devices including M16C1 and
N16C1. Fix in CSIM to simulate 16 product
terms in PAL16C1. Distribute on double-sided
diskettes (MS/PC-DOS).
2.00a 11/19/84 First release of newly structured CUPL, using
device database with support for 76 devices.
Added support for PAL XOR devices, IFL JK and RS
devices. Improved simulator handling of
asynchronous feedback. Many new syntax features
including outputs grouped as fields, numbers,
and function table input. Added full logic
minimization.
2.01a 12/21/84 Restructuring of distribution diskettes for
proper installation (MS/PC-DOS). CSIM properly
removes existing vectors in JEDEC file before
appending new test vectors. CSIM properly renames
JEDEC file when $exit directive used. CSIM
properly simulates programmable polarity before
the output register.
Added support for: AMD AmPAL18P8
MMI PAL6L16
MMI PAL8L14
Device changes:
---------------
p16rp4 rev 11 Fix for simulation of
p16rp6 rev 11 programmable polarity before
p16rp8 rev 11 output register.
p32r16 rev 06 MMI changed JEDEC fuse spec.
p64r32 rev 06 MMI changed JEDEC fuse spec.
f103 rev 07 Fixed polarity of output pins.
f155 rev 08 Fixed HL plot for register
f157 rev 07 RESET/PRESET & Complement
f159 rev 12 array. Fixed polarity of
non-registered output pins.
f162 rev 04 Fixed polarity of output pins.
f163 rev 04 Fixed polarity of output pins.
p20rs4 rev 16 Fix for simulation of
p20rs8 rev 14 programmable polarity before
p20rs10 rev 15 output register.
2.02a 1/17/85 Incorporates faster, more memory efficient
algorithm for DeMorgan property.
Added support for: MMI PAL20RA10
MMI PAL20P8E
Device changes:
---------------
p16rp4 rev 11 Fix for simulation of
p16rp6 rev 11 programmable polarity before
output register.
2.02b 3/20/85 Fixes for various devices. Clarify certain error
messages. Made -g flag work. Added out of memory
error message for logic minimizer. Improved CSIM
error reporting.
Device changes:
---------------
ep300 rev 15 Added warnings for SP/AR terms.
Fixed polarity for pin 1.
p20ra10 rev 08 Fixed simulation error on pin 20.
p20rs4 rev 17 Fixed number of fuses in JEDEC.
p20s10 rev 14 Fixed number of fuses in JEDEC.
p32r16 rev 09 No functional change.
p64r32 rev 12 Allow pin 44 to be input.
Allow combinatorial output mode.
f155 rev 10 Fixed HL plot for complement
f157 rev 09 array.
f159 rev 15 Fixed HL plot for complement
array and output enable terms.
Fixed default for pin 6 to be
active when used as an output.
f105 rev 15 Fixed HL plot for complement
f167 rev 15 array. Allow AP extension
on internal node flip-flops.
2.02c 5/30/85 Fixed ASCII-HEX generation for PROMs.
Device changes:
---------------
p20p8e rev 02 Fixed polarity for output pins.
2.10a 3/11/86 Added state machine syntax for all registered
devices. Added user defined functions and new truth
table format. Improved logic minimization and
DeMorgan algorithms. Time/date stamp on all output
files. Print chip diagram in documentation file.
Fixed fuse plot generation for FPLA (Signetics)
devices when product terms merged. Use up to 640K
on MS/PC-DOS version.
Added support for: Altera EP600 (limited)
Lattice GAL16V8, GAL20V8
MMI PAL16RA8
National PL1016P8, PL10016P8
National PL1016RP8, PL10016RP8
Panatech EPL10P8, EPL12P6
Ricoh EPL14P2, EPL16P8
VTI EPL16RP4, RP6, RP8
Signetics 82S151, 82S168
Signetics 82S173, 82S179
T.I. PLR19L8, PLR19R4
T.I. PLR19R6, PLR19R8
T.I. FPGA529
Device changes:
---------------
f157 rev 13 Fixed HL plot for bank A reset and
preset terms.
f162 rev 07 Signetics changed JEDEC fuse spec.
f163 rev 07 Signetics changed JEDEC fuse spec.
p14p4 rev 07 Fixed error in fuse map.
p20rs10 rev 19 Fixed output enable for pin 14.
p1020p8 rev 06 Created from p20p8e when MMI
changed pinout.
2.11a 7/15/86 Allows use of floppy diskettes for MS-DOS systems.
CUPL looks at search path for each module. Allows
larger state machine designs. Fixes in expression
evaluation and logic minimization. Added multiple
output minimization for FPLA (Signetics) devices.
Added support for latched input devices and
toggle flip-flops.
Added support for: AMD AmPAL23S8
T.I. PLT19L8, PLT19R4
T.I. PLT19R6, PLT19R8
T.I. TIBPAL20SP8
T.I. TIBPAL20RSP4
T.I. TIBPAL20RSP6
T.I. TIBPAL20RSP8
T.I. TIBPAL22VP10
Device changes:
---------------
ep300 rev 20 Added new macrocells for schematic
f105 rev 21 capture.
f155 rev 14
f157 rev 14
f159 rev 19
f167 rev 22
f168 rev 04
f179 rev 02
p16ra8 rev 02
p20ra10 rev 13
p19r4r rev 06
p19r6r rev 06
p19r8r rev 06
p19l8r rev 07 Fixed error in fuse plot. Fixed
input pin 2 error.
ep600 rev 05 Fixed error in fuse map. Added
support for T flip-flops and
asynchronous register clocking.
g20v8ma rev 02 Fixed error in fuse map for pin 15.
2.11b 11/14/86 Fixes for indexed variables in state machine
syntax and CSIM ORDER list. Added the QV and P
fields to the JEDEC file when test vectors are
created. Added an alternate packages device
library, SMD.DL, which has leadless chip carrier
pinouts for 24 pin DIPs in 28 pin LCCs.
Added support for: AMD AmPAL10H20EV8
AMD AmPAL10H20EG8
AMD AmPAL22P10
AMD AmPAL22RP4
AMD AmPAL22RP6
AMD AmPAL22RP8
AMD AmPAL22RP10
MMI PAL10H20G8
T.I. TIBPAL16SP8
T.I. TIBPAL16RSP4
T.I. TIBPAL16RSP6
T.I. TIBPAL16RSP8
Device changes:
---------------
p16ra8 rev 03 Fixed error in fuse map.
ep600 rev 10 Fixed asynchronous reset defaults
and simulation
WELCOME to the ICT PEEL Development Software!
*************************** Table of Contents ********************************
Section 1 - System Requirements and software initialization
Section 2 - About Version 3.60 ...
Section 3 - About Version 3.55 to 3.58...
Section 4 - About Version 3.50 ...
Section 5 - About Version 3.40 ...
Section 6 - About Version 3.30 ...
Section 7 - About Version 3.20 ...
Section 8 - About Version 3.10 ...
Section 9 - About Version 3.00 ...
All users should read sections 1 and 2.
***************************** Introduction ***********************************
This document briefly describes the system requirement, software
initialization, and additions or changes of the previous software versions.
This diskette contains software which can be executed with or without the
programmer hardware for the PEEL Development System (PDS-1). The software will
automatically initialize to PDS-1 if the programmer hardware is present.
For more information, refer to your users manual, select the HELP command from
the main screen after the software has been executed, or read the following:
****************************** Section 1 *************************************
SYSTEM REQUIREMENTS
- IBM PC,XT,AT or compatible
- Minimum 384K RAM memory
- Monochrome or Color Display
- One high density floppy disk drive and a hard disk
- DOS version 2.1 or greater
Note: PC address location = 259 HEX
PC data location = 258 HEX
HARD DISK INSTALLATION:
1. Turn computer on.
2. Boot-up DOS 2.1 or greater.
3. Make sure you have a back-up copy of the original diskettes.
4. Insert the PDS-1 diskette into drive A.
5. At the drive A cursor (A>), type "INSTALHD" followed by the ENTER key.
This will create a directory named PEEL and copy all files from the
PDS-1 diskette into that directory, and then start the software.
6. Answer the system set-up questions for system type, color, and sound.
7. The PEEL software is now ready for operation.
Subsequent use after software is installed:
1. Turn computer on.
2. Boot-up DOS 2.1 or greater.
3. Change to the PEEL directory by typing "CD\PEEL".
4. Type "PEEL" followed by the ENTER key (press the ENTER key twice to bypass
the messages).
5. The PEEL software is now ready for operation.
****************************** Section 2 *************************************
About Version 3.60 ... (Changes and Additions to V3.58)
1. Programmer - Change 18CV8 verify vpp voltage to 13 volts to make it work
for different speed of 18cv8.
****************************** Section 3 *************************************
About Version 3.55 to 3.58 ... (Changes and Additions to V3.50)
1. Programmer - Add PEEL22CV10A and PEEL22CV10A+
2. Translator - Add 18V8 to 18CV8.
3. Translator - Add SIG 16SV8 to 18CV8.
4. Translator - Add PAL 20C1 to 173.
5. Translator - Add FPLA473 to PEEL273, used a pin 13 substituion.
6. Translator - Add 18U8 to 18CV8.
7. Translator - Fixed bug for 16V8 to 18CV8.
8. Programmer - Added auto-handler.
9. Simulator - Fixed bug fault grad.
10. Simulator - Fixed bug for 22CV10.
****************************** Section 4 *************************************
About Version 3.50 ... (Changes and Additions to V3.40)
1. Programmer - Add initial calibration.
2. Programmer - Change PC address and Data to variable.
3. Translator - Add PAL20ARP4, 20ARP6, 20ARP8 and 20ARP10 to PEEL20CG10,
22CV10 and 22CV10Z.
4. Translator - Add PAL20RP4, 20RP6 and 20RP8 to PEEL20CG10, 22CV10 and
22CV10Z.
5. APEEL - Fixed simulation bugs for Feed_Or configuration.
6. Loader - Deleted Continuity-Test for CYP22V10.
7. APEEL - Fixed 22CV10Z and 20CG10 feedback polarity bug.
Note: Please refer to the HELP file (PEEL.HLP) for description of features not
discussed in the manual. The PEEL.HLP file can be accessed from PEEL.EXE
program.
****************************** Section 5 *************************************
About Version 3.40 ... (Changes and Additions to V3.30)
1. Translator - Add zero-power mode and signature selection mode.
2. Translator - Fixed PEEL173 and PEEL273 bug.
3. Translator - Add PAL22AP10-to-PEEL273 and PAL22AP10-to-PEEL20CG10.
4. APEEL and Translator - Optimized PEEL22CV10Z JEDEC file.
5. Loader - Deleted Continuity-Test for GAL16V8.
6. APEEL - Fixed Macrocell Configuration bug ("LATCH" is not a reserved word).
****************************** Section 6 *************************************
About Version 3.30 ... (Changes and Additions to V3.20)
1. Translator - Fixed EP320-to-PEEL18CV8 bug.
2. Translator - Fixed GAL16V8-to-PEEL18CV8 bug.
****************************** Section 7 *************************************
About Version 3.20 ... (Changes and Additions to V3.10)
For PDS-1 only:
1. GENERAL - Decreased programming/verification time.
****************************** Section 8 *************************************
About Version 3.10 ... (Changes and Additions to V3.00)
1. GENERAL - Increased execution speed (about 30 to 50% faster than V3.00),
especially for users with 80x86 (e.g. 80286, 80386) computers.
2. GENERAL - Add DOS command shell.
3. GENERAL - add faster sort routine for file selection menu.
4. APEEL - add "AUTO_SECURE" mode. JEDEC file created by APEEL has the
security bit mode set ("G1").
****************************** Section 9 *************************************
About Version 3.00 ... (Changes and Additions to V2.40)
1. GENERAL - Increase RAM memory requirement from 256 to 384 K-bytes.
Notes: If you have only 256 K-bytes of RAM memory, most functions
in the PEEL software will operate properly. The three
functions not operating are the PLD (e.g. PAL, EPLD, GAL
and FPLA) loaders, translators, and editor. However, you
can run PEELXLT.EXE (translator) and PEELEDIT.COM (editor)
from MSDOS.
2. GENERAL - Add COM transmit/receive (IBM or 100% IBM compatible PC only).
3. GENERAL - Add video terminal emulation mode (IBM or 100% IBM compatible
PC only).
4. GENERAL - Add file utilities for create and remove directory, and erase
and rename file.
5. TRANSLATOR - Add PAL 24-pin (small and medium series) to PEEL20CG10.
6. TRANSLATOR - Add GAL20V8 to PEEL20CG10.
7. TRANSLATOR - Translator can be executed from MSDOS. Type "PEELXLT" will
display the command format.
8. APEEL - Fix syntax error checking bugs.
For PDS-1 only:
9. LOADER - Add PAL 24-pin (small and medium series).
10. LOADER - Add PALC22V10.
11. LOADER - Loaders for all PLDs (excluding PEEL devices) are modularized into
a separate program called "PLDLOAD.EXE". YOU MUST NOT EXECUTE THIS
PROGRAM FROM MSDOS. The PLDLOAD.EXE must interface with the
PEEL.EXE program.
******** Welcome to the PLACE Advance Development Software from ICT ********
This README.DOC file provides the following information regarding the PLACE
software.
1. System Requirements.
2. Software Installation to Hard Disk.
IMPORTANT! The PLACE installation procedure has been changed since the
PLACE manual was printed. Please use the procedure specified in this
file.
3. PLACE Glossary.
4. The New Features of Version 2.20.
*** System Requirements ***
- IBM PC compatible computers,includeing the XT, AT, 386, 486 or compatible.
- Minimum 560K RAM memory for all the designs.
- EGA, VGA , SVGA or Hercules Graphics
- At least 4.0 MB of hard disk free space
- Microsoft mouse or compatible with driver
- One communication port (serial port) for PDS-2 programmer, if you are using
PDS-2 programmer.
- DOS version 3.0 or higher
- (Optional) Expanded Memory with LIM Specification Version 3.2 or higher.
*** Software Installation to Hard Disk ***
1. Turn the computer on.
2. Boot-up DOS 3.0 or higher.
3. Install you mouse driver. PLACE will not boot-up without it.
4. Insert the PLACE Disk into drive A.
5. At the prompt "A>", type "INSTALL" followed by the ENTER key. This
copies all files from the diskettes into the user-specified directory
(directory defaults to "C:\ICTPLACE"). The installation program
automatically decompresses all the PLACE files using the LHA program
by H. Yoshizaki (Copyright reserved).
6. After installation is completed, type "INIT" followed by the ENTER
key.
Notes:
a. For re-initialization, type "INIT" followed by the ENTER key.
b. (Optional) Assuming the target hard disk drive is C, include the
directory "C:\ICTPLACE" into your DOS Path and insert the statement
"SET ICTPLACE=C:\ICTPLACE" into your AUTOEXEC.BAT file.
This allows you to call PLACE from any directory.
*** PLACE Glossary ***
Below lists the common terms that the PLACE manual uses.
Click - press left button of mouse and release immediately.
This mouse action is mostly used to select a feature or mode. It is
sometimes used to emulate the ENTER key (for instance, after
entering a label in the "Label" mode).
Click-R - press right button of mouse and release immediately.
Usually used to abort or quit a function or mode. A special function
for this mouse action is to toggle between two modes, such as between
"Edit Arch" and "Edit Eqn" modes in the Design operation, and
between normal and "Edit" mode in the Simulate operation.
Click-LH - press left button and hold it down while moving the mouse cursor
to a desired location. Release mouse button when destination is
reached. Used in the scrolling from a LCC (or IOC) to another LCC,
or in selecting a "Zoom" window in the Simulate operation.
Click-MH - press middle button and hold it down to enter a specific mode.
Release mouse button to exit the mode.
LCC - Logic Control Cell (PEEL Arrays only).
IOC - I/O Cell.
INC - Input Cell (PA7140 and PA7128 devices only)
GBC - Global Cell (PEEL Arrays only).
RT - (Register Type) Dynamic Register Control (PEEL Arrays only).
Reset - Global Reset for the LCC flip-flop (PEEL Arrays only).
Preset - Global Preset for the LCC flip-flop (PEEL Arrays only).
PCLKA,
PCLKB,
PCLKC - Global product term clocks for the IOC flip-flop (PEEL Arrays only).
*** The New Features of Version 2.20. ***
1. Support for the PA7140 and PA7128 PEEL Arrays.
2. Interface to PEEL Development System PDS-2 programmer which support for
full ICT PEEL and PEEL Array products.
3. The Vpp, program/verify, voltage changed for the ICT A parts.
4. Updated Counter macro function.
a) Must be specified in the DEFINE section.
b) Syntax is:
COUNTERF(load, updown, cBits, type, iBits);
load: 0 = No load function
Pin_Name, Node_Name (Cell_Names),
Macro_defined_label = load control
updown: 0 = Up Ccount
1 = Down Count
Pin_Name, Node_Name (Cell_Names),
Macro_defined_label = updown control
(TRUE logic for Up Count)
cBits: A Macro-Set-Variable (page 5-22) with at least 2 elements.
This set contains the counting bits which include Pin_Names
or Node_Names (Cell_Names).
type: D = D-type counter
T = T-type counter
(The pins or cells assigned to the macro label in the "cBits"
parameter must have the same register type)
iBits: 0 = Non-loadable counter
Macro-Set-Variable = Data bits for loading the counter. This
set must have the same number of elements as the cBits. The
elements include Pin_Names or Node_Names (Cell_Names).
If load=0, then iBits=0.
c) An Example is:
DEFINE
UPDN_BITS = [Q4 Q3 Q2 Q1 Q0]; "Counting Bits. Q[4-0] can be pin or
"cell labels.
LOAD_EN = A & B; "Load Control Equation. Loads when
"A=TRUE and B=TRUE.
LOAD_BITS = [L4 L3 L2 L1 L0] "Load Inputs, either pin or cell
"labels.
UPDN_CON = C & !D; "Updown Control.
"If C=TRUE, D=FALSE, it is Up Counter
"Else, it is Down Counter.
COUNTERF(LOAD_EN, UPDN_CON, UPDN_BITS, T, LOAD_BITS);
.
.
.
EQUATIONS
5. Updated the PEELXLT.exe which translates a PLD File to a PEEL Device.
From DOS prompt,
Type "PEELXLT source_filename source_PLD target_PEEL_device"
Example: PEELXLT R8CNTR 16R8 18CV8
It is assumed to have a ".JED" extension for the soure file. In this
case it creates the PEEL device JEDEC file :R8CNTR.JEX".
Installation Instructions for 286|DOS-Extender Lite (TM) Phar Lap Software, Inc. 60 Aberdeen Ave. Voice: +1 617 661 1510 Cambridge, MA 02138 FAX: +1 617 876 2972 Welcome, and thank you for using Phar Lap's 286|DOS-Extender Lite. Lite is a special, limited version of Phar Lap's award-winning 286|DOS-Extender SDK designed exclusively for users of Borland C++ 3.1. If you enjoy using 286|DOS-Extender Lite, we hope that you will consider purchasing our full-featured SDK. These notes explain how to install Lite on your hard disk, provide a simple description of building one of the example programs, and describe other documentation files on this diskette. A complete description of how to compile for protected mode can be found in LITE286.DOC, described below. ******************************************************************************* Other Documentation ******************************************************************************* There are several other files which contain valuable information about 286|DOS-Extender Lite. These files are located in the distribution diskette in a directory called A:\DOC, and are copied to \LITE286\DOC during installation. LITE286.DOC contains "Borland C++ User's Guide to 286|DOS-Extender Lite". It explains how to compile and run DOS-extended programs after installing Lite. You may want to print this file and keep it handy as a reference while you are writing programs for Lite. LITEINFO is a short description of 286|DOS-Extender Lite, and contains an overview of the major differences between Lite and our full-featured SDK. It is identical to the text that is displayed if you run LITE286.EXE with no arguments or options. INTL.DLR contains a list of overseas dealers. If you are outside the USA, please feel free to contact either Phar Lap or one of these dealers for technical support or to order your 286|DOS-Extender SDK. ORDER.FRM is a copy of the coupon included in the 286|DOS-Extender Lite package. ******************************************************************************* Installation ******************************************************************************* Before installing 286|DOS-Extender Lite, you must have previously installed Borland C++ 3.1 on your hard drive. Please note that to use Lite, you need not install the entire 3.1 release; only the command-line compiler and the DOS large-model libraries are required. If you wish to write protected-mode graphics programs using the Borland Graphics Interface (BGI), then you must also install that component. Lite does not require, and will not use, any of the files installed by the "Windows Options..." menu. For our examples, we assume you have installed Borland C++ in C:\BORLANDC. If you have installed it elsewhere, modify these instructions accordingly. Installing 286|DOS-Extender Lite is a three-step process. First, you must copy all of the files from the distribution diskette to your hard drive. Second, you must build a special, protected-mode version of the C run-time library. Third, you may optionally build a special version of the graphics library. After you have completed each of these steps, you are ready to start building protected mode applications! Step 1: Copy Files From Diskette -------------------------------- To copy the files from the diskette, insert the distribution diskette and type "A:INSTALL". The installation program will then ask you a series of questions. You may either install Lite in the suggested directory or specify your own location. These instructions assume that you install Lite in C:\LITE286. If you have 286|DOS-Extender SDK, you should *not* install Lite in the same directory as the SDK. If you prefer not to use our interactive installation program A:INSTALL.EXE, you may copy the files with xcopy: C:\> xcopy a:\ c:\lite286\. /s Step 2: Build a Run-Time Library -------------------------------- Instead of using the large-model real-mode CL.LIB that comes with Borland C++, 286|DOS-Extender Lite requires a protected-mode library called BCL286.LIB. BCL286.LIB is based on CL.LIB but contains some small but important modifications for protected mode. The batch program \LITE286\BC3\LIB\MKLIB.BAT creates BCL286.LIB from a copy of CL.LIB. The new library is created in \LITE286\BC3\LIB. MKLIB.BAT does not in any way modify files in the \BORLANDC directory tree. MKLIB.BAT should be executed while \LITE286\BC3\LIB is the current directory: C:\> cd \lite286\bc3\lib C:\LITE286\BC3\LIB> mklib l \borlandc\lib MKLIB.BAT invokes LIB.EXE from Borland C++ 3.1 -- if MKLIB.BAT fails, check that you installed Borland C++ correctly, and that \BORLANDC\BIN is in your PATH environment variable. Step 3: Build a Graphics Library -------------------------------- Protected-Mode Lite programs can call the Borland Graphics Interface (BGI). Just as a special version of the C library must be built, you must build a special version of the graphics library. The batch program which does this is \LITE286\BC3\LIB\MKGRAPH.BAT: C:\LITE286\BC3\LIB> mkgraph \borlandc\lib ******************************************************************************* Building Sample Executables ******************************************************************************* To simplify building protected-mode executables, we provide \LITE286\BIN\BCC286.EXE. BCC286 acts as a "front-end" to BCC.EXE and TLINK.EXE, providing them with all the proper options and arguments. For complete documentation on BCC286.EXE, consult the file LITE286.DOC. BCC286.EXE uses certain environment variables to control its operations. These variables are not strictly required, but we will use them in this demonstration. The LIB environment variable contains a list of directories in which to search for libraries and startup object modules. This list must include Lite's library directory in addition to Borland C++'s. The PATH environment variable must include both Lite's executable directory and Borland C++'s. C:\LITE286\EXAMPLES> set LIB=\lite286\bc3\lib;\borlandc\lib C:\LITE286\EXAMPLES> set PATH=\dos;\lite286\bin;\borlandc\bin C:\LITE286\EXAMPLES> bcc286 hello.c C:\LITE286\EXAMPLES> hello.exe Hello from protected mode! When compiling a program that uses BGI for real mode you link against GRAPHICS.LIB. For protected mode, the library to use is GRAPH286.LIB. Assuming the environment variables are still set as above, then building a protected-mode BGIDEMO.EXE is as simple as: C:\LITE286\EXAMPLES> bcc286 bgidemo.c graph286.lib LITE286.DOC provides complete details of the build process; it also describes LITE286.EXE and GORUN286.EXE, the programs which actually load and execute your program in protected mode. ******************************************************************************* What Next? ******************************************************************************* You have now completely installed 286|DOS-Extender Lite, and are ready to build multi-megabyte programs. Please read the file LITE286.DOC for more information on protected-mode programming. We sincerely hope that you find 286|DOS-Extender Lite both useful and easy to use. If Lite makes you more productive, then consider what our full-featured 286|DOS-Extender SDK can do for you! Ordering information is contained in the files LITEINFO, ORDER.FRM, and INTL.DLR.
Copyright (C) 1991 MetaWare Incorporated. All Rights Reserved.
MetaWare Debugger Version 1.13
for Extended DOS 80386/486
April 1991
Table of Contents
-----------------
1. Contents of the Distribution
2. Configuring the Debugger
3. Miscellaneous
4. PC-NFS Notes
5. AutoCAD Development System
6. Known Problems
7. Other Problems
1. Contents of the Distribution
-------------------------------
The following files on your mdb distribution disk make up the actual
debugger, mdb examples, and on-line documentation:
readme.mdb - This file.
bin\cfigmdb.exe - Debugger user-interface configuration utility.
Operates on the color.db file.
bin\color.db - Binary file used by the debugger to specify user-
interface colors.
bin\cx.exe - Executable file compress utility
bin\dbglib.rex - Phar Lap-provided debugger interface library loaded
dynamically at run time by mdb.exe.
bin\mdb.bod - Text of the debugger's on-line help.
bin\mdb.cnf - Debugger driver configuration file.
bin\mdb.env - Debugger environment file.
bin\mdb.exe - Debugger driver program.
bin\mdb.idx - Index file for on-line help.
bin\mdb.txt - Menu help file used by the debugger.
bin\mdb1.cx - Compressed debugger executable
bin\mon.exp - Remote debugging monitor.
examples\mdb_bad.c - Example program used in debugger tutorial.
examples\mdb_good.c- Example program used in debugger tutorial.
Your mdb distribution disk also contains batch files, scripts and
executable utility programs that we use during the mdb installation.
This group of files is listed below:
bin\cx.exe
mw_db.1
cleanup.bat
install.bat
installit.com
install1.bat
install2.bat
find.exe
mdbser.exe
2. Configuring the Debugger
----------------------------
* Debugger configuration file mdb.env and help files.
Set environment variable MDBENV to the location of the mdb.env file,
and MDBHELP to the directory in which the help files reside.
For example:
set MDBENV=c:\hc386\bin\mdb.env
set MDBHELP=c:\hc386\bin
By default, the debugger looks for its configuration file (mdb.cnf) and its
help files (mdb.txt, mdb.bod, and mdb.idx) in the directory in which the
debugger executable (mdb1.exp) is found.
* To configure run386 command-line switches for the debugger, you may edit
the mdb.cnf file to set the R386ARGS variable.
If you hit the MS-DOS command-line limit of 128 characters, you may set
an arbitrary environment variable, say R386, to the desired switches, and
set mdb.cnf's R386ARGS variable to %R386. This will cause run386 to read
the environment variable as part of the command line. See Phar Lap's
run386 documentation for more details.
* User-Interface Colors
To change the debugger's user-interface colors, first edit the debugger
configuration file mdb.env in the \bin directory and set the COLOR variable
to the location of the color file in the \bin directory. The debugger will
use this color file at start-up. For example:
COLOR=c:\hc386\bin\color.db
Then use program cfigmdb to edit color.db and change the colors. Just run
cfigmdb and specify color.db at the Color:Load menu choice.
* Key Macros
Function keys F2 through F9, all the Alt-F keys, and all the Ctrl-F keys
can be remapped to any command or macro. Use the Macro:key menu item to
remap any of these keys during a debugging session, or edit file mdb.env to
change the defaults. These key macros can then be invoked from the
debugger command line.
* Start-Up Macros
To define a group of macros at debugger start-up, edit the debugger
configuration file mdb.env and set the STARF variable to the location
of your macro file. For example:
STARF=c:\hc386\bin\start.mac
3. Miscellaneous
-----------------
* The debugger (mdb) is a protected-mode program; it runs only on an 80386
or 80486 machine under Phar Lap's 386|DOS-Extender. To execute the
debugger, you must have version 2.2b or later of run386.exe available via
your PATH environment variable.
* RELOAD to debug a program again.
The RELOAD command prepares the currently loaded program to be debugged
again. The debugging environment (breakpoints, watch windows, and so on)
remains unchanged.
* Integer variables are type long.
The size of an integer is machine dependent. On the 80386, integers are
four bytes and are mapped to type long by the debugger.
* Setting the minimum heap size for a program.
The KEEPHEAP command displays or sets the minimum initial heap size for a
program in pages of 4K bytes. The default is two pages. Normally, a
program grows its heap at run time for dynamic memory allocation. If your
program is built with the assumption that a large heap will be available at
start-up, you may use this command to reserve the amount of memory
necessary for your heap.
* Expression reevaluation for the EXAMINE command and the Symbol:Examine
window.
REEVALUATE [ON | OFF] enables or disables expression reevaluation for the
EXAMINE command and the Symbol:Examine window. If neither ON nor OFF is
specified, the current state of reevaluation is displayed.
If enabled, examined expressions are reevaluated every time the value of an
expression may have changed. Otherwise the expressions are evaluated only
once and the addresses of the resulting lvalues are watched for a change of
contents. By default, REEVALUATE is OFF.
For example, consider examining the expression foo[i] when i = 3. With
REEVALUATE ON, when i changes, a different element of foo will be
displayed. With REEVALUATE OFF, a change in i will have no effect, and
foo[3] will still be displayed.
4. PC-NFS Notes
---------------
If PC-NFS is installed and there is a network drive on your path, when you
invoke the debugger you will get a message about a network error, such as:
Unexpected Network Failure
Abort, Retry, Fail?
At this point, if you type "f" the debugger will come up normally. The
problem is that the code in the debugger driver that searches your path for
the DOS extender (run386.exe) provokes an error in PC-NFS. To eliminate
this inconvenience, you can provide the debugger driver with the full
pathname of run386.exe, as follows.
Edit the file mdb.cnf in the \bin subdirectory of the directory in which
you installed the debugger. Find the line that reads:
#exec :run386 ...
and replace it with a line that uses the full pathname of run386, in place
of ":run386":
#exec drive:full\pathname\of\run386 ...
5. AutoCAD Development System
-----------------------------
* AutoCAD ADS users: please read the ADS appendix in the Debugger User's
Guide and Reference Manual.
6. Known Problems
------------------
* To ensure optimal performance of the debugger, an updated copy of Phar Lap
file dbglib.rex is included in this distribution. To make sure this file
is referenced when linking, your PATH variable must reference the \bin
directory BEFORE referencing the Phar Lap directory.
* Graphics debugging is supported only on a VGA monitor with the following
debugger toggles:
FLIP ON /* This toggle must be on. */
EGA OFF /* This toggle must be off. */
Graphics debugging on an EGA monitor is possible, but expect inconsistent
results, because EGA video cards have some read-only registers that the
debugger cannot restore. Be sure to set the toggles as defined above.
EGA Graphics debugging is supported if you are using the TANDEM feature
of the debugger.
* DOS program share.exe may cause a program load to fail.
* RELOAD might fail under Phar Lap's VMM.
* Multiple breakpoints at one address are not supported.
* CALLSTACK cannot display register-based arguments.
Until we provide extensions to debug records, the debugger's CALLSTACK
command will not be able to locate register parameters.
* FLIP OFF mode may be confusing when your program requests input.
If you use FLIP OFF to turn off swapping to the output screen after every
program step, be aware that if your program requests user input you will
not be able to view the output screen to see the prompt.
* The debugger currently does not work under ERGO Computing's OS/386. We are
working with ERGO Computing to get the needed support added to OS/386.
* Reloading AutoCAD kills the debugger. AutoCAD resets many interrupt
vectors, and unless it has an opportunity to clean up, the system will be
very confused.
7. Other Problems
------------------
If you think you have discovered a debugger problem, send a problem report to
MetaWare Technical Support. If possible, please send a test case that
demonstrates the problem.
All problem reports must include your serial number and specify which version
of the compiler you are using. If your sample code exceeds 15 lines, please
send it by diskette to the address below, or by E-mail to:
uunet!acad!metaware!tech
-or-
Internet tech@metaware.com
-or-
INTERNET:tech@metaware.com
MetaWare Technical Support can be reached at (408) 429-6111, 8:00 am to 4:30 pm
Monday through Friday.
MetaWare Incorporated
2161 Delaware Avenue
Santa Cruz, CA 95060-5706
(408)429-6382 FAX:(408)429-9273
Copyright (C) 1991 MetaWare Incorporated. All Rights Reserved.
BlackStar C Function Library
January 1991
Installing the Library
----------------------
To install the BlackStar library files, make a subdirectory on the disk on
which the library is to be installed, change to that directory, and with the
BlackStar diskette in drive A type:
a:install
For example, if you are installing the library on hard drive C and the
BlackStar diskette is in drive A, type the following sequence of commands:
c:
md blackstr
cd blackstr
a:install
If you are installing to a hard disk other than C or from a diskette drive
other than A, the install batch file accepts explicit parameters for the
source drive and destination drive. For example, to install from diskette
drive B to hard drive D:
d:
md blackstr
cd blackstr
b:install b: d:
Introduction
------------
The complete source code for the BlackStar Library is included in this
distribution, in the following directories:
clib - System-independent C source code.
ibmlib - System-dependent C and assembly code.
Each of these directories has three object subdirectories that contain files
for recompiling the libraries for use with different High C compilers:
dx86_o - Version 1.6 locally optimizing compiler for MS-DOS 80x86.
d386_o - Version 1.7 locally optimizing compiler for extended DOS
80386/486.
gd386_o - Version 2.3 globally optimizing compiler for extended DOS
80386/486.
In each object subdirectory you will find the following batch files:
comp.bat - Rebuild libraries. Make the appropriate object directory (such
as d386_o) your current working directory, and type "comp".
comp invokes the compiler driver, setting the appropriate
macros for the given compiler.
recomp.bat - Remake only the object modules for which source modules have
changed. If you modify a source file, change directory to the
appropriate object directory and delete the corresponding
object module. Then type recomp and the batch file will
recompile or reassmeble the source files for which object files
are missing, and then rebuild the library.
NOTE: The batch files invoke some tools not supplied with High C. The
386/486 versions of the batch files use the Phar Lap tools 386asm and 386lib.
The 80x86 versions of the batch files use the Microsoft tools masm and lib to
build the libraries.
WARNING: IF YOU ARE USING MICROSOFT'S LINK.EXE, the linker must be told to
increase the maximum number of segments allowed during the link. This may be
accomplished by setting the link environment variable with the following
command (which may be included in your autoexec.bat file):
set link=/SE:400
Structure of this distribution
------------------------------
\source\clib -- Source code for the machine-independent
portions of the BlackStar library.
\source\clib\dx86_o -- Object modules for the 80x86 libraries.
\source\clib\d386_o -- Object modules for the 80386/486 libraries.
\source\clib\gd386_o -- Object modules for the 80386/486 for the
globally optimizing compiler libraries.
\source\ibmlib -- Source code for the machine-dependent
portions of the BlackStar library.
\source\ibmlib\dx86_o -- Object modules for the 80x86 libraries.
\source\ibmlib\d386_o -- Object modules for the 80386/486 libraries.
\source\ibmlib\gd386_o -- Object modules for the 80386/486 for the
globally optimizing compiler libraries.
\inc -- Header files for the BlackStar library.
\lib -- Libraries for each of the three High C compilers:
clibs,ibmlibs -- Small-model libraries for 80x86.
clibs,ibmlibc -- Compact-model libraries for 80x86.
clibs,ibmlibm -- Medium-model libraries for 80x86.
clibs,ibmlibl -- Large-model libraries for 80x86.
clibs,ibmlibb -- Big-model libraries for 80x86.
clib3,ibmlib3 -- Small-model emulation libraries for 80386/486.
clibg3,ibmlibg3 -- Small-model emulation libraries for the
globally optimizing 80386/486 compiler.
\demos -- Source code for programs demonstrating the use of
some of the BlackStar functions.
\demos\dx86_o -- Executables created with the 80x86 compiler.
\demos\d386_o -- Executables created with the 80386/486 compiler.
\demos\gd386_o -- Executables created with the 80386/486 globally
optimizing compiler libraries.
\utils -- Source code for three utility programs which use
some of the BlackStar functions.
\utils\dx86_o -- Executables created with the 80x86 compiler.
\utils\d386_o -- Executables created with the 80386/486 compiler.
\utils\gd386_o -- Executables created with the 80386/486 globally
optimizing compiler libraries.
Using the BlackStar C Function Library with High C
--------------------------------------------------
If you want to link in the BlackStar libraries every time you link with the
High C driver, set the USERLIB variable in your hcset.cnf or hc386set.cnf
driver configuration file. If you want to specify the additional libraries
each time you link, use the -l and -L driver options.
If you want the BlackStar include files included in the compiler include
search path, set environment variable SPATH or use driver option -I or
-Hipath.
See the High C Programmer's Guide for more information about these options.
Floating-Point Instructions
---------------------------
The libraries supplied with the distribution are compiled for floating-point
instruction emulation. If you want to rebuild the libraries to support a
coprocessor, you must edit the files comp.bat and recomp.bat in the _o
directories to add the appropriate command-line option(s) to generate
floating-point code.
For example, to cause the 80x86 compiler to generate 80287 floating-point
code, use command-line option -Hon=Floating_point.
To generate 80387 floating-point code with the 80386/486 compiler, change
command-line option -fsoft in the batch files to -f387.
See the Programmer's Guide for more information about floating-point code.
Notes
-----
GRAPHICS -- The gr_fill() function puts dots to the screen in the
background color, and is slow. Use the sc_clr() function if
you want to clear the whole screen or if you can clear to
character boundaries (bytes).
HEADERS -- You should include your standard headers before blackstr.h.
The blackstr.h has #ifndefs for some macros, etc.
INDOSF -- The utility for indosf (DOS in critical section) is
undocumented and should be used with care.
MOUSE -- The mouse functions have not been implemented for the
80386/486.
INTERRUPTS -- The interrupt functions have not been implemented for the
80386/486. This, also, affects the routine pr_signal() which
calls the unimplemented function sy_getintv() and
sy_setintv().
MEMMODELS -- The library is now distributed and supported for Small, Medium,
Large, Compact, and Big memory models for the 80x86, and Small
model for the 80386/486.
----------------------------------------------
Companion Diskette for "Programming Windows"
(c) Charles Petzold, 1992
----------------------------------------------
This diskette contains source code and executable (.EXE) files for all the
sample programs described in the third edition of "Programming Windows" by
Charles Petzold (Microsoft Press, 1992). The programs are stored in
subdirectories corresponding to the book chapters.
In the root directory of the companion diskette, you'll find four batch files
named MSC.BAT, BCP.BAT, MSCDLL.BAT, and BCPDLL.BAT. Before compiling the
programs, you must execute MSC.BAT and MSCDLL.BAT if you are using Microsoft
C/C++ 7.0, or BCP.BAT and BCPDLL.BAT if you're using Borland C++ 3.1.
If you want to recreate all the .EXE files, you can run the MAKEMSC.BAT batch
file (for the Microsoft compiler) or MAKEBCP.BAT for the Borland compiler.
Errors and ommissions in the manual (version 1.22)
-----------------------------------
0. See MANUAL.TXT for documentation on new routines.
See XINDEX.TXT for a cross index of routines to example programs.
1. page 2-2 add:
ASCIIZ list zero or more ASCIIZ strings followed by an additional
zero (null) byte.
2. page 3-6
typo in WIN_DISPLAY_LINE:
ES:SI should be ES:DI
new feature in WIN_DISPLAY_LINE, WIN_DISPLAY_LINE_ATTR
-1 for BL centers text on a line
-1 for BH centers text vertically
3. page 3-15 typo in WIN_DISPLAY_VIEW:
SDI should be SI
4. page 4-3 in MENU_HORIZONTAL, add: If DI is zero then the 81-byte
scratch buffer is set to be immediately after the menu structure.
5. page 4-5 in MENU_MOVE_WORD_CURSOR, change the last sentence to read:
Single character words or a single character and a period are not
accepted.
6. pages 5-10, 11 in DRAW_RT_ARROW, DRAW_LF_ARROW, DRAW_UP_ARROW and
DRAW_DN_ARROW all accept CX as the length of the arrow to draw.
7. page 10-22, 23 error in STR_COMPARE and STR_ICOMPARE
The outputs for these routines are incorrect. They should read
outputs: CF ZF set for conditional jumps
CX number of characters matched
AL 0 if not equal
1 if found string 1 null first
2 if found string 2 null first
(Note: the AL information can be used to when trying to locate one
string within another string, i.e. see STR_LOCATE, STR_ILOCATE)
8. page 11-13, 14 in MEM_COMPRESS and MEM_COMPRESS_W,
a. error in record type 3, should be:
record type 3: db 3
dw <repeat count>
db <repeated byte>
b. two new record types:
record type 5: db 5 + 16 * (repeat count)
db <repeated byte>
record type 6: db 6 + 16 * (length)
db <data>...
c. record types 5 - 8 changed to 7 - 10
d. error in record type 7, (now record type 10) should be:
record type 9: db 9
dw <repeat count>
dw <repeated word>
e. two new record types:
record type 11: db 11+ 16 * (repeat count)
dw <repeated word>
record type 12: db 12+ 16 * (length)
dw <data>...
9. page 16-5 typo in DT_DATE_TO_ASCII
pointer to time structure should be pointer to date structure
10. page 16-6 typo in DT_ASCII_TO_DATE
time string should be date string
11. page 16-7 new feature in DT_TIME_TO_ASCII
am/pm flag can have the value of 3 (12 hr with blank or pm)
12. page B-2 new bits in win_features byte in window structure:
bits 0-2: not used (set to 0)
bit 3: 1 = drop shadow (if color)
bit 4: 1 = box outline uses existing screen attributes
bit 5: 1 = no box outline
bit 6: 1 = center the title (win_title_ptr <> 0)
bit 7: reserved (set to 0)
13. page B-5 change to MENU STRUCTURE (See QPLSTRUC.INC)
a. the byte menu_horiz has been changed to menu_type
0 = vertical menu (Note: the setup routines handle this automatically)
3 = horizontal menu
other values reserved for future use
(the horizontal tab amount is the menu_bar_width)
b. the items marked menu_jmp_tbl and menu_jmp_tbl2 are not used, but
will be in a future release, set these to zero.
c. the check mark operation has been changed.
1. menu_check_flag is now menu_check_cnt and is the number of items
that may be "checked" off. Set to zero to disable.
2. menu_check_rcol and menu_check_rrow are the relative column
and row for the check mark, based on 0,0 being the leftmost
column and row of the highlight bar.
3. menu_check_bits is a word containing bits set for each item
that are currently "checked". If you preset this value to
other than zero, then be sure to not have more bits set than
specified in menu_check_cnt. (See example XCHECK)
**************
*** NOTE ***
**************
14.
a. To assemble and link the examples:
MASM %1;
LINK/CP:1 %1;
where %1 is the name of the example program (without the .ASM)
The /CP:1 command line option changes the program's maximum memory
allocation to the minimum required.
b. For your code (when using WIN_INIT) you may:
1) link with LINK/CP:1 or use EXEMOD/MAX
or
2) use dos function 4Ah at the start of your code to shrink the
amount of memory being used.
or
3) declare fixed size segments in your code for the init_buf_seg
and init_tmp_seg in the window initialization structure (See
Appendix B, page 6)
or
4) any logical combination of 1,2 and 3.