Annotation of mstools/readme.txt, revision 1.1

1.1     ! root        1:                            LANGREAD.TXT File
        !             2:          README file for Microsoft(R) Windows NT(TM) SDK (BETA)
        !             3:                             Development Tools
        !             4:                  (C) Copyright Microsoft Corporation, 1992
        !             5: 
        !             6: This document contains release notes for the developent tools, C/C++
        !             7: language, and libraries provided with the Microsoft(R) Windows NT(TM)
        !             8: Software Development Kit (BETA). The information in this file is newer,
        !             9: and therefore supersedes any similar information in the printed
        !            10: manuals.
        !            11: 
        !            12: 
        !            13: ================================< Contents >================================
        !            14: 
        !            15: 
        !            16:      This file has six parts:
        !            17: 
        !            18:                Part     Title
        !            19:                ----     -----
        !            20:                1        Additional 32-bit Run-time Functions:
        !            21:                        _find Functions 
        !            22:                        _seterrormode   
        !            23:                        _loaddll        
        !            24:                        _unloaddll      
        !            25:                        _getdllprocaddr 
        !            26:                        _getdiskfree    
        !            27:                        _sleep  
        !            28:                        _beep   
        !            29:                        _getsystime     
        !            30:                        _setsystime     
        !            31:                        _futime 
        !            32:                        _getdrives
        !            33:                        _get_osfhandle
        !            34:                        _open_osfhandle
        !            35: 
        !            36:                2        Further note on the _beginthread function      
        !            37: 
        !            38:                3        Notes on "C Language Reference"
        !            39: 
        !            40:                4        Linker Options
        !            41: 
        !            42:                5        Building Multithreaded Applications and DLLs
        !            43: 
        !            44:                6        The WinDebug Graphical Debugger
        !            45: 
        !            46: ===============< Part 1: Additional 32-bit Run-time Functions >=========
        !            47: 
        !            48: In addition to the 32-bit C run-time functions listed in the appendix
        !            49: to the Programming Techniques manual, the following routines are
        !            50: specific to 32-bit operating systems:
        !            51: 
        !            52: _find Functions
        !            53: ***************
        !            54: 
        !            55: Description
        !            56: ===========
        !            57: Find the first matching file, find the next matching file, or release
        !            58: resources from previous find operations.
        !            59: 
        !            60: #include <io.h>        
        !            61: 
        !            62: long _findfirst( char *filespec, struct _finddata_t *fileinfo );
        !            63: int _findnext( long handle, struct _finddata_t *fileinfo );
        !            64: int _findclose( long handle );
        !            65: 
        !            66: filespec               Target file specification (may include
        !            67:                        wildcards)
        !            68: handle                 Search handle returned by a previous call to
        !            69:                        _findfirst
        !            70: fileinfo               File information buffer
        !            71: 
        !            72: Remarks
        !            73: =======
        !            74: The _findfirst routine returns information about the first instance of
        !            75: a file whose name matches the filename argument. The filename argument
        !            76: may use wildcards (* and ?). Any wildcard combination supported by the
        !            77: host operating system may be used.
        !            78: 
        !            79: Information is returned in a _finddata_t structure, defined in IO.H.
        !            80: The _finddata_t structure contains the following elements:
        !            81: 
        !            82: Element                                Description
        !            83: -------                                -----------
        !            84: unsigned attrib                        File attribute
        !            85: 
        !            86: time_t time_create             Time of file creation (-1 for FAT file
        !            87:                                systems)
        !            88: 
        !            89: time_t time_access             Time of last file access (-1 for FAT file 
        !            90:                                systems)
        !            91: 
        !            92: time_t time_write              Time of last write to file
        !            93: 
        !            94: _fsize_t size                  Length of file in bytes
        !            95: 
        !            96: char name[_MAX_FNAME]          Null-terminated name of matched 
        !            97:                                file/directory, without the path
        !            98: 
        !            99: _MAX_FNAME is defined in STDLIB.H.
        !           100: 
        !           101: Unlike its MS-DOS counterpart, _findfirst does not allow the programmer
        !           102: to specify target attributes (_A_RDONLY, etc.) by which to limit the
        !           103: find operation. This attribute is returned in the attrib field of the
        !           104: _finddata_t structure and can have the following values (defined in
        !           105: IO.H):
        !           106: 
        !           107: Constant       Meaning                                 Value
        !           108: --------       -------                                 -----
        !           109: _A_ARCH                Archive. Set whenever the file          0x20
        !           110:                is changed, and cleared by the 
        !           111:                MS-DOS BACKUP command.
        !           112: 
        !           113: _A_HIDDEN      Hidden file. Cannot be found            0x02
        !           114:                with the MS-DOS DIR command. Returns 
        !           115:                information about normal files as well 
        !           116:                as about files with this attribute.
        !           117: 
        !           118: _A_NORMAL      Normal. File can be read or written     0x00
        !           119:                without restriction.
        !           120: 
        !           121: _A_RDONLY      Read-only. File cannot be opened for    0x01
        !           122:                writing, and a file with the same name 
        !           123:                cannot be created. Returns information 
        !           124:                about normal files as well as about 
        !           125:                files with this attribute.
        !           126: 
        !           127: _A_SUBDIR      Subdirectory. Returns information about 0x10
        !           128:                normal files as well as about files 
        !           129:                with this attribute.
        !           130: 
        !           131: _A_SYSTEM      System file. Cannot be found with the   0x04
        !           132:                MS-DOS DIR command. Returns information 
        !           133:                about normal files as well as about 
        !           134:                files with this attribute.
        !           135: 
        !           136: The _findnext routine finds the next name, if any, that matches the
        !           137: filespec argument specified in a prior call to _findfirst. The fileinfo
        !           138: argument should point to a structure initialized by a previous call to
        !           139: _findfirst. The contents of the structure will be altered as described
        !           140: above if a match is found.
        !           141: 
        !           142: The _findclose routine closes the specified search handle and releases
        !           143: associated resources.
        !           144: 
        !           145: The _find functions allow nested calls. For example, if the file found
        !           146: by a call to _findfirst or _findnext is a subdirectory, a new search
        !           147: can then be initiated with another call to _findfirst or _findnext.
        !           148: 
        !           149: Return Value
        !           150: ============
        !           151: If successful, the _findfirst function returns a unique search handle
        !           152: identifying the file or group of files matching the filespec
        !           153: specification which can be used in a subsequent call to _findnext or
        !           154: _findclose. Otherwise, it returns -1 and sets errno to one of the
        !           155: following values:
        !           156: 
        !           157: Value                          Description
        !           158: -----                          -----------
        !           159: ENOENT                         filespec could not be matched
        !           160: 
        !           161: EINVAL                         Illegal filename specification
        !           162: 
        !           163: If successful, the _findnext and _findclose functions return 0.
        !           164: Otherwise, they return -1 and set errno to ENOENT, indicating that no
        !           165: more matching files could be found. Although each search operation
        !           166: returns its own unique handle, the same
        !           167: 
        !           168: _seterrormode
        !           169: *************
        !           170: 
        !           171: Description
        !           172: ===========
        !           173: Controls whether the operating system handles hard errors or allows the
        !           174: calling application to handle them.
        !           175: 
        !           176: #include <stdlib.h>
        !           177: 
        !           178: void _seterrormode( int mode );
        !           179: 
        !           180: mode                   Error mode
        !           181: 
        !           182: Remarks
        !           183: =======
        !           184: The mode argument specifies the error-mode flag. If mode is set to
        !           185: _CRIT_ERROR_PROMPT, The system displays an error message prompt
        !           186: indicating that a hard error has occurred. If mode is set to
        !           187: _CRIT_ERROR_FAIL, the system returns the failed call to the calling
        !           188: application with an error indicating the cause.
        !           189: 
        !           190: Return Value
        !           191: ============
        !           192: None.
        !           193: 
        !           194: _loaddll
        !           195: ********
        !           196: 
        !           197: Description
        !           198: ===========
        !           199: Loads the specified DLL into memory.
        !           200: 
        !           201: #include <process.h>
        !           202: 
        !           203: int _loaddll( char *dllname );
        !           204: 
        !           205: dllname                Null-terminated string that names the DLL to
        !           206:                        be loaded.
        !           207: 
        !           208: Remarks
        !           209: =======
        !           210: The _loaddll routine loads the specified Dynamic Link Library. If the
        !           211: dllname argument does not include a fully-qualified path name, the
        !           212: library is searched for according to the search path specified by the
        !           213: host operating system.
        !           214: 
        !           215: Return Value
        !           216: ============
        !           217: If successful, the _loaddll routine returns a unique handle to the DLL.
        !           218: Otherwise, it returns 0.
        !           219: 
        !           220: _unloaddll
        !           221: **********
        !           222: 
        !           223: Description
        !           224: ===========
        !           225: Unloads the specified DLL from the current process.
        !           226: 
        !           227: #include <process.h>
        !           228: 
        !           229: int _unloaddll( int handle );
        !           230: 
        !           231: handle                 Handle to the loaded DLL, from a previous call
        !           232:                        to _loaddll.
        !           233: 
        !           234: Remarks
        !           235: =======
        !           236: The _unloaddll routine unloads the specified DLL. The DLL�s resources
        !           237: may be freed if no other processes are using it.
        !           238: 
        !           239: Return Value
        !           240: ============
        !           241: If successful, the _unloaddll routine returns 0. Otherwise, it returns
        !           242: an operating system error code.
        !           243: 
        !           244: _getdllprocaddr
        !           245: ***************
        !           246: 
        !           247: Description
        !           248: ===========
        !           249: Returns the address of the specified exported DLL function.
        !           250: 
        !           251: #include <process.h>
        !           252: 
        !           253: int (* _getdllprocaddr(int handle, char *procname, int ordinal))();
        !           254: 
        !           255: handle                 Handle to DLL module that contains the function
        !           256:                        (returned by previous call to _loaddll)
        !           257: 
        !           258: procname               Pointer to null-terminated string containing
        !           259:                        the function name, or NULL if the function's
        !           260:                        ordinal value is to be used.
        !           261: 
        !           262: ordinal                Function's ordinal value, or -1 if the
        !           263:                        function's name is to be used.
        !           264: 
        !           265: Remarks
        !           266: =======
        !           267: The _getdllprocaddr routine retrieves the address of exported
        !           268: functions in DLLs. The function can be specified by name or by ordinal
        !           269: value. The retrieved address can then be called as a function pointer.
        !           270: 
        !           271: Return Value
        !           272: ============
        !           273: If successful, the _getdllprocaddr function returns a pointer to the
        !           274: function's entry point. Otherwise, it returns NULL.
        !           275: 
        !           276: _getdiskfree
        !           277: ************
        !           278: 
        !           279: Description
        !           280: ===========
        !           281: Retrieves information about the current or specified disk drive,
        !           282: including the amount of free space on the disk.
        !           283: 
        !           284: include <direct.h>
        !           285: include <dos.h>
        !           286: 
        !           287: int _getdiskfree( unsigned drive, struct _diskfree_t diskinfo );
        !           288: 
        !           289: drive                  Specified drive number. This argument is 0 for
        !           290:                        the current drive, or 1-26 for another
        !           291:                        specified disk drive.
        !           292: 
        !           293: diskinfo               Disk information structure
        !           294: 
        !           295: Remarks
        !           296: =======
        !           297: The _getdiskfree function retrieves information about the specified
        !           298: disk drive. This information is returned in a _diskfree_t structure,
        !           299: which is defined in DIRECT.H and has the following fields:
        !           300: 
        !           301: Element                                Description
        !           302: -------                                -----------
        !           303: unsigned total_clusters                Total number of clusters on the disk
        !           304: 
        !           305: unsigned avail_clusters                Total number of free clusters on the disk
        !           306: 
        !           307: unsigned sectors_per_cluster   Number of sectors per cluster
        !           308: 
        !           309: unsigned bytes_per_sector      Number of bytes per sector
        !           310: 
        !           311: Return Value
        !           312: ============
        !           313: If successful, the _getdiskfree routine returns 0. Otherwise, it
        !           314: returns an operating system error code.
        !           315: 
        !           316: _sleep
        !           317: ******
        !           318: 
        !           319: Description
        !           320: ===========
        !           321: Delays execution of the current thread or process for a specified
        !           322: interval.
        !           323: 
        !           324: include <stdlib.h>
        !           325: 
        !           326: void _sleep( unsigned long duration );
        !           327: 
        !           328: duration               Specifies the relative time, in milliseconds,
        !           329:                        that the delay is to occur.
        !           330: 
        !           331: Remarks
        !           332: =======
        !           333: In multithreaded operating systems, the _sleep routine causes the
        !           334: current thread to enter a waiting state until the specified interval of
        !           335: time has passed. In single- threaded operating systems, the _sleep
        !           336: routine causes the current process to be delayed. During the delay,
        !           337: other threads or processes can continue execution. With MS-DOS, yield
        !           338: messages are sent periodically which can be handled by Windows or other
        !           339: multitasking operating systems.
        !           340: 
        !           341: The duration argument indicates the length of the interval in
        !           342: milliseconds. It can also be one of the following two values:
        !           343: 
        !           344: Constant                       Value
        !           345: --------                       -----
        !           346: _SLEEP_MINIMUM                 Function returns immediately
        !           347: 
        !           348: _SLEEP_FOREVER                 Infinite delay
        !           349: 
        !           350: Note that in non-preemptive multitasking operating systems (such as
        !           351: Windows), the duration may be longer than specified, since other
        !           352: processes may not return control at the end of the delay.
        !           353: 
        !           354: Return Value
        !           355: ============
        !           356: None.
        !           357: 
        !           358: _beep
        !           359: *****
        !           360: 
        !           361: Description
        !           362: ===========
        !           363: Generates simple tones on the speaker.
        !           364: 
        !           365: #include <stdlib.h>
        !           366: 
        !           367: void _beep( unsigned frequency, unsigned duration );
        !           368: 
        !           369: frequency              Specifies the frequency of the sound in hertz.
        !           370:                        Audible sounds will be generated by frequencies
        !           371:                        between 37 (25 hex) and 32767 (07FFF hex).
        !           372: 
        !           373: duration               Specifies the duration of the sound in
        !           374:                        milliseconds. See the description of the _sleep
        !           375:                        function for possible values. Note that in
        !           376:                        non-preemptive multitasking operating systems
        !           377:                        (such as Windows), the duration may be longer
        !           378:                        than specified, since other processes may not
        !           379:                        return control at the end of the delay.
        !           380: 
        !           381: Return Value
        !           382: ============
        !           383: None.
        !           384: 
        !           385: _getsystime
        !           386: ***********
        !           387: 
        !           388: Description
        !           389: ===========
        !           390: Retrieves the current system time.
        !           391: 
        !           392: #include <time.h>
        !           393: 
        !           394: unsigned _getsystime( struct tm *tmstruct );
        !           395: 
        !           396: tmstruct               Pointer to a tm time structure containing
        !           397:                        information about the system date and time.
        !           398: 
        !           399: Remarks
        !           400: =======
        !           401: The _getsystime routine fills in a tm time structure (defined in
        !           402: TIME.H) with information about the system date and time. The routine
        !           403: then returns the fractional portion of the nearest second, in
        !           404: milliseconds.
        !           405: 
        !           406: Return Value
        !           407: ============
        !           408: The _getsystime function returns the fractional portion of the nearest
        !           409: second, in milliseconds.
        !           410: 
        !           411: _setsystime
        !           412: ***********
        !           413: 
        !           414: Description
        !           415: ===========
        !           416: Sets the current system time.
        !           417: 
        !           418: #include <time.h>
        !           419: 
        !           420: unsigned _setsystime( struct tm *tmstruct, unsigned milliseconds );
        !           421: 
        !           422: tmstruct               Pointer to a tm time structure containing
        !           423:                        information about the system date and time
        !           424: 
        !           425: milliseconds           Fractional portion of nearest second, in
        !           426:                        milliseconds
        !           427: 
        !           428: Remarks
        !           429: =======
        !           430: The _setsystime routine sets the current system time to the specified
        !           431: time.
        !           432: 
        !           433: Return Value
        !           434: ============
        !           435: If successful, the _setsystime routine returns 0. Otherwise, it
        !           436: returns an operating system error code.
        !           437: 
        !           438: _futime
        !           439: *******
        !           440: 
        !           441: Description
        !           442: ===========
        !           443: Sets the modification time on an open file.
        !           444: 
        !           445: #include <\sys\utime.h>
        !           446: 
        !           447: int _futime( int handle, struct _utimbuf *filetime );
        !           448: 
        !           449: handle                 Handle to open file
        !           450: 
        !           451: filetime               Pointer to structure containing new
        !           452:                        modification date
        !           453: 
        !           454: Remarks
        !           455: =======
        !           456: The _futime routine sets the modification date on the open file
        !           457: associated with handle. It is identical to the _utime function, except
        !           458: that its argument is the handle to an open file, rather than the name
        !           459: of a file or a path to a file. Although the _utimbuf structure contains
        !           460: a field for access time, only the modification time is set with systems
        !           461: that do not support access time (such as MS- DOS).
        !           462: 
        !           463: Return Value
        !           464: ============
        !           465: The _futime function returns 0 if successful. A return value of -1
        !           466: indicates an error; in this case, errno is set to EBADF, indicating an
        !           467: invalid file handle.
        !           468: 
        !           469: _getdrives
        !           470: **********
        !           471: 
        !           472: Description
        !           473: ===========
        !           474: Returns a bitmask representing the currently available disk drives.
        !           475: 
        !           476: #include <direct.h>
        !           477: 
        !           478: unsigned long _getdrives ( void );
        !           479: 
        !           480: Return Value
        !           481: ============
        !           482: The return value is a bit map with bits set for each currently
        !           483: available disk drive. Bit position 0 (the least-significant bit) is
        !           484: drive A, bit position 1 is drive B, bit position 2 is drive C, and so
        !           485: on.
        !           486: 
        !           487: _get_osfhandle
        !           488: **************
        !           489: 
        !           490: Description
        !           491: ===========
        !           492: Associates an operating system file handle with an existing C run-time
        !           493: file handle.
        !           494: 
        !           495: #include <io.h>
        !           496: 
        !           497: long _get_osfhandle( int filehandle );
        !           498: 
        !           499: filehandle             User file handle
        !           500: 
        !           501: Return Value
        !           502: ============
        !           503: If successful, the _get_osfhandle routine returns an operating system
        !           504: file handle, corresponding to filehandle. Otherwise, it returns -1 and
        !           505: sets errno to EBADF, indicating an invalid file handle.
        !           506: 
        !           507: _open_osfhandle
        !           508: ***************
        !           509: 
        !           510: Description
        !           511: ===========
        !           512: Associates a C run-time file handle with an existing operating system
        !           513: file handle.
        !           514: 
        !           515: #include <io.h>
        !           516: 
        !           517: int _open_osfhandle( long osfhandle, int flags );
        !           518: 
        !           519: osfhandle              Operating system file handle
        !           520: 
        !           521: flags                  Type of operations allowed
        !           522: 
        !           523: Remarks
        !           524: =======
        !           525: The _open_osfhandle routine allocates a C run-time file handle and
        !           526: sets it to point to the operating system file handle specified by
        !           527: osfhandle. The flags argument is an integer expression formed from one
        !           528: or more of the manifest constants defined in FCNTL.H and listed below.
        !           529: When two or more manifest constants are used to form the flags
        !           530: argument, the constants are combined with the bitwise-OR operator (|).
        !           531: 
        !           532: The FCNTL.H file defines the following manifest constants:
        !           533: 
        !           534: Constant               Meaning
        !           535: --------               -------
        !           536: _O_APPEND              Repositions the file pointer to the end of the
        !           537:                        file before every write operation.
        !           538: 
        !           539: _O_RDONLY              Opens file for reading only.
        !           540: 
        !           541: _O_TEXT                Opens file in text (translated) mode.
        !           542: 
        !           543: Return Value
        !           544: ============
        !           545: If successful, the _open_osfhandle function returns a C run-time file
        !           546: handle. Otherwise, it returns -1.
        !           547: 
        !           548: 
        !           549: =============< Part 2: Further note on the _beginthread function >==============
        !           550: 
        !           551: Windows NT handles the allocation of the stack when the _beginthread
        !           552: routine is called. Therefore, unlike previous 16-bit versions of the
        !           553: function, the programmer does not need to pass the address of the
        !           554: thread stack to _beginthread. The following description supersedes the
        !           555: information in the appendix to the Programming Techniques manual:
        !           556: 
        !           557: unsigned long _beginthread( void( *start_address )( void * ), unsigned 
        !           558: stack_size, void *arglist );
        !           559: 
        !           560: start_address          Starting address of thread
        !           561: stack_size             Stack size for thread
        !           562: arglist                        Argument list for thread
        !           563: 
        !           564: =====================< Part 3: C Language Reference >================================
        !           565: 
        !           566: The following information is 16- and 32-bit specific information that
        !           567: supersedes the information listed on the corresponding pages of the
        !           568: Microsoft C/C++ C Language Reference manual.
        !           569: 
        !           570: Page 5
        !           571: The following keywords are not supported for 32-bit targets: __far,
        !           572: __fortran, __huge, __interrupt, __loadds, __pascal, __saveregs,
        !           573: __segment, __self. Limited 32-bit support is available for __based. The
        !           574: __try, __except and __finally keywords are supported only for 32-bit
        !           575: compilations.
        !           576: 
        !           577: Page 13
        !           578: For 32-bit targets, the values of long double are the same as for double.
        !           579: 
        !           580: Page 48
        !           581: The 32-bit compiler ignores the register keyword.
        !           582: 
        !           583: Page 56
        !           584: The 32-bit compiler ignores the use of the __near keyword.
        !           585: 
        !           586: Page 57
        !           587: The 32-bit compiler does not allow the use of the __far keyword.
        !           588: 
        !           589: Page 57
        !           590: The 32-bit compiler does not allow the use of the __huge keyword.
        !           591: 
        !           592: Page 57
        !           593: For 32-bit targets, __based specifies that a pointer is a 32-bit offset
        !           594: from a 32-bit base.
        !           595: 
        !           596: Page 57
        !           597: The __fortran and __pascal keywords are not accepted for 32-bit targets.
        !           598: 
        !           599: Page 58
        !           600: The __cdecl calling convention is the default for 32-bit targets. 
        !           601: 
        !           602: Page 58
        !           603: The 32-bit compiler uses the ECX and EDX registers, but Microsoft
        !           604: reserves the right to change the registers and implementation of the
        !           605: __fastcall calling convention between releases of the compiler.
        !           606: 
        !           607: Page 59
        !           608: The __segment keyword is not supported by the 32-bit compiler.
        !           609: 
        !           610: Page 70
        !           611: The default packing size is 4 for 32-bit targets.
        !           612: 
        !           613: Page 71
        !           614: Bit fields default to size long for the 32-bit compiler.
        !           615: 
        !           616: Page 76
        !           617: For 32-bit targets, size_t is unsigned long and the __huge keyword is
        !           618: not required.
        !           619: 
        !           620: Page 80
        !           621: The __segment type and the built-in function __segname are not
        !           622: supported by the 32-bit compiler.
        !           623: 
        !           624: Page 82
        !           625: Pointers based on pointers are the only form of the __based keyword
        !           626: valid in 32-bit compilations. In such compilations, they are 32-bit
        !           627: displacements from a 32-bit base.
        !           628: 
        !           629: Page 84
        !           630: Pointers based on __self are not available for 32-bit targets.
        !           631: 
        !           632: Page 95
        !           633: On 32-bit computers, sizeof is unsigned long.
        !           634: 
        !           635: Page 100
        !           636: The 32-bit compiler maps long double to type double.
        !           637: 
        !           638: Page 121
        !           639: The base operator is not supported for 32-bit targets. 
        !           640: 
        !           641: Page 169
        !           642: The use of the __near keyword is ignored by the 32-bit compiler. 
        !           643: 
        !           644: Page 169
        !           645: The use of the __far keyword is illegal for 32-bit targets.
        !           646: 
        !           647: Page 170
        !           648: The __fortran and __pascal keywords are illegal for 32-bit targets.
        !           649: 
        !           650: Page 175
        !           651: For 16-bit targets, the __interrupt keyword specifies that the function
        !           652: is an interrupt handler. The  compiler generates appropriate entry and
        !           653: exit sequences for the handling function, including saving and
        !           654: restoring all registers and executing an IRET instruction to return.
        !           655: Use this form to specify an interrupt function:
        !           656: 
        !           657: __interrupt declarator
        !           658: 
        !           659: where declarator is the name of the function to be called. An interrupt
        !           660: function must be __far. If you are compiling with the small (default)
        !           661: or compact memory model, you must explicitly declare the function with
        !           662: the __far attribute. An interrupt function cannot be declared as an
        !           663: inline function.
        !           664: 
        !           665: Interrupt functions must observe the C calling convention. If you use
        !           666: the /Gc compiler option (forcing the __pascal or __fortran calling
        !           667: convention) or the /Gr compiler option (forcing the __fastcall calling
        !           668: convention), you must explicitly declare your interrupt-handling
        !           669: function with the __cdecl attribute.
        !           670: 
        !           671: You cannot declare an interrupt function with both the __interrupt
        !           672: attribute and the __saveregs attribute or the __fastcall calling
        !           673: convention.
        !           674: 
        !           675: This example statement declares a function pointer that can be used to
        !           676: point to an interrupt handler:
        !           677: 
        !           678: void ( __interrupt __far *oldtime ) ( void );
        !           679: 
        !           680: Page 175
        !           681: The __interrupt keyword is illegal in 32-bit targets. See Help for
        !           682: more information on writing interrupt functions.
        !           683: 
        !           684: Page 176
        !           685: The __loadds keyword is not supported in 32-bit targets.
        !           686: 
        !           687: Page 176
        !           688: The __saveregs keyword is not supported in 32-bit targets. 
        !           689: 
        !           690: Page 199
        !           691: The following predefined macros are for 16-bit targets only:
        !           692: 
        !           693: Identifier             Function
        !           694: ----------             --------
        !           695: _DLL                   Code for run-time library as a dynamic-link
        !           696:                        library. Defined when /MD is specified. (For
        !           697:                        16-bit targets only.)
        !           698: 
        !           699: _FAST                  Fast-compile. Defined when /f is specified
        !           700:                        (the default). Supersedes _QC, which is still
        !           701:                        supported but not recommended. Using /Od causes
        !           702:                        CL to compile your program with /f. The /f
        !           703:                        option compiles source files without any default
        !           704:                        optimizations.(For 16-bit targets only.)
        !           705: 
        !           706: M_I8086, _M_I8086      Defined for 8086 and 8088 processors (default
        !           707:                        or /G0 option) (For 16-bit targets only.)
        !           708: 
        !           709: M_I286, _M_I286        Defined for 80286 processor (/G1 or /G2 option).
        !           710:                        (For 16-bit targets only.)
        !           711: 
        !           712: M_I86mM, _M_I86mM      Always defined.  Identifies memory model, where
        !           713:                        `m' is either T (tiny model), S (small model),
        !           714:                        C (compact model), M (medium model), L (large
        !           715:                        model), or H (huge model). Defined by /AT, /AS,
        !           716:                        /AC, /AM, /AL and /AH, respectively. If huge
        !           717:                        model is used, both M_I86LM and M_I86HM are
        !           718:                        defined. Small model is the default. (For
        !           719:                        16-bit targets only.)
        !           720: 
        !           721: _PCODE                 Defined for sections of code that are compiled
        !           722:                        as pcode. Defined when /Oq is enabled. (For
        !           723:                        16-bit targets only.)
        !           724: 
        !           725: _QC                    Supported for compatibility with Microsoft C
        !           726:                        version 6.0. The _FAST macro (or /f) is the
        !           727:                        default for C8 and is the recommended
        !           728:                        alternative. (For 16-bit targets only.)
        !           729: 
        !           730: _WINDLL                Windows protected-mode dynamic-link library is
        !           731:                        selected with /GD. (For 16-bit targets only.)
        !           732: 
        !           733: _WINDOWS               Windows protected mode is selected with /GA,
        !           734:                        /Gn, /GW, /Mq, or /GD. (For 16-bit targets
        !           735:                        only.)
        !           736: 
        !           737: Page 199
        !           738: The following predefined macro is for 32-bit targets only:
        !           739: 
        !           740: Identifier             Function
        !           741: ----------             --------
        !           742: _M_IX86                Defined as 300 for the 80386 processor (/G3
        !           743:                        option) and as 400 for the 80486 (/G4) processor.
        !           744: 
        !           745: Page 210
        !           746: The following pragmas are for 16-bit targets only:
        !           747: 
        !           748: #pragma check_pointer ([[{ on | off }]])
        !           749: ----------------------------------------
        !           750: Instructs the compiler to turn off pointer checking if off is
        !           751: specified, or to turn on pointer checking if on is specified. If turned
        !           752: on, this pragma causes the compiler to check every pointer dereference
        !           753: to make sure the pointer is not a null or out- of-range pointer. The
        !           754: check_pointer pragma is also enabled with the /Zr command-line option,
        !           755: which is only available with the /f option. If you do not specify
        !           756: either on or off, the effect of check_pointer is to reverse the
        !           757: current state of pointer checking. If pointer checking is on, it is
        !           758: turned off and vice versa.
        !           759: 
        !           760: This pragma works function by function, not statement by statement. To
        !           761: use this pragma, place a pair of check_pointer pragmas around any
        !           762: function definition that contains pointer usage you want to check.
        !           763: 
        !           764: #pragma code_seg ( [[ "segment-name" [[, "segment-class"]] )
        !           765: ------------------------------------------------------------
        !           766: Specifies a segment where functions are to be allocated, allowing the
        !           767: use of based allocation without rewriting code. The code_seg pragma
        !           768: specifies the default segment for functions. This is equivalent to
        !           769: using the /NT (name of TEXT segment) compilation option. It is also
        !           770: equivalent to specifying functions as based. You can, optionally,
        !           771: specify the class as well as the segment name. For example:
        !           772: 
        !           773: #pragma code_seg( "MY_CODE", "CODE" )
        !           774: 
        !           775: The preceding example causes functions following to be allocated in a
        !           776: segment called MY_CODE. The segment is given a CODE class.
        !           777: 
        !           778: Specifying the code_seg pragma with no arguments causes the compiler
        !           779: to allocate all following functions in the default code segment called
        !           780: MY_CODE. The segment is given a CODE class.
        !           781: 
        !           782: Note
        !           783: ----
        !           784: There is no way to specify the segment class using based function
        !           785: allocation or the /NT compilation option.
        !           786: 
        !           787: Functions allocated using the /NT option or code_seg pragma do not
        !           788: retain any information about their location. However, functions
        !           789: allocated using the based function-allocation syntax retain that
        !           790: information in their external name.
        !           791: 
        !           792: #pragma data_seg ( [[ "segment-name"[[, "segment-class"]] )
        !           793: -----------------------------------------------------------
        !           794: Specifies the default segment for data. This is equivalent to using the
        !           795: /ND (name of DATA segment) compilation option. It is also equivalent to
        !           796: specifying objects or pointers as based. You can, optionally, specify
        !           797: the class as well as the segment name. For example:
        !           798: 
        !           799: #pragma data_seg( "MY_DATA", "DATA" )
        !           800: 
        !           801: The preceding example causes functions following to be allocated in a
        !           802: segment called MY_DATA. The segment is given a DATA class.
        !           803: 
        !           804: Specifying the data_seg pragma with no arguments causes the compiler
        !           805: to allocate all following data in the default data segment called
        !           806: MY_DATA. The segment is given a DATA class.
        !           807: 
        !           808: Note
        !           809: ----
        !           810: There is no way to specify the segment class using based function
        !           811: allocation or the /ND compilation option.
        !           812: 
        !           813: Data allocated using the /ND option or data_seg pragma do not retain
        !           814: any information about their location. However, data allocated using the
        !           815: based syntax retain that information in their external name.
        !           816: 
        !           817: If you compile with /Za, the data_seg pragma does not affect the
        !           818: allocation of uninitialized objects. This is true under /Za. However,
        !           819: under /Ze the uninitialized objects also get allocated in the segment
        !           820: specified by the data_seg pragma.
        !           821: 
        !           822: #pragma native_caller ( [[ { on | off } ]] )
        !           823: --------------------------------------------
        !           824: Controls the removal of native-code entry points from within source
        !           825: code on a function by function basis. To suppress all native entry
        !           826: points, use the /Gn command-line option. See the Programming Techniques
        !           827: manual for more information about p-code.
        !           828: 
        !           829: Page 210
        !           830: #pragma alloc_text( textsegment, function1, ...)
        !           831: ------------------------------------------------
        !           832: Names the segment where the specified function definitions are to
        !           833: reside. This must occur between a function declarator and the function
        !           834: definition for the named functions.
        !           835: 
        !           836: The recommended technique for functions in 16-bit targets is to use
        !           837: __based to specify the function location.
        !           838: 
        !           839: Use the alloc_text pragma for 32-bit targets since __based is not
        !           840: supported for functions in 32-bit targets.
        !           841: 
        !           842: Page 211
        !           843: #pragma intrinsic( function1 [[, function2, ...]] )
        !           844: ---------------------------------------------------
        !           845: Specifies that calls to the specified functions are intrinsic (a
        !           846: library function known to the compiler). Alternatively, you can use the
        !           847: /Oi option to make intrinsic the default for functions that have
        !           848: intrinsic forms. In this case, you can use the function pragma to
        !           849: override /Oi for specified functions. This pragma cannot be used with
        !           850: /f. This pragma takes effect at the first function defined after the
        !           851: pragma is seen.
        !           852: 
        !           853: The following functions have intrinsic forms for both the 16-bit and
        !           854: 32-bit compilers:
        !           855: 
        !           856: _alloca
        !           857: _disable
        !           858: _enable
        !           859: _inp
        !           860: _inpw
        !           861: _lrotl
        !           862: _lrotr
        !           863: _outp
        !           864: _outpw
        !           865: _rotl
        !           866: _rotr
        !           867: _strset
        !           868: abs
        !           869: acos
        !           870: asin
        !           871: atan
        !           872: atan2
        !           873: ceil
        !           874: cos
        !           875: cosh
        !           876: exp
        !           877: fabs
        !           878: floor
        !           879: fmod
        !           880: labs
        !           881: log
        !           882: log10
        !           883: memcmp
        !           884: memcpy
        !           885: memset
        !           886: pow
        !           887: sin
        !           888: sinh
        !           889: sqrt
        !           890: strcat
        !           891: strcmp
        !           892: strcpy
        !           893: strlen
        !           894: tan
        !           895: tanh
        !           896: 
        !           897: The following functions have intrinsic forms for the 16-bit compiler
        !           898: only:
        !           899: 
        !           900: _acosl
        !           901: _asinl
        !           902: _atanl
        !           903: _atan2l
        !           904: _ceill
        !           905: _cosl
        !           906: _coshl
        !           907: _expl
        !           908: _floorl
        !           909: _fmodl
        !           910: _logl
        !           911: _log10l
        !           912: _powl
        !           913: _sinl
        !           914: _sinhl
        !           915: _sqrtl
        !           916: _tanl
        !           917: _tanhl 
        !           918: _fmemcmp
        !           919: _fmemcpy
        !           920: _fmemset
        !           921: _fstrcat
        !           922: _fstrcmp
        !           923: _fstrcpy
        !           924: _fstrlen
        !           925: _fstrsetu
        !           926: 
        !           927: Page 212
        !           928: #pragma optimize( "[[optimization-option-list]]", {off | on } )
        !           929: ---------------------------------------------------------------
        !           930: Specifies optimizations to be performed. Must appear outside a
        !           931: function. The optimization option list may be zero or more of the
        !           932: following: a, c, e, g, l, n, p, q, t, and w. These letters correspond
        !           933: to the /O compilation options. This pragma takes effect at the first
        !           934: function defined after the pragma is seen. The optimization list for
        !           935: 32-bit targets may be zero or more of the following: a, g, n, p, t, and
        !           936: w.
        !           937: 
        !           938: Page 212
        !           939: #pragma pack( [[{1 | 2 | 4 | 8 | 16 }]] )
        !           940: -----------------------------------------
        !           941: Specifies packing alignment for structure types. You can use the /Zp
        !           942: option to specify the same packing for all structures in a module. The
        !           943: default is 2 for 16- bit targets and 4 for 32-bit targets.
        !           944: 
        !           945: When you give the /Zpn option, where n is 1, 2, 4, 8, or 16, each
        !           946: structure member after the first is stored on n-byte boundaries,
        !           947: depending on the number you choose. If you use the /Zp option without
        !           948: an argument, structure members are packed on one-byte boundaries. No
        !           949: space is allowed between /Zp and its argument. This pragma takes effect
        !           950: at the first function defined after the pragma is seen.
        !           951: 
        !           952: On 32-bit targets, the packing can be set at 8 or 16 as well as 1, 2,
        !           953: or 4 as given for 16-bit targets.
        !           954: 
        !           955: Page 240
        !           956: For the 32-bit compiler, long double and double are the same.
        !           957: 
        !           958: ========================< Part 4: Linker Options >===========================
        !           959: 
        !           960: Throughout Programming Techniques (Chapter 1: Building Applications
        !           961: and DLLs) and Tools (Chapter 5: Linker), the NOTMAPPED parameter for
        !           962: the LINK and COFF /DEBUG: option is incorrectly given as "NOMAPPED."
        !           963: The correct syntax for the /DEBUG option is:
        !           964: 
        !           965:       /DEBUG:[{MAPPED|NOTMAPPED},]{NONE|MINIMAL|PARTIAL|FULL}
        !           966: 
        !           967: 
        !           968: =============< Part 5: Building Multithreaded Applications and DLLs >============
        !           969: 
        !           970: 
        !           971: The following information should be added to Programming Techniques
        !           972: Chapter 1: Building Applications and DLLs:
        !           973: 
        !           974: Building Multithreaded Programs
        !           975: -------------------------------
        !           976: Building a multithreaded program is only slightly different from
        !           977: building a single-threaded program. Two additional parameters must be
        !           978: specified:
        !           979: 
        !           980: 1. Compile with the /D_MT option.
        !           981: 
        !           982: 2. Link with LIBCMT.LIB (multithread C run-time library) instead
        !           983:    of LIBC.LIB (single-thread C run-time library).
        !           984: 
        !           985: Using the C Run-Time DLL
        !           986: ------------------------
        !           987: You can reduce the size of an executable file by using the C run-time
        !           988: DLL instead of statically linking the C run-time libraries to the
        !           989: program. The cost is a small startup overhead to initialize the DLL,
        !           990: and the normal DLL calling overhead.
        !           991: 
        !           992: To use the C run-time DLL (CRTDLL.DLL) with either a single- threaded
        !           993: or multithreaded program, link with CRTDLL.LIB. Do not link with either
        !           994: LIBC.LIB or LIBCMT.LIB. The C run-time DLL supports both types of
        !           995: programs.
        !           996: 
        !           997: 
        !           998: =============< Part 6: The WinDebug Graphical Debugger >=============
        !           999: 
        !          1000: 
        !          1001: Loading Programs
        !          1002: ----------------
        !          1003: 
        !          1004: NOTE:  The Program menu is disabled in this version of WinDebug. To
        !          1005:        load a program for debugging, you must enter the program
        !          1006:        name on the command-line when you start the debugger.  For
        !          1007:        example:
        !          1008: 
        !          1009:          WINDBG MYPROG.EXE
        !          1010: 
        !          1011:          WINDBG C:\BUILDDIR\TESTOR.EXE
        !          1012: 
        !          1013: 
        !          1014: 
        !          1015: Expression Evaluator
        !          1016: --------------------
        !          1017: 
        !          1018: The expression evaluator in this release of WinDebug cannot
        !          1019: evaluate a type-cast followed by the following characters: *, &,
        !          1020: +, and |. You can acheive the same meaning by enclosing the casted
        !          1021: expression in parenthesis. For example:
        !          1022: 
        !          1023:   (char *) &i
        !          1024: 
        !          1025: would become
        !          1026: 
        !          1027:   (char *) (&i)
        !          1028: 
        !          1029: 
        !          1030: 
        !          1031: Command Window
        !          1032: --------------
        !          1033: 
        !          1034:    Command Window Editing
        !          1035:    ----------------------
        !          1036:    In the Command window, you can use editing keys similar to those
        !          1037:    available from the NT command prompt. The Up- and Down-Arrow keys let
        !          1038:    You retrieve previously-entered WinDebug commands. You can edit the
        !          1039:    current command line with the Backspace, Delete, Insert, and Left-
        !          1040:    and Right-Arrow keys.
        !          1041: 
        !          1042: 
        !          1043:       Process Specifiers
        !          1044:    ------------------
        !          1045: 
        !          1046:    The process-specifier syntax should be as follows:
        !          1047: 
        !          1048:    Symbol     Description
        !          1049:    ------     -----------
        !          1050:     |.        The current process.
        !          1051:     |number   The process number.
        !          1052:     |*        All processes.
        !          1053: 
        !          1054: 
        !          1055:    Set Breakpoint (BP)
        !          1056:    ------------------
        !          1057: 
        !          1058:    The Set Breakpoint (BP) options /M and /H are not available in this
        !          1059:    release.
        !          1060: 
        !          1061:    With the /C option, you must enclose the semicolon-separated list
        !          1062:    of multiple commands in quotation marks.
        !          1063: 
        !          1064: 
        !          1065:    Enter ANSI Characters (EA)
        !          1066:    --------------------------
        !          1067: 
        !          1068:    If you want to include space (" ") characters, you must enclose
        !          1069:    the character string in quotation marks (" or '). If you enclose
        !          1070:    the string in double quotation marks, WinDebug will automatically
        !          1071:    null-terminate the string. Single quotation marks (') will not add
        !          1072:    a null character.
        !          1073: 
        !          1074: 
        !          1075:    Display and Entry Commands (D* and E*)
        !          1076:    --------------------------------------
        !          1077: 
        !          1078:    The display and entry commands (such as DD and EB) will use the
        !          1079:    current default radix. You can enter numbers with a different radix
        !          1080:    by using the standard C/C++ radix overrides (such as 0x).
        !          1081: 
        !          1082: 
        !          1083:    Find and Search (F and S)
        !          1084:    -------------------------
        !          1085: 
        !          1086:    These commands are unavailable in this release.
        !          1087: 
        !          1088: 
        !          1089:    Display Stack Backtrace (K)
        !          1090:    ---------------------------
        !          1091: 
        !          1092:    This command can be used when handling an exception.
        !          1093: 
        !          1094: 
        !          1095:    Set Exceptions (SX*)
        !          1096:    --------------------
        !          1097: 
        !          1098:    These commands can be followed by /C2<commandlist>, where
        !          1099:    <commandlist> is a quote-enclosed, semicolon-separated list of
        !          1100:    WinDebug commands to execute after an exception is handled. The
        !          1101:    SXE command can also be followed by /C<commandlist>, where
        !          1102:    <commandlist> specifies commands to execute before an exception
        !          1103:    triggers the debugger.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.