"README.DOC" File
Release Notes for MICROSOFT(R) QuickBASIC
Version 4.0 for IBM(R) Personal Computers
and Compatibles
(C) Copyright Microsoft Corporation, 1987
THIS FILE CONTAINS IMPORTANT INFORMATION CONCERNING VERSION 4.0 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 and Using Microsoft QuickBASIC manual.
2 Information about additions and changes to the
BASIC Language Reference manual
3 Information about additions and changes to the
Programming in BASIC: Selected Topics manual
4 Using your Mouse with QuickBASIC
5 Using QuickBASIC with 3.5-inch floppy disks
6 Supplementary information on mixed-language programming
7 Using Btrieve with QuickBASIC
===< Part 1: Changes for Learning and Using Microsoft QuickBASIC >===========
Page Correction
---- ----------
--- 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. Disk 3 (disk 2, if you are using 3.5-inch disks) 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 appropriate actions. FIXSHIFT
takes about 450 bytes of memory. Except for the BIOS bug, it has no
effect on other programs you run.
--- QuickBASIC Version 4.0 supports Hercules (R) display adapters.
See the entry for the SCREEN statement in Part 2, below.
xxii 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
mono 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.
11 Suggestions for using QuickBASIC with a single-floppy system:
Disk 1
======
QB.EXE
Your program source file
(Optional: Operating system files)
(Optional: QB.QLB)
Disk 2
======
BC.EXE
LINK.EXE
LIB.EXE
BRUN40.EXE
BRUN40.LIB
Disk 3
======
BCOM40.EXE
When you make executable files and Quick libraries from within the
environment, you have to swap the disks in and out of your disk
drive to make the proper programs and libraries available. When
specific files cannot be found on the currently inserted disk,
you will see the prompt "Cannot find file <filename>." Before you
switch disks, type B: and press ENTER. (You can do this because,
even though you do not have a physical drive B, DOS recognizes a
logical drive B.) Insert the appropriate disk when prompted. Note
that when the linker prompts for a path, you must also include the
name of the file for which it is searching.
12 See Part 4 of this file for additional information on installing
and using your Mouse with QuickBASIC.
-- There is a new option to LINK.EXE
Option: /NOE[XTDICTIONARY]
If the linker suspects that a public symbol has been redefined, it
prompts you to link again with the /NOE option. When you do so, it
searches the individual object files, rather than "dictionaries" it
has created, to resolve conflicts. For example, when linking a
program with NOEM.OBJ or NOCOM.OBJ, you must use the /NOE option.
-- NOEM.OBJ is a supplied object file. It allows stand-alone executable
files compiled with the /O option to be substantially smaller when
run on machines equipped with a math coprocessor (8087 or 80287).
Note that programs linked with NOEM.OBJ do not run on machines that
do not have a math coprocessor. If all your stand-alone executable
files are always run on machines with coprocessors, you can use the
following method to change the library that contains floating-point
emulation routines (BCOM40.LIB) to produce smaller executable files:
LIB BCOM40.LIB -QB4EM.OBJ+NOEM.OBJ;
This command replaces the emulator math support in the stand-alone
run-time library with support specific to the coprocessor.
Alternatively, you can explicitly link NOEM.OBJ from the command
line on a case-by-case basis. For example, to create PROG.EXE
using NOEM.OBJ, compile PROG.BAS with the /O option (either from
within QuickBASIC or from the command line), then link as follows:
LINK PROG.OBJ+NOEM.OBJ/NOE;
245 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.0, this causes a "duplicate definition" error.
===< Part 2: Changes for BASIC Language Reference >==========================
Page Correction
---- ----------
18 The program FLPT.BAS, as printed in the manual, produces a run-time
error. The program has been corrected in the on-disk version.
See the \SOURCE directory on disk 3 (or disk 2 if you are using
3.5 inch disks).
84 The description of CALL ABSOLUTE says the file ABSOLUTE.OBJ must be
linked with the program. This file is no longer supplied. Link with
QB.LIB instead.
122 String concatenation is not permitted in a CONST statement.
373 The SCREEN statement now includes mode 3 for Hercules display
adapters. The following is a brief summary of screen mode 3.
See your Hercules documentation for details.
- QuickBASIC supports Hercules Graphics Card, Graphics
Card Plus, InColor Card, and 100% compatibles
- You must use a monochrome monitor
- Hercules text mode is SCREEN 0; Hercules Graphics mode
is SCREEN 3.
- You must load the Hercules driver (QBHERC.COM) before running
your program. If the driver is not loaded, SCREEN 3 statement
gives an "Illegal function call" error message. Type QBHERC
to load the driver.
- Text dimensions are 80x25 (9x14 character box); bottom
2 scan lines of 25th row are not visible.
- Resolution is 720x348 pixels, monochrome.
- Number of screen pages supported is 2.
- The PALETTE statement is not supported.
- In order to use the Mouse, you must follow special
instructions for Hercules cards in the Microsoft Mouse
Programmer's Reference Guide. (This must be ordered
separately; it is not supplied with either the QuickBASIC
or the Mouse package.)
477 - The "Advanced feature unavailable" error message may occur
if you are using DOS Version 2.1 when trying to use a fea-
ture supported only in later versions (i.e. file locking).
484 - The "Duplicate definition" error message also occurs if you
have a SUB or FUNCTION procedure with the same name as a
variable. In previous versions, this did not cause an error.
513 - Message 2024 ("Name : symbol multiply defined, use /NOE")
should be numbered 2044
--------< New or Revised Error Messages >--------------------------------
Error Number Explanation
------------ -----------
L1003 New message: "/QUICKLIB, /EXEPACK incompatible"
You specified both options, /QUICKLIB and /EXEPACK, but
these two options cannot be used together.
L2024 Message should read: "<name> : symbol already defined"
Explanation: The linker has found a public-symbol
redefinition. Remove extra definition(s).
L2043 Message should read: "Quick library support module missing"
You did not specify, or LINK could not find, the object
module or library required for creating a Quick library.
In the case of QuickBASIC, the library provided is BQLB40.LIB
L4003 This message should be deleted from documentation.
U4157 LIB warning message: "Insufficient memory, extended
dictionary not created."
U4158 LIB warning message: "Internal error, extended dictionary
not created."
Both of these LIB warnings just indicate that LIB was unable
to create the extended dictionary. The library is still
valid, but the linker cannot take advantage of extended
dictionaries to link faster.
===< Part 3: Changes for Programming in BASIC: Selected Topics >============
141 In the "Information Returned" column for the LOC function, the
description should read: "The amount of space remaining (in
bytes) in the output buffer". (Note that this is a change from
the behavior of LOF in previous versions of QuickBASIC).
===< Part 4: Using your Mouse with QuickBASIC >=============================
--------< New Mouse Driver for Use with QuickBASIC >------------------------
QuickBASIC Version 4.0 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.11 is supplied with QuickBASIC Version 4.0.
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. 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.0, 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, and using VARPTR on this
string variable just prior to calling Mouse function call 22 or 23.
===< Part 5: Using QuickBASIC with 3.5-inch Floppy Disks >=============
If you have two 3.5-inch floppy-disk drives
Copy the files from the distribution disks to three other disks,
as follows:
Disk 1: All files from distribution disk 1, plus all BRUN40
and BQLB files appearing on distribution disk 2
Disk 2: BCOM40.LIB, BC.EXE, LINK.EXE, LIB.EXE
Disk 3: BASIC source files, Quick libraries, and QB.QLB
Most of the time you can just use disks 1 and 3, with disk 1 in
drive A and disk 3 in drive B. When you make a Quick library or
an executable file to run from DOS, you will see the prompt:
Cannot find file <filename>
Insert disk 2 in drive A and press ENTER. If the program requires
a Quick library, make sure both the Quick library and the corresond-
ing stand-alone (.LIB) library are on the disk in drive B.
If you have only a single 3.5-inch floppy disk drive
Prepare disks 1, 2, and 3 as with a 2-drive system. However, when
you see the prompt "Cannot find file <filename>", type B: and press
ENTER before inserting the proper disk. (You can do this because,
even though you do not have a physical drive B, DOS recognizes a
logical drive B.) Insert the appropriate disk when prompted. Note
that when the linker prompts for a path, you must also include the
name of the file for which it is searching.
===< Part 6: 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 runtime 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.
===< Part 7: Using Btrieve with QuickBASIC >=========================
If you use Btrieve with QuickBASIC, you must make a small change to
your programs for QuickBASIC Version 4.0. 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.0, 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
Your programs should function correctly with Btrieve with this change.