home *** CD-ROM | disk | FTP | other *** search
- README.DOC File
-
- Release Notes for the
- Microsoft(R) QuickC(R) Compiler with QuickAssembler, Version 2.51
-
- (C) Copyright Microsoft Corporation, 1989-1990
-
- This document contains release notes for Version 2.51 of the Microsoft
- QuickC Compiler with QuickAssembler. It includes information on both C and
- assembly language. The Contents section below lists the documentation for
- C and assembly language affected by the release notes. In all cases, the
- information in this document supersedes the information in the manuals.
- However, Microsoft revises its documentation at the time of reprinting;
- the manuals may already include some of this information.
-
- Note: If you're reading this from within on-line help, but would prefer to
- print it out by loading README.DOC into a word processor, you can find the
- file in the executable files directory (the default is \QC25\BIN).
-
- The other documentation files are \SAMPLES\QASAMPLES.DOC, which explains
- the assembly-language example programs in the SAMPLES directory; and
- SAMPLES.DOC, which explains the C-language example programs in the same
- directory.
-
- (COMPAQ is a registered trademark of Compaq Computer Corporation.)
- (Intel is a registered trademark of Intel Corporation.)
- (Novell is a registered trademark of Novell, Inc.)
-
-
- ===============================< Contents >================================
-
-
- This document has five parts:
-
- Part Notes
- ---- ----------------------------------------------
- 1 Notes on "Up and Running"
- 2 Notes on "C for Yourself"
- 3 Notes on "QuickC Tool Kit"
- 4 Notes on "QuickAssembler Programmer's Guide"
- 5 Additional Notes on QuickC with QuickAssembler
-
-
-
- ===================< Part 1: Notes on "Up and Running" >===================
-
-
- Page Note
- ---- ----
-
- Inside Front Cover
- Brief Guide to Keystrokes
- --- -------------------------
- The chart on the inside front cover says the ESC key "stops the
- compiler and linker from continuing." ESC stops the compiler but NOT
- the linker. Press CTRL+BREAK to stop both the compiler and linker.
-
- If you are using the debugger and running a program that expects
- keyboard input, pressing either CTRL+C or CTRL+BREAK and then ENTER
- will allow you to exit.
-
- 6 Running SETUP
- --- -------------
- If you already have QuickC installed, SETUP will overwrite the
- existing QC.INI file that contains the current compiler options,
- etc. set in the environment. If you wish to save those settings,
- rename this file before running SETUP.
-
- 19 Using QuickC
- --- ------------
- If you own a COMPAQ(R) SLT/286, and the LCD display goes
- blank when exiting from QuickC back to DOS, you should
- run the program DAC_ON.COM before loading QuickC. To obtain a
- copy of DAC_ON.COM, contact your authorized COMPAQ Computer
- Dealer.
-
- 42 The Debugger
- --- ------------
- The Quickwatch command does not display complete information
- for assembler structures. Only the first member of a structure
- is shown.
-
- You may see the message "currently running program terminated"
- while debugging.
-
- This may happen if your program is linked with a user-created
- library module that contains debugging information, and for
- which the source files are present. In such a case, single-
- stepping into a function contained in the library will cause
- the debugger to terminate the current program and attempt to
- compile the source files for the library module into an
- executable program.
-
- You can avoid this problem by setting your program list to
- contain only the name of the source file of your program.
-
- (miscellaneous)
-
- Accessing Memory at 0xFFFF
- --------------------------
- Due to a problem with the Intel(R) processor, any attempt to
- access a word value at memory location 0xFFFF may cause the
- system to hang. The most likely way for this to happen is from
- within the QuickC debugger, if you use the WO (display word) or
- DW (display double word) operators to examine a register
- containing 0xFFFF. Any C or assembly-language program trying
- to access that location may also cause the system to hang.
-
- Incompatibility with Novell(R) Netware
- --------------------------------------
- If you have a peripheral (such as a mouse) that uses IRQ 3, and
- your system is part of a network using Novell Netware version
- 2.15 or lower, your system may hang when you load the QuickC
- environment. As a temporary solution, reset your peripheral to
- use another interrupt. For more information, contact your Novell
- Netware dealer.
-
-
-
- ===================< Part 2: Notes on "C for Yourself" >===================
-
-
- Page Note
- ---- ----
-
- 53 Type Qualifiers
- --- ---------------
- The fourth paragraph in this section is incorrect. A long double
- value is the same size as a double. It contains 8 bytes, not 10. It
- expresses a floating-point number with at least 15 digits of
- precision, not 19. Table 4.1 on page 49 should also be corrected.
-
- 164 Declaring a Pointer with the Wrong Type
- --- ---------------------------------------
- In the first program listing on the page, the line
-
- ptr = val; /* Error! */
-
- should read
-
- ptr = &val; /* Error! */
-
- 215 Table 11.4 Standard vs. Low-Level
- --- -----------------------------------
- The headings across the top of the table should read
-
- Function Parameters Returns Error Condition
-
- 298 Vector-Mapped Fonts
- --- -------------------
- Add this note to the description of vector mapping:
-
- If a vector-mapped font is selected in graphics mode, any function
- affecting "_moveto" or "_lineto" will also affect the font
- ("_setlinestyle" and so on) when "_outgtext" is called.
-
- 304 Example Program Using Fonts
- --- ---------------------------
- The line reading
-
- if( !_setfont( list ) )
-
- should read
-
- if( _setfont( list ) >= 0 )
-
- 309 Limits on _asm Identifiers
- --- --------------------------
- Never use reserved assembly words as labels, variable names, or other
- identifiers within an _asm block. This includes words in the
- following categories:
-
- - ASM Opcodes such as CMP or MOV
- - Opcodes new to the 80186, 80286, and 80386 such as ARPLS or CLTS
- - Reserved operand words such as WORD or PARA
- - C library functions such as "exit" or "time"
-
- For example, the following code is not permitted:
-
- main()
- {
- int word;
- _asm { mov WORD PTR [word],ax }
- }
-
- The variable 'word' can be used in the C part of the program, but not
- within the assembly block.
-
- 366 Font Display Routines
- --- ---------------------
- The return values for the _registerfonts and _setfont functions
- should be
-
- _registerfonts
-
- Returns: the number of fonts registered, or a negative value if
- failure
-
- _setfont
-
- Returns: a negative value if failure, zero or positive if
- successful
-
-
-
- ==================< Part 3: Notes on "QuickC Tool Kit" >===================
-
-
- Page Note
- ---- ----
-
- 94 /Gw, GW (Generate Code for Windows Function Calls)
- --- --------------------------------------------------
- QuickC 2.5 supports development of programs for the next release
- of Windows. If you wish to develop programs for Windows 2.03, you
- must explicitly link your program with C51STUBS.LIB.
-
- 130 /INC (Prepare for ILINK)
- --- ------------------------
- By default, ILINK will call LINK if the incremental link fails.
- To make ILINK call QLINK instead, use the /E option and an
- argument. For example:
-
- ILINK /E "QLINK @RESPONSE" PROGRAM.EXE
-
- 259 Warning Message C4018
- --- ---------------------
- The warning message below is new and should be added to page 259:
-
- C4018 'operator': signed/unsigned mismatch
-
- An expression involving the specified operator had inconsistent
- integer types. The two integer expressions used in the comparison
- operation are not of the same signed or unsigned type.
-
- (miscellaneous)
-
- Makefile Compatibility with QuickC 2.0
- --------------------------------------
- The name of the linker supplied with QuickC has been changed
- from LINK to QLINK. Any makefile used with QuickC 2.0 that
- specify the LINK command should be changed accordingly.
-
- Makefile Compatibility with Programmer's WorkBench
- --------------------------------------------------
- The makefiles generated by QuickC are not fully readable by
- Microsoft Programmer's WorkBench (PWB) included with Microsoft's
- Professional Development Systems. PWB is unable to read the
- linker options specified in QuickC makefiles, so you will have to
- re-specify those options using PWB's menus. QuickC cannot read
- makefiles generated by PWB.
-
-
-
- ========< Part 4: Notes on "QuickAssembler Programmer's Guide" >===========
-
-
- Page Note
- ---- ----
-
- xi Running SETUP Before Using Help
- --- -------------------------------
- Before using the Quick Advisor, make sure you run the SETUP
- program. This program combines files on different disks to build
- QA.HLP, which contains help on assembly language as well as DOS
- and BIOS interrupt functions.
-
- xi Expanding Environment Space
- --- ---------------------------
-
- QuickAssembler for QuickC makes use of certain environment
- variables, such as HELPFILES. However, these variables are stored
- in an area of memory called the "environment space." You may need
- to expand this memory to use the new environment variables
- successfully.
-
- If you run DOS 3.2 or later, you can set the environment space
- with the DOS SHELL command. For example, the following command
- sets the environment size at 3000 bytes when placed in CONFIG.SYS:
-
- SHELL=COMMAND.COM /E:3000 /p
-
- Consult your DOS manual for more information.
-
- xi Temporary Files and the TMP Environment Variable
- --- ------------------------------------------------
- If you do not have a TMP environment variable set, the linker
- prints the following message when it creates a temporary file:
-
- temporary file <filename> created
-
- To avoid getting this message, set the TMP environment variable to
- the name of a drive and directory. This drive should have some free
- space. For example, the following command line sets C:\TEMP as the
- directory where the linker places temporary files:
-
- SET TMP=C:\TEMP
-
- For convenience, place this command (or a similar one) in your
- AUTOEXEC.BAT file to execute it automatically.
-
- 6 Terminating the Program with .EXIT
- --- ----------------------------------
- When you use the .STARTUP directive, the recommended method for
- terminating the program is to use the .EXIT directive. With
- stand-alone assembly programs, you must explicitly terminate
- or the processor will execute meaningless instructions beyond the
- end of the program.
-
- The .EXIT directive has the following syntax:
-
- .EXIT [exitcode]
-
- in which exitcode is an optional register, memory location, or
- constant that contains a value to return to DOS. This value must
- not be larger than one byte.
-
- When you use this directive, the assembler generates instructions
- that call DOS function 4CH (Exit with Return Code). You can use
- another method to terminate the program if you wish. The assembler
- generates an advisory warning if you use .STARTUP without .EXIT.
-
- The .EXIT directive requires that .MODEL was previously used.
-
- Within the environment, the assembler generates an advisory
- warning message if you use .STARTUP without using .EXIT. Outside
- the environment, the assembler does not generate this message.
-
- 7 Effect of ILINK on Building a Program
- --- -------------------------------------
- By default, the QuickC environment invokes ILINK to link programs.
- ILINK, in turn, requires that a program have a default data
- segment (it may be empty). To meet this requirement, you can do
- any of three alternatives:
-
- 1. Declare a data segment with .DATA if using simplified segment
- directives.
-
- 2. Declare a group named DGROUP.
-
- 3. Turn Incremental Link off in the Linker Flags dialog box.
-
- The use of ILINK imposes some other requirements on assembly-
- language programs:
-
- 1. You cannot have a segment with the AT attribute.
-
- 2. Avoid depending on distances between segments being fixed. Some
- programs calculate the distance between two segments and then
- use this value elsewhere. When ILINK is in use, segment-address
- arithmetic is unpredictable.
-
- 3. The DUP operator cannot have a program address as an operand.
- For example, the following statement is compatible with ILINK:
-
- myarr DW 10 DUP (5)
-
- However, the next statement is not compatible with ILINK, even
- though it is supported by the assembler:
-
- myarr DW 10 DUP (myproc)
-
- 7 Searching for Include Files
- --- ---------------------------
- When building and running a program, note that the assembler looks
- for include files in the following order:
-
- 1. The directory in which the current source file is located
- 2. Directories specified with the /I command-line option
- 3. The current directory (as recognized by the environment)
- 4. Directories specified in the INCLUDE environment variable
-
- 9 Assembling from the Command Line
- --- --------------------------------
- QCL does not report some warning messages reported inside the QuickC
- environment. QCL does not warn you if you use .STARTUP without .EXIT.
-
- 14 Specifying Debug Expressions
- --- ----------------------------
- The QuickC environment now supports an optional display-format
- character for examining arrays. You can add a suffix to any
- expression for the Watch window as follows:
-
- expression,nf
-
- in which n is a number and f is a format specifier (such as i, x,
- d, or a). Both are optional. The use of n displays the expression
- as if it were an array. If the expression is already an array,
- then the use of n displays the array as if it were an array of a
- higher dimension. The assembler does not type any symbol as an
- array. Thus, the use of n with a variable declared in assembly
- always displays the variable as an array of one dimension.
-
- The optional f display-format specifier only affects the format
- in which each member of the array is displayed.
-
- The Watch window determines the type of array from the expression
- or from BY, WO, or DW if used. If WVAR is declared as type WORD
- (or "int" in C), then WVAR,5x displays the first five words at the
- address of WVAR. The "x" specifies hex format. BY WVAR,5x displays
- the first five bytes at the address of WVAR. Each byte is
- displayed as if it were a hexadecimal word-sized value.
-
- 56 The PROC Directive
- --- ------------------
- The PROC directive sets the BP register to point to a procedure's
- frame, but only if you use a parameter list or the LOCAL directive.
-
- 82 Using Full Segment Definitions
- --- ------------------------------
- The program example on this page should declare class name 'CODE'
- for the segment definition:
-
- _TEXT SEGMENT 'CODE'
-
- The class name 'CODE' is necessary if you want to debug the
- module. The assembler issues a warning message if you assemble a
- code segment without this class name. If you use simplified
- segment directives, the code segments automatically have this
- class name.
-
- 109 Defining Segment Combine Types
- --- ------------------------------
- The combine type describes how the linker combines segments, but
- does not affect the assembler itself. Within any given module, the
- assembler concatenates segments with the same name. Thus, segments
- with the COMMON attribute are overlapped only if they are in
- different modules.
-
- 383 Assembling with Two Passes
- --- --------------------------
- In addition to the options listed in Appendix B, QCL supports the
- /P2 option, which specifies two-pass assembly. The /P1 option
- specifies one-pass assembly and is now the default. Two-pass
- assembly is slower than one-pass assembly, but enables some
- language-specific features (such as IF1 and IF2) that rely on two
- passes.
-
- 383 Removing Copyright Message
- --- --------------------------
- In addition to the options listed in Appendix B, QCL supports the
- /nologo option, which prevents QCL from printing the product name
- and copyright information. QCL also prints a warning message when a
- nonstandard version of DOS is detected. The /nologo option prevents
- this message from being printed.
-
- 386 Using /AT to Generate a .COM File
- --- ---------------------------------
- If you use QCL to generate a .COM file but do not use /AT, the
- linker may produce a file with an .EXE extension. This file is
- really in .COM format. It should be renamed immediately. You can
- prevent this situation by using the /AT option, or by using the
- /Fe option to explicitly give the name of the output file. For
- example, the following command line produces a file with a .EXE
- extension:
-
- QCL sample.asm /link /TINY
-
- However, the following command lines each produce a file with a
- .COM extension:
-
- QCL /AT /Ln sample.asm /link /TINY
- QCL /Fe sample.com sample.asm /link /TINY
-
- 392 Line-Number Index in Listing File
- --- ---------------------------------
- The line-number index generated by /Sq (and generated by default
- within the environment) lists correspondences between source-file
- lines and listing-file lines. This index, placed at the end of the
- listing file, is read and interpreted by the QuickC environment.
- You should avoid writing utilities that read this index. The
- format of the line-number index is subject to change without
- notice.
-
-
-
- ========< Part 5: Additional Notes for QuickC with QuickAssembler>=========
-
-
- Source of DOS and BIOS Function Information in Help
- ---------------------------------------------------
- On-line help includes information on IBM ROM BIOS services as well as
- MS-DOS service calls. The information on these topics is adapted from the
- books "IBM ROM BIOS" and "MS-DOS Functions" by Ray Duncan. Both books are
- published by Microsoft Press and are part of the Programmer's Quick
- Reference Series.
-
- Math Coprocessor Instructions in .ASM Programs
- ----------------------------------------------
- If you do not have a math coprocessor chip, you must use the /FPi option
- when assembling code for emulated floating-point instructions. If the
- switch is omitted, your assembly-language programs may hang your machine.
-
- Setting Breakpoints on Assembly Procedures and Labels
- -----------------------------------------------------
- Version 2.51 of QuickAssembler now supports setting breakpoints on labels.
- Because assembly procedures are treated as labels, a dialog box verifies if
- you want to set a breakpoint at a procedure label. Additional information
- can be found in the on-line help.
-
- ILINK and Tiny Model
- --------------------
- When switching to tiny model from another model, or from another model to
- tiny model, turn off the incremental link option the first time you build
- after switching models. Alternatively, you can delete to .SYM and .ILK
- files to force a full link. ILINK should always be disabled
- when creating tiny model (.COM) programs.
-