Microsoft KB Archive/64223

From BetaArchive Wiki

Microsoft Knowledge Base

Complete README.DOC File for Basic PDS Version 7.10

Last reviewed: February 16, 1995
Article ID: Q64223

SUMMARY

Below is the complete README.DOC file shipped with Microsoft Basic Professional Development System (PDS) version 7.10.

MORE INFORMATION

                         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-20007172

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.00. 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.10 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.10 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.00 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 #2   '[changed #1 in README.DOC to #2]
   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.00 version number, e.g. BRT70ENR.LIB. Change these to include the 7.10 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.10, 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 MS-DOS version 2.10, CHAIN will not work unless filespec$
         provides a path. Also, 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.10, 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.10, 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 softkey 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 nonextended 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
         unharmonic 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.10, 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
         the 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 "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.10, 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:\MYDB.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.10, 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.10, 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.10 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.10, 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 section 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 an /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.

Additional reference words: BasicCom readme PWB CodeView_NMAKE

KBCategory: kbreadme
KBSubcategory:


THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.

Last reviewed: February 16, 1995
©1997 Microsoft Corporation. All rights reserved. Legal Notices.