home *** CD-ROM | disk | FTP | other *** search
Text File | 1988-02-01 | 38.4 KB | 1,185 lines |
- Microsoft(R) Macro Assembler Package
- Version 5.10
- Copyright 1988, Microsoft Corporation
-
- 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.
-
-
- The Microsoft Macro Assembler (MASM)
-
- Mixed-Language Support for Variables and Procedures
- ---------------------------------------------------
- All EXTRN, PUBLIC, and PROC items, as well as uses of the .MODEL
- directive, support a language type. The language type of EXTRN
- and PUBLIC variables determine whether or not an underscore is
- prefixed to the name (an underscore is prefixed only for variables
- with a C language type), and the language type of a procedure determines
- its calling and naming conventions. For an explanation of calling
- and naming conventions, see the Microsoft Mixed-Language Programming
- Guide.
-
- The language type consists of the word "C" or "Pascal" and uses the
- following syntax (lowercase items are placeholders, and bracketed items
- are optional):
-
- EXTRN [<langtype>] <varname>:<type>
- PUBLIC [<langtype>] <varname>
- procName PROC [NEAR|FAR] [<langtype>] [USES <regs>,] <args>
-
- For example, the C and Pascal keywords are used correctly in the
- following example:
-
- .MODEL SMALL,C
- EXTRN Pascal DosOpen:FAR
- PUBLIC C myVar
- myOpen PROC Pascal fName:PTR, mode:WORD
- .
- .
- .
- myOpen ENDP
-
-
- EVEN and ALIGN Directives
- -------------------------
- Padding for EVEN and ALIGN is now optimized. Data segments
- are padded with zeros. Code segments are padded with special
- two-byte NOP instructions where possible. The two-byte NOP
- consists of the instruction XCHG BX,BX (87 DB hexadecimal)
- which is executed faster than two one-byte NOP instructions.
-
- /B Option Ignored
- -----------------
- The /B option is now ignored, because its effect is irrelevant,
- given the new file buffering mechanism. However, the option is
- still accepted for the purposes of compatibility.
-
- The PTR Operator
- ----------------
- 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
-
- Assembler 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 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.
-
- The STACK Combine Type
- ----------------------
- The description of the 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 override data initialized in
- previous segments. 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.
-
- Clarification of Parsing Error
- ------------------------------
- The following error can be difficult to interpret because of the
- way the assembler parses (analyzes) source code:
-
- A2015: Symbol already different kind: <name>
-
- Typically, the assembler generates this error message when a
- symbol is used in a way inconsistent with how it was declared: for
- example, a symbol is declared as an external absolute but then used
- as a local code label. However, the assembler also generates this
- error when a symbol in the second source-code field can be interpreted
- as either an operation or an operand. The following example illustrates
- this problem:
-
- SYM1 MACRO structName, varName
- varName structName <>
- ENDM
-
- SYM2 STRUCT
- field1 DB
- field2 DW
- SYM2 ENDS
-
-
- SYM1 SYM2, <mylabel>
-
- The last line of code causes error A2015 to be generated. The
- assembler first looks at the second field of the line, which
- contains the symbol SYM2. Since SYM2 is a structure, the assembler
- considers SYM2 to be an operation rather than an operand, and therefore
- it considers SYM1 to be a label (rather than an operation). The way
- to avoid this error is simply code the instruction as:
-
- SYM1 <SYM2>, <mylabel>
-
-
- HIGH and LOW Operators
- ----------------------
- The HIGH and LOW operators work reliably only with constants
- and with offsets to external symbols. HIGH and LOW operations are
- not supported for offsets to local symbols.
-
- Mixed-Mode Programming (386 Only)
- ---------------------------------
- When assembling code for .386 mode, the assembler now supports direct-
- addressing modes between segments with different USE sizes. (Segments can
- have the USE16 or USE32 attribute; these attributes refer to the default
- size of offsets.) Direct-addressing references to labels in other segments
- are correctly resolved. In the following example, the assembler correctly
- uses a 32-bit offset to access the data at label a32:
-
- .386
- SEG32 SEGMENT USE32
- a32 DD ?
- SEG32 ENDS
-
- SEG16 SEGMENT USE16
- assume ds:seg32
- mov eax,a32
- SEG16 ENDS
-
- You can also execute a CALL or a JMP to a label in a segment with a
- different USE size. However, the label must be declared FAR, and the
- CALL or JMP must not be a forward reference. The following example
- shows the correct method for executing such a CALL or JMP:
-
- .386
- COD16 SEGMENT USE16 'CODE'
- proc16 PROC FAR
- ret
- proc16 ENDP
-
- lab16 LABEL FAR
- COD16 ENDS
-
- COD32 SEGMENT USE32 'CODE'
- call proc16
- jmp lab16
- COD32 ENDS
-
- Additional Error Messages
- -------------------------
-
- 19 Wrong type of register
-
- The register specified in the operand field was incompatible with the
- directive or instruction in the operation field. For example, the following
- instruction causes this error because you cannot increment the
- code segment:
-
- inc cs
-
-
- 36 Extra NOP inserted
-
- During pass 1 the assembler did not have enough information to
- correctly infer the length of the encoding for the instruction.
- During pass 2 the encoding was found to be shorter than the space
- allocated from pass 1, so one or more NOP instructions were inserted
- as padding. It may be possible to generate a smaller amount of code
- by eliminating a forward reference to a symbol.
-
-
- The Microsoft Cross-Reference Utility (CREF)
-
- 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.
-
-
- The Mouse Driver
-
- If you use the Microsoft Mouse with the Microsoft CodeView(R) debugger
- you must have Version 6.0 or later of the Microsoft Mouse. If you do not, use
- the version of the MOUSE.COM driver provided in this package. Copy MOUSE.COM
- to the appropriate mouse directory. When you are ready to use the mouse, type
-
- mouse
-
- at the DOS command level. If you want to install the mouse driver automatically
- every time you reboot, insert the "mouse" command in your AUTOEXEC.BAT file.
-
- Note that in earlier releases of Microsoft C, both the MOUSE.SYS and the
- MOUSE.COM driver were provided. If you have been using an earlier version
- of the MOUSE.SYS driver, delete the following line from your CONFIG.SYS file:
-
- device=\<directory>\mouse.sys
-
- where <directory> is the directory where the earlier mouse driver resides.
-
-
- Microsoft CodeView Debugger
-
- New Command-Line Option
- -----------------------
- If you have an IBM Personal System/2, then you can use the /50
- command-line option to start the CodeView debugger in 50-line mode.
- Note that you must be in 25-line mode to effectively use either the
- /43 or /50 command-line option.
-
- CONFIG.SYS Setting for CVP
- --------------------------
- To run the protected-mode CodeView debugger (CVP.EXE), you must have
- the following line in your CONFIG.SYS file:
-
- IOPL=YES
-
-
- Using the 7 Command in Protected Mode
- -------------------------------------
- If you are using OS/2 protected mode and have a math coprocessor, then
- you need to use a patch before you can use the CVP 7 command. To apply
- the patch, use the OS2PATCH.EXE and PTRACE87.PAT files that come on the
- same disk that CVP.EXE comes on. You also need to locate the PATCH.EXE file
- that comes with OS/2 and make sure that this file is in a directory listed
- in your PATH environment variable. Then follow these steps:
-
- 1) Change the current drive and directory to the root directory of the
- boot disk. (If the boot disk is a floppy, make sure it is inserted
- in the drive you used to boot from.)
-
- 2) Give the following command line at the DOS prompt:
-
- OS2PATCH /A PTRACE87.PAT
-
- Note that you may need to give the complete path names for the
- OS2PATCH.EXE and for the PTRACE87.PAT file. You do not need to give
- a path name for the OS2PATCH.EXE file if you have placed this file
- in a directory listed in your PATH environment variable.
-
- Using the Real-Mode Debugger in the Compatibility Box
- -----------------------------------------------------
- When running the real-mode CodeView debugger in the DOS 3.x
- compatibility box, start the debugger with the /S command-line
- option. Otherwise, the mouse pointer will not appear.
-
- Using the CodeView Debugger with BIND
- -------------------------------------
- The real-mode CodeView debugger cannot debug bound (dual-mode)
- applications. However, the protected-mode CodeView debugger,
- CVP, can debug bound applications.
-
- Expression Evaluator for BASIC Programs
- ---------------------------------------
- In the BASIC expression evaluator, "+" is not supported for string
- concatenation.
-
- Stack Trace Command
- -------------------
- In order for the Stack Trace command (or the Calls menu) to work
- reliably, you need to execute to at least the beginning of the main
- function or procedure, and the current module should have full CodeView
- information (a module has full CodeView information if compiled or
- assembled with /Zi).
-
- Error Messages
- --------------
- The error message "? cannot display" indicates that the Display
- Expression command (?) has been passed a valid symbol that it
- cannot display. In previous versions of the debugger, structures
- could not be displayed. With current version of the debugger, only
- the enums type cannot be displayed.
-
- The error message "Expression not a memory address" occurs when
- the Tracepoint command is given without a symbol that evaluates to
- a single memory address. For example, the commands "TP?1" and
- "TP?a+b" each produce this error message. The proper way to put a
- tracepoint on the word at address 1 is with the command "TPW 1".
-
- The error message "Function call before 'main'" occurs when you
- attempt to evaluate a program-defined function before you have entered
- the main function. Execute to at least to the beginning of the main
- function before attempting to evaluate program-defined functions.
-
- The error message "Bad emulator info" occurs when CodeView cannot
- read data from the floating-point emulator.
-
- The error message "Floating point not loaded" has a special meaning
- for CVP (in addition to the explanation given in the CodeView and
- Utilities manual). Each thread has its own floating-point emulator.
- This message is issued when the current thread has not initialized
- its own emulator.
-
- Microsoft Pascal Programs
- -------------------------
- In this release, Microsoft Pascal programs cannot be debugged with
- the CodeView debugger.
-
-
- Exit Codes for Utilities
-
- The exit codes for LINK and the utilities in the Microsoft CodeView
- and Utilities manual should appear as follows:
-
- LINK
- ----
- Code Meaning
-
- 0 No error.
-
- 2 Program error--something was wrong with the commands
- or files input to the linker.
-
- 4 System error. The linker
-
- - ran out of space on output files
- - was unable to reopen the temporary file
- - experienced an internal error
- - was interrupted by the user
-
- LIB, EXEPACK, EXEMOD, MAKE, and SETENV
- ---------------------------------------
- Code Meaning
-
- 0 No error.
-
- 2 Program error--something was wrong with the commands
- or files input to the utility.
-
- 4 System error. The utility ran out of memory, was
- interrupted by the user, or experienced an internal
- error.
-
- Microsoft Overlay Linker (LINK)
-
- Overlay Restrictions
- --------------------
- You cannot use long jumps (using the longjmp library function) or indirect
- calls (through a function pointer) to pass control to an overlay. When a
- function is called through a pointer, the called function must be in the same
- overlay or in the root.
-
- Changed LINK Error Messages
- ---------------------------
- The explanation for fatal-error message L1008 is changed as follows:
-
- The /SEGMENTS option specified a limit greater than 3072 on the
- number of segments allowed.
-
- Error message L1009 has been changed to read as follows:
-
- L1009 <number> : CPARMAXALLOC : illegal value
-
- Error message L1053 has been changed to read as follows:
-
- L1053 out of memory for symbol table
-
- The program had more symbolic information (such as public, external,
- segment, group, class, and file names) than the amount that could fit
- in available real memory.
-
- Try freeing memory by linking from the DOS command level instead of
- from a MAKE file or from an editor. Otherwise, combine modules or
- segments and try to eliminate as many public symbols as possible.
-
- Warning message L4050 has been changed as follows:
-
- L4050 too many public symbols for sorting
-
- The linker uses the stack and all available memory in the
- near heap to sort public symbols for the /MAP option. If
- the number of public symbols exceeds the space available
- for them, this warning is issued, and the symbols are not
- sorted in the map file but are listed in arbitrary order.
-
- New LINK Error Messages
- -----------------------
- L1003 /QUICKLIB, /EXEPACK incompatible
-
- You cannot link with both the /QU option and the /E option.
-
- L1006 <option-text>: stack size exceeds 65535 bytes
-
- The value given as a parameter to the /STACKSIZE option exceeds the
- maximum allowed.
-
- L1063 out of memory for CodeView information
-
- The linker was given too many object files with debug information,
- and the linker ran out of space to store it. Reduce the number
- of object files that have debug information.
-
- L1115 /QUICKLIB, overlays incompatible
-
- You specified overlays and used the /QUICKLIB option.
- These cannot be used together.
-
- L2013 LIDATA record too large
-
- An LIDATA record contained more than 512 bytes. This is
- probably a compiler error.
-
- L2024 <name>: special symbol already defined
-
- Your program defined a symbol name that is already used by the linker
- for one of its own low-level symbols. (For example, the linker
- generates special symbols used in overlay support and other operations.)
- Choose another name for the symbol in order to avoid conflict.
-
- L2025 <segmentname>: segment with > 1 class name not allowed with /INC
-
- Your program defined a segment more than once, giving the segment
- different class names. Different class names for the same segment
- are not allowed when you link with the /INCREMENTAL option. Normally,
- this error should never appear unless you are programming with MASM.
- For example, if you give the two MASM statements
-
- _BSS segment 'BSS'
-
- and
-
- _BSS segment 'DATA'
-
- then the statements have the effect of declaring two distinct segments.
- ILINK does not support this situation, so it is disallowed when the
- /INCREMENTAL option is used.
-
-
- L2041 stack plus data exceed 64K
-
- The total of near data and requested stack size exceeds 64K,
- and the program will not run correctly. Reduce the stack size.
- The linker only checks for this condition if /DOSSEG
- is enabled, which is done automatically in the library
- startup module.
-
- L2043 Quick Library support module missing
-
- When creating a Quick library, you did not link with the required
- QUICKLIB.OBJ module.
-
- L2044 <name> : symbol multiply defined, use /NOE
-
- The linker found what it interprets as a public-symbol
- redefinition, probably because you have redefined a symbol that
- is defined in a library. Relink with the /NOEXTDICTIONARY
- (/NOE) option. If error L2025 results for the same symbol, then you
- have a genuine symbol-redefinition error.
-
- L4003 intersegment self-relative fixup at <offset> in segment <name>
- pos: <offset> Record type: 9C target external '<name>'
-
- The linker found an intersegment self-relative fixup. This error
- may be caused by compiling a small-model program with the /NT
- option.
-
- L4034 more than 239 overlay segments; extra put in root
-
- Your program designated more than the limit of 239 segments to
- go in overlays. Starting with the 234th segment, they are assigned to
- the root (that is, the permanently resident portion of the program).
-
-
- Microsoft Library Manager (LIB)
-
- New Option
- ----------
- There is a new option for LIB: /NOIGNORECASE (abbreviated as /N).
- This option tells LIB to not ignore case when comparing symbols.
- names. By default, LIB ignores case. Multiple symbols that are
- the same except for case can be put in the same library. An
- example of this is: "_Open" and "_open". Normally you could not
- add both these symbols to the same library.
-
- Note that if a library is built with /NOI, the library is
- internally "marked" to indicate /NOI. All libraries built
- with earlier versions of LIB are not marked.
-
- If you combine multiple libraries, and any one of them is
- marked /NOI, then /NOI is assumed for the output library.
-
- In addition, LIB also supports the option /IGNORECASE (/I), which
- is completely analogous to /NOIGNORECASE. /I is the default. The only
- reason to use it would be if you have an existing library marked /NOI
- that you wanted to combine with other libraries which were not marked,
- and have the output library be not marked. If you don't use
- /IGNORECASE, the output is marked /NOI (see above).
-
- Changed LIB Error Messages
- --------------------------
- Warning messages U4152, U4155, and U4157-U4159 for LIB are now
- nonfatal error messages U2152, U2155, and U2157-U2159, respectively.
-
- Warning message U4151 has been changed to read as follows:
-
- U4151 '<name>' : symbol defined in module <name>, redefinition ignored
-
- New LIB Error Messages
- ----------------------
- The following new warning messages have been added for LIB:
-
- U4155 <modulename> : module not in library
-
- A module specified to be replaced does not already exist in the
- library. LIB adds the module anyway.
-
- U4157 insufficient memory, extended dictionary not created
- U4158 internal error, extended dictionary not created
-
- For the reason indicated, LIB could not create an extended
- dictionary. The library is still valid, but the linker
- is not able to take advantage of the extended dictionary
- to speed linking.
-
-
- Microsoft Program Maintenance Utility (MAKE)
-
- New Error Message
- -----------------
- U1015: <file> : error redirection failed
-
- This error occurs if the /X option is given and error output cannot
- be redirected to the given file (for example, because the file
- is read-only).
-
- Inference Rules
- ---------------
- You cannot have inference rules in both the TOOLS.INI and the description
- file that use both the same inextension and outextension. For example, you
- cannot place the following inference rule in the TOOLS.INI file:
-
- .c.obj:
- cl /c /Zi /Od $*.c
-
- while also placing the following line in the description file:
-
- .c.obj:
- cl /Ot $*.c
-
- However, you can define the same macro in both the TOOLS.INI and the
- description file. In such cases, the definition in the description file
- takes precedence.
-
- Backslash (\) as Continuation Character
- ---------------------------------------
- Note that MAKE considers a backslash immediately followed by a new-line
- character to be a continuation character. When it finds this combination
- in a description file, MAKE concatenates the line immediately following
- the combination with the line where the combination appears.
-
- If you define a macro that ends in a backslash, make sure that you put a
- space after the terminating backslash. For example, if you want to define
- macros for the path C:\SRC\BIN and C:\SRC\LIB, you must use the format
- illustrated below:
-
- BINPATH=C:\SRC\BIN\<space><newline>
- LIBPATH=C:\SRC\LIB\<space><newline>
-
- To illustrate the problems that can result if you do not put a space before the
- new-line character, assume that the macros above appear as shown below
- instead:
-
- BINPATH=C:\SRC\BIN\<newline>
- LIBPATH=C:\SRC\LIB\<newline>
-
- Because a new-line character appears immediately after the backslash at the end
- of the first macro, MAKE assumes that you are defining the single macro shown
- below:
-
- BINPATH=C:\SRC\BIN\LIBPATH=C:\SRC\LIB\
-
-
-
- Microsoft STDERR Redirection Utility (ERROUT)
-
- The ERROUT utility does not accept batch files. To redirect standard-error
- output from a batch file, you must enter a command of the following form:
-
- ERROUT COMMAND /c <batchcommand>
-
- If no /f option is given, then ERROUT redirects standard-error output to
- the standard-output device.
-
-
- Mixed-Language Programming
-
- Setting Up Calls to High-Level Languages
- ----------------------------------------
- Section 6.6 of the Microsoft Mixed-Language Programming Guide gives in-
- structions for setting up a call to a high-level language from assembly
- language. Before you execute a call to a BASIC, Pascal, or FORTRAN routine,
- remember to declare an additional parameter if the return value is noninteger.
- This additional parameter must contain the offset address of the return value,
- for which you must allocate room within the stack segment (normally DGROUP,
- the same as the default data segment).
-
-
- The BIND Utility
-
- Specifying Libraries
- --------------------
- You need to include DOSCALLS.LIB on the BIND command line. If
- DOSCALLS.LIB is not in the current directory, you must give the
- complete path name to DOSCALLS.LIB.
-
- BIND automatically searches for API.LIB by looking in directories
- listed in the LIB environment variable. However, if API.LIB is
- specified on the command line, then BIND will not check the LIB
- environment variable; instead, you will need to give the complete
- path name.
-
- For example, the following command line successfully uses BIND, if
- API.LIB is located in a directory listed in the LIB environment
- variable:
-
- BIND FOO.EXE \LIB\DOSCALLS.LIB
-
- Using BIND with Packed Files
- ----------------------------
- The version of BIND released with this package does not work with
- files that have been linked with the /EXEPACK linker option.
-
- Running Bound Files with DOS 2.1
- --------------------------------
- A dual-mode executable file produced with BIND can be run in both
- DOS 3.x and DOS 2.x environments. However, if you change the name
- of an executable file produced by BIND, then it will not run under
- DOS 2.1.
-
-
- The Microsoft Incremental Linker (ILINK)
-
- ILINK Fatal Error Messages
- --------------------------
-
- .sym seek error
- .sym read error
-
- The .SYM file is corrupted. Do a full link. If the error
- persists, contact Microsoft.
-
- .sym write error
-
- The disk is full or the .SYM file already exists with the
- READONLY attribute.
-
- map for segment <name> exceeds 64K
-
- The symbolic information associated with the given segment
- exceeds 64K bytes, which is more than ILINK can handle.
-
- can't ilink library <name>
-
- You tried to incrementally link an altered library.
- ILINK does not link .LIB files but only .OBJ files.
- Use a full link instead.
-
- .obj close error
-
- The operating system returned an error when ILINK attempted
- to close one of the .OBJ files. Do a full link. If the error
- persists, contact Microsoft.
-
- too many LNAMES in <modname>
-
- An object module has more than 255 LNAME records.
-
- too many SEGDEFs in <modname>
-
- The given object module has more than 100 SEGDEF records.
-
- too many GRPDEFs in <modname>
-
- The given object module has more than 10 GRPDEF records.
-
- symbol <name> multiply defined
-
- The given symbol is defined more than once.
-
- #3
-
- Please report this error to Microsoft.
-
- Out of Memory
-
- ILINK ran out of memory for processing the input. If you
- are running ILINK under MAKE, try running it from the shell.
- Otherwise, do a full link.
-
- could not run exec
-
- ILINK was unable to find the file EXEC.EXE, which should be
- placed somewhere in the search path or in the current
- directory.
-
- .exe file too big, change alignment
-
- The segment sector alignment value in the .EXE file is too
- small to express the size of one of the segments. Do a full
- link and increase the alignment value with the /ALIGNMENT
- option to LINK.
-
- .ilk seek error
-
- The .ILK file is corrupted. Do a full link. If the error
- persists, contact Microsoft.
-
- Too many defined segments
-
- ILINK has a limit of 255 defined segments, which are segments
- defined in an object module as opposed to an executable segment.
- Reduce the number of segments if you want to use ILINK.
-
- too many library files
-
- ILINK has a limit of 32 runtime libraries (.LIB files). Reduce
- the number of libraries.
-
- too many modules
-
- ILINK has a limit of 1204 modules in a program. Reduce the
- number of modules.
-
- .ilk write error
-
- The disk is full, or else ILINK cannot write to the .SYM file
- because a .SYM file currently exists and has the READONLY attribute.
-
- file <name> does not exist
-
- ILINK was unable to open the given file. The file named was
- in the file list in the .ILK file.
-
- seek error on library
-
- A .LIB file was corrupted. Do a full link and check your .LIB
- files.
-
- library close error
-
- The operating system returned an error when ILINK attempted
- to close one of the .LIB files. Do a full link. If the error
- persists, contact Microsoft.
-
- error closing EXE file
-
- The operating system returned an error when ILINK attempted
- to close the .EXE file. Do a full link. If the error
- persists, contact Microsoft.
-
- Invalid module reference <module>
-
- The program makes a dynamic link reference to a dynamic link
- module which is not represented in the .EXE file.
-
- could not update time on <filename>
-
- The operating system returned an error when ILINK attempted
- to update the time on the given file. Possibly the file had
- the READONLY attribute set.
-
- invalid flag <flag>
- only one -e command allowed
-
- The ILINK command syntax is incorrect.
-
- User Abort
-
- The user issued CTRL+C or CTRL+BREAK.
-
- file <name> write protected
-
- The .EXE, .ILK, or .SYM file needed to be updated and has the
- READONLY attribute. Change attribute to READWRITE.
-
- file <name> missing
-
- One of the .OBJ files specified on the command line is missing.
-
- file <name> invalid .OBJ format
- file <name> has invalid <recordtype> record
-
- The given .OBJ file has an invalid format or one that is not
- recognized by ILINK. This may have been caused by a compiler
- or assembler.
-
- file <module> was not full linked
-
- An .OBJ file was specified as input to ILINK, which was not in
- the list of files in the original full link.
-
- LOBYTE seg-relative fixups not supported
-
- This error message should occur only with MASM files. See the
- Microsoft Macro Assembler 5.0 Programmer's Guide. This type of
- object module is not supported by ILINK.
-
- <number> undefined symbols
-
- The given number of symbols were referred to in fixups but
- never publicly defined in the program.
-
- Incremental Violations
- ----------------------
- These errors cause a full link to occur if the -e option is used and -i
- is not used, else they are fatal errors:
-
- symbol <name> deleted
-
- A symbol was deleted from an incrementally-linked module.
-
- <modname> contains new SEGMENT
-
- A segment was added to the program.
-
- <modname> contains changed segment <name>
-
- The segment contribution (code or data which the module
- contributes to a segment) changed for the given module: it
- contributed to a segment it didn't previously contribute to,
- or a contribution was removed.
-
- <modname>'s segment <name> grew too big
-
- The given segment grew beyond the padding for the given module.
-
- <modname> contains new GROUP <name>
-
- A new group was defined, via the GROUP directive in assembly
- language or via the /ND C compiler option.
-
- <modname> redefines group <name> to include <name>
-
- The members of the given group changed.
-
- symbol <name> changed
-
- The given data symbol was moved.
-
- can't add new communal data symbol <name>
-
- A new communal data symbol was added as an uninitialized variable
- in C or with the COMM feature in MASM.
-
- communal variable <name> grew too big
-
- The given communal variable changed size too much.
-
- invalid symbol type for <name>
-
- A symbol which was previously code became data, or vice versa.
-
- too many COMDEFS
- too many EXTDEFS
-
- The limit on the total of COMDEF records (communal data variables)
- and EXTDEF records (external references) is 2000.
-
- invalid CodeView information in .EXE file
-
- The CodeView information found is invalid.
-
- <name> contains new Codeview symbolic info
-
- A module previously compiled without -Zi was compiled with -Zi.
-
- <name> contains new linnum info
-
- A module previously compiled without -Zi or -Zd was compiled
- with -Zi or -Zd.
-
- <name> contains new public CV info
-
- New information on public-symbol addresses was added.
-
- invalid .exe file
-
- The .EXE file is invalid. Make sure you are using an up-to-date
- linker. If the error persists, contact Microsoft.
-
- invalid .ilk file
- .ilk read error
- .ilk seek error
-
- The .ILK file is invalid. Make sure you are using an up-to-date
- linker. If the error persists, contact Microsoft.
-
- .SYM/.ILK mismatch
-
- The .SYM and .ILK files are out of sync. Make sure you are using
- an up-to-date linker. If the error persists, contact Microsoft.
-
- <libname> has changed
-
- The given library has changed.
-
- can't link 64K-length segments
-
- ILINK cannot handle segments greater than 65,535 bytes long.
-
- can't link iterated segments
-
- ILINK cannot handle programs linked with /EXEPACK.
-
- Entry table expansion not implemented
-
- The program call tree changed in such a way that ILINK could
- not handle it.
-
- file <name> does not exist
-
- The .EXE, .SYM, or .ILK files are missing.
-
- <name> has changed
-
- The given library module name has changed.
-
- ILINK Warning messages
- ----------------------
-
- Fixup frame relative to an (as yet) undefined symbol - assuming ok
-
- See documentation for LINK error messages L4001 and L4002,
- in the Microsoft CodeView and Utilities manual.
-
- <name> contains TYPEDEFs - ignored
- <name> contains BLKDEFs - ignored
-
- The .OBJ file contains records no longer supported by Microsoft
- language compilers.
-
- old .EXE free information lost
-
- The free list in the .EXE file has been corrupted. The free
- list keeps track of "holes" of free space in the EXE file. These
- holes are made available when segments are moved to new locations.
-
- file <name> has no useful contribution
-
- The given module makes no contribution to any segment.
-
- Main entry point moved
-
- The program starting address changed. You may want to consider
- doing a full link.
-
-
- Microsoft Editor
-
- Installing the Editor
- ---------------------
- The Microsoft Editor does not come with an MESETUP program. Instead,
- run the setup program for the assembler. This program offers you choices
- about how to set up the editor.
-
- Keystroke Configurations
- ------------------------
- Some of the keystroke configurations listed in Table A.2 of the
- Microsoft Editor User's Guide may need to be changed.
-
- In the Quick/WordStar configuration, the Sinsert function is assigned
- to ALT+INS, not CTRL+INS.
-
- In the BRIEF configuration, the Plines function is assigned to CTRL+Z,
- and the Refresh function is assigned to CTRL+].
-
- In the EPSILON configuration, the Ppage function is assigned to PGDN,
- and the Sdelete function is assigned to DEL and CTRL+D.
-
- The Compile Function
- --------------------
- The commands
-
- Arg streamarg Compile
- Arg textarg Compile
-
- each use the command specified by the extmake:text switch. The
- editor does not check the extension of the file name given as an
- argument, but instead uses the "text" extension. The streamarg
- or textarg replaces a %s in the command. These commands are typically
- used to invoke MAKE.
-
- The Setfile Function
- --------------------
- The commands that use Setfile, along with a streamarg or textarg,
- accept a variety of input: either the name of a file, a file name
- with a wild-card character (* or ?), the name of a directory, or the
- name of a disk drive. File names can also include environment variables,
- such as $INIT. If the streamarg or textarg is a directory name, then
- the editor changes the current directory. If the argument is a drive
- name, then the editor changes the current drive. Environment variables
- are translated into directories to be searched for a file. For example,
- the following macro directs the editor to search the $INIT environment
- variable in order to find the tools.ini file:
-
- tools.ini := Arg "$INIT:tools.ini" Setfile
- tools.ini :ctrl+j
-
- Entering Strings in Macros
- --------------------------
- When you enter a text argument directly, no characters have special
- meaning (except when the argument is interpreted as a regular
- expression). However, when you enter text as part of a macro, then
- strings inside of quotes are interpreted according to the C string
- format. This format uses a backslash followed by double quotes (\")
- to represent double quotes and it uses two backslashes (\\) to represent
- a single backslash. Therefore, to find the next occurrence of the string
-
- She wrote, "Here is a backslash: \ "
-
- you could use the following macro definition:
-
- findit := Arg "She wrote, \"Here is a backslash: \\ \"" Psearch
-
- Note that to indicate a backslash for a regular expression that is
- also part of a macro definition, you must use four consecutive
- backslashes.
-
-
- Using Text Switches
- -------------------
- The text switches extmake and readonly each take a special
- kind of syntax that allows you to specify drive, file name,
- base name, or file extension. The syntax consists of the
- characters:
-
- %|<letters>F
-
- where <letters> consists of any of the following: "p" for path,
- "d" for drive, "f" for file base name, or "e" for file extension.
- For example, if you are editing the file c:\dir1\sample.c, and you
- make the following switch assignment:
-
- extmake:c cl /Fod:%|pfF %|dfeF
-
- then each time you give the command <Arg><Compile>, the editor
- performs the following system-level command:
-
- cl /Fod:\dir1\sample c:sample.c
-
- The expression "%s" is equivalent to "%|feF" except that the former
- only works once, whereas the latter can appear any number of times
- in the extmake switch assignment. The expression "%|F" is equivalent
- to "%|dpfeF".
-
- The Filetab Switch
- ------------------
- The filetab switch is a numeric switch that determines how the
- editor translates tabs when loading a file into memory. The value
- of the switch gives the number of spaces associated with each tab
- column. For example, the setting "filetab:4" assumes a tab column
- every 4 positions on each line. Every time the editor finds a tab
- character in a file, it loads the buffer with the number of spaces
- necessary to get to the next tab column. Depending on the value of
- the entab switch, the editor also uses the filetab switch to determine
- how to convert spaces into tabs when writing to a file. The default
- value of filetab is 8.
-
-
- Functions Callable by C Extensions
- ----------------------------------
- The following list summarizes functions from the standard compact-
- memory-model library, which should work when called by a C-extension
- module. (The technique of programming C extensions is presented in
- Chapter 8 of the Microsoft Editor User's Guide.) The memory model
- of the extension is assumed to be /Asfu (small code pointers, far
- data pointers, and stack segment unequal to data segment). This list
- uses the function categories from Chapter 4 of the Microsoft C
- Optimizing Compiler Run-Time Library Reference (Version 4.0
- or later.)
-
- Buffer Manipulation: All functions can be called.
-
- Character Classification and Conversion: All functions can be called.
-
- Data Conversion: All functions can be called except for
-
- strtod()
-
- Directory Control: All functions can be called except for
-
- getcwd()
-
- File Handling: All functions can be called.
-
- Low-Level I/O Routines: All functions can be called, but write()
- will not work in binary mode.
-
- Console and Port I/O: All functions can be called except for
-
- cgets()
- cprintf()
- cscanf()
-
- Searching and Sorting: All functions can be called except for
-
- qsort()
-
- String Manipulation: All functions can be called except for
-
- strdup()
-
- BIOS Interface: All functions can be called.
-
- MS-DOS Interface: All functions can be called except for
-
- int86()
- int86x()
-
- Time: All functions can be called except for
-
- ctime()
- gmtime()
- localtime()
- utime()
-
- Miscellaneous: All functions can be called except for
-
- assert()
- getenv()
- perror()
- putenv()
- _searchenv()
-
-
- Linking Extensions in Protected Mode
- --------------------------------------
- To link C extension modules in protected mode, link with the
- object file EXTHDRP.OBJ, instead of the real-mode header
- EXTHDR.OBJ.
-