home *** CD-ROM | disk | FTP | other *** search
/ The Developer Connection…ice Driver Kit for OS/2 3 / DEV3-D1.ISO / docs / toolinfo.inf (.txt) < prev    next >
Encoding:
OS/2 Help File  |  1993-07-30  |  380.2 KB  |  15,149 lines

  1.  
  2. ΓòÉΓòÉΓòÉ <hidden>   ΓòÉΓòÉΓòÉ
  3.  
  4. Shortcut  Look under this heading for the name of the specific tool you are 
  5.           using or a more specific topic. 
  6.  
  7.  
  8. ΓòÉΓòÉΓòÉ <hidden> Double-Byte Character Set (DBCS) ΓòÉΓòÉΓòÉ
  9.  
  10. Throughout this document, you will see references to specific values for 
  11. character strings. These values are for single-byte character set (SBCS). If 
  12. you use the double-byte character set, note that one DBCS character equals two 
  13. SBCS characters. 
  14.  
  15.  
  16. ΓòÉΓòÉΓòÉ <hidden> IBM Trademark ΓòÉΓòÉΓòÉ
  17.  
  18. Trademark of the IBM Corporation 
  19.  
  20.  
  21. ΓòÉΓòÉΓòÉ <hidden> Trademarks ΓòÉΓòÉΓòÉ
  22.  
  23. Microsoft is a trademark of the Microsoft Corporation. 
  24.  
  25. Windows is a trademark of the Microsoft Corporation. 
  26.  
  27. CodeView is a trademark of the Microsoft Corporation. 
  28.  
  29.  
  30. ΓòÉΓòÉΓòÉ 1. How to Use ΓòÉΓòÉΓòÉ
  31.  
  32. Select One: 
  33.  
  34. Introduction 
  35.  
  36. How to Use Action Bar Choices 
  37.  
  38. How to Use the Programming Information 
  39.  
  40. Error Messages 
  41.  
  42. Double-Byte Character Set 
  43.  
  44.  
  45. ΓòÉΓòÉΓòÉ <hidden> Tools Reference - Introduction ΓòÉΓòÉΓòÉ
  46.  
  47. The OS/2* 2.0 Tools Reference is a technical reference for the OS/2 tools.  It 
  48. gives reference information and code examples to enable you to write programs, 
  49. and create icons, fonts, and dialog boxes. 
  50.  
  51. Before you begin to use this information, you should understand how you can: 
  52.  
  53. o Expand the Contents to see all available topics 
  54. o Obtain additional information for a highlighted word or phrase 
  55. o Use menu bar choices 
  56. o Use the programming information. 
  57.  
  58. Using the Contents. 
  59.  
  60. In the Tools Reference, each tool is listed as a different topic in the 
  61. Contents panel.  To view a topic, double-click on the topic (or press the Up or 
  62. Down Arrow key to highlight the topic, and then press the Enter key). 
  63.  
  64. Getting Additional Information 
  65.  
  66. After you select a topic, the information for that topic appears in a window. 
  67. Highlighted words or phrases indicate that additional information is available. 
  68. You will notice that certain words and phrases are highlighted in green 
  69. letters, or in white letters on a black background, depending on your display 
  70. device.  These are called hypertext terms.  If you are using a mouse, 
  71. double-click on the highlighted word.  If you are using a keyboard, press the 
  72. Tab key to move to the highlighted word, and then press the Enter key. 
  73. Additional information then appears in a window. 
  74.  
  75.  
  76. ΓòÉΓòÉΓòÉ <hidden> Tools Reference - Using Menu Bar Choices ΓòÉΓòÉΓòÉ
  77.  
  78. Several choices are available for managing information presented in the OS/2* 
  79. 2.0 Tools Reference.  There are three pull-down menus on the menu bar: the 
  80. Services menu, the Options menu, and the Help menu. 
  81.  
  82. The actions that are selectable from the Services menu operate on the active 
  83. window currently displayed on the screen. These actions include the following: 
  84.  
  85. Bookmark 
  86.    Allows you to set a placeholder so you can retrieve information of interest 
  87.    to you. 
  88.  
  89.    When you place a bookmark on a topic, it is added to a list of bookmarks you 
  90.    have previously set.  You can view the list, and you can remove one or all 
  91.    bookmarks from the list.  If you have not set any bookmarks, the list is 
  92.    empty. 
  93.  
  94.    To set a bookmark, do the following: 
  95.  
  96.     1. Select a topic from the Contents. 
  97.  
  98.     2. When that topic appears, choose the Bookmark option from the Services 
  99.        pull-down. 
  100.  
  101.     3. If you want to change the name used for the bookmark, type the new name 
  102.        in the field. 
  103.  
  104.     4. Click on the Place radio button (or press the Up or Down Arrow key to 
  105.        select it). 
  106.  
  107.     5. Click on OK (or select it and press Enter). The bookmark is then added 
  108.        to the bookmark list. 
  109.  
  110. Search 
  111.    Allows you to find occurrences of a word or phrase in the current topic, 
  112.    selected topics, or all topics. 
  113.  
  114.    You can specify a word or phrase to be searched. You can also limit the 
  115.    search to a set of topics by first marking the topics in the Contents list. 
  116.  
  117.    To search for a word or phrase in all topics, do the following: 
  118.  
  119.     1. Choose the Search option from the Services pull-down. 
  120.  
  121.     2. Type the word or words to be searched for. 
  122.  
  123.     3. Click on All sections (or press the Up or Down Arrow keys to select it). 
  124.  
  125.     4. Click on Search (or select it and press Enter) to begin the search. 
  126.  
  127.     5. The list of topics where the word or phrase appears is displayed. 
  128.  
  129. Print 
  130.    Allows you to print one or more topics.  You can also print a set of topics 
  131.    by first marking the topics in the Contents list. 
  132.  
  133.    To print the document Contents list, do the following: 
  134.  
  135.     1. Choose Print from the Services pull-down. 
  136.  
  137.     2. Click on Contents (or press the Up or Down Arrow key to select it). 
  138.  
  139.     3. Click on Print (or select it and press Enter). 
  140.  
  141.     4. The Contents list is printed on your printer. 
  142.  
  143. Copy 
  144.    Allows you to copy a topic that you are viewing to the System Clipboard or 
  145.    to a file that you can edit. You will find this particularly useful for 
  146.    copying syntax definitions and program samples into the application that you 
  147.    are developing. 
  148.  
  149.    You can copy a topic that you are viewing in two ways: 
  150.  
  151.    o Copy copies the topic that you are viewing into the System Clipboard.  If 
  152.      you are using a Presentation Manager* (PM) editor (for example, the System 
  153.      Editor) that copies or cuts (or both) to the System Clipboard, and pastes 
  154.      to the System Clipboard, you can easily add the copied information to your 
  155.      program source module. 
  156.  
  157.    o Copy to file copies the topic that you are viewing into a temporary file 
  158.      named TEXT.TMP.  You can later edit that file by using any editor.  You 
  159.      will find TEXT.TMP in the directory where your viewable document resides. 
  160.  
  161.      To copy a topic, do the following: 
  162.  
  163.        1. Expand the Contents list and select a topic. 
  164.  
  165.        2. When the topic appears, choose Copy to file from the Services 
  166.           pull-down. 
  167.  
  168.        3. The system puts the text pertaining to that topic into the temporary 
  169.           file named TEXT.TMP. 
  170.  
  171.    For information on one of the other choices in the Services pull-down, 
  172.    highlight the choice and press the F1 key. 
  173.  
  174. The actions that are selectable from the Options menu allow you to change the 
  175. way your Contents list is displayed. To expand the Contents and show all levels 
  176. for all topics, choose Expand all from the Options pull-down. You can also 
  177. press the Ctrl and * keys together. For information on one of the other choices 
  178. in the Options pull-down, highlight the choice and press the F1 key. 
  179.  
  180. The actions that are selectable from the Help menu allow you to select 
  181. different types of help information.  You can also press the F1 key for help 
  182. information about the Information Presentation Facility (IPF). 
  183.  
  184.  
  185. ΓòÉΓòÉΓòÉ <hidden> Tools Reference - Using Tools Information ΓòÉΓòÉΓòÉ
  186.  
  187. The Tools Reference consists of reference information that provides a detailed 
  188. description of each OS/2 tool, except the SOM Compiler and IPF Compiler, which 
  189. are referenced in their own online documents. 
  190.  
  191. Reference information is presented by tool name. For example: 
  192.  
  193.      ΓòöΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòù
  194.      Γòæ  Contents         Γòæ
  195.      ΓòáΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòú
  196.      Γòæ  How to Use       Γòæ
  197.      Γòæ  Dialog Editor    Γòæ
  198.      Γòæ  Font Editor      Γòæ
  199.      Γòæ  Icon Editor      Γòæ
  200.      Γòæ  EXEHDR           Γòæ
  201.      Γòæ   .               Γòæ
  202.      Γòæ   .               Γòæ
  203.      Γòæ   .               Γòæ
  204.      Γòæ                   Γòæ
  205.      ΓòÜΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓò¥
  206.  
  207. By clicking on the plus sign beside 'Icon Editor', you see the introductory 
  208. panel for the Icon Editor online documentation. Selecting a highlighted 
  209. reference anywhere in the documentation for any tool takes you directly into 
  210. the information for that topic. 
  211.  
  212. Reference information is presented in IPF windows that can be sized, moved, 
  213. minimized, maximized, or closed.  When you select a tool, you will see two 
  214. windows displayed: 
  215.  
  216. ΓòöΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòªΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòù
  217. Γòæ LINK386        Γòæ  LINK386 - Introduction  Γòæ
  218. ΓòáΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓò¼ΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòú
  219. ΓòæIntroduction    ΓòæLINK386 is used to combineΓòæ
  220. ΓòæRunning LINK386 Γòæobject files...           Γòæ
  221. ΓòæLINK386 FeaturesΓòæ                          Γòæ
  222. ΓòæLINK386 Syntax  Γòæ                          Γòæ
  223. Γòæ .              Γòæ                          Γòæ
  224. Γòæ .              Γòæ                          Γòæ
  225. Γòæ .              Γòæ                          Γòæ
  226. Γòæ                Γòæ                          Γòæ
  227. ΓòÜΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓò⌐ΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓò¥
  228.  
  229. The window on the left is the primary window.  It contains a list of items that 
  230. are always available to you.  On the right is the secondary window, which 
  231. contains a 'snapshot' of selected information.  Descriptions of individual 
  232. functions include the syntax. 
  233.  
  234. All of the information needed to understand a topic is readily available to you 
  235. through the primary window.  The information is divided into discrete 
  236. information groups, and only the appropriate information group appears for the 
  237. topic that you are viewing. 
  238.  
  239. The information groups for a reference unit (that is, a function description) 
  240. can include the following: 
  241.  
  242. o Introduction 
  243. o Syntax 
  244. o Options 
  245. o Examples 
  246.  
  247. This list may vary.  Options, for instance, may be omitted when they do not 
  248. apply.  In other instances, information may be added when appropriate.  For 
  249. example, when viewing NMAKE, Command Files and Macro Definitions are among the 
  250. additional topics listed in the primary window. 
  251.  
  252. When viewing a secondary window, you may want to view another referenced 
  253. window.  For example, when viewing LINK386 Options, you can double click on any 
  254. option listed in that window, to view the description and syntax of the option. 
  255.  
  256. Each window can be individually closed. All windows are closed when you close 
  257. the primary window. 
  258.  
  259. Some topics may not necessarily fit into the small window size on your screen. 
  260. You may maximize the secondary window for better readability. 
  261.  
  262.  
  263. ΓòÉΓòÉΓòÉ <hidden> Tools Reference - Error Messages ΓòÉΓòÉΓòÉ
  264.  
  265. Some tools generate error messages that may be encountered when building an 
  266. application.  Included is a brief description of the action required to correct 
  267. the error. 
  268.  
  269. Error messages for the following utilities are listed: 
  270.  
  271. o LINK386 Error Messages 
  272. o RC (Resource Compiler) Error Messages 
  273. o IMPLIB Error Messages 
  274. o MKMSGF Error Messages 
  275. o MSGBIND Error Messages 
  276.  
  277.  
  278. ΓòÉΓòÉΓòÉ 2. Dialog Editor ΓòÉΓòÉΓòÉ
  279.  
  280. Select One: 
  281.  
  282. Introduction 
  283. Adding Controls 
  284. Arranging Controls 
  285. Changing a Dialog 
  286. Creating a Dialog 
  287. Designing a Dialog 
  288. Sample Template 
  289. Ending an Edit Session 
  290. Ordering Control Groups 
  291. Selecting Color and Font 
  292. Testing the Dialog 
  293. Using a Grid 
  294. Using the Options Menu 
  295.  
  296.  
  297. ΓòÉΓòÉΓòÉ <hidden> Dialog Editor - Introduction ΓòÉΓòÉΓòÉ
  298.  
  299. You can use the Dialog Editor not only to create and modify dialog boxes, but 
  300. also to create and modify the controls and text within dialog boxes. As you 
  301. create the dialog box and its controls you see them on the screen as the user 
  302. sees them when your program is run.  You can place each dialog box and its 
  303. controls where you want them on the screen. In addition, you can test the 
  304. dialog box in a simple way before you incorporate it into your application. 
  305.  
  306. Each dialog box and control can have either an integer identifier or a symbolic 
  307. identifier that equates to an integer identifier, either of which you can use 
  308. in your application to refer to the dialog boxes or controls.  If you intend 
  309. using symbolic identifiers in your application, you must enter the symbolic and 
  310. integer identifiers in an include file.  If you do not use symbolic names, the 
  311. Dialog Editor supplies an integer identifier for each control, and for the 
  312. dialog box itself.  You can use the Dialog Editor to create the include file, 
  313. or you can use a text editor to create the include file before using the Dialog 
  314. Editor. 
  315.  
  316. It is good programming practice to plan the resources that your application 
  317. will use, and choose a naming and numbering convention for the symbolic or 
  318. integer identifiers before you create them.  You should keep the include file 
  319. separate from other include files used by your application.  Include files used 
  320. by the Dialog Editor can contain only #define statements that define their 
  321. symbolic identifiers and equivalent integers. 
  322.  
  323. Although the Dialog Editor draws dialog boxes and controls on the screen so you 
  324. can see what they look like when used by your application, it does not save 
  325. them as graphics.  Instead, the Dialog Editor saves them in an ASCII-text 
  326. format file, that has a .DLG extension.  This is the dialog template. 
  327.  
  328. The Dialog Editor also creates a compiled form of the .DLG file, in a file with 
  329. a .RES extension.  The .DLG and .RES files can contain more than one dialog 
  330. box.  The resource file may contain other application resources, such as icons, 
  331. bit maps, and string tables.  It is attached to the application's executable 
  332. (.EXE) file during the compile and link process. 
  333.  
  334.  
  335. ΓòÉΓòÉΓòÉ <hidden> Dialog Editor - Designing Dialog Boxes ΓòÉΓòÉΓòÉ
  336.  
  337. Dialog boxes should be designed to clearly identify the information that the 
  338. user is required to complete.  The following are a few Common User Access* 
  339. guidelines: 
  340.  
  341. o Lay out the controls in columns, starting at the upper-left corner, for left 
  342.   to right or top to bottom scanning. 
  343. o Vertically and horizontally align selection and entry fields so that the 
  344.   cursor moves in a straight line. 
  345. o Arrange the controls in the sequence in which the user would complete them. 
  346. o If there are only a few entry fields, locate them at the top of the dialog 
  347.   box. 
  348. o Make groups of controls obvious by use of group boxes and white space. 
  349. o Align group boxes, where possible.  Group boxes can be extended to the right 
  350.   to line up with other group boxes. 
  351. o Use field identifiers to identify the purpose of single and multiple groups 
  352.   of choices. 
  353.  
  354. For further information regarding dialog boxes, refer to the Common User Access 
  355. publications. 
  356.  
  357.  
  358. ΓòÉΓòÉΓòÉ <hidden> Dialog Editor - Creating a Dialog Box ΓòÉΓòÉΓòÉ
  359.  
  360. To run the Dialog Editor, select Dialog Editor from the Development Tools 
  361. group. The main window appears, displaying the menu bar choices File, Edit, 
  362. Arrange, Control, Options, and Help. Online help that tells you how to use the 
  363. editor can be accessed from most Dialog Editor windows. 
  364.  
  365. To create a new dialog box, start with either one of the following steps: 
  366.  
  367. o Select New Dialog from the Edit menu.  The editor opens new files with the 
  368.   extensions .RES and .DLG. This also opens a new include file. 
  369. o Select New from the File menu.  This opens new resource files with the 
  370.   extensions .RES and .DLG. You can open a new include file or an existing one. 
  371.  
  372. Both of the above steps have the same effect. 
  373.  
  374. When you edit a dialog box, the names of the resource and include files are 
  375. shown in the title bar of the Dialog Editor. If you are editing a new file that 
  376. has not yet been named or saved, (Untitled) appears in the title bar in place 
  377. of a name. If (Untitled)* appears in the title bar in place of a name, there 
  378. are unsaved changes. 
  379.  
  380. The Dialog Box ID field appears in the status area.  A default integer number 
  381. is supplied in the entry field.  Type a symbolic identifier for the dialog box, 
  382. such as MYDIALOG.  Tab to the integer field and type the integer number.  Press 
  383. Enter to place them both in the include file. 
  384.  
  385. The new dialog box appears in the lower-left corner of the editor screen 
  386. enclosed by a frame, which allows you to change the width and height of the 
  387. selected item.  This indicates that the dialog box is selected for editing.  If 
  388. you are creating a new dialog box, the dialog is automatically selected; at all 
  389. other times, before you edit the dialog box or a control, you must click on it 
  390. to select it.  The 
  391.  
  392. To continue creating the new dialog box, follow these steps: 
  393.  
  394.  1. Make the dialog box larger by clicking on its borders and dragging until 
  395.     the box is the size you want it to be.  This can be done in one operation 
  396.     by clicking on the upper-right corner of the frame and dragging diagonally 
  397.     upwards and to the right. 
  398.  
  399.     Information about the item you are editing is displayed in the Selected 
  400.     Item Status box in the left half of the status area.  As you move the 
  401.     shadow box, the x-y-coordinates change.  These are the coordinates of the 
  402.     origin of the dialog box relative to the origin of the window.  The 
  403.     cx-cy-coordinates are the width and height of the dialog box.  The symbolic 
  404.     identifier is also shown. 
  405.  
  406.  2. Select Styles from the Edit menu. The Dialog Box Styles pop-up window 
  407.     appears. 
  408.  
  409.  3. Click on the text entry field in the status area, and then type the dialog 
  410.     box title (for instance,  Sample dialog box) into the field. 
  411.  
  412.  4. Press Enter and the title appears at the top of your dialog box. 
  413.  
  414. You can reposition the entire dialog box by moving the pointer inside the top 
  415. area enclosed by the frame, holding the mouse button down, and dragging the 
  416. shadow box across the screen.  When the shadow box is in the position where you 
  417. want the dialog box to appear, release the mouse button.  The dialog box 
  418. appears in that position. Alternatively, you can move the dialog box using the 
  419. keyboard arrow keys.  You can reposition the dialog box at any time during the 
  420. edit. 
  421.  
  422. You now have your dialog box, and are ready to start adding controls, but you 
  423. may want to first select the grid option to make laying out your dialog easier. 
  424.  
  425.  
  426. ΓòÉΓòÉΓòÉ <hidden> Dialog Editor - Selecting Color and Font ΓòÉΓòÉΓòÉ
  427.  
  428. The Presentation Parameters dialog allows you to select color and font for 
  429. individual controls or for an entire dialog box. 
  430.  
  431. You can select all of the following: 
  432.  
  433. o Foreground Color 
  434. o Background Color 
  435. o Foreground Color Highlight 
  436. o Background Color Highlight 
  437. o Disabled (greyed out) Foreground Color 
  438. o Disabled (greyed out) Background Color 
  439. o Font Size 
  440. o Font Name 
  441.  
  442. To set presentation parameters, follow these steps: 
  443.  
  444.  1. Select a control or the dialog box. 
  445.  
  446.  2. Select Presentation Parameters on the Edit menu. 
  447.  
  448.  3. Type the number, from 1 to 255 parts of each color, in the appropriate 
  449.     fields. 
  450.  
  451.  4. Type the font and size, if you want to change the default, in the last two 
  452.     fields. 
  453.  
  454.  5. Select OK or press Enter to close the dialog. 
  455.  
  456. You may now want to test the dialog. 
  457.  
  458.  
  459. ΓòÉΓòÉΓòÉ <hidden> Dialog Editor - Arranging Controls ΓòÉΓòÉΓòÉ
  460.  
  461. The Arrange menu allows you to arrange and align controls in a logical and 
  462. easy-to-understand layout. 
  463.  
  464. Align             Allows you to  align controls along an edge 
  465.  
  466. Even spacing      Allows you to  evenly space controls 
  467.  
  468. Same size         Allows you to  set controls to the same size 
  469.  
  470. Push buttons      Allows you to  arrange push buttons 
  471.  
  472. Order groups      Displays the Group/Control Ordering dialog, which allows you 
  473.                   to  change the order of controls and groups.  See Ordering 
  474.                   Control Groups for additional information. 
  475.  
  476. Settings          Displays the Arrange Settings dialog, which allows the grid 
  477.                   and spacing constants to be changed. See Using a Grid for 
  478.                   additional information. 
  479.  
  480.  
  481. ΓòÉΓòÉΓòÉ <hidden> Dialog Editor - Using a Grid ΓòÉΓòÉΓòÉ
  482.  
  483. Controls are placed in a dialog box using the mouse, and can be moved in line 
  484. with each other also using the mouse.  However, controls can be positioned more 
  485. accurately using the keyboard arrow keys or mouse after grid values have been 
  486. set. 
  487.  
  488. The Arrange Settings dialog lets you set the number of character spaces (in 
  489. dialog units) by which you can move dialog boxes and controls when using the 
  490. Dialog Editor. 
  491.  
  492. To set the grid size, follow these steps: 
  493.  
  494.  1. Select Settings from the Arrange menu. The Arranging Settings dialog is 
  495.     displayed. The initial grid setting for both x and y is 1 unit. 
  496.  
  497.  2. Change the x-setting to 10 and the y-setting to 5.  Click on OK. 
  498.  
  499. The horizontal (x) and vertical (y) values are in dialog units. A horizontal 
  500. dialog unit is 0.25 of the standard character size.  A vertical dialog unit is 
  501. 0.125 of the standard character size.  For example, if you move a control to 
  502. the left or the right (using the mouse or keyboard arrow keys) with x set at 
  503. 20, it moves in steps of twenty dialog units. 
  504.  
  505. When you subsequently position dialog boxes or controls, the objects move by 
  506. the specified number of dialog units on an invisible grid. Large values make it 
  507. easier to align controls, while small values allow you to position controls in 
  508. the dialog box more precisely. 
  509.  
  510. Now that the grid is in place, you are ready to start adding controls. 
  511.  
  512.  
  513. ΓòÉΓòÉΓòÉ <hidden> Dialog Editor - Ordering Control Groups ΓòÉΓòÉΓòÉ
  514.  
  515. This option allows you to gather controls into groups and to change the order 
  516. in which the tab keys and arrow keys move the selection cursor around the 
  517. controls. 
  518.  
  519. When you use group boxes to group controls, always create the group box before 
  520. the controls that are to go inside it. 
  521.  
  522. It is good practice to put group markers around all separate groups of 
  523. controls, including putting a marker before the first control in the list. 
  524.  
  525. The list box shows the order in which the selection cursor moves between the 
  526. controls when the user presses the arrow and tab keys. (The coordinate position 
  527. of a control when displayed in the dialog box does not affect the order.) 
  528. Initially, the controls are listed in the order in which they were created. 
  529.  
  530. There are three functions involved in grouping controls: 
  531.  
  532. o Setting Group Markers 
  533. o Setting Tab Markers 
  534. o Moving Control Order 
  535.  
  536. Setting Group Markers 
  537.  
  538. To set up groups, follow these steps: 
  539.  
  540.  1. Select Order Groups from the Arrange menu.  The Groups - order dialog is 
  541.     displayed. 
  542.  
  543.  2. Click the pointer on the first radio button in the list box. 
  544.  
  545.  3. Click on the Group Marker pushbutton.  A group marker is now displayed 
  546.     between the Text control and the first radio button in the list. 
  547.  
  548.  4. Scroll down the list and click on the first pushbutton in the list. Click 
  549.     on the Group Marker pushbutton.  This has organized your controls into 
  550.     groups of text, radio buttons, check boxes, and pushbuttons. 
  551.  
  552. Setting Tab Markers 
  553.  
  554. After setting group markers, you will want to set tab-stops.  The controls 
  555. marked with an asterisk already have tab-stops. 
  556.  
  557. To make the tab stop at only the first control in each group, delete the 
  558. tab-stops from the second and third radio button and check box, following these 
  559. steps: 
  560.  
  561.  1. Click on the second radio button in the list to mark it 
  562.  
  563.  2. Click on the Delete Tab pushbutton. 
  564.  
  565.  3. Repeat the above steps for the third radio button, and then perform the 
  566.     same operation for the second and third check box in the list.  When this 
  567.     is complete, press Enter. 
  568.  
  569. Moving Control Order 
  570.  
  571. You can move controls in the list to see how the changes affect the movement of 
  572. the cursor during testing.  To change the position of a control in the list, 
  573. follow these steps: 
  574.  
  575.  1. Click on the control's name to select it. 
  576.  
  577.  2. Position the pointer in the list where you want the name to appear.  The 
  578.     pointer changes shape to a short horizontal line when it is over a place 
  579.     where you can insert the name. 
  580.  
  581.  3. To insert the control name, click the mouse button. 
  582.  
  583. After grouping controls, you may now want to test or edit the dialog, or enter 
  584. additional controls. 
  585.  
  586.  
  587. ΓòÉΓòÉΓòÉ <hidden> Dialog Editor - Adding Controls ΓòÉΓòÉΓòÉ
  588.  
  589. The control menu lists, in alphabetical order, all the controls that you can 
  590. put in a dialog box. To add controls, follow these steps: 
  591.  
  592.  1. Select a control on the Control menu or use the shortcut: 
  593.  
  594.     Shortcut: You can select any control by clicking on its icon on the Control 
  595.     Palette at the right side of the window. 
  596.  
  597.     The pointer becomes a small plus sign (+) in a square.  The center marks 
  598.     the position where the lower-left corner of the control's frame will be 
  599.     set. 
  600.  
  601.  2. Click the mouse to position the control. 
  602.  
  603.  3. A dialog may appear (depending on the type of control) in which you must 
  604.     enter data or check preferences to define the control. Complete this and 
  605.     close the dialog. 
  606.  
  607. For an example of adding controls in a typical dialog, see Adding Controls 
  608. Example. 
  609.  
  610. You may now want to test the dialog. 
  611.  
  612. For detailed descriptions of individual controls and how they work, see the 
  613. individual controls in the online help (while using the Dialog Editor) by 
  614. following these steps: 
  615.  
  616.  1. Select Help Index on the Help menu (or press F1 and select Help Index.) 
  617.  
  618.  2. Select Options or press Alt-O. 
  619.  
  620.  3. Select Contents or press Ctrl-C. 
  621.  
  622.  4. Select Control Menu for an alphabetical list of controls, or Control 
  623.     Palette for the icons as they appear on the Control Palette. 
  624.  
  625.  5. Select the control you want to read about. 
  626.  
  627.  
  628. ΓòÉΓòÉΓòÉ <hidden> Dialog Editor - Adding Controls Example ΓòÉΓòÉΓòÉ
  629.  
  630. The control menu lists, in alphabetical order, all the controls that you can 
  631. put in a dialog box. To add controls for a sample dialog, follow these steps: 
  632.  
  633.  1. Select Text on the Control menu or use the shortcut: 
  634.  
  635.     Shortcut: You can select any control by clicking on its icon on the Control 
  636.     Palette at the right side of the window. 
  637.  
  638.     The pointer becomes a small plus sign (+) in a square.  The center marks 
  639.     the position where the center of the control will be. 
  640.  
  641.  2. Position the pointer inside the dialog box near the upper-left corner and 
  642.     click the mouse. 
  643.  
  644.  3. Type Student Level: in the Text entry field. Observe that the next 
  645.     sequential integer is supplied in the Symbol entry field.  Press Enter. 
  646.  
  647.  4. Replace the symbol with ID_GRAD and press Enter. 
  648.  
  649.     The editor assigns the next integer to the symbolic identifier you entered, 
  650.     and places it in the include file. This is another technique for entering 
  651.     symbolic identifiers. 
  652.  
  653.  5. To view or change the include file at any time, select Symbols from the 
  654.     Edit menu. The Symbols dialog appears. 
  655.  
  656.     The symbolic and integer identifier for the dialog box and the text control 
  657.     are displayed in the list box. The dialog allows you to add, delete, and 
  658.     change the identifiers, and view the hexadecimal equivalents of the 
  659.     integers. 
  660.  
  661.  6. Select the OK push button to remove the dialog and register any changes. 
  662.     Select Cancel if you have not made any changes. 
  663.  
  664.  7. In your dialog box, the static control is not large enough for you to see 
  665.     all the text.  To remedy this, click on the text, and a frame appears 
  666.     around it.  Drag the right-hand edge of the frame to the right to enlarge 
  667.     the field. 
  668.  
  669.     When you release the mouse button you should be able to see all the text. 
  670.     When a control has a frame around it, it is selected and you can use a 
  671.     shadow box to position it, as you did with the dialog box. 
  672.  
  673.  8. To add another control, select Radio Button from the Control menu and 
  674.     position the cursor just beneath the Student Level text.  Press Enter. 
  675.  
  676.  9. Type Elementary  in the Button Text entry field and press Enter.  Drag the 
  677.     right edge of the frame that surrounds the radio button until you can see 
  678.     all of the text. 
  679.  
  680. 10. Select Radio Button again and type Intermediate in the Text entry field. 
  681.     Position this radio button below the first one. 
  682.  
  683. 11. Select Radio Button again and type Advanced in the Text entry field. 
  684.     Position this radio button below the other two. 
  685.  
  686. 12. Select Group Box from the Control menu. Position the cursor to the right of 
  687.     the column of radio buttons and press Enter. 
  688.  
  689. 13. Type Media in the Text entry field and press Enter to title of the group 
  690.     box. 
  691.  
  692. 14. Click on the lower-right corner of the group box frame and drag it 
  693.     diagonally down and to the right to enlarge it.  The bottom of the group 
  694.     box frame should be lower than the last of the radio buttons, and the 
  695.     right-hand side of the group box should be almost at the far right of the 
  696.     dialog box.  This is to make room for a group of check boxes that will go 
  697.     inside the group box. 
  698.  
  699.     When you use group boxes to group controls, you always create the group box 
  700.     before the controls that are to go inside it. 
  701.  
  702. 15. Select Check Box from the Control menu. Position the cursor inside the 
  703.     group box in line with the first radio button in the list and click the 
  704.     mouse. 
  705.  
  706. 16. Type Text Books in the Button Text entry field and press Enter. Enlarge the 
  707.     frame of the check box until all of the text is displayed. 
  708.  
  709. 17. Select Check Box again and position the cursor below the first check box. 
  710.     Type Video in the Text entry field and click Enter. Enlarge the check box 
  711.     frame until all of the text is displayed. 
  712.  
  713. 18. Select Check Box again and position the cursor below the previous two check 
  714.     boxes. Type Diskettes in the Text entry field. 
  715.  
  716.     In the left-hand side of the dialog box you should now have a column of 
  717.     radio buttons with a heading of Student Level, and on the right a group box 
  718.     with a heading of Media and containing three check boxes. 
  719.  
  720. 19. Finally, add three pushbuttons to the dialog box.  Select Pushbutton from 
  721.     the Control menu. Position the cursor in the lower-left side of the dialog 
  722.     box and click the mouse.  Type OK in the Text entry field. and press Enter. 
  723.  
  724. 20. Position another push button to the right of the first one (in the lower 
  725.     middle of the dialog box) and type Cancel in the Text entry field. 
  726.  
  727. 21. Select a third push button and position it to the right of the second Type 
  728.     Help in the Text entry field. 
  729.  
  730. The dialog box and its controls are now complete. 
  731.  
  732. Try selecting each of the controls, and observe the information in the Selected 
  733. Item Status. It holds information about each control that you edit. 
  734.  
  735. You may now want to test the dialog box. 
  736.  
  737.  
  738. ΓòÉΓòÉΓòÉ <hidden> Dialog Editor - Changing the Dialog Box ΓòÉΓòÉΓòÉ
  739.  
  740. To change the properties of a dialog box or a single control, use the following 
  741. functions of the Edit menu: 
  742.  
  743. o Select New Dialog to create another dialog box in the same resource file. 
  744.   Your existing dialog box will stay in memory. 
  745.  
  746. o Select Select Dialog to switch to another open dialog box. 
  747.  
  748. o Select Symbols to define symbols. 
  749.  
  750. Eight of the editing functions require that you first select the control to be 
  751. edited. The selected control will appear in the drag window, surrounded by 
  752. eight dots, one in each corner and one at the midpoint of each side. 
  753.  
  754. Selected Edit Menu Functions 
  755.  
  756. The following functions all require that a control must first be selected: 
  757.  
  758. o Select Cut to cut a control you would like to move or delete. 
  759.  
  760. o Select Copy to copy to the clipboard a control you would like to duplicate 
  761.   elsewhere in the same dialog or in another dialog. 
  762.  
  763. o Select Paste to place a control you have marked with Cut or Copy. 
  764.  
  765. o Select Clear to erase a control. 
  766.  
  767. o Select Duplicate to create another control in this dialog box identical with 
  768.   the selected control. 
  769.  
  770. o Select Styles to define the style of the selected control. 
  771.  
  772. o Select Presentation parameters to select color & font. 
  773.  
  774. o Select Size to text to adjust an entry field's size to the text inside. 
  775.  
  776.  
  777. ΓòÉΓòÉΓòÉ <hidden> Dialog Editor - Using the Options Menu ΓòÉΓòÉΓòÉ
  778.  
  779. On the Options menu, a check mark next to each option shows whether it is 
  780. selected (on) or not (off). 
  781.  
  782. To toggle your selection of options on and off, use the following functions of 
  783. the Options menu: 
  784.  
  785. o Select Test mode to test the dialog. 
  786.  
  787. o Select Hex mode to toggle between hex and decimal display of ID Values of 
  788.   symbols. 
  789.  
  790. o Select Translate mode to  toggle translate mode on and off. 
  791.  
  792. o Select Enable 2.0 styles to use controls and their styles which are specific 
  793.   to OS/2* 2.0, but not prior releases.  If you are creating a dialog which 
  794.   will be used on computers running OS/2 version 1.3, for instance, you will 
  795.   want to toggle this option off. 
  796.  
  797. o Select Show status area to toggle display of the status area on and off. 
  798.  
  799.  
  800. ΓòÉΓòÉΓòÉ <hidden> Dialog Editor - Testing the Dialog Box ΓòÉΓòÉΓòÉ
  801.  
  802. To test the dialog box, select Test Mode from the Options menu.  The dialog box 
  803. is displayed as it appears to the user from a program.  In test mode, you can 
  804. select controls, and their appearance changes in the same way as they do in an 
  805. application.  To return to work mode, click on Test Mode again to de-select it. 
  806.  
  807. If you want to make changes, you may edit the dialog box. 
  808.  
  809.  
  810. ΓòÉΓòÉΓòÉ <hidden> Dialog Editor - Ending an Edit Session ΓòÉΓòÉΓòÉ
  811.  
  812. To end the edit session, select Close from the system pull-down menu.  you see 
  813. prompts for the file names of the files you want to save. 
  814.  
  815. If you want to edit the same file the next time you use the editor, select Open 
  816. from the File menu. 
  817.  
  818.  
  819. ΓòÉΓòÉΓòÉ <hidden> Dialog Editor - Dialog Templates ΓòÉΓòÉΓòÉ
  820.  
  821. The Dialog Editor creates an ASCII text file that has the file-name extension 
  822. .DLG. The compiled form of this file, created using the Resource Compiler, has 
  823. the file-name extension .RES. 
  824.  
  825. The .DLG file contains a series of statements, collectively termed a dialog 
  826. template, that define each dialog box and each control in each dialog box. The 
  827. statement for each dialog box contains the data required to create it, namely 
  828. its class, size, position, window text, and any other special information 
  829. required for the window. 
  830.  
  831. Normally, the template consists of a dialog box window followed by the controls 
  832. contained within it, as child windows. 
  833.  
  834. The DLGINCLUDE statement specifies the file name of the include file. 
  835.  
  836. The DLGTEMPLATE statement specifies the symbolic identifier of the dialog box 
  837. (MYDIALOG), and loading and memory options. The actual dialog template is 
  838. contained by the first BEGIN and last END statement. There is a CONTROL 
  839. statement for each of the controls in the dialog box. The CONTROL statement is 
  840. a general statement that is followed by parameters that further specify the 
  841. control: 
  842.  
  843. o Text, where appropriate.  For example, the text OK is defined for one of the 
  844.   pushbuttons. 
  845. o Application-defined symbolic or integer identifiers for each control.  Your 
  846.   application uses the identifier to track the responses from controls.  For 
  847.   example, ID_NULL is the identifier of the text control. 
  848. o The types and positions of the various controls.  For example, the group box 
  849.   control is a control window of window class WC_STATIC. The Cancel and Help 
  850.   pushbuttons are of window class WC_BUTTON. 
  851. o The appearance and operation of the dialog box and its controls are specified 
  852.   in detail by combinations of style parameters.  For example, the check boxes 
  853.   have a class style of BS_CHECKBOX, and radio buttons have a class style of 
  854.   BS_RADIOBUTTON.  You can also specify appropriate WS_* styles. 
  855.  
  856. If necessary, you can use a text editor to edit the .DLG file, for example, to 
  857. fine-tune the dialog template produced by the dialog box editor.  You can even 
  858. use a text editor to produce your own .DLG file. The Dialog Editor uses the 
  859. general CONTROL statement with window classes and control styles to define 
  860. controls. 
  861.  
  862. You can use the CONTROL statement in the same way to define your controls, or 
  863. you can use any of several predefined control statements that give you the same 
  864. result.  For example, the predefined control statement PUSHBUTTON gives you a 
  865. WC_BUTTON class window with default styles of BS_PUSHBUTTON and WS_TABSTOP. 
  866.  
  867. A dialog template can be in either of the following: 
  868.  
  869. o A resource file, (generated from the .DLG or .RES file) 
  870. o A block of memory that has the DLGTEMPLATE data structure, in which case you 
  871.   use WinCreateDlg (WCCRD) to create the dialog box from the template. 
  872.  
  873. The dialog template uses device-independent dialog units for the coordinate 
  874. system that defines the layout of controls in the dialog box. 
  875.  
  876. A dialog unit is expressed in terms of the default standard character size, 
  877. which can vary from device to device.  You do not need to put code in your 
  878. application to reformat the dialog box when displaying it on different devices. 
  879. (Dialogs may need editing if a different system font is loaded.)  A horizontal 
  880. dialog unit is 0.25 of the standard character size. A vertical dialog unit is 
  881. 0.125 of the standard character size. Dialog units are expressed as offsets 
  882. from the origin (lower-left corner) of the dialog box. 
  883.  
  884. A dialog template is a general structure.  It equally could be termed a window 
  885. template, because you can use it to define any window in an application.  If 
  886. you prefer, use the statement WINDOWTEMPLATE instead of DLGTEMPLATE, because it 
  887. is functionally identical. This could reduce the initialization phase of the 
  888. application to registering the application window classes and calling 
  889. WinLoadDlg (WCLD) to load the template. 
  890.  
  891. If you use the Dialog Editor to define a standard window, you will have to edit 
  892. the resulting .DLG file, to ensure that you have a client window and the 
  893. required parent-child relationships.  You will also have to use WinLoadMenu 
  894. (WCLM) in your application, to create an menu bar for the window, because you 
  895. cannot create menus using the Dialog Editor. 
  896.  
  897. The .RES file is an object-format compiled version of the .DLG file, created 
  898. when the Dialog Editor calls the Resource Compiler.  The Dialog Editor uses the 
  899. .RES file as input on any subsequent edit of the same dialog.  This means that, 
  900. if you use a text editor to fine-tune a .DLG file, and you want subsequently to 
  901. re-edit the dialog using the Dialog Box Editor, you must first use the Resource 
  902. Compiler to generate a new .RES file from the .DLG file. 
  903.  
  904. Your application can use either the .RES file output by the Dialog Editor, or a 
  905. .RES file created from the .DLG file and the other resources. If your 
  906. application uses the .DLG file, it must be included by the resource script file 
  907. of your application. 
  908.  
  909. The rcinclude statement includes the .DLG file created by the Dialog Editor; 
  910. for example: 
  911.  
  912. rcinclude dbe.dlg /* Includes .DLG file */
  913.  
  914. The corresponding .H file created by the Dialog Editor must also be included in 
  915. the .RC file. To see how the rcinclude statement fits in with other resource 
  916. definitions, and how to include the .H file, see RCINCLUDE Statement (in 
  917. Resource Compiler documentation). 
  918.  
  919. Using OS/2*-defined control windows, OS/2 draws and operates the controls 
  920. specified in the resource file for your application. Controls are windows and 
  921. can be used within any other window. 
  922.  
  923. Related Topic 
  924.  
  925. Dialog Template Sample 
  926.  
  927.  
  928. ΓòÉΓòÉΓòÉ <hidden> Dialog Editor - Sample Dialog Template File ΓòÉΓòÉΓòÉ
  929.  
  930. The following dialog template is used for the dialog described in Adding 
  931. Controls Example: 
  932.  
  933. DLGINCLUDE 1 "DBE.H"
  934.  
  935.  
  936. DLGTEMPLATE mydialog LOADONCALL MOVEABLE DISCARDABLE
  937.  
  938. BEGIN
  939.  
  940.       DIALOG "Sample Dialog Box", mydialog, 11, 8, 170, 105,
  941.           FS_NOBYTEALIGN | FS_DLGBORDER | WS_VISIBLE |
  942.           WS_SAVEBITS, FCF_TITLEBAR
  943.  
  944.       BEGIN
  945.  
  946.             CONTROL "Student Level:", id_null, -1, 94, 63, 9, WC_STATIC,
  947.                 SS_TEXT | DT_LEFT | DT_TOP | WS_GROUP | WS_VISIBLE
  948.  
  949.             CONTROL "Elementary", 258, 7, 82, 62, 11, WC_BUTTON,
  950.                 BS_RADIOBUTTON | WS_GROUP | WS_TABSTOP | WS_VISIBLE
  951.  
  952.             CONTROL "Intermediate", 259, 7, 67, 73, 9, WC_BUTTON,
  953.                 BS_RADIOBUTTON | WS_VISIBLE
  954.  
  955.             CONTROL "Advanced", 260, 7, 51, 52, 13, WC_BUTTON,
  956.                 BS_RADIOBUTTON | WS_VISIBLE
  957.  
  958.             CONTROL "Media", 261, 87, 48, 75, 54, WC_STATIC,
  959.                 SS_GROUPBOX | WS_GROUP | WS_VISIBLE
  960.  
  961.             CONTROL "Text books", 262, 97, 83, 60, 10, WC_BUTTON,
  962.                 BS_CHECKBOX | WS_TABSTOP | WS_VISIBLE
  963.  
  964.             CONTROL "Video", 263, 97, 68, 46, 10, WC_BUTTON,
  965.                 BS_CHECKBOX | WS_VISIBLE
  966.  
  967.             CONTROL "CBT", 264, 97, 53, 32, 10, WC_BUTTON,
  968.                 BS_CHECKBOX | WS_VISIBLE
  969.  
  970.             CONTROL "OK", 265, 7, 20, 38, 12, WC_BUTTON,
  971.                 BS_PUSHBUTTON | WS_GROUP | WS_TABSTOP | WS_VISIBLE
  972.  
  973.             CONTROL "Cancel", 266, 61, 20, 38, 12, WC_BUTTON,
  974.                 BS_PUSHBUTTON | WS_TABSTOP | WS_VISIBLE
  975.  
  976.             CONTROL "Help", 267, 117, 20, 38, 12, WC_BUTTON,
  977.                 BS_PUSHBUTTON | WS_TABSTOP | WS_VISIBLE
  978.  
  979.       END
  980.  
  981. END
  982.  
  983.  
  984. ΓòÉΓòÉΓòÉ 3. Font Editor ΓòÉΓòÉΓòÉ
  985.  
  986. Select One: 
  987.  
  988. Introduction 
  989. Using the Font Editor 
  990. Defining Fonts 
  991. Editing Character Width 
  992. Font Resource Files 
  993.  
  994.  
  995. ΓòÉΓòÉΓòÉ <hidden> Font Editor - Introduction ΓòÉΓòÉΓòÉ
  996.  
  997. You can use the OS/2* Font Editor to design and save your own fonts for use in 
  998. applications. 
  999.  
  1000. A font is a set of alphanumeric characters, punctuation marks, and other 
  1001. symbols that share a common typeface design and line weight.  An application 
  1002. loads a font from a dynamic-link library file (.DLL file). 
  1003.  
  1004. The Font Editor allows you to edit an enlarged version of each character in an 
  1005. editing window, using the mouse to switch the enlarged representation of pels 
  1006. to black or white. 
  1007.  
  1008. You can change a series of pels by dragging the mouse pointer through them 
  1009. while holding down the mouse button. An enlarged scale version of the character 
  1010. is shown in a viewing window to the right of the edit window. 
  1011.  
  1012.  
  1013. ΓòÉΓòÉΓòÉ <hidden> Using the Font Editor ΓòÉΓòÉΓòÉ
  1014.  
  1015. To run the Font Editor, select Font Editor from the Development Tools group. 
  1016.  
  1017. Select one of the options in the File menu to open a new or existing font. The 
  1018. letter A appears in both the editing and viewing windows. The rest of the font 
  1019. appears in the character selection scroll box at the bottom of the Font Editor 
  1020. window. 
  1021.  
  1022. To edit any other character in the font, select it from the character selection 
  1023. scroll box.  The character appears in the editing and viewing windows. 
  1024.  
  1025. Font Editing Functions 
  1026.  
  1027. Functions for defining fonts are found on the Header menu. 
  1028.  
  1029. Functions for editing character width are found on the Width and Shift menus. 
  1030.  
  1031.  
  1032. ΓòÉΓòÉΓòÉ <hidden> Font Editor - Defining Fonts ΓòÉΓòÉΓòÉ
  1033.  
  1034. Use the Header menu to define the typestyle that you want to create: 
  1035.  
  1036. o Select General to specify spacing (fixed or proportional), type face style, 
  1037.   line width, and type weight. 
  1038.  
  1039. o Select Naming to specify the identification details such as the type-face 
  1040.   name. 
  1041.  
  1042. o Select Relations to specify the position of characters. 
  1043.  
  1044. o Select Sizes to specify the font character dimensions. 
  1045.  
  1046. o Select Definitions to change character spacing in a proportional font. 
  1047.  
  1048.  
  1049. ΓòÉΓòÉΓòÉ <hidden> Font Editor - Editing Character Width ΓòÉΓòÉΓòÉ
  1050.  
  1051. The Width and Shift menus allow you to change the width of individual 
  1052. characters. 
  1053.  
  1054. The Width Menu 
  1055.  
  1056. Use the Width menu to alter the width of a single character.  This menu is 
  1057. enabled only when you are editing a proportional space font.  You can make a 
  1058. character wider or narrower by adding or deleting columns of pels from the 
  1059. right, the left, or both sides.  You may also use the Set Character Increment 
  1060. option to set the width of a character. On-line help panels describe how to 
  1061. perform these functions. 
  1062.  
  1063. The Shift Menu 
  1064.  
  1065. Use the Shift menu to insert a one-pel-wide row or column into (or delete from) 
  1066. the character that you are editing.  When you select shift, the pointer becomes 
  1067. a flat horizontal or vertical bar when inside the edit window.  This enables 
  1068. you to position it exactly where you want the operation to take place. 
  1069.  
  1070. To cancel a shift you have selected before execution, select Cancel Choice. 
  1071.  
  1072.  
  1073. ΓòÉΓòÉΓòÉ <hidden> Font Editor - Font Resource Files ΓòÉΓòÉΓòÉ
  1074.  
  1075. The Font Editor creates a file with a .FNT extension. The .FNT file is not 
  1076. referred to in the same resource file as other resources. 
  1077.  
  1078. Instead, it has its own resource file that contains a single-line statement 
  1079. that has a similar format to the ICON, POINTER, and BITMAP statements, for 
  1080. example: 
  1081.  
  1082. FONT  101      myfont.fnt     /* Font */
  1083.  
  1084. The FONT keyword identifies the resource type. 
  1085.  
  1086. The resource type is followed by an integer identifier that is used by the 
  1087. application to identify the resource. The integer is used as a parameter to the 
  1088. WinCreateStdWindow (WICRTS) call. You cannot use a symbolic name for a font. 
  1089.  
  1090. The integer identifier can be followed by loading and memory options. Again, 
  1091. the example lets them default. 
  1092.  
  1093. The last part of the statement is the file name of the resource created by the 
  1094. Font Editor. A full path name must be given if it is not in the current 
  1095. directory. 
  1096.  
  1097. Producing a font file uses a process similar to binding resources to an .EXE 
  1098. file. You bind one or more .FNT files to a dummy .DLL, to produce a file 
  1099. containing the font or fonts. The final file should have the extension .FON. 
  1100.  
  1101. The .FON file created by the process is installed on the system and becomes a 
  1102. public font, a font that can be used by any application in the system. 
  1103.  
  1104. A font not installed on the system is called a private font. Before your 
  1105. application can use the font, your application must use GpiLoadFonts to load 
  1106. the .FON file. 
  1107.  
  1108.  
  1109. ΓòÉΓòÉΓòÉ 4. Icon Editor ΓòÉΓòÉΓòÉ
  1110.  
  1111. Select One: 
  1112.  
  1113. Introduction 
  1114. Using 
  1115. Creating a Figure 
  1116. Editing Art 
  1117. Using Options 
  1118.   Pen Shape/Size 
  1119.   Preferences 
  1120.   Hotspot 
  1121. Selecting Colors 
  1122.   Editing 
  1123.   Filling Areas 
  1124. Multiple Displays 
  1125. Multiple Sessions 
  1126. Command Line 
  1127.  
  1128.  
  1129. ΓòÉΓòÉΓòÉ <hidden> Icon Editor - Introduction ΓòÉΓòÉΓòÉ
  1130.  
  1131. The Icon Editor lets you create your own art (icons, pointers, and bit maps), 
  1132. and save them for use by applications. 
  1133.  
  1134. Icons, pointers, and bit maps produced by the Icon Editor are graphic symbols 
  1135. comprised of pels (also known as pixels) in any of the following display 
  1136. states: 
  1137.  
  1138. o Black 
  1139. o White 
  1140. o Color 
  1141. o Screen (background color) 
  1142. o Inverse screen (inverse of background color). 
  1143.  
  1144. An application can use an icon to represent a minimized standard window.  For 
  1145. example, an application that lists telephone numbers could use a telephone icon 
  1146. when minimized.  An application can also use icons as warning symbols in 
  1147. message boxes, for example, an exclamation mark or an upraised hand. 
  1148.  
  1149. An application can associate a pointer with the mouse or similar pointing 
  1150. device, so that the user can move the pointer around the screen, and select 
  1151. controls or text.  A pointer could also be used to draw graphics on the screen, 
  1152. in an interactive graphics application. For example, a free-hand graphics 
  1153. drawing application could use a pencil shape to represent the pointer. 
  1154.  
  1155.  
  1156. ΓòÉΓòÉΓòÉ <hidden> Using the Icon Editor ΓòÉΓòÉΓòÉ
  1157.  
  1158. To run the Icon Editor, select the Development Tools folder and then select 
  1159. Icon Editor. 
  1160.  
  1161. The Icon Editor display consists of three parts: the information panel, the 
  1162. palette window, and the editing window. 
  1163.  
  1164. The information panel at the top of the Icon Editor window displays the 
  1165. following information: 
  1166.  
  1167. o A picture of a two-button mouse, showing the colors currently selected for 
  1168.   each button 
  1169.  
  1170. o An actual-size image of the current figure that you are editing 
  1171.  
  1172. o The status area, showing the following: 
  1173.  
  1174.    Size (defined as 32 x 32 for icons and pointers; user-defined for bit maps) 
  1175.    Pen location 
  1176.    Pen size (from 1 x 1 to 9 x 9) 
  1177.    Hotspot (for icons and pointers, but not bit maps) 
  1178.    Figure type (icon, pointer, or bit map) 
  1179.    Form name 
  1180.  
  1181. The palette window, in the lower right corner, displays the colors that are 
  1182. available for use during editing.  The colors currently selected are marked 
  1183. with frames. 
  1184.  
  1185. The editing window is the largest part of your working area.  Use the mouse or 
  1186. keyboard to move the pointer, clicking or dragging it, to paint the enlarged 
  1187. representation of pels with the selected color. 
  1188.  
  1189.  
  1190. ΓòÉΓòÉΓòÉ <hidden> Icon Editor - Creating a Figure ΓòÉΓòÉΓòÉ
  1191.  
  1192. The Edit menu includes the functions used to select a an icon, pointer, or bit 
  1193. map for editing, and to save it after you are through. 
  1194.  
  1195. Selecting your icon, pointer, or bit map 
  1196.  
  1197. o To create a new icon, pointer, or bit map, select New from the File pull-down 
  1198.   menu.  The New Figure pop-up window appears, prompting you for further 
  1199.   information. 
  1200.  
  1201.   Select the figure type: Icon, Pointer, or Bit map. For a bit map you must 
  1202.   specify the width and height in pels. If the bit map is larger than the 
  1203.   screen, scroll bars will appear to allow you move around, to work on the 
  1204.   off-screen portions of your bit map. Select Enter. 
  1205.  
  1206.   You can also create new art by modifying or editing an existing art of the 
  1207.   same type. 
  1208.  
  1209. o To edit existing art, select Open from the File pull-down menu. You will be 
  1210.   prompted for a name. 
  1211.  
  1212.   Note:  Unless you have turned off Safe Prompting (under Setting Preferences 
  1213.   on the Options menu), you will be prompted to save if you select Open or New 
  1214.   while there is unsaved art on your screen. 
  1215.  
  1216. o If you started Iconedit from the prompt and specified multiple files, you can 
  1217.   use the Next option on the File menu to select the next file. 
  1218.  
  1219.   The Next option will be greyed out if you did not start from the command line 
  1220.   and specify multiple files. 
  1221.  
  1222. Saving your icon, pointer, or bit map 
  1223.  
  1224. To save your art, select either of the following: 
  1225.  
  1226. o Select Save to save it under its current file name. If this is new art, you 
  1227.   will be prompted for a name. 
  1228.  
  1229. o Select Save As to save the art under a different name. You will be prompted 
  1230.   for a new name. 
  1231.  
  1232.  
  1233. ΓòÉΓòÉΓòÉ <hidden> Icon Editor - Editing Art ΓòÉΓòÉΓòÉ
  1234.  
  1235. To edit your art, use the functions of the Edit menu. 
  1236.  
  1237. Select Undo to restore the art to the way it was before the most recent editing 
  1238. operation. 
  1239.  
  1240. Four of the editing functions require that you first mark the area to be 
  1241. edited, using Select or Select All. 
  1242.  
  1243. If you choose Select, the cursor changes to a rectangle. Hold the mouse button 
  1244. down to anchor one corner, and then drag the mouse. Release the button to 
  1245. anchor the opposite corner of the area you want to edit. 
  1246.  
  1247. If you choose Select All, the entire figure is selected. 
  1248.  
  1249. Selected Edit Menu Functions 
  1250.  
  1251. The following functions all require that an area must first be selected: 
  1252.  
  1253. o Select Fill to fill the selected area with the current palette color.  For 
  1254.   additional information, see Filling Areas With Color. 
  1255.  
  1256. o Select Cut to cut an area you would like to move or delete. 
  1257.  
  1258. o Select Copy to copy an area you would like to duplicate elsewhere in the same 
  1259.   file or in another file. 
  1260.  
  1261. o Select Paste to place an area you have marked with Cut or Copy.  Drag the 
  1262.   outlined area which you have marked to the place you would like to paste it. 
  1263.  
  1264. o Select Clear to erase all drawing within an area you have selected, and leave 
  1265.   transparent pels. When the completed used, the background color will be seen 
  1266.   through these areas. If you have used Select All, this will clear your entire 
  1267.   icon, pointer, or bit map. 
  1268.  
  1269. o Select Stretch Paste to paste the clipboard contents into your art, 
  1270.   stretching and positioning to fit. 
  1271.  
  1272. o Select Flip Horizontal to flip the art on its horizontal axis, reversing 
  1273.   bottom and top. 
  1274.  
  1275. o Select Flip Vertical to to flip the art on its vertical axis, reversing left 
  1276.   and right. You can create a symmetrical drawing by copying one side of the 
  1277.   art to the other side, and then flipping one of them. 
  1278.  
  1279. o Select Circle to inscribe a circle or ellipse within the selected area. 
  1280.  
  1281.  
  1282. ΓòÉΓòÉΓòÉ <hidden> Icon Editor - Using Options ΓòÉΓòÉΓòÉ
  1283.  
  1284. The choices on the Options menu enable you to test your art and vary your 
  1285. editing environment. To change an option, select it on the Options menu. 
  1286.  
  1287. Test 
  1288.      To test view the pointer or icon you are editing. The pointer or icon will 
  1289.      be displayed, actual size, as the pointer until you toggle back by again 
  1290.      selecting Test on the Options menu. 
  1291.  
  1292. Grid 
  1293.      To superimpose a grid over the editing window. This can be useful when you 
  1294.      want to draw a symmetrical figure. Each cell of the grid represents one 
  1295.      pel in the figure. 
  1296.  
  1297. draw straight 
  1298.      To temporarily restrict your drawing to drawing straight vertical and 
  1299.      horizontal lines. Even if you deviate from the horizontal row, a 
  1300.      horizontal line is produced when the mouse pointer is dragged across the 
  1301.      editing window.  Dragging the mouse up or down produces straight vertical 
  1302.      lines. 
  1303.  
  1304. X background 
  1305.      To make the transparent pels (where the background is visible) apparent 
  1306.      when editing an icon or pointer. All screen or inverse screen colors will 
  1307.      be shown with an X.  This option does not apply to bit maps because they 
  1308.      have no transparent pels. 
  1309.  
  1310. Changing Pen Shape 
  1311.      See Changing Pen Shape and Size 
  1312.  
  1313. Changing Pen Size 
  1314.      See Changing Pen Shape and Size 
  1315.  
  1316. Setting Preferences 
  1317.      See Setting Preferences 
  1318.  
  1319. Defining a Hotspot 
  1320.      See Defining a Hotspot 
  1321.  
  1322.  
  1323. ΓòÉΓòÉΓòÉ <hidden> Icon Editor - Changing Pen Shape and Size ΓòÉΓòÉΓòÉ
  1324.  
  1325. You can change the shape and size of the pen by using choices on the Options 
  1326. menu. 
  1327.  
  1328. Changing Pen Shape 
  1329.  
  1330. Before you select Pen Shape, you must first select the shape using the Select 
  1331. function on the Edit Menu. See Editing Art for information about Select. Then 
  1332. select Pen Shape on the Options menu. 
  1333.  
  1334. Changing Pen Size 
  1335.  
  1336. Select Pensize on the Options menu to specify how many pels the pointer paints 
  1337. at a time. You may select any of nine square pen sizes: 
  1338.  
  1339.  
  1340.  1 x 1       4 x 4       7 x 7
  1341.  
  1342.  2 x 2       5 x 5       8 x 8
  1343.  
  1344.  3 x 3       6 x 6       9 x 9
  1345.  
  1346. Shortcut: Select a pen size by pressing [Ctrl] and the size, such as [Ctrl]+6 
  1347. for a 6 x 6 pen size.   . 
  1348.  
  1349.  
  1350. ΓòÉΓòÉΓòÉ <hidden> Icon Editor - Setting Preferences ΓòÉΓòÉΓòÉ
  1351.  
  1352. To change your preferences, select Preferences on the Options menu.  Then 
  1353. select any of the following: 
  1354.  
  1355. Safe Prompting 
  1356.      To be warned before destructive operations such as file overwrites. 
  1357.  
  1358. Suppress Warnings 
  1359.      To suppress display of informational messages. 
  1360.  
  1361. Save state on exit 
  1362.      To save settings for your next session. 
  1363.  
  1364. Display Status Area 
  1365.      To toggle on and off the picture of the mouse and art from the status 
  1366.      area. 
  1367.  
  1368. Reset Options and Modes 
  1369.      To deselect the following items: 
  1370.  
  1371.    Select 
  1372.    Hotspot 
  1373.    Color Fill 
  1374.    Find Color The palette will not be reset. 
  1375.  
  1376.  
  1377. ΓòÉΓòÉΓòÉ <hidden> Icon Editor - Defining a Hotspot ΓòÉΓòÉΓòÉ
  1378.  
  1379. The Hotspot is the pel where where mouse input for an icon or pointer is 
  1380. directed.  The default hotspot location is 16 x 16, the center of the icon or 
  1381. pointer. Bit maps do not have hotspots. 
  1382.  
  1383. Select Hotspot on the Options menu to designate this pel.  The cursor changes 
  1384. shape, and the screen coordinates of the current hotspot are displayed in the 
  1385. information window.  When you click on a new hotspot, the screen coordinates of 
  1386. the new hotspot are displayed. 
  1387.  
  1388. Select Hotspot again to return to editing. 
  1389.  
  1390. When an application uses WinQueryPointerPos (WMQPTP) to query the screen 
  1391. position of a pointer, the OS/2* operating system returns the coordinates of 
  1392. the pointer's hot spot. 
  1393.  
  1394.  
  1395. ΓòÉΓòÉΓòÉ <hidden> Icon Editor - Selecting Colors ΓòÉΓòÉΓòÉ
  1396.  
  1397. Use the Palette to select a new drawing color, using the left or right mouse 
  1398. button. 
  1399.  
  1400. The currently selected color for the right mouse button is framed on the 
  1401. palette in red; the color for the left mouse button is framed in green. The 
  1402. currently selected colors for both mouse buttons are also displayed at the left 
  1403. side of the status area. 
  1404.  
  1405. Changing Palettes or Palette Colors 
  1406.  
  1407. To change palettes or palette colors, select the Palette menu.  On the Palette 
  1408. menu, you have the following choices: 
  1409.  
  1410. o Select New to create a new palette.  The default palette will appear for you 
  1411.   to edit. 
  1412.  
  1413. o Select Open to open an existing palette. 
  1414.  
  1415. o Select Save to save your current palette. If it is a new palette, you will be 
  1416.   prompted for a name. 
  1417.  
  1418. o Select Save As to save the palette under a different name. You will be 
  1419.   prompted for a new name. 
  1420.  
  1421. o Select Edit Color to edit a color in your palette. 
  1422.  
  1423. o Select Swap colors to swap the colors of the left and right mouse buttons. A 
  1424.   dialog will appear, asking whether you want to preserve these colors in your 
  1425.   art. Unless you choose Preserve Figure, the colors in your art will be 
  1426.   changed accordingly. 
  1427.  
  1428. o Select Set default palette to save the existing palette as your default 
  1429.   palette. 
  1430.  
  1431.  
  1432. ΓòÉΓòÉΓòÉ <hidden> Icon Editor - Editing Palette Colors ΓòÉΓòÉΓòÉ
  1433.  
  1434. You can change the colors that appear on your palette. To edit palette colors, 
  1435. follow these steps: 
  1436.  
  1437.  1. Select the color to be edited with the mouse. A frame appears around it on 
  1438.     the palette. 
  1439.  
  1440.  2. Select Edit color on the Palette menu. 
  1441.  
  1442.     Shortcuts: 
  1443.  
  1444.    o Double click on the color to be edited. 
  1445.    o To select a color that you have already used in your art, use Find color 
  1446.      on the Tools menu. 
  1447.  
  1448.     The Edit color window will appear. 
  1449.  
  1450.  3. You can change the way you define palette colors by checking Dynamic 
  1451.     editing and Important and choosing between RGB and HSV terms. 
  1452.  
  1453.    o Dynamic editing, when checked, will make your art change dynamically as 
  1454.      you edit individual colors, so that you can see how the changes will 
  1455.      affect your art. 
  1456.  
  1457.    o Important, when checked, will require that the color be accurately 
  1458.      rendered, without dithering. 
  1459.  
  1460.    o Every color may be described numerically in either RGB or HSV terms. 
  1461.  
  1462.       RGB     As proportions of primary colors red, blue, and green 
  1463.  
  1464.       HSV     In terms of hue, saturation, and value 
  1465.  
  1466.      To toggle between RGB and HSV, select the appropriate radio button. 
  1467.  
  1468.  4. Use the scrollbars to change RGB or HSV values, or change these numbers 
  1469.     from the keyboard. 
  1470.  
  1471.  5. Select OK to save the edited color. 
  1472.  
  1473.  
  1474. ΓòÉΓòÉΓòÉ <hidden> Icon Editor - Filling Areas With Color ΓòÉΓòÉΓòÉ
  1475.  
  1476. There are two different ways to fill an area with color: 
  1477.  
  1478. o To fill an irregularly-shaped area with the current palette color, select 
  1479.   Color fill on the Tools menu. 
  1480.  
  1481.   After you click on a specific pel, all adjoining areas that are the same 
  1482.   color as that pel will be colored with the selected color. 
  1483.  
  1484. o To fill a previously-selected area with the current palette color, select 
  1485.   Fill on the Edit menu. You must first select a area. See Editing Art for 
  1486.   information about Select and Select All. 
  1487.  
  1488. Note:  To select a color that you have already used in your art, use Find color 
  1489.        on the Tools menu. A question-mark-arrow cursor will appear. 
  1490.  
  1491. Click on a specific pel of that color, and that color is selected. 
  1492.  
  1493.  
  1494. ΓòÉΓòÉΓòÉ <hidden> Icon Editor - Creating Icons for Specific Displays ΓòÉΓòÉΓòÉ
  1495.  
  1496. Although the Icon Editor edits and saves a device-independent form of the icon, 
  1497. the Device menu enables you to create versions of the icon for specific display 
  1498. devices.  The Device menu displays a choice of three functions:  create a new 
  1499. device form, select an existing form, and delete a form. 
  1500.  
  1501. An independent form is automatically created when you create a new icon or 
  1502. pointer and all other forms are derived from it.  If you select any of the 
  1503. other device forms listed in the menu, a new form is created for the specified 
  1504. device.  The Custom option enables you to create an icon or pointer for any 
  1505. other device. 
  1506.  
  1507. Select List to view a list of all existing forms, including custom and standard 
  1508. forms.  Any item on this list may be selected and edited or deleted.  However, 
  1509. you must have at least one device-independent form.  Select Add in the list 
  1510. dialog to add a new device form. 
  1511.  
  1512. Several icon bit maps may be saved in a single icon resource; when the icon is 
  1513. saved, all versions are saved with it in a format that includes a device 
  1514. resolution tag for each version.  When the icon is loaded from a resource file, 
  1515. the display device resolution is matched against the device for which each 
  1516. device-dependent icon was intended. If a match is found, that icon is used.  If 
  1517. no match is found, the application uses the device-independent icon, which 
  1518. always exists. 
  1519.  
  1520. Figure files may contain any of the following forms to support multiple 
  1521. devices: 
  1522.  
  1523. o Independent 
  1524. o CGA (2 colors) 
  1525. o EGA (16 colors) 
  1526. o VGA (16 colors) 
  1527. o 8514 (256 colors) 
  1528. o Custom 
  1529.  
  1530. Device-dependent icons are icons that are designed for a particular display 
  1531. resolution. 
  1532.  
  1533. An application can display icons or bit maps in dialog boxes or windows. 
  1534.  
  1535. The file name extension depends on the type of resource you are creating. The 
  1536. Icon Editor produces a file with any of the following extensions: 
  1537.  
  1538. .ICO for icons 
  1539. .PTR for pointers 
  1540. .BMP for bit maps 
  1541.  
  1542. The .ICO, .PTR, or .BMP files must be referred to in the resource script file 
  1543. for your application.  The external files containing icons, pointers, and bit 
  1544. maps are all referenced in the resource script file by single-line statements 
  1545. that have a similar format.  For example: 
  1546.  
  1547. ICON    ID_MAINWND myprog.ico   /* Icon    */
  1548.  
  1549. POINTER ID_PTR     mypoint.ptr  /* Pointer */
  1550.  
  1551. BITMAP  ID_BMP     mybtmp.bmp   /* bit map  */
  1552.  
  1553. ICON, POINTER, and BITMAP keywords identify the resource type. 
  1554.  
  1555. The resource type is followed by a symbolic name or integer identifier that is 
  1556. used by your application to identify the resource.  For example, with ICON, the 
  1557. ID_MAINWND identifier can be used by the application in the control data 
  1558. parameter of the WinCreateWindow (WICRT) call (or as a parameter to the 
  1559. WinCreateStdWindow (WICRTS) call) that creates the frame of your application's 
  1560. main window. The OS/2* operating system then associates the icon with the main 
  1561. window. 
  1562.  
  1563. The symbolic name or identifier can be followed by loading and memory options. 
  1564. The options are not used by the example, as it lets the options default. 
  1565.  
  1566. The last part of the statement is the file name and file type of the resource 
  1567. created by the Icon Editor.  A fully qualified path name must be given if the 
  1568. file is not in the current directory.  An icon that it used for a minimized 
  1569. application main window should have the same file name as the application's 
  1570. executable file. 
  1571.  
  1572.  
  1573. ΓòÉΓòÉΓòÉ <hidden> Icon Editor - Starting a Session ΓòÉΓòÉΓòÉ
  1574.  
  1575. When a new text-window or full screen session is started, and the user has not 
  1576. explicitly supplied an icon file, the system looks for an .ICO file in the same 
  1577. subdirectory as the executable program, and uses that icon file instead of the 
  1578. default OS/2* or VIO icon. 
  1579.  
  1580. If CMD.EXE is to be run in the new session, the program name (for the purposes 
  1581. of looking for the icon file) will be the string that follows /K (or /C) in the 
  1582. argument string. 
  1583.  
  1584. Thus, for START "title" /C myfile the icon file used is MYFILE.ICO. 
  1585.  
  1586. If an error occurs while loading the icon file, the icon file is ignored and 
  1587. the default icon used.  Note that, if an error occurs when loading an icon, the 
  1588. call returns an error. 
  1589.  
  1590.  
  1591. ΓòÉΓòÉΓòÉ <hidden> Icon Editor - Using a Command Line ΓòÉΓòÉΓòÉ
  1592.  
  1593. If you start the Icon Editor from a command line, rather than from an icon, you 
  1594. have an additional option available. 
  1595.  
  1596. You can load more than one file at a time, by specifying them on the command 
  1597. line when entering the Icon Editor.  For instance, the following command would 
  1598. load the two specified icons, a bit map, and a pointer: 
  1599.  
  1600. ICONEDIT marion.ico gurp.ico alex.bmp pamela.ptr 
  1601.  
  1602. If you started ICONEDIT from the command line and specified multiple files, you 
  1603. can use the Next option on the File Menu. to select the next file. This option 
  1604. is only available if you specified multiple files and started from the command 
  1605. line. 
  1606.  
  1607.  
  1608. ΓòÉΓòÉΓòÉ 5. EXEHDR ΓòÉΓòÉΓòÉ
  1609.  
  1610. Select One: 
  1611.  
  1612. Introduction 
  1613. Help 
  1614. Syntax 
  1615. Options 
  1616. Output 
  1617.   Header Listing 
  1618.   Object Listing 
  1619.   Output Example 
  1620.  
  1621.  
  1622. ΓòÉΓòÉΓòÉ <hidden> EXEHDR - Introduction ΓòÉΓòÉΓòÉ
  1623.  
  1624. The Executable File Header Utility (EXEHDR) displays and modifies the contents 
  1625. of an executable-file header. EXEHDR generates a  listing  showing the contents 
  1626. of the file header and information about each object or segment in the file. 
  1627. Options are provided that let you change values in the file header. 
  1628.  
  1629. Uses of EXEHDR include: 
  1630.  
  1631. o Determining whether a file is an application or a dynamic link library 
  1632. o Viewing and changing the attributes set by the module definition file 
  1633. o Viewing the number and size of code and data segments. 
  1634.  
  1635. You can use EXEHDR with DOS or OS/2* applications and dynamic-link libraries. 
  1636.  
  1637. You can run EXEHDR on OS/2 Version 1.3 files.  In that case, EXEHDR utility 
  1638. will allow you to display and modify the contents of the file header and 
  1639. information about each segment in the file. 
  1640.  
  1641.  
  1642. ΓòÉΓòÉΓòÉ <hidden> EXEHDR - Syntax ΓòÉΓòÉΓòÉ
  1643.  
  1644. EXEHDR [options] filename
  1645.  
  1646. <options> 
  1647.      Options used to modify EXEHDR output or change the file header 
  1648.  
  1649. <filename> 
  1650.      One or more names of applications or dynamic-link library files 
  1651.  
  1652.      Regardless of options, EXEHDR always creates a listing of the file header. 
  1653.  
  1654.  
  1655. ΓòÉΓòÉΓòÉ <hidden> EXEHDR - Help ΓòÉΓòÉΓòÉ
  1656.  
  1657. To display EXEHDR help, type EXEHDR /? at the command prompt. The appropriate 
  1658. copyright statement appears along with a brief list of EXEHDR options. 
  1659.  
  1660. Usage: EXEHDR [options] filename...
  1661. Valid options are:
  1662.  /?
  1663.  /HEAP:(0H - ffffH)
  1664.  /HELP
  1665.  /MAX:(0H - ffffH)
  1666.  /MIN:(0H - ffffH)
  1667.  /NEWFILES
  1668.  /NOLOGO
  1669.  /PMTYPE:(PM | VIO | NOVIO |
  1670.          WINDOWAPI | WINDOWCOMPAT |
  1671.          NOTWINDOWCOMPAT)
  1672.  /RESETERROR
  1673.  /STACK:(0H - ffffH)
  1674.  /VERBOSE
  1675.  
  1676.  
  1677. ΓòÉΓòÉΓòÉ <hidden> EXEHDR - Options ΓòÉΓòÉΓòÉ
  1678.  
  1679. Usage Notes: 
  1680.  
  1681. o Option characters are not case sensitive: /R and /r are equivalent. 
  1682. o Options can be shortened to the fewest characters that uniquely identify 
  1683.   them.  The characters in brackets can be omitted: /N and /NOLOGO are 
  1684.   equivalent. 
  1685. o Although use of the minimum one-letter abbreviations is allowed, if a future 
  1686.   release has an additional option starting with the same letter, the 
  1687.   one-letter option will no longer be usable. 
  1688.  
  1689. /? 
  1690.      Display Help 
  1691. /HEA[P] 
  1692.      Set Heap Allocation 
  1693. /HEL[P] 
  1694.      Display Help 
  1695. /MA[X] 
  1696.      Set Maximum Allocation 
  1697. /MI[N] 
  1698.      Set Minimum Allocation 
  1699. /NE[WFILES] 
  1700.      Enable long file name support 
  1701. /NO[LOGO] 
  1702.      Suppress Sign-On Banner 
  1703. /P[MTYPE] 
  1704.      Set Application Type 
  1705. /R[ESETERROR] 
  1706.      Reset LINK386 Error 
  1707. /S[TACK] 
  1708.      Set Stack Allocation 
  1709. /V[ERBOSE] 
  1710.      Display in Verbose Mode 
  1711.  
  1712. Related Topic 
  1713.  
  1714. Formats Affected by Options 
  1715.  
  1716.  
  1717. ΓòÉΓòÉΓòÉ <hidden> EXEHDR - Formats affected by Options ΓòÉΓòÉΓòÉ
  1718.  
  1719. The EXEHDR options that can change executable files are MIN, MAX, STACK, 
  1720. PMTYPE, HEAP, RESETERROR, and NEWFILES. 
  1721.  
  1722. Executable headers are used by the operating system to determine 
  1723. characteristics of the executable file, such as stack size, entry point, number 
  1724. of objects (or segments), and so on. EXEHDR recognizes three different kinds of 
  1725. executable headers: DOS (generated by DOS linker), OS/2* OS/2 16-bit (generated 
  1726. by LINK), and OS/2 32-bit (generated by LINK386). 
  1727.  
  1728. An X in the following table indicates which option changes which executable 
  1729. header: 
  1730.  
  1731. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1732. Γöé                    ΓöéDOS     ΓöéOS/2 16-bit    ΓöéOS/2 32-bit    Γöé
  1733. Γöé                    Γöé        Γöé(LINK)         Γöé(LINK386)      Γöé
  1734. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1735. ΓöéHEAP                Γöé        ΓöéX              ΓöéX              Γöé
  1736. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1737. ΓöéMAX                 ΓöéX       Γöé               Γöé               Γöé
  1738. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1739. ΓöéMIN                 ΓöéX       Γöé               Γöé               Γöé
  1740. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1741. ΓöéNEWFILES            Γöé        ΓöéX              Γöé               Γöé
  1742. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1743. ΓöéPMTYPE              Γöé        ΓöéX              ΓöéX              Γöé
  1744. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1745. ΓöéRESETERROR          Γöé        ΓöéX              ΓöéX              Γöé
  1746. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1747. ΓöéSTACK               ΓöéX       ΓöéX              Γöé               Γöé
  1748. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1749.  
  1750. For compatibility purposes, executable files generated by either of the OS/2 
  1751. link utilities include both a DOS header and an OS/2 header.  For example, if 
  1752. you use /STACK on an executable generated by OS/2 LINK (16-bit), the DOS header 
  1753. and the OS/2 header will be changed. 
  1754.  
  1755.  
  1756. ΓòÉΓòÉΓòÉ <hidden> EXEHDR - /HEA[P] ΓòÉΓòÉΓòÉ
  1757.  
  1758. Set Heap Allocation (/HEAP) 
  1759.  
  1760. Syntax:  /HEA[P]:nnnn 
  1761.  
  1762. This option sets the size of the local heap and is applicable to OS/2* 
  1763. applications only. The field <nnnn> contains the local heap size in bytes. 
  1764.  
  1765. You can specify <nnnn> in decimal, octal, or hexadecimal radix using standard C 
  1766. language notation. 
  1767.  
  1768.  
  1769. ΓòÉΓòÉΓòÉ <hidden> EXEHDR - /HEL[P] and /? ΓòÉΓòÉΓòÉ
  1770.  
  1771. Display Help (/HELP or /?) 
  1772.  
  1773. Syntax:  /HEL[P]    OR   /? 
  1774.  
  1775. This option displays a brief summary of EXEHDR syntax. 
  1776.  
  1777.  
  1778. ΓòÉΓòÉΓòÉ <hidden> EXEHDR - /MA[X] ΓòÉΓòÉΓòÉ
  1779.  
  1780. Set Maximum Allocation (/MAX) 
  1781.  
  1782. Syntax:  /MA[X]:nnnn 
  1783.  
  1784. This option sets the maximum allocation of memory for the program. The field 
  1785. <nnnn> contains the maximum number of 16-byte paragraphs required to load and 
  1786. run the program. This value must be equal to or greater than the minimum 
  1787. allocation. 
  1788.  
  1789. Compare to Set Minimum Allocation (/MIN) 
  1790.  
  1791. The Maximum Allocation option is equivalent to the LINK386 /CP option. 
  1792.  
  1793. Refer to Set Max Allocation Space (/CP) (in LINK386 Help) 
  1794.  
  1795. You can specify <nnnn> in decimal, octal, or hexadecimal radix using standard C 
  1796. language notation. 
  1797.  
  1798.  
  1799. ΓòÉΓòÉΓòÉ <hidden> EXEHDR - /MI[N] ΓòÉΓòÉΓòÉ
  1800.  
  1801. Set Minimum Allocation (/MIN) 
  1802.  
  1803. Syntax:  /MI[N]:nnnn 
  1804.  
  1805. This option sets the minimum allocation of memory for the program. The field 
  1806. <nnnn> contains the minimum number of 16-byte paragraphs required to load and 
  1807. run the program. This value must be equal to or less than the maximum 
  1808. allocation. 
  1809.  
  1810. Compare to Set Maximum Allocation (/MAX) 
  1811.  
  1812. You can specify <nnnn> in decimal, octal, or hexadecimal radix using standard C 
  1813. language notation. 
  1814.  
  1815.  
  1816. ΓòÉΓòÉΓòÉ <hidden> EXEHDR - /NE[WFILES] ΓòÉΓòÉΓòÉ
  1817.  
  1818. New Files (/NEWFILES) 
  1819.  
  1820. Syntax:  /NE[WFILES] 
  1821.  
  1822. This option enables long file name support for OS/2 16-bit LINK files. OS/2 
  1823. 32-bit LINK386 files have long file name support. 
  1824.  
  1825.  
  1826. ΓòÉΓòÉΓòÉ <hidden> EXEHDR - /NO[LOGO] ΓòÉΓòÉΓòÉ
  1827.  
  1828. Suppress Sign-On Banner (/NOLOGO) 
  1829.  
  1830. Syntax:  /NO[LOGO] 
  1831.  
  1832. This option suppresses the sign-on banner displayed by EXEHDR when it starts. 
  1833.  
  1834.  
  1835. ΓòÉΓòÉΓòÉ <hidden> EXEHDR - /P[MTYPE] ΓòÉΓòÉΓòÉ
  1836.  
  1837. Set Application Type (/PMTYPE) 
  1838.  
  1839. Syntax:  /P[MTYPE]:type 
  1840.  
  1841. This option specifies the type of application. It pertains only to OS/2* 
  1842. applications.  The /PMTYPE option in EXEHDR is equivalent to either the NAME 
  1843. Statement in the module-definition file or the NAME Application Type Option 
  1844. (/PM) in LINK386. 
  1845.  
  1846. A keyword in <type> is equivalent to a keyword in a NAME statement, as shown in 
  1847. the following list: 
  1848.  
  1849. Field Keyword       Equiv. Keyword 
  1850.  
  1851. PM                  WINDOWAPI 
  1852.  
  1853. VIO                 WINDOWCOMPAT 
  1854.  
  1855. NOVIO               NOTWINDOWCOMPAT 
  1856.  
  1857. The NAME statement keyword is also accepted. 
  1858.  
  1859.  
  1860. ΓòÉΓòÉΓòÉ <hidden> EXEHDR - /R[ESETERROR] ΓòÉΓòÉΓòÉ
  1861.  
  1862. Reset LINK386 Error (/RESETERROR) 
  1863.  
  1864. Syntax:  /R[ESETERROR] 
  1865.  
  1866. This option clears an error flag stored in OS/2* and applications. The error 
  1867. flag is set by LINK386 when the link has unresolved external references or 
  1868. duplicate symbol definitions (any LINK386 error messages starting with L2xxx). 
  1869.  
  1870. OS/2 does not load the application if the error flag is set. This option allows 
  1871. you to attempt to run a program with LINK386 errors and is useful during 
  1872. application development. 
  1873.  
  1874.  
  1875. ΓòÉΓòÉΓòÉ <hidden> EXEHDR - /S[TACK] ΓòÉΓòÉΓòÉ
  1876.  
  1877. Set Stack Allocation (/STACK) 
  1878.  
  1879. Syntax:  /S[TACK]:nnnn 
  1880.  
  1881. This option sets the size of the stack. The field <nnnn> contains the stack 
  1882. size in bytes. This option is equivalent to the Control Stack Size Option (/ST) 
  1883. (in LINK386 Help) 
  1884.  
  1885. You can specify <nnnn> in decimal, octal, or hexadecimal radix using standard C 
  1886. language notation. 
  1887.  
  1888.  
  1889. ΓòÉΓòÉΓòÉ <hidden> EXEHDR - /V[ERBOSE] ΓòÉΓòÉΓòÉ
  1890.  
  1891. Display in Verbose Mode (/VERBOSE) 
  1892.  
  1893. Syntax:  /V[ERBOSE] 
  1894.  
  1895. This option displays the executable-file header in verbose mode. 
  1896.  
  1897. Related Topics 
  1898.  
  1899. EXEHDR Output Example 
  1900. Ouput Using Verbose Option 
  1901.  
  1902.  
  1903. ΓòÉΓòÉΓòÉ <hidden> EXEHDR - Output ΓòÉΓòÉΓòÉ
  1904.  
  1905. EXEHDR lists the current contents of the file header and information about each 
  1906. object (or segment) in the file. To redirect this output to a printer or disk 
  1907. file, use the operating system redirection operator. 
  1908.  
  1909. The output is in two parts: a Header Listing giving the contents of the file 
  1910. header; and an Object (or Segment) Listing giving attributes of all objects (or 
  1911. segments) in the file. If the /VERBOSE  option is specified, additional output 
  1912. is generated. 
  1913.  
  1914. Related Topic 
  1915.  
  1916. Output Example 
  1917.  
  1918.  
  1919. ΓòÉΓòÉΓòÉ <hidden> EXEHDR - Header Listing ΓòÉΓòÉΓòÉ
  1920.  
  1921. The header listing is comprised of the following fields: 
  1922.  
  1923. <Module> Name of Application p.This field lists the name of the application as 
  1924.      specified in the NAME statement of the module-definition file. 
  1925.  
  1926.      If no module definition was used to create the executable file, this field 
  1927.      displays the name assumed by default. 
  1928.  
  1929.      If a module definition was used to create the file, but the LIBRARY 
  1930.      statement appeared instead of the NAME statement (thus specifying a 
  1931.      dynamic-link library), the name of the library is given and EXEHDR uses 
  1932.      the word "Library" instead of "Module" to identify the field. 
  1933.  
  1934. <Description> Description of Application 
  1935.  
  1936.      This field gives the contents, if any, of the DESCRIPTION statement of the 
  1937.      module-definition file used to create the file being examined. 
  1938.  
  1939. <Data> Type of Automatic Data Object 
  1940.  
  1941.      This field indicates the type of automatic data segment in a program: 
  1942.      SHARED, NONSHARED, or NONE.  This type can be specified in a 
  1943.      module-definition file.  The defaults are NONSHARED for applications and 
  1944.      SHARED for dynamic-link libraries. 
  1945.  
  1946. <Initial CS:IP> Program Starting Address 
  1947.  
  1948.      This field gives the program starting address (if an application is being 
  1949.      examined) or address of the initialization routine (if a dynamic-link 
  1950.      library is being examined). 
  1951.  
  1952. <Initial SS:SP> Initial Stack Pointer 
  1953.  
  1954.      This field gives the value of the initial stack pointer. 
  1955.  
  1956. <Extra Stack Allocation> Additional stack allocation 
  1957.  
  1958.      This field gives the value of the extra stack location. 
  1959.  
  1960. <DGROUP> Automatic-Data-Object Number 
  1961.  
  1962.  
  1963. ΓòÉΓòÉΓòÉ <hidden> EXEHDR - Object or Segment Listing ΓòÉΓòÉΓòÉ
  1964.  
  1965. The object listing is comprised of the following fields: 
  1966.  
  1967. no. 
  1968.      Object index number, starting with 1, in decimal 
  1969.  
  1970. type 
  1971.      Identification of the object as a code or data object 
  1972.  
  1973.      A code object is comprised of segments with class name ending in CODE. All 
  1974.      other objects are data objects. 
  1975.  
  1976. address 
  1977.      Location, within the file, of the contents of the object (in hexadecimal) 
  1978.  
  1979. file 
  1980.      Size of the object (in bytes), as contained in the file (in hexadecimal) 
  1981.  
  1982. mem 
  1983.      Size of the object (in bytes), as it is stored in memory (in hexadecimal) 
  1984.  
  1985.      If the value of this field is greater than the value of <file>, the 
  1986.      operating system pads the additional space with zero values at load time. 
  1987.  
  1988. flags 
  1989.      Object attributes 
  1990.  
  1991.      If the /VERBOSE option is not used, only nondefault attributes are listed. 
  1992.      Attributes are given in the form specified in the module-definition file. 
  1993.  
  1994.  
  1995. ΓòÉΓòÉΓòÉ <hidden> EXEHDR - Output Example ΓòÉΓòÉΓòÉ
  1996.  
  1997. The following output is generated by EXEHDR for the executable file 
  1998. LINK386.EXE: 
  1999.  
  2000. Module:                    LINK386
  2001. Description:               Operating System/2 32-bit LX Linker
  2002. Data:                      NONSHARED
  2003. Initial CS:IP:            seg   2 offset 6c78
  2004. Initial SS:SP:            seg   4 offset 0000
  2005. Extra stack allocation:    4000 bytes
  2006. DGROUP:                    seg   4
  2007.  
  2008. no. type address  file  mem   flags
  2009.   1 CODE 00006000 0f7d6 0f7d7
  2010.   2 CODE 00015a00 08e40 08e40
  2011.   3 DATA 0001ea00 02865 02865
  2012.   4 DATA 00021400 02337 08bd0
  2013.  
  2014.  
  2015. ΓòÉΓòÉΓòÉ <hidden> EXEHDR - Verbose Output ΓòÉΓòÉΓòÉ
  2016.  
  2017. When you specify the /VERBOSE option, EXEHDR generates additional output: 
  2018.  
  2019. o DOS-specific header information. All OS/2* executable files have a DOS 
  2020.   header, whether bound or not.  If the program is not bound, the DOS portion 
  2021.   typically consists of a stub that simply terminates the program. 
  2022.  
  2023. o OS/2-specific header information. The object-table display in verbose mode is 
  2024.   described below. 
  2025.  
  2026. o File addresses and lengths of the various tables in the executable file. For 
  2027.   each table, the following is generated: 
  2028.  
  2029.    - Name of the table 
  2030.    - Address of the table within the file 
  2031.    - Length of the table in hexadecimal radix 
  2032.    - Length of the table in decimal radix 
  2033.  
  2034. o Object table with complete attributes, not just the nondefault attributes. 
  2035.   The /VERBOSE option displays two additional attributes: 
  2036.  
  2037.    - The RELOCS attribute is displayed for each object that has address 
  2038.      relocations. Relocations occur in each object that references objects in 
  2039.      other objects or makes dynamic-link references. 
  2040.    - The ITERATED attribute is displayed for each object that has iterated 
  2041.      data. Iterated data consist of a special code that packs repeated bytes. 
  2042.  
  2043. o Run-time relocations and fixups. 
  2044.  
  2045. o All exported entry points. 
  2046.  
  2047.  
  2048. ΓòÉΓòÉΓòÉ 6. FWDSTAMP ΓòÉΓòÉΓòÉ
  2049.  
  2050. Select one: 
  2051.  
  2052. Introduction 
  2053. Uses 
  2054. Starting FWDSTAMP 
  2055. Example 
  2056.  
  2057.  
  2058. ΓòÉΓòÉΓòÉ <hidden> FWDSTAMP - Introduction ΓòÉΓòÉΓòÉ
  2059.  
  2060. FWDSTAMP adds entry points, called forwarders, to a dynamic link library file 
  2061. (.DLL). Forwarders point to API functions or other exported code or data.  They 
  2062. contain an import reference so that the final target address of the forwarded 
  2063. entry is contained in a different module.  A forwarder might be called an 
  2064. imported export. 
  2065.  
  2066. When a file has a fix-up to a forwarded entry point, the loader resolves that 
  2067. fix-up to the address of the entry point that the forwarder imports by 
  2068. traversing the chain of forwarders until the end of the chain (a nonforwarded 
  2069. export) is reached. All forwarders are implicitly exported. 
  2070.  
  2071. The imported entry point that a forwarder refers to may itself be another 
  2072. forwarder.  The loader will process a chain of forwarders until a nonforwarder 
  2073. entry point is encountered. 
  2074.  
  2075. There is no run-time cost to forwarders; however, there is a slight load-time 
  2076. cost as the loader resolves forwarder chains with their final addresses. 
  2077.  
  2078.  
  2079. ΓòÉΓòÉΓòÉ <hidden> FWDSTAMP - Using Forwarders ΓòÉΓòÉΓòÉ
  2080.  
  2081. You use forwarders to combine several DLLs into one without having to relink 
  2082. old applications. For example, if MOUCALLS and VIOCALLS were combined into a 
  2083. single DLL called NEWLIB.DLL, then MOUCALLS and VIOCALLS could be replaced with 
  2084. special DLLs containing forwarders to NEWLIB.DLL. 
  2085.  
  2086. Important Notes 
  2087.  
  2088. o FWDSTAMP parses only the IMPORTS and EXPORTS section of the module definition 
  2089.   file.  FWDSTAMP does not verify the syntax of the other sections. 
  2090.  
  2091. o When exported names already exist in the input file, their attributes are 
  2092.   kept, such as resident or nonresident names table, and ordinal numbers.  Any 
  2093.   new conflicting attributes are ignored. 
  2094.  
  2095. o If there is no exported name, FWDSTAMP adds the one defined by the EXPORTS 
  2096.   statement in the module definition file. 
  2097.  
  2098.  
  2099. ΓòÉΓòÉΓòÉ <hidden> FWDSTAMP - Starting FWDSTAMP ΓòÉΓòÉΓòÉ
  2100.  
  2101. You can start FWDSTAMP and specify all input from the command line.  An example 
  2102. of the syntax follows: 
  2103.  
  2104.    FWDSTAMP [options] infile deffile outfile
  2105.  
  2106. [options] 
  2107.   Specifies one of the following: 
  2108.  
  2109.    /? 
  2110.      Displays FWDSTAMP help panel. 
  2111.  
  2112.    /V 
  2113.      Increases the level of information FWDSTAMP should output. 
  2114.  
  2115. infile 
  2116.   Specifies the name of the dynamic link library file that LINK386 created. 
  2117.   Use the file-name extension of DLL. 
  2118.  
  2119. deffile 
  2120.   Specifies the name of the module definition file (.DEF) that contains the 
  2121.   forwarders. (See Example) 
  2122.  
  2123. outfile 
  2124.   Specifies the name of the .DLL file that will contain the added forwarders. 
  2125.  
  2126.  
  2127. ΓòÉΓòÉΓòÉ <hidden> FWDSTAMP - Example ΓòÉΓòÉΓòÉ
  2128.  
  2129. Forwarders are specified in the module definition file so that an exported 
  2130. name, which is also imported, is a forwarder. For example: 
  2131.  
  2132.         IMPORTS
  2133.             VIOMODEWAIT=NEWLIB.123
  2134.         EXPORTS
  2135.             VIOMODEWAIT @ 25
  2136.  
  2137. In the example, a forwarder entry point for VIOMODEWAIT is created and contains 
  2138. an import reference to NEWLIB.123. 
  2139.  
  2140.  
  2141. ΓòÉΓòÉΓòÉ 7. IMPLIB ΓòÉΓòÉΓòÉ
  2142.  
  2143. Select One: 
  2144.  
  2145. Introduction 
  2146. Running IMPLIB 
  2147. Help 
  2148. Syntax 
  2149. Options 
  2150. Error Messages 
  2151.  
  2152.  
  2153. ΓòÉΓòÉΓòÉ <hidden> IMPLIB -Introduction ΓòÉΓòÉΓòÉ
  2154.  
  2155. IMPLIB creates import libraries used to link dynamic-link libraries with 
  2156. applications. 
  2157.  
  2158. Import libraries are created by IMPLIB and used to link dynamic-link libraries 
  2159. with applications. 
  2160.  
  2161. What Are Import Libraries? 
  2162.  
  2163. Import libraries are similar in some respects to standard libraries: 
  2164.  
  2165. o You specify import libraries and standard libraries in the same command line 
  2166.   field of LINK386 or OS/2 16-bit LINK. 
  2167.  
  2168. o Both kinds of libraries resolve external references at link time. 
  2169.  
  2170. However, import libraries differ from standard libraries in that they contain 
  2171. no executable code. Rather, they identify the dynamic-link libraries where the 
  2172. executable code can be found at run time. 
  2173.  
  2174. Why Use Import Libraries? 
  2175.  
  2176. Creating import libraries is an extra step. Nevertheless, import libraries are 
  2177. recommended for use with all dynamic-link libraries for two reasons: 
  2178.  
  2179. o IMPLIB automates much of the program creation process for you.  To use 
  2180.   IMPLIB, supply it with the .DEF file you already created for the dynamic-link 
  2181.   library.  Without an import library, you must create a second .DEF file that 
  2182.   explicitly defines all needed functions in the dynamic-link library. 
  2183.  
  2184. o Import libraries make it easier for one person to write a library and another 
  2185.   to write the application. Much of the linking process (linking the .DLL file 
  2186.   and creating the import library) can be done by the author of the 
  2187.   dynamic-link library. The import library and associated .DLL file can then be 
  2188.   given as a unit to the person linking the application - that person need not 
  2189.   worry about creating a .DEF file. 
  2190.  
  2191.  
  2192. ΓòÉΓòÉΓòÉ <hidden> Running IMPLIB ΓòÉΓòÉΓòÉ
  2193.  
  2194. The following options can be used with IMPLIB: 
  2195.  
  2196. <options> 
  2197.      The option that modifies the IMPLIB output. See IMPLIB Options 
  2198.  
  2199. <implibname> 
  2200.      Import library created 
  2201.  
  2202. <deffile> 
  2203.      One or more module definition files that export routines in the 
  2204.      dynamic-link library 
  2205.  
  2206. <dllfile> 
  2207.      One or more dynamic-link libraries with exported routines. 
  2208.  
  2209. Hints 
  2210.  
  2211. o You can specify any number of either module definition files or dynamic-link 
  2212.   libraries. 
  2213. o By using the _export keyword in C, you can declare functions that are 
  2214.   exported from the dynamic-link library. 
  2215.  
  2216.  
  2217. ΓòÉΓòÉΓòÉ <hidden> IMPLIB - Help ΓòÉΓòÉΓòÉ
  2218.  
  2219. To display IMPLIB help, type the following at the command prompt: 
  2220.  
  2221.     IMPLIB /?
  2222.  
  2223. The appropriate copyright statement is displayed along with a list of IMPLIB 
  2224. options. 
  2225.  
  2226.     Usage: IMPLIB [options] implibname {deffile... | dllfile...}
  2227.     Valid options are:
  2228.         /?
  2229.         /HELP
  2230.         /IGNORECASE
  2231.         /NOIGNORECASE
  2232.         /NOLOGO
  2233.  
  2234.  
  2235. ΓòÉΓòÉΓòÉ <hidden> IMPLIB - Syntax ΓòÉΓòÉΓòÉ
  2236.  
  2237. IMPLIB [options] implibname {deffile...| dllfile...} 
  2238.  
  2239. Syntax Example 
  2240.  
  2241. The following command creates the import library named MYLIB.LIB from the 
  2242. module definition file MYLIB.DEF. 
  2243.  
  2244.     IMPLIB MYLIB.LIB MYLIB.DEF
  2245.  
  2246.  
  2247. ΓòÉΓòÉΓòÉ <hidden> IMPLIB - Options ΓòÉΓòÉΓòÉ
  2248.  
  2249. Usage Notes: 
  2250.  
  2251. o Option characters are not case sensitive: /H and /h are equivalent. 
  2252. o Options can be shortened to the fewest characters that uniquely identify 
  2253.   them.  The characters in brackets can be omitted: /NOL and /NOLOGO are 
  2254.   equivalent. 
  2255. o Although use of the minimum one-letter abbreviations is allowed, if a future 
  2256.   release has an additional option starting with the same letter, the 
  2257.   one-letter option will no longer be usable. 
  2258.  
  2259. The following options may be used with IMPLIB: 
  2260.  
  2261. /? 
  2262.      Displays a short summary of IMPLIB syntax. 
  2263.  
  2264. /H[ELP] 
  2265.      Displays a short summary of IMPLIB syntax. 
  2266.  
  2267. /I[GNORECASE] 
  2268.      Turns case sensitivity off. This is the default. 
  2269.  
  2270. /I[GNORECASE] 
  2271.      Turns case sensitivity on. By default, case sensitivity is off. 
  2272.  
  2273. /NOL[OGO] 
  2274.      Suppresses the sign-on banner when IMPLIB starts. 
  2275.  
  2276.  
  2277. ΓòÉΓòÉΓòÉ <hidden> IMPLIB - Error Messages ΓòÉΓòÉΓòÉ
  2278.  
  2279. There are two types of IMPLIB error messages: 
  2280.  
  2281. o Fatal errors cause IMPLIB to stop running.  Message numbers IM1600 through 
  2282.   IM1606 report these problems. 
  2283.  
  2284. o Nonfatal errors indicate problems in the library file. IMPLIB produces the 
  2285.   library file and sets the error bit in the header for the OS/2 environment. 
  2286.   This means that the library file cannot be run from OS/2.  Message numbers 
  2287.   IM2600 through IM2604 report these problems. 
  2288.  
  2289. IM1600 
  2290.           error while writing to output file - name 
  2291.           Explanation: There was not enough disk space available to create the 
  2292.           target library. 
  2293.           Action: Delete or move files to make space on the disk and restart 
  2294.           IMPLIB. 
  2295.  
  2296. IM1601 
  2297.           out of memory - heap name heap exhausted 
  2298.           Explanation: There was not enough memory available to run IMPLIB. 
  2299.           Action: Reduce the number of programs presently running in your 
  2300.           system and restart IMPLIB. 
  2301.  
  2302. IM1602 
  2303.           error in the module definitions file 
  2304.           Explanation: There was an error in the module definition (.DEF) file. 
  2305.           Action: Correct the symbol shown in the message, at the line number 
  2306.           given. Restart IMPLIB. 
  2307.  
  2308. IM1603 
  2309.           name : cannot create file reason 
  2310.           Explanation: IMPLIB was unable to open or create the target library 
  2311.           specified. 
  2312.           Action: Check the file name and available space. Restart IMPLIB. 
  2313.  
  2314. IM1604 
  2315.           name : cannot open file - reason 
  2316.           Explanation: IMPLIB was unable to open one of the specified input 
  2317.           module definition (.DEF) files. 
  2318.           Action: Check the file name. Restart IMPLIB. 
  2319.  
  2320. IM1605 
  2321.           too many nested include files in module definition file 
  2322.           Explanation: The .DEF file exceeded a nesting level. 
  2323.           Action: Combine some nestings into one .DEF file and try again. 
  2324.  
  2325. IM1606 
  2326.           missing or bad include file name 
  2327.           Explanation: IMPLIB could not find a file included by .DEF file. 
  2328.           Action: Make sure the file exists and can be located and that any 
  2329.           path is specified correctly. Try again. 
  2330.  
  2331. IM2600 
  2332.           line number is too long; truncated to length characters 
  2333.           Explanation: You have tried to export more than 8192 names. 
  2334.           Action: Retry with fewer names, creating an additional executable 
  2335.           module if necessary. 
  2336.  
  2337. IM2601 
  2338.           symbol multiply defined 
  2339.           Explanation: An export name was repeated within or across the module 
  2340.           definition (.DEF) files. 
  2341.           Action: Eliminate duplicate definitions of the export name. 
  2342.  
  2343. IM2602 
  2344.           unexpected end of name table in DLL 
  2345.           Explanation: IMPLIB encountered an error when reading the module 
  2346.           names table or procedures names table. 
  2347.           Action: The 9per.DLL file is corrupted. Check to make sure that the 
  2348.           DLL was generated by OS/2 LINK or LINK386. 
  2349.  
  2350. IM2603 
  2351.           name : invalid .DLL file 
  2352.           Explanation: IMPLIB could not parse the DLL properly. 
  2353.           Action: The .DLL file is corrupted. Check to make sure that the DLL 
  2354.           was generated by OS/2 LINK or LINK386. 
  2355.  
  2356. IM2604 
  2357.           unrecognized option 'option'; option ignored 
  2358.           Explanation: You specified an incorrect option. 
  2359.           Action: Specify a correct IMPLIB option. 
  2360.  
  2361.  
  2362. ΓòÉΓòÉΓòÉ 8. KwikINF ΓòÉΓòÉΓòÉ
  2363.  
  2364. Select One: 
  2365.  
  2366. Introduction 
  2367. Configuring KwikINF 
  2368. Automatic Text Retrieval 
  2369. BOOKSHELF Online Documents 
  2370. Index Files for Rapid Search 
  2371. Enabling Online Documents 
  2372. Using KwikINF 
  2373. Command Line KwikINF 
  2374. Activation Key Sequence 
  2375. Full Screen Sessions 
  2376. Default Volume to Search 
  2377. Activation Behavior 
  2378. Search from the KwikINF Window 
  2379. Search String Entry Field 
  2380. VOLUME TO SEARCH List Box 
  2381. KwikINF Keys Help 
  2382.  
  2383.  
  2384. ΓòÉΓòÉΓòÉ <hidden> Introduction ΓòÉΓòÉΓòÉ
  2385.  
  2386. KwikINF provides you with a quick and convenient method of accessing 
  2387. information in online documents stored in the OS/2* 2.x BOOKSHELF from anywhere 
  2388. on the desktop, with the exception of DOS or WIN-OS/2 sessions. When KwikINF 
  2389. has been started, you can open a dialog with KwikINF by pressing a 
  2390. user-selectable hot key.  Until you configure KwikINF, your KwikINF hot key is 
  2391. ALT+Q. The KwikINF window includes a Configure push button.  This opens another 
  2392. dialog with KwikINF:  the Configure KwikINF window. The KwikINF window also 
  2393. allows you to initiate searches for text strings in online documents of choice. 
  2394.  
  2395.  
  2396. ΓòÉΓòÉΓòÉ <hidden> Automatic Text Retrieval ΓòÉΓòÉΓòÉ
  2397.  
  2398. The KwikINF window includes a Search String entry field.  You can specify the 
  2399. text string you want KwikINF to search for.  Or, under certain conditions, this 
  2400. entry field automatically contains the word located under the cursor when you 
  2401. press your KwikINF hot key. This text retrieval feature is available from OS/2 
  2402. full-screen and Presentation Manager (PM) multi-line entry (MLE) fields.  This 
  2403. feature is also available from PM AVIO and VIO windows. Communication Manager's 
  2404. 3270 emulator is a common example of a PM AVIO window.  An OS/2 Window is a VIO 
  2405. window.  This means that if, for example, you open an OS/2 Window and start an 
  2406. OS/2 text-based application, KwikINF will automatically retrieve the word under 
  2407. the cursor when you press your KwikINF hot key. This automatic text-retrieval 
  2408. feature is not available from graphic-text PM windows. 
  2409.  
  2410.  
  2411. ΓòÉΓòÉΓòÉ <hidden> BOOKSHELF Online Documents ΓòÉΓòÉΓòÉ
  2412.  
  2413. The KwikINF window includes a Volume to Search list box of all online documents 
  2414. stored in the OS/2 BOOKSHELF subdirectories.  KwikINF initiates searches for 
  2415. information in any online document in this list. 
  2416.  
  2417. The BOOKSHELF is an environment variable, set in CONFIG.SYS, that contains a 
  2418. list of subdirectories containing online documents created as viewable .INF 
  2419. files with the Information Presentation Facility (IPF). The BOOKSHELF 
  2420. environment variable is set as follows: 
  2421.  
  2422. SET BOOKSHELF=<subdirectory>;...;<subdirectory>; 
  2423.  
  2424. Online documents for OS/2 (for example, the Command Reference) are stored in 
  2425. the \OS2\BOOK subdirectory of the drive on which OS/2 is installed.  Online 
  2426. documents for the OS/2 Toolkit (for example, the Programming References) are 
  2427. stored in the \TOOLKTxx\BOOK subdirectory of the drive specified during 
  2428. installation of the online programming information.  As an example, after 
  2429. installation of OS/2 and the OS/2 2.1 Toolkit, the BOOKSHELF environment 
  2430. variable is set as follows: 
  2431.  
  2432. SET BOOKSHELF=C:\OS2\BOOK;C:\TOOLKT21\BOOK; 
  2433.  
  2434. The online document where KwikINF looks for the Search String is selected from 
  2435. the Volume to Search list box by KwikINF or by you.  KwikINF selects the Volume 
  2436. to Search by looking for the text string that has a matching entry in the 
  2437. KwikINF index file or, if there is no matching entry in the index file, in the 
  2438. Default Volume you have selected in the Configure KwikINF window. 
  2439.  
  2440.  
  2441. ΓòÉΓòÉΓòÉ <hidden> Index Files for Rapid Search ΓòÉΓòÉΓòÉ
  2442.  
  2443. The KwikINF index file provides a rapid-search mechanism for locating specific 
  2444. kinds of information in online documents in the BOOKSHELF. The KwikINF index 
  2445. file consists of one or more concatenated files stored in the BOOKSHELF and 
  2446. defined by the HELPNDX variable in CONFIG.SYS as shown in the following 
  2447. example: 
  2448.  
  2449. SET HELPNDX=EPMKWHLP.NDX 
  2450.  
  2451. where EPMKWHLP.NDX is the KwikINF index file for the OS/2 Toolkit. 
  2452.  
  2453. As an example, the following excerpt from the KwikINF index file for the OS/2 
  2454. Toolkit: 
  2455.  
  2456. EXTENSIONS: *
  2457. DESCRIPTION: IBM Developer's Toolkit for OS/2 2.1
  2458. (IPF*, view ipfc20.inf ~)
  2459. (WinCreateWindow, view pmwin.inf ~)
  2460.  
  2461. is used by KwikINF to quickly locate Search String entries with the prefix IPF 
  2462. in the IPF-viewable file IPFC20.INF. and to quickly locate the specific Search 
  2463. String entry WinCreateWindow in the IPF-viewable file PMWIN.INF. 
  2464.  
  2465. The first token in a rapid-search string is a specific text string (for 
  2466. example, WinCreateWindow) or prefix wildcard (for example, IPF*).  The second 
  2467. token is the name of the IPF file viewer (VIEW.EXE).  The third and fourth 
  2468. tokens are parameters for VIEW.EXE:  the name of the .INF file that contains 
  2469. the online document and the text-string you want VIEW.EXE to locate within the 
  2470. online document.  The ~ character tells KwikINF to use the first token in the 
  2471. rapid-search string as the text-string to locate within the online document. 
  2472.  
  2473.  
  2474. ΓòÉΓòÉΓòÉ <hidden> Enabling Online Documents ΓòÉΓòÉΓòÉ
  2475.  
  2476. You can enable any online document for KwikINF by: 
  2477.  
  2478.  1. Creating the online document as a viewable .INF file using the Information 
  2479.     Presentation Facility (IPF). 
  2480.  
  2481.  2. Adding the name of the subdirectory where it is stored to the PATH 
  2482.     statement in CONFIG.SYS. 
  2483.  
  2484.  3. Appending the name of the subdirectory where it is stored to the BOOKSHELF 
  2485.     in CONFIG.SYS. 
  2486.  
  2487.  4. Creating an index file to support the KwikINF rapid-search mechanism, 
  2488.     storing it in the BOOKSHELF, and adding it to the HELPNDX variable in 
  2489.     CONFIG.SYS. 
  2490.  
  2491. For example, you can enable your online document MYDOC stored in MYSUBDIR 
  2492. subdirectory for KwikINF by: 
  2493.  
  2494.  1. Compiling the tagged source for MYDOC with the IPF compiler by entering: 
  2495.  
  2496.         IPFC MYDOC /INF
  2497.  
  2498.  2. Modifying the PATH statement in CONFIG.SYS as follows: 
  2499.  
  2500.         SET PATH=...;C:\MYSUBDIR;
  2501.  
  2502.  3. Modifying the BOOKSHELF statement in CONFIG.SYS as follows: 
  2503.  
  2504.         SET BOOKSHELF=...;C:\MYSUBDIR;
  2505.  
  2506.  4. Creating MYINDEX file in MYSUBDIR as shown below: 
  2507.  
  2508.         /* C style comments and blank lines are acceptable */
  2509.         /* specific file extensions may be specified here  */
  2510.         EXTENSIONS: *
  2511.         /* a title may be placed here                      */
  2512.         DESCRIPTION: Any custom KwikINF index file
  2513.         /* rapid-search strings                            */
  2514.         (thisfunction, view mydoc.inf ~)
  2515.         (my*, view mydoc.inf ~)
  2516.  
  2517.  5. Modifying the HELPNDX variable in CONFIG.SYS as follows: 
  2518.  
  2519.         SET HELPNDX=EPMKWHLP.NDX+MYINDEX
  2520.  
  2521. For more information on creating an IPF-viewable online document, see the IPF 
  2522. Reference in the Toolkit Information folder. 
  2523.  
  2524.  
  2525. ΓòÉΓòÉΓòÉ <hidden> Using KwikINF ΓòÉΓòÉΓòÉ
  2526.  
  2527. KwikINF is installed as a program object in the OS/2 2.1 Toolkit Information 
  2528. folder.  You start KwikINF by double-clicking on the KwikINF object or by 
  2529. entering KwikINF from the command line of an OS/2 Window. You can start KwikINF 
  2530. automatically when you start OS/2 by placing a shadow of the KwikINF object in 
  2531. the Startup folder in the OS/2 System folder on the desktop. You shadow an 
  2532. object by pressing CTRL + SHIFT while dragging the object. 
  2533.  
  2534. KwikINF installs a PM system hook to monitor keystrokes in PM sessions and OS/2 
  2535. character device monitors to monitor keystrokes in OS/2 full-screen sessions. 
  2536. KwikINF will install only one copy of the hook and monitors, even if you 
  2537. attempt to re-start KwikINF. 
  2538.  
  2539. When KwikINF has been started, you can initiate searches for text strings in 
  2540. online documents of choice by pressing a user-selectable hot key. 
  2541.  
  2542. Note:  You cannot initiate searches for text strings in online documents from 
  2543.        DOS or WIN-OS/2 sessions. 
  2544.  
  2545. Until you configure KwikINF, your KwikINF hot key is ALT+Q.  You configure 
  2546. KwikINF by pressing your KwikINF hot key and then pressing the Configure push 
  2547. button to open the Configure KwikINF window. 
  2548.  
  2549. Note:  When you start KwikINF by double-clicking on the KwikINF object in the 
  2550.        Toolkit Information folder, a message box tells you what hot key opens 
  2551.        the KwikINF window.  This technique can also be used to determine what 
  2552.        your current KwikINF hot key is, after KwikINF has been started. 
  2553.  
  2554. How you initiate a search for information in online documents is dependent on 
  2555. where you are on the desktop when you press the KwikINF hot key: 
  2556.  
  2557. o From an OS/2 full-screen session, a PM VIO or AVIO window, or PM MLE: 
  2558.   position the cursor on the string you want to search for and press the 
  2559.   KwikINF hot key. KwikINF retrieves the word at the cursor.  If you have 
  2560.   configured KwikINF to display the KwikINF window when the KwikINF hot key is 
  2561.   pressed, KwikINF automatically places the retrieved word in the Search String 
  2562.   entry field of the KwikINF window. When you press the Search push button or 
  2563.   Enter, KwikINF displays the information. If you have configured KwikINF to 
  2564.   bypass the KwikINF window when the KwikINF hot key is pressed,  KwikINF 
  2565.   automatically displays the information. 
  2566.  
  2567.   If no word is under the cursor, the previous Search String is used. If no 
  2568.   previous Search String exists, KwikINF displays the Contents of the Default 
  2569.   volume to search. 
  2570.  
  2571. o From a graphic-text PM window: press the KwikINF hot key, then type the 
  2572.   string you want to search for in the Search String entry field of the KwikINF 
  2573.   window. The KwikINF text-retrieval feature is not available from graphic-text 
  2574.   PM windows. 
  2575.  
  2576. The online document where KwikINF looks for the text string is selected from 
  2577. the Volume to Search list box by KwikINF or by you. To open the online document 
  2578. to the panel that contains the information, press the Search push button or 
  2579. press Enter. 
  2580.  
  2581.  
  2582. ΓòÉΓòÉΓòÉ <hidden> KwikINF From the Command Line ΓòÉΓòÉΓòÉ
  2583.  
  2584. You can start, terminate, and configure KwikINF from the command line in an 
  2585. OS/2 Window by entering: 
  2586.  
  2587. KwikINF [no options] [/C] [/T] [/?]
  2588.  
  2589. where: 
  2590.  
  2591. no options 
  2592.   starts KwikINF. After entering this command, the default KwikINF hot key (ALT 
  2593.   + Q) is enabled. 
  2594.  
  2595. /T 
  2596.   terminates KwikINF and disables the KwikINF hot key. 
  2597.  
  2598. /C 
  2599.   opens the Configure KwikINF window. Use this window to select another KwikINF 
  2600.   hot key, to select a default online document from the BOOKSHELF to search, 
  2601.   and to select the activation behavior of the KwikINF window. 
  2602.  
  2603. /? 
  2604.   displays the following information. 
  2605.  
  2606.      Usage: KwikINF [Option]
  2607.       Option    Description
  2608.         /C      Configure KwikINF
  2609.         /T      Terminate KwikINF
  2610.         /?      This short help list
  2611.  
  2612.  
  2613. ΓòÉΓòÉΓòÉ <hidden> Configuring KwikINF ΓòÉΓòÉΓòÉ
  2614.  
  2615. You configure KwikINF through the Configure KwikINF window. KwikINF displays 
  2616. this window when you press the Configure push button on the KwikINF window or 
  2617. when you enter the following from the command line of an OS/2 Window: 
  2618.  
  2619. KwikINF /C
  2620.  
  2621. The Configure KwikINF window allows you to: 
  2622.  
  2623. o Select another KwikINF hot key. 
  2624.  
  2625. o Specify the number of OS/2. full-screen sessions enabled for KwikINF 
  2626.  
  2627. o Specify the name of the default online document KwikINF searches. 
  2628.  
  2629. o Select the activation behavior of the KwikINF window. 
  2630.  
  2631. Use the push buttons on the Configure KwikINF window as follows: 
  2632.  
  2633. o Press OK to enable your configuration choices. 
  2634.  
  2635. o Press Cancel to cancel your configuration choices. This closes the Configure 
  2636.   KwikINF window. 
  2637.  
  2638. o Press Help to get general help for the current window. 
  2639.  
  2640.  
  2641. ΓòÉΓòÉΓòÉ <hidden> Activation Key Sequence ΓòÉΓòÉΓòÉ
  2642.  
  2643. The Activation Key Sequence provides a selectable list of KwikINF hot keys. To 
  2644. access the list, single-click on the down arrow. Select the KwikINF hot key of 
  2645. your choice from the following list: 
  2646.  
  2647. CTRL   + A 
  2648.  
  2649. CTRL   + H 
  2650.  
  2651. CTRL   + Q 
  2652.  
  2653. ALT    + A 
  2654.  
  2655. ALT    + Q (this is the default hot key) 
  2656.  
  2657. The KwikINF hot key initiates searches for information in online documents from 
  2658. anywhere on the desktop, with the exception of DOS or WIN-OS/2 sessions. 
  2659.  
  2660.  
  2661. ΓòÉΓòÉΓòÉ <hidden> Full Screen Sessions ΓòÉΓòÉΓòÉ
  2662.  
  2663. Use the Number of Fullscreen Sessions to Monitor spin button to specify the 
  2664. number of OS/2 full-screen sessions enabled for KwikINF.  KwikINF is 
  2665. implemented as a PM system hook to monitor keystrokes in PM sessions and as 
  2666. OS/2 character device monitors to monitor keystrokes in OS/2 full-screen 
  2667. sessions.  For OS/2 full-screen sessions,  KwikINF will monitor only the number 
  2668. of sessions specified here. 
  2669.  
  2670.  
  2671. ΓòÉΓòÉΓòÉ <hidden> Default Volume to Search ΓòÉΓòÉΓòÉ
  2672.  
  2673. Use the Default Volume to Search single selection list box to specify which 
  2674. online document in the BOOKSHELF you want KwikINF to search by default. 
  2675. KwikINF looks for the Search String in this online document, when there is no 
  2676. matching entry in the KwikINF index file. Select the online document, then 
  2677. select the OK push button to activate the selection. 
  2678.  
  2679.  
  2680. ΓòÉΓòÉΓòÉ <hidden> Activation Behavior ΓòÉΓòÉΓòÉ
  2681.  
  2682. Use the Activation Behavior radio buttons to select the behavior of the KwikINF 
  2683. window. The KwikINF window can be displayed or bypassed when the user presses 
  2684. the KwikINF hot key after KwikINF has been installed. 
  2685.  
  2686. o Select the Display KwikINF Window radio button to tell KwikINF that you 
  2687.   always want the KwikINF window to be displayed when you press the KwikINF hot 
  2688.   key to initiate searches for information.  This is the default behavior of 
  2689.   the KwikINF window. 
  2690.  
  2691.   When the you press the KwikINF hot key, you can initiate a search for the 
  2692.   text string that may be automatically displayed in the Search String entry 
  2693.   field or for the text string that you enter into this field. You can also 
  2694.   specify which online document in the BOOKSHELF KwikINF searches for the text 
  2695.   string. 
  2696.  
  2697. o Select the Bypass KwikINF Window radio button to tell KwikINF that you do not 
  2698.   want the KwikINF window to be displayed when you press the KwikINF hot key to 
  2699.   initiate searches for information. This is typically used when working under 
  2700.   conditions where the KwikINF automatic text-retrieval feature is available. 
  2701.  
  2702.   When you press the KwikINF hot key, KwikINF automatically looks for the text 
  2703.   string under the cursor in the online document that has a matching entry in 
  2704.   the KwikINF index file or, if there is no matching entry in the index file, 
  2705.   in the Default volume selected from the Configure KwikINF window. 
  2706.  
  2707.   You configure KwikINF by pressing the Configure push button in the KwikINF 
  2708.   window.  To configure KwikINF when this window is bypassed, press SHIFT + 
  2709.   your KwikINF hotkey to display the Configure KwikINF window. 
  2710.  
  2711.  
  2712. ΓòÉΓòÉΓòÉ <hidden> Searching Using the KwikINF Window ΓòÉΓòÉΓòÉ
  2713.  
  2714. If you have configured KwikINF to display the KwikINF window (this is the 
  2715. default condition), the KwikINF window is displayed when you press your KwikINF 
  2716. hot key. 
  2717.  
  2718. The KwikINF window allows you to search for a text string in an online document 
  2719. in the OS/2 BOOKSHELF.  The text string is typed by you in the Search String 
  2720. entry field or is automatically retrieved by KwikINF, under certain conditions, 
  2721. from under the cursor when you press your KwikINF hot key. 
  2722.  
  2723. The online document that KwikINF searches for the text string is selected from 
  2724. the Volume to Search list box by KwikINF or by you.  KwikINF selects the Volume 
  2725. to Search by looking for the text string that has a matching entry in the 
  2726. KwikINF index file or, if there is no matching entry in the index file, in the 
  2727. Default Volume you have selected in the Configure KwikINF window.  Or you can 
  2728. override KwikINF's selection of the Volume to Search by making your own 
  2729. selection from the list box. 
  2730.  
  2731. To initiate the search for the text string in the online document, press the 
  2732. Search push button or press Enter. If the search is successful, KwikINF opens 
  2733. the online document to the online panel that contains the information and 
  2734. displays a window with a title bar that matches the search string. 
  2735.  
  2736. If the search is not successful, you can search any online document for the 
  2737. information by following this procedure: 
  2738.  
  2739. o Clear the Search String entry field. 
  2740.  
  2741. o Select an online document from the Volume to Search list box.  The Contents 
  2742.   window of the online document appears. 
  2743.  
  2744. o Select Services from the menu bar. 
  2745.  
  2746. o Select Searchfrom the Services pull down menu.  The Search help window 
  2747.   appears. 
  2748.  
  2749. o Type the text string, then select the All libraries radio button. 
  2750.  
  2751. o Select the Search push button or press Enter. 
  2752.  
  2753. Use the push buttons on the KwikINF window as follows: 
  2754.  
  2755. o Press Search to initiate the search for the text string in the Search String 
  2756.   entry field in the selected online document. 
  2757.  
  2758. o Press Cancel to cancel the request to search for the text string and to close 
  2759.   the KwikINF window. 
  2760.  
  2761. o Press Configure to display the Configure KwikINF window. 
  2762.  
  2763. o Press Help to get general help for the current window. 
  2764.  
  2765.  
  2766. ΓòÉΓòÉΓòÉ <hidden> Search String Entry Field ΓòÉΓòÉΓòÉ
  2767.  
  2768. KwikINF searches for the text string in this entry field in the selected online 
  2769. document in the OS/2 BOOKSHELF. 
  2770.  
  2771. Under certain conditions, KwikINF automatically retrieves the word under the 
  2772. cursor when you press your KwikINF hot key. Letters, numbers, underscores, and 
  2773. the pound sign are retrievable by KwikINF. Blank spaces and other special 
  2774. characters are used as delimiters and are not retrievable by KwikINF. 
  2775.  
  2776. You may also type any text string you want into this field.  All characters are 
  2777. valid in the entry field to allow for special search criteria. 
  2778.  
  2779.  
  2780. ΓòÉΓòÉΓòÉ <hidden> VOLUME TO SEARCH List Box ΓòÉΓòÉΓòÉ
  2781.  
  2782. The KwikINF window includes a list box of all online documents stored in the 
  2783. OS/2 BOOKSHELF subdirectories.  KwikINF initiates searches for information in 
  2784. any online document in this list.  The online document where KwikINF looks for 
  2785. the Search String is selected from the Volume to Search list box by KwikINF or 
  2786. by you.  KwikINF selects the Volume to Search by looking for the text string 
  2787. that has a matching entry in the KwikINF index file or, if there is no matching 
  2788. entry in the index file, in the Default Volume you have selected in the 
  2789. Configure KwikINF window.  Or you can override KwikINF's selection of the 
  2790. Volume to Search by making your own selection from the list box. 
  2791.  
  2792. You can also open and display the Contents of an online document by 
  2793. double-clicking on an entry in this list box. 
  2794.  
  2795.  
  2796. ΓòÉΓòÉΓòÉ <hidden> IBM Trademark ΓòÉΓòÉΓòÉ
  2797.  
  2798. Trademark of the IBM Corporation. 
  2799.  
  2800.  
  2801. ΓòÉΓòÉΓòÉ <hidden> KwikINF Keys Help ΓòÉΓòÉΓòÉ
  2802.  
  2803. Use your KwikINF hot key (ALT+Q or the hot key you select from the Configure 
  2804. KwikINF window) to display the KwikINF window.  You can also use your KwikINF 
  2805. hot key to initiate a search for a text string automatically, when you 
  2806. configure KwikINF to bypass the KwikINF window. 
  2807.  
  2808. To re-configure KwikINF, when you have configured KwikINF to bypass the KwikINF 
  2809. window, press SHIFT + your KwikINF hot key. 
  2810.  
  2811. To determine what your KwikINF hot key is, double-click on the KwikINF program 
  2812. object in the OS/2 Toolkit Information folder. 
  2813.  
  2814.  
  2815. ΓòÉΓòÉΓòÉ 9. LINK386 ΓòÉΓòÉΓòÉ
  2816.  
  2817. Introduction 
  2818. Starting LINK386 
  2819. Syntax 
  2820. Default Libraries 
  2821. Filenames 
  2822. Module Definition Files 
  2823.   Basics 
  2824.   Example 
  2825.   Rules 
  2826.   Statements 
  2827. Options 
  2828.   Using 
  2829.   Recommendations 
  2830.   Numeric Arguments 
  2831.   Environment Variable 
  2832. OS/2* Considerations 
  2833. Output 
  2834. Error Messages 
  2835.  
  2836.  
  2837. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Introduction ΓòÉΓòÉΓòÉ
  2838.  
  2839. LINK386 is used to combine object files and standard library files into a 
  2840. single file: an executable file, a dynamic-link library, or a device driver. 
  2841. The output file from LINK386 is not constrained to specific memory addresses. 
  2842. Thus, the operating system can load and execute this file at any convenient 
  2843. address. 
  2844.  
  2845. LINK386 Input 
  2846.  
  2847. LINK386 uses the following files as input: 
  2848.  
  2849. o One or more object files that are linked with any optional library files to 
  2850.   form the executable file. Object files usually have a .OBJ extension. 
  2851.  
  2852.   LINK386 accepts object files compiled or assembled for 80386 or 80486 
  2853.   microprocessor. Object files must be in the Object Module Format (OMF), which 
  2854.   is based on the Intel(R) 8086 OMF. 
  2855.  
  2856. o One or more library files.  The library files contain object modules that are 
  2857.   linked to the object files to form the executable file.  Library files 
  2858.   usually have a .LIB extension. 
  2859.  
  2860.   Library files are used to resolve external references in your object files. 
  2861.  
  2862. o A module definition file.  The module definition file provides information to 
  2863.   LINK386 about the executable file or dynamic link library file it is 
  2864.   creating.  The module definition file usually has a .DEF extension. 
  2865.  
  2866. LINK386 Output 
  2867.  
  2868. LINK386 can produce executable files of up to 16 megabytes. LINK386 can also 
  2869. produce dynamic-link libraries (.DLL) and device drivers (.DRV), in addition to 
  2870. executable files (.EXE).  For additional information, see Output Files. 
  2871.  
  2872. LINK386 displays all of its output messages on the standard output device. 
  2873.  
  2874. LINK386 Features 
  2875.  
  2876. LINK386 creates the executable file and map file in the current directory 
  2877. unless you enter an explicit path. 
  2878.  
  2879. LINK386 looks in several locations for object, library, and module-definition 
  2880. files. See Where LINK386 Looks for Files. 
  2881.  
  2882. File names are not case sensitive; for example, abc.exe and ABC.EXE refer to 
  2883. the same file. 
  2884.  
  2885. If you enter a file name without an extension, LINK386 adds a default extension 
  2886. that depends on the type of file expected. 
  2887.  
  2888. If you leave a field blank (but define the field with a comma), LINK386 uses a 
  2889. default for the field. If you end the LINK386 command with a semicolon (;), 
  2890. LINK386 uses defaults for all remaining fields. 
  2891.  
  2892. If you do not give all file names or do not end the command line with a 
  2893. semicolon, LINK386 prompts you for the omitted files. 
  2894.  
  2895.  
  2896. ΓòÉΓòÉΓòÉ <hidden> Starting LINK386 ΓòÉΓòÉΓòÉ
  2897.  
  2898. Some commands and applications call LINK386 for you, or you can run LINK386 by 
  2899. typing LINK386 at the operating-system prompt. Supply input to LINK386 by any 
  2900. of three methods: 
  2901.  
  2902. o Enter the input directly on the command line 
  2903.  
  2904. o Respond to prompts generated by LINK386. 
  2905.  
  2906. o Put your input in a response file, and enter the file name on the command 
  2907.   line. 
  2908.  
  2909. You can press Ctrl+C at any time to interrupt LINK386 and return to the 
  2910. operating system. 
  2911.  
  2912. If LINK386 runs out of memory, it creates a temporary file. 
  2913.  
  2914. To display LINK386 help, type LINK386 /? at the prompt. A copyright statement 
  2915. appears along with a list of valid LINK386 options. 
  2916.  
  2917.  
  2918. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Syntax ΓòÉΓòÉΓòÉ
  2919.  
  2920. LINK386 [options] objfiles [,exefile, mapfile, libraries, deffile] 
  2921.  
  2922. OR 
  2923.  
  2924. LINK386 @responsefile 
  2925.  
  2926. SYNTAX DEFINITIONS 
  2927.  
  2928. The LINK386 command line includes the following fields: 
  2929.  
  2930. <options> 
  2931.      Options modifying actions of LINK386.  Options can appear anywhere on the 
  2932.      command line except immediately after the commas used to separate fields. 
  2933.      See LINK386 Options and Using LINK386 Options. 
  2934.  
  2935. <objfiles> 
  2936.      Object files to be linked. Separate multiple file names by plus (+) or 
  2937.      space characters. At least one name must be entered. Library files can 
  2938.      also be entered. See Entering Library Files as Object Files. 
  2939.  
  2940. <exefile> 
  2941.      Output of file. LINK386 produces either an executable file, a dynamic-link 
  2942.      library, or a device driver. 
  2943.  
  2944. <mapfile> 
  2945.      Map file created that lists modules in <exefile>. Use the /M option to 
  2946.      include public symbols in this file. Enter NUL if you do not want a map 
  2947.      file. See Include Public Symbols (/M). 
  2948.  
  2949. <libraries> 
  2950.      Standard or import (not dynamic-link) libraries to be used in resolving 
  2951.      external references. Separate multiple file names by plus (+) or space 
  2952.      characters. Some libraries are searched by default. You can also specify a 
  2953.      path to a directory -- LINK386 searches all libraries in this directory. 
  2954.      See Linking with an Import Library, Default Libraries, and Specifying 
  2955.      Library Directories. 
  2956.  
  2957. <deffile> 
  2958.      Module definition file. 
  2959.  
  2960. SYNTAX EXAMPLES 
  2961.  
  2962. The following command links the object files FUN.OBJ, TEXT.OBJ, TABLE.OBJ, and 
  2963. CARE.OBJ. LINK386 searches for unresolved external references in the library 
  2964. file XLIB.LIB and in the default libraries. By default, the executable file is 
  2965. named FUN.EXE. LINK386 also produces a map file, FUNLIST.MAP. 
  2966.  
  2967.   LINK386 FUN+TEXT+TABLE+CARE, ,FUNLIST, XLIB.LIB;
  2968.  
  2969. The following command produces a map file named FUN.MAP because a comma appears 
  2970. as a placeholder for <mapfile>. 
  2971.  
  2972.   LINK386 FUN,,;
  2973.  
  2974. The next pair of command lines do not produce a map file because commas do not 
  2975. appear as placeholders for <mapfile>. 
  2976.  
  2977.   LINK386 FUN,;
  2978. LINK386 FUN;
  2979.  
  2980. The following command links the files MAIN.OBJ, GETDATA.OBJ, and PRINTIT.OBJ 
  2981. into an executable file named MAIN.EXE. A map file named MAIN.MAP is also 
  2982. produced. 
  2983.  
  2984.   LINK386 MAIN+GETDATA+PRINTIT, , MAIN;
  2985.  
  2986. The following command links GETDATA.OBJ and PRINTIT.OBJ into an OS/2* 
  2987. dynamic-link library. MODDEF.DEF must contain a LIBRARY statement to produce 
  2988. the dynamic-link library. 
  2989.  
  2990. LINK386 GETDATA+PRINTIT,GETDATA.DLL, , MODDEF
  2991.  
  2992.  
  2993. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Object Files ΓòÉΓòÉΓòÉ
  2994.  
  2995. LINK386 accepts object files compiled or assembled for the 80386 or 80486 
  2996. microprocessor. LINK386 also accepts standard library files. 
  2997.  
  2998.  
  2999. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Output Files ΓòÉΓòÉΓòÉ
  3000.  
  3001. LINK386 Can Produce Three Types of Output Files 
  3002.  
  3003. o Executable (.EXE) files that run under OS/2* version 2.0 protected mode 
  3004.  
  3005.   LINK386 produces an executable file whenever you specify a module-definition 
  3006.   file containing a NAME statement. The module definition file should not have 
  3007.   a LIBRARY, VIRTUAL DEVICE, or PHYSICAL DEVICE statement; otherwise, a 
  3008.   dynamic-link library or device driver is produced, as described below. 
  3009.  
  3010. o Dynamic-link library (.DLL) files 
  3011.  
  3012.   A dynamic-link library is produced whenever you specify a module-definition 
  3013.   file containing a LIBRARY statement. 
  3014.  
  3015. o Device driver (.DRV) files 
  3016.  
  3017.   A virtual or physical device driver is produced whenever you specify a 
  3018.   module-definition file containing the VIRTUAL DEVICE or PHYSICAL DEVICE 
  3019.   statements. 
  3020.  
  3021. Related Topics 
  3022.  
  3023. OS/2 Considerations 
  3024. Error Messages 
  3025.  
  3026.  
  3027. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Prompts ΓòÉΓòÉΓòÉ
  3028.  
  3029. LINK386 prompts you if any fields have not been entered on the command line or 
  3030. in a response file. For each prompt, simply enter the same input that you would 
  3031. enter on the command line and press Enter. 
  3032.  
  3033. Object Modules [.OBJ]: 
  3034.      <objfiles> 
  3035.  
  3036. Run File [basename.EXE]: 
  3037.      <exefile> 
  3038.  
  3039. List File [NUL.MAP]: 
  3040.      <mapfile> 
  3041.  
  3042. Libraries [.LIB]: 
  3043.      <libraries> 
  3044.  
  3045. Definitions File [NUL.DEF]: 
  3046.      <deffile> 
  3047.  
  3048. Special Features 
  3049.  
  3050. o To extend input to a new line, type a plus sign (+) as the last character on 
  3051.   the current line. When the same prompt appears on a new line, you can 
  3052.   continue. Do not, however, split a file name across lines. 
  3053.  
  3054. o To select the default response to a prompt, press Enter. The next prompt 
  3055.   appears. 
  3056.  
  3057. o To select default responses to the current prompt and all remaining prompts, 
  3058.   enter a semicolon (;). Note that at least one object file must be entered. 
  3059.  
  3060. o You can specify options anywhere on any response line, except before a comma 
  3061.   at the end of a line of characters.  If you want to specify more than one 
  3062.   option, either group them at the end of a response, or specify them at the 
  3063.   end of several responses.  Each option must begin with a slash (/). 
  3064.  
  3065.  
  3066. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Response Files ΓòÉΓòÉΓòÉ
  3067.  
  3068. A response file is a text file used to provide input to LINK386. To use 
  3069. response file input for LINK386, type 
  3070.  
  3071.   LINK386 @responsefile
  3072.  
  3073. The @ symbol tells LINK386 that filename starts the linker.  If the file is not 
  3074. in the working directory, you must specify the path. 
  3075.  
  3076. The field <responsefile> specifies the name of a file containing the same input 
  3077. that would be entered on the command line or entered in response to LINK386 
  3078. prompts.  In this file, each response should appear on a separate line or be 
  3079. separated from other responses by a comma. 
  3080.  
  3081. To operate LINK386 using a response file, you must first create a file that 
  3082. contains the responses you want LINK386 to process. You can give the file any 
  3083. name, and create it with any text editor. 
  3084.  
  3085. Special Features: 
  3086.  
  3087. o You can begin using a response file at any point on the LINK386 command line 
  3088.   or at any LINK386 prompt. The response file should contain responses to all 
  3089.   remaining fields or prompts. 
  3090.  
  3091. o If the file does not contain responses for all the prompts, LINK386 displays 
  3092.   the appropriate prompt and waits for you to supply a response.  End the 
  3093.   response file with a semicolon. 
  3094.  
  3095.   You can use special characters in the response file the same way you would 
  3096.   use them in responses entered at the keyboard. 
  3097.  
  3098. o You can use special characters in the response file the same way you would 
  3099.   use them in responses entered at the keyboard. For example, you can extend 
  3100.   input to a new line by using the plus sign (+) and choose default responses 
  3101.   for all remaining prompts by using a semicolon (;). 
  3102.  
  3103. o LINK386 displays prompts and the entries from the response file on the 
  3104.   screen. If the entry in the response file is not acceptable, LINK386 pauses 
  3105.   and waits for you to enter an acceptable response. The /BA option disables 
  3106.   the prompt. 
  3107.  
  3108. o Options can appear anywhere in the response file. 
  3109.  
  3110. Related Topic 
  3111.  
  3112. Response File Example 
  3113.  
  3114.  
  3115. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Response File Example ΓòÉΓòÉΓòÉ
  3116.  
  3117. FUN TEXT TABLE CARE
  3118. /CO /MAP
  3119. FUNLIST
  3120. GRAF.LIB
  3121.  
  3122. If the text file above were named FUN.LNK, the following command would use this 
  3123. file as a response file: 
  3124.  
  3125. LINK386 @FUN.LNK
  3126.  
  3127. This would cause LINK386 to do the following: 
  3128.  
  3129. o Link the four object modules FUN, TEXT, TABLE, and CARE into an executable 
  3130.   file named FUN.EXE 
  3131.  
  3132. o Generate the map file FUNLIST.MAP 
  3133.  
  3134. o Generate Debugging information 
  3135.  
  3136. o Include public symbols and addresses in the map file 
  3137.  
  3138. o Link any needed routines from the library file GRAF.LIB 
  3139.  
  3140. The response file in the following example instructs LINK386 to generate an 
  3141. executable file called FUN.EXE, and four object modules, FUN, SUN, RUN, and 
  3142. GAMES. 
  3143.  
  3144. If you specify the file name, FUNLIST, LINK386 will generate a map file named 
  3145. FUNLIST.MAP.  Adding the /MAP option will cause LINK386 to include the public 
  3146. symbols of the application in the map file. 
  3147.  
  3148. fun+sun+run+game /map
  3149. fun.exe
  3150. funlist
  3151. ;
  3152.  
  3153.  
  3154. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Temporary File ΓòÉΓòÉΓòÉ
  3155.  
  3156. If LINK386 runs out of memory, it creates a temporary disk file. This file is 
  3157. deleted when LINK386 finishes. The location of the temporary file varies: 
  3158.  
  3159. o If a temporary directory is defined by the TMP environment variable, LINK386 
  3160.   stores the temporary file there. 
  3161.  
  3162. o If the TMP environment variable is undefined or the temporary directory 
  3163.   doesn't exist, LINK386 stores the temporary file in the current working 
  3164.   directory. 
  3165.  
  3166. When LINK386 creates a temporary file, you see the message: 
  3167.  
  3168. Temporary file tempfile has been created.
  3169. Do not change diskette in drive letter.
  3170.  
  3171. <tempfile> 
  3172.      Name of temporary file 
  3173.  
  3174. <letter> 
  3175.      Disk drive identifier where temporary file is stored (does not appear if 
  3176.      drive is fixed) 
  3177.  
  3178. After this message appears, do not remove the disk from the drive specified by 
  3179. <letter> until the link session ends. If the disk is removed, the operation of 
  3180. LINK386 is unpredictable; and you may see the following message: 
  3181.  
  3182. Unexpected end-of-file on scratch file
  3183.  
  3184. If this happens, run LINK386 again. 
  3185.  
  3186.  
  3187. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Default Libraries ΓòÉΓòÉΓòÉ
  3188.  
  3189. Most compilers embed the names of needed libraries (called default libraries) 
  3190. in object files.  LINK386 searches these libraries. Because of this, you need 
  3191. to explicitly enter library names only in the following cases: 
  3192.  
  3193. o You want to use additional libraries. 
  3194.  
  3195. o You are using a library not in the current directory and not in a directory 
  3196.   specified by the LIB environment variable. See Where LINK386 Looks for Files. 
  3197.  
  3198. o You want to use a library other than the one specified in the object file. 
  3199.  
  3200. Explicitly entered libraries are always searched before default libraries.  If 
  3201. an external reference is resolved by more than one library, the order of 
  3202. libraries on the command line determines which library is used. 
  3203.  
  3204. To ignore default libraries use the /NOD option But be careful - most compilers 
  3205. expect their object files to be linked with default libraries. 
  3206.  
  3207. Related Topics 
  3208.  
  3209. Where LINK386 Looks for Files 
  3210. Specifying Library Directories 
  3211. Entering Library Files as Object Files 
  3212. Library Search Example 
  3213.  
  3214.  
  3215. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Entering Library Files as Object Files ΓòÉΓòÉΓòÉ
  3216.  
  3217. You can enter library files in the <objfiles> field. Be sure to include the 
  3218. .LIB file name extension; otherwise, LINK386 assumes a .OBJ extension. 
  3219.  
  3220. With libraries entered in the <objfiles> field, LINK386 adds every module in 
  3221. the library to your output file. With libraries entered in the <libraries> 
  3222. field, LINK386 adds only those required to resolve external references. 
  3223.  
  3224. The effect of entering a library this way is the same as if you had entered all 
  3225. of the library's module names into the <objfiles>field. 
  3226.  
  3227.  
  3228. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Specifying Library Directories ΓòÉΓòÉΓòÉ
  3229.  
  3230. LINK386 searches additional locations for libraries using the drive name or 
  3231. path specification in the <libraries> field on the command line. 
  3232.  
  3233. You can specify up to 32 additional paths. If you give more than 32 paths, 
  3234. LINK386 ignores the additional paths without displaying an error message. 
  3235.  
  3236.  
  3237. ΓòÉΓòÉΓòÉ <hidden> Where LINK386 Looks for Files ΓòÉΓòÉΓòÉ
  3238.  
  3239. When searching for an object, library, or module definition file, LINK386 looks 
  3240. in the following locations in this order: 
  3241.  
  3242.  1. The directory specified for the file if a path specification is included. 
  3243.     Default libraries do not include path specifications. 
  3244.  
  3245.  2. The current directory. 
  3246.  
  3247.  3. Any directories entered on the command line. 
  3248.  
  3249.  4. Any directories given by the LIB environment variable. 
  3250.  
  3251. If LINK386 cannot locate a file, it prompts you to enter the location. The /BA 
  3252. option disables these prompts. 
  3253.  
  3254.  
  3255. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Library Search Example ΓòÉΓòÉΓòÉ
  3256.  
  3257. LINK386
  3258. Object Modules [.OBJ]: FUN TEXT TABLE CARE
  3259. Run File [FUN.EXE]:
  3260. List File [NUL.MAP]:
  3261. Libraries [.LIB]: C:\TESTLIB\ NEWLIBV3
  3262. Definitions File [NUL.DEF]:
  3263.  
  3264. This example links four object modules to create an executable file named 
  3265. FUN.EXE. LINK386 searches NEWLIBV3.LIB before searching the default libraries 
  3266. to resolve references. 
  3267.  
  3268. To locate NEWLIBV3.LIB and the default libraries, LINK386 searches the 
  3269. following locations in this order: 
  3270.  
  3271.  1. The current directory 
  3272.  
  3273.  2. The C:\TESTLIB\ directory 
  3274.  
  3275.  3. The locations given by the LIB environment variable 
  3276.  
  3277. Related Topics 
  3278.  
  3279. Specifying Library Directories 
  3280. Where LINK386 Looks for Files 
  3281.  
  3282.  
  3283. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Filename Defaults ΓòÉΓòÉΓòÉ
  3284.  
  3285. If you do not enter a file name, LINK386 assumes a default: 
  3286.  
  3287. <options> 
  3288.      No options 
  3289.  
  3290. <objfiles> 
  3291.      None (This field is required.) 
  3292.  
  3293. <exefile> 
  3294.      The base name of the first file in <objfiles> with the .EXE extension 
  3295.      added 
  3296.  
  3297. <mapfile> 
  3298.      The base name in <exefile> with the .MAP extension added 
  3299.  
  3300. <libraries> 
  3301.      No libraries 
  3302.  
  3303. <deffile> 
  3304.      No module definition file 
  3305.  
  3306. Related Topic 
  3307.  
  3308. Filename Extension Defaults 
  3309.  
  3310.  
  3311. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Default Filename Extensions ΓòÉΓòÉΓòÉ
  3312.  
  3313. If you do not enter an extension, LINK386 uses a default extension, depending 
  3314. on the type of file. 
  3315.  
  3316. Object                   .OBJ 
  3317. Executable               .EXE 
  3318. Map                      .MAP 
  3319. Standard Library         .LIB 
  3320. Dynamic-Link Library     .DLL 
  3321. Module Definition        .DEF 
  3322. Device Driver            .DRV 
  3323.  
  3324. Overriding Default Extensions 
  3325.  
  3326. Any time you explicitly enter an extension, it overrides the default extension. 
  3327. To specify a file name without an extension, just enter a period (.) after the 
  3328. file name. 
  3329.  
  3330.  
  3331. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Options ΓòÉΓòÉΓòÉ
  3332.  
  3333. The following is a summary of LINK386 options: 
  3334.  
  3335. /? 
  3336.      Display Help 
  3337. /A[LIGNMENT] 
  3338.      Align 
  3339. /BAS[E] 
  3340.      Base 
  3341. /BAT[CH] 
  3342.      Run in Batch Mode 
  3343. /C[ODEVIEW] 
  3344.      Prepare for Debugging 
  3345. /DE[BUG] 
  3346.      Prepare for Debugging 
  3347. /DO[SSEG] 
  3348.      Order Segments 
  3349. /E[XEPACK] 
  3350.      Exepack 
  3351. /F[ARCALLTRANSLATION] 
  3352.      Optimize Far Calls 
  3353. /H[ELP] 
  3354.      Display Help 
  3355. /I[NFORMATION] 
  3356.      Display Process Information 
  3357. /L[INENUMBERS] 
  3358.      Include Line Numbers 
  3359. /M[AP] 
  3360.      List Public Symbols 
  3361. /NOD[EFAULTLIBRARYSEARCH] 
  3362.      Ignore Default Libraries 
  3363. /NOE[XTDICTIONARY] 
  3364.      Ignore Extended Dictionary 
  3365. /NOF[ARCALLTRANSLATION] 
  3366.      Disable Far Optimization 
  3367. /NOI[GNORECASE] 
  3368.      Preserve Case Sensitivity 
  3369. /NOL[OGO] 
  3370.      Disable Sign-On Banner 
  3371. /NON[ULLSDOSSEG] 
  3372.      Order Segments without NULLs 
  3373. /NOP[ACKCODE] 
  3374.      Disable Code-Segment Packing 
  3375. /PACKC[PACKCODE] 
  3376.      Pack Contiguous Code 
  3377. /PACKD[ATA] 
  3378.      Pack Contiguous Data 
  3379. /PAU[SE] 
  3380.      Pause during Linking 
  3381. /PM[TYPE] 
  3382.      Name Application Type 
  3383. /RU[NFROMVDM] 
  3384.      Execute From Dos Command Line 
  3385. /SE[GMENTS] 
  3386.      Set Max Number of Segments 
  3387. /ST[ACK] 
  3388.      Control Stack Size 
  3389. /W[ARNFIXUP] 
  3390.      Warn Fixup 
  3391.  
  3392. Options Not Supported Under LINK386 
  3393.  
  3394. /O[VERLAYINTERRUPT] 
  3395. /CP[ARMAXALLOC] 
  3396. /PADC[ODE] 
  3397. /DS[ALLOCATE] 
  3398. /PADD[ATA] 
  3399. /Q[UICKLIB] 
  3400. /HI[GH] 
  3401. /T[INY] 
  3402. /INC[REMENTAL] 
  3403. /NOG[ROUPALIGN] 
  3404.  
  3405. Specifying LINK386 Options 
  3406.  
  3407. You can specify options anywhere on the response line, except before a comma at 
  3408. the end of a line of characters.  If you want to specify more than one option, 
  3409. either group them at the end of a response, or specify them at the end of 
  3410. several responses.  Each option must begin with a forward slash (/). 
  3411.  
  3412.  
  3413. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Using LINK386 Options ΓòÉΓòÉΓòÉ
  3414.  
  3415.  1. Options always begin with the slash character (/). 
  3416.  
  3417.  2. Options are not case sensitive. For example, /de and /DE are equivalent. 
  3418.  
  3419.  3. You can specify options in either the short or long form. The short form is 
  3420.     the shortest sequence of characters that uniquely identifies the option. 
  3421.     The individual description of each option lists both forms with the 
  3422.     optional part enclosed in brackets. For example, /BA[TCH] indicates that 
  3423.     either /BA or /BATCH can be used. 
  3424.  
  3425.  4. Some linker options take numeric arguments.  You can enter numbers in 
  3426.     decimal, octal, or hexadecimal radix using standard C-language syntax. 
  3427.  
  3428.  5. You can also specify options in the LINK386 environment variable. 
  3429.  
  3430.  6. Although use of the minimum one-letter abbreviations is allowed, if a 
  3431.     future release has an additional option starting with the same letter, the 
  3432.     one-letter option will no longer be usable. 
  3433.  
  3434.  
  3435. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Recommendations ΓòÉΓòÉΓòÉ
  3436.  
  3437. It is recommended that the ALIGN, BASE, and EXEPACK options be used when 
  3438. linking all executables.  This will compress them in size and improve their 
  3439. performance. 
  3440.  
  3441. Use /ALIGN:4 for 32-bit applications and /ALIGN:16 for 16-bit applications. 
  3442.  
  3443. If you use BASE with .EXE files, the /BASE:0x10000 option must be used.  Any 
  3444. other value will produce a warning.  For .DLL files, use /BASE:0x12000000 (or a 
  3445. lesser value), remembering to provide a separate value for each .DLL. 
  3446.  
  3447.  
  3448. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Entering Numeric Arguments ΓòÉΓòÉΓòÉ
  3449.  
  3450. Some LINK386 options and module statements take numeric arguments. LINK386 uses 
  3451. C-language syntax allowing you to specify numbers in any of the following 
  3452. forms: 
  3453.  
  3454. o Any number not prefixed with 0 or 0x is a decimal number.  For example, 1234 
  3455.   is a decimal number. 
  3456.  
  3457. o Any number prefixed with 0 (but not 0x) is an octal number. For example, 
  3458.   01234 is an octal number. 
  3459.  
  3460. o Any number prefixed with 0x is a hexadecimal number. For example, 0x1234 is a 
  3461.   hexadecimal number. 
  3462.  
  3463.  
  3464. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Environment Variable ΓòÉΓòÉΓòÉ
  3465.  
  3466. You can use the LINK386 environment variable to cause certain options to be 
  3467. used each time you link.  LINK386 checks the environment variable for options 
  3468. if the variable exists. 
  3469.  
  3470. LINK386 expects to find options listed in the variable exactly as you would 
  3471. type them on the command line.  It does not accept other kinds of arguments; 
  3472. file names in the environment variable cause the following error message: 
  3473.  
  3474. unrecognized option
  3475.  
  3476. Each time you link, you can specify other options in addition to the ones 
  3477. specified in the LINK386 environment variable. If you type an option both on 
  3478. the command line and in the environment variable, the effect is the same as if 
  3479. the option were given once. 
  3480.  
  3481. Note:  A command line option overrides the effect of any environment-variable 
  3482. option that it conflicts with.  For example, the command line option /SE:512 
  3483. cancels the effect of the environment-variable option /SE:256. 
  3484.  
  3485. The only way to prevent an option in the environment variable from being used 
  3486. is to reset the environment variable itself. 
  3487.  
  3488. Related Topics 
  3489.  
  3490. LINK386 Environment Variable Example 
  3491. /SE 
  3492. /NOF 
  3493.  
  3494.  
  3495. ΓòÉΓòÉΓòÉ <hidden> LINK386 Environment Variable Example ΓòÉΓòÉΓòÉ
  3496.  
  3497. <SET LINK386=/NOI /SE:256 /CO
  3498. <LINK386 TEST;
  3499. <LINK386 /NOD /CO PROG;
  3500.  
  3501. In the example above, the file TEST.OBJ is linked with the options /NOI, 
  3502. /SE:256, and /CO. The file PROG.OBJ is then linked with the option /NOD - in 
  3503. addition to /NOI, /SE:256, and /CO. 
  3504.  
  3505.  
  3506. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Alignment (/A) ΓòÉΓòÉΓòÉ
  3507.  
  3508. Syntax:  /A[LIGNMENT]:n 
  3509.  
  3510. This option directs LINK386 to set the alignment factor in the executable file 
  3511. to the number given, which must be a power of 2, from 2 to 32 768. The default 
  3512. alignment is 512 bytes. Trailing zeroes are truncated to reduce the amount of 
  3513. data stored in a file. 
  3514.  
  3515. Each page starts at a location that is a multiple of n bytes from the beginning 
  3516. of the file. For example, /A:16 would start pages at multiples of 16 bytes. 
  3517.  
  3518. Since pages on OS/2* are 4096 bytes in length, it does not make sense to use a 
  3519. value greater than 4096 since this will just waste disk space. 
  3520.  
  3521.  
  3522. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Run in Batch Mode (/B) ΓòÉΓòÉΓòÉ
  3523.  
  3524. Syntax:  /BAT[CH] 
  3525.  
  3526. By default, LINK386 prompts you for a new path name whenever it cannot find an 
  3527. object file or library it was directed to use. 
  3528.  
  3529. This option disables such prompting. Instead, LINK386 generates an error or 
  3530. warning message, as appropriate, and leaves the external reference unresolved. 
  3531. The /B option also disables the display of the sign-on banner and the display 
  3532. of input from response files. 
  3533.  
  3534. This option is primarily used when LINK386 is called from a batch file or NMAKE 
  3535. description file. 
  3536.  
  3537. Note:  This option does not affect prompts for command line input. 
  3538.  
  3539.  
  3540. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Prepare for Debugging (/C) ΓòÉΓòÉΓòÉ
  3541.  
  3542. Syntax:  /C[ODEVIEW] 
  3543.  
  3544. The /C option is used to prepare for debugging with the CodeView** debugger. 
  3545. This option works exactly like the /DE option. 
  3546.  
  3547. The /C option is used to prepare for debugging with CodeView. With this option, 
  3548. LINK386 imbeds symbolic data and line number information in the executable 
  3549. output file. 
  3550.  
  3551. You can run this executable file outside Debug; the debugging information in 
  3552. the file is ignored. However, to reduce executable file size, use this option 
  3553. only for debugging. Then you can link a separate version without the /C option 
  3554. after the program is debugged. 
  3555.  
  3556.  
  3557. ΓòÉΓòÉΓòÉ <hidden> LINK386 - /BASE (//BAS) ΓòÉΓòÉΓòÉ
  3558.  
  3559. Syntax: BASE:n 
  3560.  
  3561. Where n is a value rounded up to the nearest multiple of 64K Indicates that 
  3562. each object of the module has a preferred load address starting with object 1 
  3563. at this address, object 2 at the next available multiple of 64K, and so on. 
  3564. Internal relocation records are then applied using this addressing scheme. 
  3565.  
  3566. If the module's objects can be loaded beginning at this preferred address, then 
  3567. no load-time internal relocation records need be applied. 
  3568.  
  3569. If the module's objects cannot be loaded beginning at this preferred address, 
  3570. then the internal relocation records that have been retained in the file data 
  3571. will be applied. 
  3572.  
  3573. EXE files may specify a base address, but it must be 64K.  If it isn't, a 
  3574. warning will be issued and a base address of 64K will be used anyway. This 
  3575. option provides the same support as the BASE module definition file statement. 
  3576.  
  3577.  
  3578. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Prepare for Debugging (/DE) ΓòÉΓòÉΓòÉ
  3579.  
  3580. Syntax:  /DE[BUG] 
  3581.  
  3582. The /DE option is used to prepare for debugging with any debugger. With this 
  3583. option, LINK386 embeds symbolic data and line number information in the 
  3584. executable output file. 
  3585.  
  3586. You can run this executable file outside Debug; the debugging information in 
  3587. the file is ignored. However, to reduce executable file size, use this option 
  3588. only for debugging. Then you can link a separate version without the /DE option 
  3589. after the program is debugged. 
  3590.  
  3591.  
  3592. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Order Segments (/DO) ΓòÉΓòÉΓòÉ
  3593.  
  3594. Syntax:  /DO[SSEG] 
  3595.  
  3596. This option is automatically enabled by a special object module record in many 
  3597. language libraries. If you are linking to one of these libraries, you need not 
  3598. specify this option. 
  3599.  
  3600. The /DO option is also enabled by assembly modules that use the Macro Assembler 
  3601. directive .DOSSEG. 
  3602.  
  3603. This option forces segments to be ordered as follows (first to last): 
  3604.  
  3605.  1. All code segments 
  3606.  
  3607.  2. Far data segments 
  3608.  
  3609.  3. Near data (DGROUP) segments, in the following order: 
  3610.  
  3611.     a. Any segments of class BEGDATA (this class name is reserved) 
  3612.     b. Any segments not of class BEGDATA, BSS, or STACK 
  3613.     c. Segments of class BSS 
  3614.     d. Segments of class STACK 
  3615.  
  3616. In addition, the /DO option causes LINK386 to do the following: 
  3617.  
  3618. o Initialize two special variables: 
  3619.  
  3620.     _edata = DGROUP : BSS
  3621.     _end = DGROUP : STACK
  3622.  
  3623.   The variables _edata and _end have special meanings for certain compilers; 
  3624.   avoid using these names in your programs. Assembly-language programs can 
  3625.   refer to these variables, but should not change them. 
  3626.  
  3627. o Insert 16 null bytes at the beginning of the _TEXT segment (if this segment 
  3628.   is defined). 
  3629.  
  3630.  
  3631. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Exepack (/E) ΓòÉΓòÉΓòÉ
  3632.  
  3633. Syntax:  /E[XEPACK] 
  3634.  
  3635. EXEPACK causes pages of data in the file to be compressed. The OS/2* 
  3636. Applications Loader will automatically decompress these pages when the program 
  3637. is run. 
  3638.  
  3639. Related Topic 
  3640.  
  3641. /NON 
  3642.  
  3643.  
  3644. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Optimize Far Calls (/F) ΓòÉΓòÉΓòÉ
  3645.  
  3646. Syntax:  /F[ARCALLTRANSLATION] 
  3647.  
  3648. This option causes LINK386 to optimize far-call instructions made from one 
  3649. segment to a target address in the same segment. LINK386 replaces calling 
  3650. sequences such as CALL FAR function with the following: 
  3651.  
  3652. PUSH     CS
  3653. CALL     NEAR function
  3654. NOP
  3655.  
  3656. The new calling sequence is significantly faster when running in protected 
  3657. mode. Also, a load-time relocation is eliminated, which decreases program file 
  3658. size and speeds program loading. 
  3659.  
  3660. In general, the greatest benefit occurs if you use the /PACKC option in 
  3661. addition to the /F option. 
  3662.  
  3663. The /F option has no effect on programs that make only near calls. 
  3664.  
  3665. Note:  There is a small risk involved with using the /F option.  LINK386 may 
  3666. mistakenly interpret a byte of immediate data in a code segment as a far call 
  3667. if it has to have the far-call opcode (0x9A). 
  3668.  
  3669. Related Topics 
  3670.  
  3671. /NOF 
  3672.  
  3673.  
  3674. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Display Help (/H or /?) ΓòÉΓòÉΓòÉ
  3675.  
  3676. Syntax:  /H[ELP]   OR    /? 
  3677.  
  3678. These options display a list of valid LINK386 options. 
  3679.  
  3680.  
  3681. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Display Process Information (/I) ΓòÉΓòÉΓòÉ
  3682.  
  3683. Syntax:  /I[NFORMATION] 
  3684.  
  3685. This option causes LINK386 to display information about the linking process, 
  3686. including the phase of linking and the names of the object files being linked. 
  3687. Use this option to determine the locations of the object files being linked and 
  3688. the order in which they are linked. 
  3689.  
  3690. The output from this option is sent to standard output. 
  3691.  
  3692. Related Topics 
  3693.  
  3694. Example of /I Output 
  3695.  
  3696.  
  3697. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Include Line Numbers (/L) ΓòÉΓòÉΓòÉ
  3698.  
  3699. Syntax:  /L[INENUMBERS] 
  3700.  
  3701. This option includes source file line numbers and associated addresses in the 
  3702. map file. In addition, you must give LINK386 an object file (or files) with 
  3703. line number information. You can use the /Zd option with most compilers to 
  3704. include line numbers in the object file. If you give LINK386 an object file 
  3705. without line number information, the /L option has no effect. 
  3706.  
  3707. The /L option forces LINK386 to create a map file even if you did not 
  3708. explicitly tell LINK386 to create a map file.  By default, the file is given 
  3709. the same base name as the executable file, plus the extension .MAP. You can 
  3710. override the default name by explicitly specifying a map file name. 
  3711.  
  3712.  
  3713. ΓòÉΓòÉΓòÉ <hidden> LINK386 - List Public Symbols (/M) ΓòÉΓòÉΓòÉ
  3714.  
  3715. Syntax:  /M[AP][:full] 
  3716.  
  3717. This option lists in the map file all public (global) symbols defined in the 
  3718. object files. With this option, the map file contains a list of all the symbols 
  3719. sorted by name, and a list of all the symbols sorted by address.  If you don't 
  3720. use this option, the map file contains only a list of segments. 
  3721.  
  3722. With this option, LINK386 creates a map file by default. If you explicitly 
  3723. enter a map file name of NUL, then no map file is created, and this option has 
  3724. no effect. 
  3725.  
  3726. The Map option can be specified as /M:full to produce a comprehensive map 
  3727. showing the composition of each segment. 
  3728.  
  3729. Related Topics 
  3730.  
  3731. Example of /M output 
  3732.  
  3733.  
  3734. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Ignore Default Libraries (/NOD) ΓòÉΓòÉΓòÉ
  3735.  
  3736. Syntax:  /NOD[EFAULTLIBRARYSEARCH] [:filename] 
  3737.  
  3738. This option tells LINK386 to ignore default libraries when resolving external 
  3739. references.  If you specify an object file in <filename>, LINK386 ignores only 
  3740. the default libraries in <filename>. 
  3741.  
  3742. In general, high-level-language programs do not work correctly without standard 
  3743. libraries. Thus, if you use the /NOD option, you should explicitly specify the 
  3744. name of a standard library in the <libraries> field of the command line. 
  3745.  
  3746.  
  3747. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Ignore Extended Dictionary (/NOE) ΓòÉΓòÉΓòÉ
  3748.  
  3749. Syntax:  /NOE[XTDICTIONARY] 
  3750.  
  3751. This option prevents LINK386 from searching the extended dictionary, an 
  3752. internal list of symbol locations included with libraries generated with the 
  3753. old LIB utility's /NOE option. 
  3754.  
  3755. Normally, LINK386 uses the extended dictionary to speed up library searches; 
  3756. thus, using /NOE slows LINK386.  This option should be used when a library 
  3757. symbol is redefined. You need to use this option when LINK386 issues error 
  3758. L2044. 
  3759.  
  3760.  
  3761. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Disable Far Optimization (/NOF) ΓòÉΓòÉΓòÉ
  3762.  
  3763. Syntax:  /NOF[ARCALLTRANSLATION] 
  3764.  
  3765. Far-call optimization is off by default. If the LINK386 environment variable or 
  3766. another command (such as ICC) has turned it on, you can use /NOF to turn it off 
  3767. again. 
  3768.  
  3769. Related Topics 
  3770.  
  3771. LINK386 Environment Variable 
  3772. Optimize Far Calls (/F) 
  3773.  
  3774.  
  3775. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Preserve Case Sensitivity (/NOI) ΓòÉΓòÉΓòÉ
  3776.  
  3777. Syntax:  /NOI[GNORECASE] 
  3778.  
  3779. This option turns case sensitivity on; that is, LINK386 treats ABC, abc, and 
  3780. Abc as unique names. By default, case sensitivity is off. 
  3781.  
  3782. This option can be used when you link programs written in case-sensitive 
  3783. languages such as C. 
  3784.  
  3785.  
  3786. ΓòÉΓòÉΓòÉ <hidden> Disable Sign-On Banner (/NOL) ΓòÉΓòÉΓòÉ
  3787.  
  3788. Syntax:  /NOL[OGO] 
  3789.  
  3790. This option disables the sign-on banner displayed when LINK386 starts. 
  3791.  
  3792.  
  3793. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Order Segments without NULLs (/NON) ΓòÉΓòÉΓòÉ
  3794.  
  3795. Syntax:  /NON[ULLSDOSSEG] 
  3796.  
  3797. This option arranges segments in a special order. The /NON option is equivalent 
  3798. to the Order Segments Option (/DO) except that /NON does NOT insert 16 null 
  3799. bytes at the beginning of the _TEXT segment (if this segment is defined). 
  3800.  
  3801. The /NON option overrides the /DO option when both are used. Therefore, you can 
  3802. use /NON to override the /DO comment record commonly found in standard 
  3803. libraries. 
  3804.  
  3805.  
  3806. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Disable Code-Segment Packing (/NOP) ΓòÉΓòÉΓòÉ
  3807.  
  3808. Syntax:  /NOP[ACKCODE] 
  3809.  
  3810. This option turns code segment packing off. By default, code segment packing is 
  3811. on. 
  3812.  
  3813. Related Topics 
  3814.  
  3815. Pack Contiguous Code (/PACKC) 
  3816.  
  3817.  
  3818. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Pack Contiguous Code (/PACKC) ΓòÉΓòÉΓòÉ
  3819.  
  3820. Syntax:  /PACKC[ODE]:number 
  3821.  
  3822. This option groups neighboring code segments. Neighboring code segments are 
  3823. assigned the same segment address, and offsets to each routine are adjusted 
  3824. upward as required. This option is on by default and is used only when you wish 
  3825. to override an environment variable that has turned code packing off. See 
  3826. LINK386 Environment Variable and Disable Code-Segment Packing (/NOP). 
  3827.  
  3828. The <number> field specifies the maximum size of a code segment grouped by 
  3829. /PACKC.  If you do not use the /PACKC option or if you omit <number>, maximum 
  3830. size defaults to 65,530. LINK386 stops adding segments to a group as soon as it 
  3831. cannot add another segment without exceeding <number>.  At this point, LINK386 
  3832. forms a new segment. See Entering Numeric Arguments 
  3833.  
  3834. Code packing generally produces slightly faster and more compact code. Use the 
  3835. /F option to provide the maximum opportunity for packing. 
  3836.  
  3837.  
  3838. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Pack Contiguous Data (/PACKD) ΓòÉΓòÉΓòÉ
  3839.  
  3840. Syntax:  /PACKD[ATA] [:number] 
  3841.  
  3842. This option groups neighboring data segments. It functions like the code 
  3843. packing option (/PACKC) except that it packs data segments. 
  3844.  
  3845. The <number> field specifies the maximum size of a data segment grouped by 
  3846. /PACKD; if you omit <number>, the maximum size defaults to 65,536.  LINK386 
  3847. stops adding segments to a group as soon as it cannot add another segment 
  3848. without exceeding <number>.  At this point, LINK386 forms a new group.  See 
  3849. Entering Numeric Arguments. 
  3850.  
  3851.  
  3852. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Pause during Linking (/PAU) ΓòÉΓòÉΓòÉ
  3853.  
  3854. Syntax:  /PAU[SE] 
  3855.  
  3856. This option makes LINK386 pause before writing the output file to disk. The 
  3857. pause allows you to swap disks. 
  3858.  
  3859. With this option, LINK386 displays the following message before it creates the 
  3860. output file: 
  3861.  
  3862. About to generate .EXE file
  3863. Change diskette in drive letter and press Enter
  3864.  
  3865. LINK386 writes the output file when you press Enter. 
  3866.  
  3867. Be sure not to remove a disk containing the map file or the temporary file. If 
  3868. the disk you need to swap contains either of these files, press CTRL+C to 
  3869. terminate the LINK386 session, rearrange your files, and link again. 
  3870.  
  3871.  
  3872. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Name Application Type (/PM) ΓòÉΓòÉΓòÉ
  3873.  
  3874. Syntax:  /PM[TYPE]:type 
  3875.  
  3876. This option specifies the type of application being generated. Using the /PM 
  3877. option is equivalent to including a NAME statement in the module definition 
  3878. file. 
  3879.  
  3880. A keyword in <type> is equivalent to a keyword in a NAME statement as shown in 
  3881. the following list: 
  3882.  
  3883. PM                  WINDOWAPI 
  3884. VIO                 WINDOWCOMPAT 
  3885. NOVIO               NOTWINDOWCOMPAT 
  3886.  
  3887.  
  3888. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Execute from DOS Command Line (/RU) ΓòÉΓòÉΓòÉ
  3889.  
  3890. Syntax:  /RU[NFROMVDM]: 
  3891.  
  3892. This option allows the program to be executed from a DOS command line, if 
  3893. possible. 
  3894.  
  3895. This option causes LINK386 to insert an alternate DOS stub into the program. 
  3896. The DOS stub is executed if a protect mode program is executed from a DOS 
  3897. command line. The default DOS stub simply prints an error message and returns 
  3898. to the DOS command line. The alternate DOS stub will attempt to start the 
  3899. program in protect mode. 
  3900.  
  3901.  
  3902. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Set Maximum Number of Segments (/SE) ΓòÉΓòÉΓòÉ
  3903.  
  3904. Syntax:  /SE[GMENTS]:number 
  3905.  
  3906. This option sets the number of logical segments a program can have. You can set 
  3907. <number> to any value in the range 1 to 3,072. See Entering Numeric Arguments. 
  3908.  
  3909. For each logical segment, LINK386 must allocate space to keep track of segment 
  3910. information. By using a relatively low segment limit as a default (128), 
  3911. LINK386 is able to link faster and allocate less storage space. 
  3912.  
  3913. When you set the segment limit higher than 128, LINK386 allocates more space 
  3914. for segment information. This option allows you to raise the segment limit for 
  3915. programs with a large number of segments. 
  3916.  
  3917. For programs with fewer than 128 segments, you can keep the storage 
  3918. requirements of LINK386 at the lowest level possible by setting the segment 
  3919. <number> field to reflect the actual number of segments in the program. If the 
  3920. number of segments allocated is too high for the amount of memory LINK386 has 
  3921. available to it, you see the error message segment limit too high. 
  3922.  
  3923. To specify a number of segments that fits in the amount of memory available, 
  3924. set the segment lower and relink. 
  3925.  
  3926.  
  3927. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Control Stack Size (/ST) ΓòÉΓòÉΓòÉ
  3928.  
  3929. Syntax:  /ST[ACK] :number 
  3930.  
  3931. This option controls the stack size (in bytes) of your program. You can specify 
  3932. any positive value for <number>. See Entering Numeric Arguments. 
  3933.  
  3934. If your program generates a stack-overflow message, you can increase the size 
  3935. of the stack. In contrast, if your program uses the stack very little, you may 
  3936. save some space by decreasing the stack size. 
  3937.  
  3938. Note:  You can also use the EXEHDR utility to change the stack size of an 
  3939. existing executable file. 
  3940.  
  3941. Related Topics 
  3942.  
  3943. STACKSIZE Statement 
  3944.  
  3945.  
  3946. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Warning of Fix-ups (/W) ΓòÉΓòÉΓòÉ
  3947.  
  3948. Syntax:  /W[ARNFIXUP] 
  3949.  
  3950. This option directs LINK386 to issue a warning for each segment-relative fix-up 
  3951. of location-type offset when the segment is contained within a group, but not 
  3952. at the beginning.  LINK386 includes the displacement of the segment from the 
  3953. group in determining the final value of the fix-up. 
  3954.  
  3955.  
  3956. ΓòÉΓòÉΓòÉ <hidden> LINK386 - /INF and /M Output Example ΓòÉΓòÉΓòÉ
  3957.  
  3958. The following is a sample of LINK386 output when /INF and /M options are 
  3959. specified: 
  3960.  
  3961.   **** PASS ONE ****
  3962.   TEST.OBJ(test.for)
  3963.   **** LIBRARY SEARCH ****
  3964.   LLIBFOR7.LIB(wr)
  3965.   LLIBFOR7.LIB(fmtout)
  3966.   LLIBFOR7.LIB(ldout)
  3967.   Γöé Γöé Γöé
  3968.   **** ASSIGN ADDRESSES ****
  3969.   1 segment "TEST_TEXT" length 122H bytes
  3970.   2 segment "_DATA" length 912H bytes
  3971.   3 segment "CONST" length 12H bytes
  3972.   Γöé Γöé Γöé
  3973.   **** PASS TWO ****
  3974.   TEST.OBJ(test.for)
  3975.   LLIBFOR7.LIB(wr)
  3976.   LLIBFOR7.LIB(fmtout)
  3977.   LLIBFOR7.LIB(ldout)
  3978.   Γöé Γöé Γöé
  3979.   **** WRITING EXECUTABLE ****
  3980.  
  3981.  
  3982. ΓòÉΓòÉΓòÉ <hidden> LINK386 - OS/2 Considerations ΓòÉΓòÉΓòÉ
  3983.  
  3984. In most respects, linking a program for OS/2* is similar to linking a program 
  3985. for DOS. The principal difference is that most programs created for DOS run as 
  3986. stand-alone applications, whereas programs for OS/2 generally call one or more 
  3987. dynamic-link libraries. See What Is a Dynamic-Link Library? and Advantages of 
  3988. Dynamic Linking. 
  3989.  
  3990. Import and Export Definitions 
  3991.  
  3992. Each dynamic-link library (.DLL file) defines export definitions that tell OS/2 
  3993. what functions the library has. Functions not exported can only be called from 
  3994. within the library. Each export definition specifies a function name. 
  3995.  
  3996. Conversely, each executable program (.EXE file) defines import definitions that 
  3997. tell OS/2 which dynamic-link functions the program needs and where they can be 
  3998. found. Otherwise, OS/2 would not know which dynamic-link libraries to load when 
  3999. the program is run. Each import definition specifies a function name and the 
  4000. .DLL file where the function resides. 
  4001.  
  4002. Methods of OS/2 Linking 
  4003.  
  4004. There are two methods of OS/2 Linking: 
  4005.  
  4006. o Linking without an Import Library 
  4007. o Linking with an Import Library 
  4008.  
  4009. Linking with an import library requires more steps but has certain advantages. 
  4010.  
  4011. Related Topics 
  4012.  
  4013. What Is a Dynamic-Link Library? 
  4014. Advantages of Dynamic Linking 
  4015. Why Use Import Libraries? 
  4016.  
  4017.  
  4018. ΓòÉΓòÉΓòÉ <hidden> LINK386 - What Is a Dynamic-Link Library? ΓòÉΓòÉΓòÉ
  4019.  
  4020. A dynamic-link library contains executable code for common functions, just as 
  4021. an ordinary library does. Yet code for functions in dynamic-link libraries is 
  4022. not copied into the executable (.EXE) file. Instead, the library itself is 
  4023. loaded into memory at run time, along with the .EXE file. 
  4024.  
  4025. Related Topics 
  4026.  
  4027. Advantages of Dynamic Linking 
  4028. Why Use Import Libraries? 
  4029.  
  4030.  
  4031. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Advantages of Dynamic Linking ΓòÉΓòÉΓòÉ
  4032.  
  4033. Dynamic-link libraries serve much the same purpose that standard libraries do, 
  4034. but they also have the following advantages: 
  4035.  
  4036. o Applications link more quickly. With dynamic linking, the executable code for 
  4037.   a dynamic-link function is not copied into the .EXE file of the application. 
  4038.   Instead, only an import definition is copied. 
  4039.  
  4040. o Applications require less disk space. With dynamic linking, several different 
  4041.   program applications can access the same dynamic-link function stored in one 
  4042.   place. Without dynamic linking, the code for the function would be repeated 
  4043.   in every .EXE file. 
  4044.  
  4045. o Libraries and applications are independent. Dynamic-link libraries can be 
  4046.   updated any number of times without relinking the applications that use them. 
  4047.   If you are a user of third-party libraries, this is particularly convenient. 
  4048.   You receive the updated .DLL file from the third-party developers, and you 
  4049.   only need to copy the new library onto your disk. At run time, your 
  4050.   applications automatically call the updated library functions. 
  4051.  
  4052. o Code and data segments can be shared. Code and data segments loaded from a 
  4053.   dynamic-link library can be shared. Without dynamic linking, such sharing is 
  4054.   not possible because each file has its own copy of all the code and data it 
  4055.   uses. By sharing segments with dynamic linking, you can use memory more 
  4056.   efficiently. 
  4057.  
  4058. Related Topics 
  4059.  
  4060. What Is a Dynamic-Link Library? 
  4061. Why Use Import Libraries? 
  4062.  
  4063.  
  4064. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Linking without an Import Library ΓòÉΓòÉΓòÉ
  4065.  
  4066. The figure below illustrates a simple case in which you create an application 
  4067. that uses a single dynamic-link library (.DLL) file. 
  4068.  
  4069. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  4070. Γöé .OBJ and Γöé Γöé.DEF fileΓöé  Γöé.DEF fileΓöé Γöé .OBJ and Γöé
  4071. Γöé.LIB filesΓöé Γöé(LIBRARY)Γöé  Γöé(imports)Γöé Γöé.LIB filesΓöé
  4072. Γöé          Γöé Γöé(exports)Γöé  Γöé         Γöé Γöé          Γöé
  4073. ΓööΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ ΓööΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÿ  ΓööΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÿ ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÿ
  4074.      ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ            ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  4075.                                     
  4076.          (1) LINK386              (2) LINK386
  4077.                                     
  4078.        ΓöîΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÉ             ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  4079.        Γöé.DLL fileΓöé             Γöé .EXE file   Γöé
  4080.        Γöé(library)Γöé             Γöé(application)Γöé
  4081.        ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ             ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  4082.  
  4083. As depicted above, linking occurs in two steps: 
  4084.  
  4085.  1. Object files (and standard libraries if any) are linked with a module 
  4086.     definition (.DEF) file to create a .DLL file. A .DEF file is used that 
  4087.     defines all functions exported by the .DLL file. 
  4088.  
  4089.  2. Object files (and standard libraries, if any) are linked with a .DEF file 
  4090.     to create an application (.EXE) file.  A different .DEF file is used for 
  4091.     this step; it defines all dynamic-link functions imported (used) by the 
  4092.     application. 
  4093.  
  4094.  
  4095. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Linking with an Import Library ΓòÉΓòÉΓòÉ
  4096.  
  4097. The figure below illustrates a simple case in which you create an application 
  4098. that uses a single dynamic-link library (.DLL) file. 
  4099.  
  4100. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  4101. Γöé .OBJ and Γöé Γöé.DEF fileΓöé  Γöé.LIB fileΓöé Γöé .OBJ and Γöé
  4102. Γöé.LIB filesΓöé Γöé(LIBRARY)Γöé  Γöé(imports)Γöé Γöé.LIB filesΓöé
  4103. Γöé          Γöé Γöé(exports)Γöé  Γöé         Γöé Γöé          Γöé
  4104. ΓööΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ ΓööΓöÇΓöÇΓö¼ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÿ  ΓööΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓö¼ΓöÇΓöÿ ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÿ
  4105.      ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÿ Γöé              ΓööΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  4106.                  Γöö(2) IMPLIBΓöÇΓöÿ     
  4107.       (1) LINK386              (3) LINK386
  4108.                                     
  4109.        ΓöîΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÉ             ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  4110.        Γöé.DLL fileΓöé             Γöé .EXE file   Γöé
  4111.        Γöé(library)Γöé             Γöé(application)Γöé
  4112.        ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ             ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  4113.  
  4114. As depicted above, linking occurs in three steps: 
  4115.  
  4116.  1. Object files (and dynamic-link libraries) are linked with a module 
  4117.     definition (.DEF) file to create a .DLL file. A .DEF file is used that 
  4118.     defines all functions exported by the .DLL file. 
  4119.  
  4120.  2. The IMPLIB program is used to generate an import library (.LIB) file. 
  4121.     IMPLIB takes as input the same module definition file used in the first 
  4122.     step. For each export definition in the .DEF file, IMPLIB generates a 
  4123.     corresponding import definition. (IMPLIB can also use the .DLL file 
  4124.     generated in step 1 if you use the _export keyword in C declarations to 
  4125.     export functions.) See IMPLIB, What Are Import Libraries?, and Why Use 
  4126.     Import Libraries?. 
  4127.  
  4128.  3. The .LIB file generated by IMPLIB is used as input to LINK386, which 
  4129.     creates an application (.EXE) file. This .LIB file provides LINK386 with 
  4130.     information about imported dynamic-link functions. 
  4131.  
  4132.  
  4133. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Module Definition Files Basics ΓòÉΓòÉΓòÉ
  4134.  
  4135. What Is a Module Definition File? 
  4136.  
  4137. A module definition file describes the names, attributes, exports, imports, and 
  4138. other characteristics of an application or library. You must use module 
  4139. definition files to create most applications for OS/2*. You must use module 
  4140. definition files to create all OS/2 dynamic-link libraries and device drivers. 
  4141.  
  4142. Module Statements 
  4143.  
  4144. A module definition file contains one or more  Module Statements.  These 
  4145. statements: 
  4146.  
  4147. o Define various attributes of the executable file 
  4148. o Define attributes of code and data segments 
  4149. o Identify functions that are imported or exported 
  4150.  
  4151.  
  4152. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Module Definition File Example ΓòÉΓòÉΓòÉ
  4153.  
  4154. The following module definition file gives module definitions for a 
  4155. dynamic-link library. It includes one source level comment and five statements. 
  4156.  
  4157.   ; Sample module-definition file
  4158.  
  4159.   LIBRARY
  4160.  
  4161.   DESCRIPTION
  4162.    'Sample .DEF file for a dynamic-link library'
  4163.  
  4164.   CODE      PRELOAD
  4165.  
  4166.   STACKSIZE 1024
  4167.  
  4168.   EXPORTS
  4169.    Init    @1
  4170.    Begin   @2
  4171.    Finish  @3
  4172.    Load    @4
  4173.    Print   @5
  4174.  
  4175.  
  4176. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Module Statement Rules ΓòÉΓòÉΓòÉ
  4177.  
  4178. o If you use a NAME, LIBRARY, VIRTUAL DEVICE, or PHYSICAL DEVICE statement, it 
  4179.   must precede all other statements in the module definition file. 
  4180.  
  4181. o You can include source level comments in the module definition file by 
  4182.   beginning a line with a semicolon (;). Such lines are ignored. 
  4183.  
  4184. o All module definition keywords (such as NAME, LIBRARY, and OLD) must be 
  4185.   entered in uppercase letters. 
  4186.  
  4187.  
  4188. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Module Statements ΓòÉΓòÉΓòÉ
  4189.  
  4190. LINK386 has the following module definition file statements: 
  4191.  
  4192. BASE 
  4193.      Base 
  4194. CODE 
  4195.      Gives default attributes for code segments 
  4196. DATA 
  4197.      Gives default attributes for data segments 
  4198. DESCRIPTION 
  4199.      Describes the module 
  4200. EXETYPE 
  4201.      Identifies operating system 
  4202. EXPORTS 
  4203.      Defines exported functions 
  4204. IMPORTS 
  4205.      Defines imported functions 
  4206. HEAPSIZE 
  4207.      Specifies local heap size 
  4208. LIBRARY 
  4209.      Names dynamic-link library 
  4210. NAME 
  4211.      Names application 
  4212. OLD 
  4213.      Preserves import information 
  4214. PHYSICAL DEVICE 
  4215.      Names physical device driver 
  4216. PROTMODE 
  4217.      Specifies DOS protected mode 
  4218. SEGMENTS 
  4219.      Gives attributes for specific segments 
  4220. STACKSIZE 
  4221.      Specifies local stack size 
  4222. STUB 
  4223.      Adds DOS executable file to module 
  4224. VIRTUAL DEVICE 
  4225.      Names virtual device driver 
  4226.  
  4227.  
  4228. ΓòÉΓòÉΓòÉ <hidden> LINK386 - BASE Statement ΓòÉΓòÉΓòÉ
  4229.  
  4230. Syntax: BASE=n 
  4231.  
  4232. Where n is a value rounded up to the nearest multiple of 64K Indicates that 
  4233. each object of the module has a preferred load address starting with object 1 
  4234. at this address, object 2 at the next available multiple of 64K, and so on. 
  4235. Internal relocation records are then applied using this addressing scheme. 
  4236.  
  4237. If the module's objects can be loaded beginning at this preferred address, then 
  4238. no load-time internal relocation records need be applied. 
  4239.  
  4240. If the module's objects cannot be loaded beginning at this preferred address, 
  4241. then the internal relocation records that have been retained in the file data 
  4242. will be applied. 
  4243.  
  4244. EXE files may specify a base address, but it must be 64K.  If it isn't, a 
  4245. warning will be issued and a base address of 64K will be used anyway. 
  4246.  
  4247.  
  4248. ΓòÉΓòÉΓòÉ <hidden> LINK386 - CODE Statement ΓòÉΓòÉΓòÉ
  4249.  
  4250. Syntax: CODE [attribute...] 
  4251.  
  4252. This statement defines the default attributes for code segments within the 
  4253. application or library. One or more attributes can appear following the CODE 
  4254. statement: 
  4255.  
  4256. PRELOAD or LOADONCALL 
  4257.           Sets when code segment is loaded 
  4258.  
  4259. EXECUTEONLY or EXECUTEREAD 
  4260.           Sets read/execute status 
  4261.  
  4262. IOPL or NOIOPL 
  4263.           Sets I/O privilege 
  4264.  
  4265. CONFORMING or NONCONFORMING 
  4266.           Determines 286 conformance 
  4267.  
  4268. Attribute Rules: 
  4269.  
  4270. o Only one attribute from each pair appears.  If you specify neither attribute 
  4271.   from a pair, LINK386 supplies the default, listed second in each pair above. 
  4272.  
  4273. o Attributes can appear in any order. 
  4274.  
  4275. Example 
  4276.  
  4277. The following example sets defaults for module code segments so they have I/O 
  4278. hardware privilege and are not loaded until accessed. 
  4279.  
  4280. CODE LOADONCALL IOPL
  4281.  
  4282.  
  4283. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Load Code Attributes ΓòÉΓòÉΓòÉ
  4284.  
  4285. These attributes determine when a code segment is loaded: 
  4286.  
  4287. PRELOAD 
  4288.      The segment is loaded automatically when the program starts. 
  4289.  
  4290. LOADONCALL 
  4291.      The segment is not loaded until accessed (default). 
  4292.  
  4293.  
  4294. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Read/Execute Code Attributes ΓòÉΓòÉΓòÉ
  4295.  
  4296. These attributes determine whether a code segment can be read as well as 
  4297. executed: 
  4298.  
  4299. EXECUTEONLY 
  4300.      The segment can only be executed. 
  4301.  
  4302. EXECUTEREAD 
  4303.      The segment can be both executed and read (default). 
  4304.  
  4305.  
  4306. ΓòÉΓòÉΓòÉ <hidden> LINK386 - I/O Privilege Code Attributes ΓòÉΓòÉΓòÉ
  4307.  
  4308. I/O privilege code attributes determine whether a segment has I/O privilege 
  4309. (that is, whether it can access the hardware directly): 
  4310.  
  4311. IOPL 
  4312.      The code segment has I/O privilege. 
  4313.  
  4314. NOIOPL 
  4315.      The code segment does not have I/O privilege (default). 
  4316.  
  4317.  
  4318. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Conforming Code Attributes ΓòÉΓòÉΓòÉ
  4319.  
  4320. These attributes specify whether a code segment is a 286 conforming segment: 
  4321.  
  4322. CONFORMING 
  4323.      The segment is conforming. 
  4324.  
  4325. NONCONFORMING 
  4326.      The segment is nonconforming (default). 
  4327.  
  4328. The concept of a conforming segment has to do with privilege level (the range 
  4329. of instructions that the process can execute) and is relevant only when you are 
  4330. writing device drivers and system level code. A conforming segment can be 
  4331. called from either Ring 2 or Ring 3, and the segment executes at the privilege 
  4332. level of the caller. 
  4333.  
  4334.  
  4335. ΓòÉΓòÉΓòÉ <hidden> LINK386 - DATA Statement ΓòÉΓòÉΓòÉ
  4336.  
  4337. Syntax: DATA [attribute...] 
  4338.  
  4339. This statement defines the default attributes for data segments within the 
  4340. application or library. One or more attributes can appear following the DATA 
  4341. statement: 
  4342.  
  4343. PRELOAD or LOADONCALL 
  4344.      Sets when data segment is loaded 
  4345.  
  4346. READONLY or READWRITE 
  4347.      Sets read/write access 
  4348.  
  4349. NONE, SINGLE, or MULTIPLE 
  4350.      Sets sharing attributes 
  4351.  
  4352. IOPL or NOIOPL 
  4353.      Sets I/O privilege 
  4354.  
  4355. SHARED or NONSHARED 
  4356.      Determines whether segment is shareable 
  4357.  
  4358. Attribute Rules 
  4359.  
  4360. o Only one attribute out of each group appears; if you specify none of the 
  4361.   attributes in a group, the last attribute listed above for that group is 
  4362.   generally the default. (The defaults for NONE/SINGLE/MULTIPLE and 
  4363.   SHARED/NONSHARED vary depending on whether you are describing a dynamic-link 
  4364.   library or application.) 
  4365.  
  4366. o Attributes can appear in any order. 
  4367.  
  4368. Example 
  4369.  
  4370. The following example defines the application data segment so that it is loaded 
  4371. only when it is accessed and cannot be shared by more than one copy of the 
  4372. program.  By default, the data segment can be read and written, the automatic 
  4373. data segment is copied for each instance of the module, and the data segment 
  4374. has no I/O privilege. 
  4375.  
  4376. DATA LOADONCALL NONSHARED
  4377.  
  4378.  
  4379. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Load Data Attributes ΓòÉΓòÉΓòÉ
  4380.  
  4381. These attributes determine when a data segment is loaded: 
  4382.  
  4383. PRELOAD 
  4384.      The segment is loaded automatically when the program starts. 
  4385.  
  4386. LOADONCALL 
  4387.      The segment is not loaded until accessed (default). 
  4388.  
  4389.  
  4390. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Read/Write Data Attributes ΓòÉΓòÉΓòÉ
  4391.  
  4392. These attributes determine the access rights to a data segment: 
  4393.  
  4394. READONLY 
  4395.      The segment can only be read. 
  4396.  
  4397. READWRITE 
  4398.      The segment can be both read and written to (default). 
  4399.  
  4400.  
  4401. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Sharing Data Attributes ΓòÉΓòÉΓòÉ
  4402.  
  4403. These attributes determine how the automatic data segment can be shared: 
  4404.  
  4405. NONE    No automatic data segment is created. 
  4406.  
  4407. SINGLE  A single automatic data segment is shared by all instances of the 
  4408.         module.  In this case, the module is said to have solo data.  This 
  4409.         keyword is the default for dynamic-link libraries. 
  4410.  
  4411. MULTIPLE The automatic data segment is copied for each instance of the module. 
  4412.         In this case, the module is said to have instance data.  This keyword 
  4413.         is the default for applications. 
  4414.  
  4415. The automatic data segment is the physical segment represented by the group 
  4416. name DGROUP.  This segment group makes up the physical segment that contains 
  4417. the local stack and heap of the application. 
  4418.  
  4419.  
  4420. ΓòÉΓòÉΓòÉ <hidden> LINK386 -I/O Privilege Data Attributes ΓòÉΓòÉΓòÉ
  4421.  
  4422. These attributes determine whether data segments have I/O privilege (that is, 
  4423. whether they can access the hardware directly): 
  4424.  
  4425. IOPL   The data segments have I/O privilege. 
  4426.  
  4427. NOIOPL The data segments do not have I/O privilege (default). 
  4428.  
  4429.  
  4430. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Shareable Data Attributes ΓòÉΓòÉΓòÉ
  4431.  
  4432. These attributes determine whether all instances of the program can share a 
  4433. READWRITE data segment: 
  4434.  
  4435. SHARED 
  4436.      One copy of the data segment is loaded and shared among all processes 
  4437.      accessing the module (default for dynamic-link libraries). 
  4438.  
  4439. NONSHARED 
  4440.      The segment cannot be shared, and must be loaded separately for each 
  4441.      process (default for applications). 
  4442.  
  4443. Under OS/2*, this field is ignored if READONLY is specified, since READONLY 
  4444. data segments are always shared. 
  4445.  
  4446.  
  4447. ΓòÉΓòÉΓòÉ <hidden> LINK386 - SEGMENTS Statement ΓòÉΓòÉΓòÉ
  4448.  
  4449. Syntax: 
  4450.  
  4451. SEGMENTS
  4452.          segmentdefinitions
  4453.  
  4454. This statement defines the attributes of one or more segments in the 
  4455. application or library on a segment-by-segment basis. The attributes specified 
  4456. by this statement override defaults set in CODE and DATA statements. 
  4457.  
  4458. The SEGMENTS keyword marks the beginning of the segment definitions. This 
  4459. keyword can be followed by one or more segment definitions, each on a separate 
  4460. line (limited by the number set by the LINK386 /SE option, or 128 if the option 
  4461. is not used). See Set Max Number Segments Option 
  4462.  
  4463. Segment-Definition Syntax 
  4464.  
  4465. ['] segmentname ['] [CLASS 'classname'] [attribute...] 
  4466.  
  4467. Each segment definition begins with <segmentname>, optionally enclosed in 
  4468. single quotation marks ('). The quotation marks are required if <segmentname> 
  4469. conflicts with a module definition keyword, such as CODE or DATA. 
  4470.  
  4471. The CLASS keyword specifies the class of the segment. Single quotation marks 
  4472. (') are required for <classname>. If you do not use the CLASS argument, LINK386 
  4473. assumes that the class is CODE. 
  4474.  
  4475. One or more attributes can follow.  The default attribute is listed last. 
  4476.  
  4477. PRELOAD or LOADONCALL 
  4478.      Determines when segment is loaded 
  4479.  
  4480. READONLY or READWRITE 
  4481.      Sets read/write access 
  4482.  
  4483. EXECUTEONLY or EXECUTEREAD 
  4484.      Sets read/execute status 
  4485.  
  4486. IOPL or NOIOPL 
  4487.      Sets I/O privilege 
  4488.  
  4489. CONFORMING or NONCONFORMING 
  4490.      Determines 286 conformance 
  4491.  
  4492. MIXED1632 
  4493.      Specify Mixed 16 and 32-Bit Segments 
  4494.  
  4495. ALIAS 
  4496.      Specify that segment is aliased 
  4497.  
  4498. SHARED or NONSHARED 
  4499.      Specify that segment is shared 
  4500.  
  4501. Attribute Rules 
  4502.  
  4503. o Only one attribute from each pair appears.  If you specify neither attribute 
  4504.   from a pair, LINK386 supplies the default (listed second in each pair above). 
  4505.  
  4506. o Attributes can appear in any order. 
  4507.  
  4508. Example 
  4509.  
  4510. SEGMENTS
  4511.   cseg1 CLASS 'mycode' IOPL
  4512.   cseg2 EXECUTEONLY PRELOAD CONFORMING
  4513.   dseg CLASS 'data' LOADONCALL READONLY
  4514.  
  4515. This example specifies segments named cseg1, cseg2, and dseg. The first segment 
  4516. is assigned class mycode and the second is assigned CODE by default. Each 
  4517. segment is given different attributes. 
  4518.  
  4519.  
  4520. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Load Segments Attributes ΓòÉΓòÉΓòÉ
  4521.  
  4522. These attributes determine when a segment is loaded: 
  4523.  
  4524. PRELOAD 
  4525.      The segment is loaded automatically when the program starts. 
  4526.  
  4527. LOADONCALL 
  4528.      The segment is not loaded until accessed (default). 
  4529.  
  4530.  
  4531. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Read/Write Segments Attributes ΓòÉΓòÉΓòÉ
  4532.  
  4533. These attributes determine the access rights to a data segment: 
  4534.  
  4535. READONLY 
  4536.      The segment can only be read. 
  4537.  
  4538. READWRITE 
  4539.      The segment can be both read and written to (default). 
  4540.  
  4541.  
  4542. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Read/Execute Segments Attributes ΓòÉΓòÉΓòÉ
  4543.  
  4544. These attributes determine whether a code segment can be read as well as 
  4545. executed: 
  4546.  
  4547. EXECUTEONLY 
  4548.      The segment can only be executed. 
  4549.  
  4550. EXECUTEREAD 
  4551.      The segment can be both executed and read (default). 
  4552.  
  4553.  
  4554. ΓòÉΓòÉΓòÉ <hidden> LINK386 - I/O Privilege Segments Attributes ΓòÉΓòÉΓòÉ
  4555.  
  4556. These attributes determine whether a segment has I/O privilege (that is, 
  4557. whether it can access the hardware directly): 
  4558.  
  4559. IOPL  The segment has I/O privilege. 
  4560.  
  4561. NOIOPL The segment does not have I/O privilege (default). 
  4562.  
  4563.  
  4564. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Conforming Segments Attributes ΓòÉΓòÉΓòÉ
  4565.  
  4566. These attributes specify whether a code segment is a 286 conforming segment: 
  4567.  
  4568. CONFORMING 
  4569.      The segment is conforming. 
  4570.  
  4571. NONCONFORMING 
  4572.      The segment is nonconforming (default). 
  4573.  
  4574. The concept of a conforming segment has to do with privilege level (the range 
  4575. of instructions that the process can execute). Conforming attributes are 
  4576. relevant only when you are writing device drivers and system-level code. A 
  4577. conforming segment can be called from either Ring 2 or Ring 3, and the segment 
  4578. executes at the privilege level of the caller. 
  4579.  
  4580.  
  4581. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Specify Mixed 16 and 32-Bit Segments ΓòÉΓòÉΓòÉ
  4582.  
  4583. Sometimes it is necessary to mix 16-bit code with 32-bit code. When you must 
  4584. create groups that allow such mixing, LINK386 requires that you declare the 
  4585. segments in that group as MIXED1632. 
  4586.  
  4587.  
  4588. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Specify that Segment is Aliased ΓòÉΓòÉΓòÉ
  4589.  
  4590. Segments flagged with the ALIAS keyword can be addressed using the 16-bit 
  4591. segmented method (_far16), or the 32-bit linear method.  The loader must 
  4592. prepare an additional segment selector for each segment designated with the 
  4593. ALIAS keyword.  This new segment selector allows for 16-bit addressing. 
  4594.  
  4595. Example: 
  4596.  
  4597. SEGMENTS _CODE  ALIAS
  4598.  
  4599. The statement above specifies that the segment _CODE can be called using 16-bit 
  4600. far calls and 32-bit near calls. 
  4601.  
  4602.  
  4603. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Specify that Segment is Shared ΓòÉΓòÉΓòÉ
  4604.  
  4605. These attributes determine if the segment can be shared by other processes. 
  4606.  
  4607. SHARED 
  4608.      One copy of the data segment is loaded and shared among all processes 
  4609.      accessing the module (default for dynamic-link libraries). 
  4610.  
  4611. NONSHARED 
  4612.      The segment cannot be shared, and must be loaded separately for each 
  4613.      process (default for applications). 
  4614.  
  4615.  
  4616. ΓòÉΓòÉΓòÉ <hidden> LINK386 - DESCRIPTION Statement ΓòÉΓòÉΓòÉ
  4617.  
  4618. Syntax: DESCRIPTION 'text' 
  4619.  
  4620. This statement inserts the specified text into the application or library. The 
  4621. DESCRIPTION statement is useful for embedding source control or copyright 
  4622. information into an application or library. 
  4623.  
  4624. The <text> field is a one line string enclosed in single quotation marks. 
  4625.  
  4626. Example 
  4627.  
  4628. The following example inserts the text Template Program into the application or 
  4629. library being defined. 
  4630.  
  4631. DESCRIPTION 'Template Program'
  4632.  
  4633.  
  4634. ΓòÉΓòÉΓòÉ <hidden> LINK386 - EXETYPE Statement ΓòÉΓòÉΓòÉ
  4635.  
  4636. Syntax: EXETYPE [OS2 | WINDOWS | UNKNOWN] 
  4637.  
  4638. This statement specifies under which operating system the application (or 
  4639. dynamic-link library) is to run. This statement is optional and provides an 
  4640. additional degree of protection against the program being run in an incorrect 
  4641. operating system. 
  4642.  
  4643. The EXETYPE keyword can be followed by a descriptor of the operating system: 
  4644.  
  4645. OS2             OS/2* applications and dynamic-link libraries (default) 
  4646. WINDOWS         Windows** applications 
  4647. UNKNOWN         Other applications 
  4648.  
  4649. The effect of EXETYPE is to set bits in the header that identify 
  4650. operating-system type.  Operating-system loaders can check these bits. 
  4651.  
  4652.  
  4653. ΓòÉΓòÉΓòÉ <hidden> LINK386 - EXPORTS Statement ΓòÉΓòÉΓòÉ
  4654.  
  4655. Syntax: 
  4656.  
  4657. EXPORTS
  4658.       exportdefinitions
  4659.  
  4660. This statement defines the names and attributes of the functions exported to 
  4661. other modules and of the functions that run with I/O privilege. 
  4662.  
  4663. Note:  The term export refers to the process of making a function available to 
  4664. other run-time modules.  By default, functions are hidden from other modules at 
  4665. run time. 
  4666.  
  4667. Normally, the EXPORTS statement is meaningful only for functions within 
  4668. dynamic-link libraries and for functions that execute with I/O privilege. 
  4669.  
  4670. The EXPORTS keyword marks the beginning of the export definitions. Each 
  4671. definition is entered on a separate line.  You need to give an export 
  4672. definition for each dynamic-link routine you want to make available to other 
  4673. modules. 
  4674.  
  4675. Export-Definition Syntax 
  4676.  
  4677. entryname [=internalname] [@ord[RESIDENTNAME]] [pwords] 
  4678.  
  4679. <entryname> 
  4680.      The function name as it is known to other modules. 
  4681.  
  4682. <internalname> 
  4683.      The actual name of the export function as it appears within the module 
  4684.      itself; by default, this name is the same as <entryname>. 
  4685.  
  4686. <ord> 
  4687.      The function's ordinal position within the module definition table. If 
  4688.      this field is used, the function's entry point can be invoked by name or 
  4689.      by ordinal. Use of ordinal positions is faster and may save space. 
  4690.  
  4691. RESIDENTNAME 
  4692.      Indicates that the function's name be kept resident in memory at all 
  4693.      times. This keyword is applicable only if <ord> is used. If <ord> is not 
  4694.      used, OS/2* automatically keeps the names of all exported functions 
  4695.      resident in memory by default. 
  4696.  
  4697. <pwords> 
  4698.      The total size of the function's parameters, as measured in words (bytes 
  4699.      divided by two). This field is required only if the function executes with 
  4700.      I/O privilege. When a function with I/O privilege is called, OS/2 consults 
  4701.      <pwords> to determine how many words to copy from the caller's stack to 
  4702.      the I/O-privileged function's stack. 
  4703.  
  4704. Example 
  4705.  
  4706. EXPORTS
  4707.   SampleRead = read2bin @8
  4708.   StringIn = str1       @4 RESIDENTNAME
  4709.   CharTest  6
  4710.  
  4711. This example defines three export functions: 
  4712.  
  4713. o SampleRead 
  4714. o StringIn 
  4715. o CharTest 
  4716.  
  4717. The first two functions can be accessed either by their exported names or by an 
  4718. ordinal number. Note that in the module's own source code, these functions are 
  4719. actually defined as read2bin and str1, respectively. The last function runs 
  4720. with I/O privilege and therefore is given with the total size of the parameters 
  4721. - six words. 
  4722.  
  4723.  
  4724. ΓòÉΓòÉΓòÉ <hidden> LINK386 - IMPORTS Statement ΓòÉΓòÉΓòÉ
  4725.  
  4726. Syntax: 
  4727.  
  4728. IMPORTS
  4729.   importdefinitions
  4730.  
  4731. This statement defines the names of the functions imported for the application 
  4732. or library. 
  4733.  
  4734. Note:  The term import refers to the process of declaring that a symbol is 
  4735. defined in another run-time module (a dynamic-link library). 
  4736.  
  4737. Typically, LINK386 uses an import library (created by the IMPLIB utility) to 
  4738. resolve external references to dynamic-link symbols. However, the IMPORTS 
  4739. statement provides an alternative for resolving these references within a 
  4740. module. 
  4741.  
  4742. The IMPORTS keyword marks the beginning of the import definitions. This keyword 
  4743. is followed by one or more import definitions, each on a separate line. The 
  4744. only limit on the number of import definitions is that the total amount of 
  4745. space required for their names must be less than 64K. Each import definition 
  4746. corresponds to a particular function. 
  4747.  
  4748. Import-Definition Syntax 
  4749.  
  4750. [internalname=]modulename.entry
  4751.  
  4752. <internalname> 
  4753.      The name that the importing module uses to call the function. Thus, 
  4754.      <internalname> appears in the source code of the importing module, 
  4755.      although the function can have a different name in the module where it is 
  4756.      defined. By default, internalname is the same as <entry>. 
  4757.  
  4758. <modulename> 
  4759.      The name of the application or library that contains the function. 
  4760.  
  4761. <entry> 
  4762.      The function to be imported; can be a name or an ordinal value. (Ordinal 
  4763.      values are set in an EXPORTS statement.) If an ordinal value is given, 
  4764.      then <internalname> is required. 
  4765.  
  4766. Note:  A given function has a name for each of three different contexts. The 
  4767. function has a name used by the exporting module (where it is defined), a name 
  4768. used as an entry point between modules, and a name as it is used by the 
  4769. importing module (where it is called). If neither module uses the optional 
  4770. <internalname> field, the function has the same name in all three contexts. If 
  4771. either of the modules uses the <internalname> field, the function may have more 
  4772. than one distinct name. 
  4773.  
  4774. Syntax: 
  4775.  
  4776. IMPORTS
  4777.   Sample.SampleRead
  4778.   SampleA.SampleWrite
  4779.   ReadChar = Read.1
  4780.  
  4781. This example defines three functions to be imported: 
  4782.  
  4783. o SampleRead 
  4784. o SampleWrite 
  4785. o A function that has been assigned an ordinal value of 1 
  4786.  
  4787. The functions are found in the modules Sample, SampleA, and Read, respectively. 
  4788. The function from the Read module is referred to as ReadChar in the importing 
  4789. module. The original name of the function, as it is defined in the Read module, 
  4790. may or may not be known. 
  4791.  
  4792.  
  4793. ΓòÉΓòÉΓòÉ <hidden> LINK386 - HEAPSIZE Statement ΓòÉΓòÉΓòÉ
  4794.  
  4795. Syntax: HEAPSIZE bytes | MAXVAL 
  4796.  
  4797. This statement defines the size of the application's local heap in bytes. This 
  4798. value affects the size of the automatic data segment. 
  4799.  
  4800. The field <bytes> contains any positive integer. You can enter <bytes> in 
  4801. decimal, octal, or hexadecimal radix. See Entering Numeric Arguments. 
  4802.  
  4803. Instead of entering a number for <bytes>, you can enter the keyword MAXVAL. 
  4804. This sets the heap size such that the default data segment DGROUP is exactly 
  4805. 64K. MAXVAL is useful in bound applications in which you want to force a 64K 
  4806. requirement for DGROUP. 
  4807.  
  4808. Example 
  4809.  
  4810. HEAPSIZE 4000
  4811.  
  4812. This example sets the local heap to 4,000 bytes. 
  4813.  
  4814.  
  4815. ΓòÉΓòÉΓòÉ <hidden> LINK386 - LIBRARY Statement ΓòÉΓòÉΓòÉ
  4816.  
  4817. Syntax: LIBRARY [libraryname] [initialization] [termination] 
  4818.  
  4819. This statement identifies the executable file as a dynamic-link library and 
  4820. optionally defines the name and library module initialization required. 
  4821.  
  4822. If <libraryname> is given, it becomes the name of the library as it is known by 
  4823. OS/2*. This name can be any valid file name. If <libraryname> is not given, the 
  4824. name of the executable file - with the extension removed - becomes the name of 
  4825. the library. 
  4826.  
  4827. If <initialization> is given, it defines the library initialization required 
  4828. and can be one of the values below. If omitted, <initialization> defaults to 
  4829. INITGLOBAL. 
  4830.  
  4831. INITGLOBAL 
  4832.      The library initialization routine is called only when the library module 
  4833.      is initially loaded into memory. 
  4834.  
  4835.      Using this keyword without a termination flag implies TERMGLOBAL for DLLs 
  4836.      with 32-bit entry points. 
  4837.  
  4838. INITINSTANCE 
  4839.      The library initialization routine is called each time a new process gains 
  4840.      access to the library. 
  4841.  
  4842.      Using this keyword without a termination flag implies TERMINSTANCE for 
  4843.      DLLs with 32-bit entry points. 
  4844.  
  4845. If <termination> is given, it defines the library termination required and can 
  4846. be one of the values below. If omitted, <initialization> defaults to 
  4847. TERMGLOBAL. The termination flag can only apply to DLLs with 32-bit entry 
  4848. points. 
  4849.  
  4850. TERMGLOBAL 
  4851.      The library termination routine is called only when the library module is 
  4852.      unloaded from memory. 
  4853.  
  4854.      Using this keyword without an initialization flag implies INITGLOBAL. 
  4855.  
  4856. TERMINSTANCE 
  4857.      The library termination routine is called each time a process relinquishes 
  4858.      access to the library. 
  4859.  
  4860.      Using this keyword without an initialization flag implies INITINSTANCE. 
  4861.  
  4862. If the LIBRARY statement is included in a module definition file, the NAME 
  4863. statement cannot appear. If no LIBRARY statement appears, the module definition 
  4864. file describes an application. 
  4865.  
  4866. The following example assigns the name calendar to the dynamic-link library and 
  4867. specifies that library initialization be performed each time a new process 
  4868. gains access. 
  4869.  
  4870.   LIBRARY calendar INITINSTANCE
  4871.  
  4872.  
  4873. ΓòÉΓòÉΓòÉ <hidden> LINK386 - NAME Statement ΓòÉΓòÉΓòÉ
  4874.  
  4875. Syntax: NAME [appname][apptype] 
  4876.  
  4877. This statement identifies the executable file as an application and optionally 
  4878. defines the name and type. 
  4879.  
  4880. If <appname> is given, it becomes the name of the application as it is known by 
  4881. OS/2*. This name can be any valid file name. If <appname> is not given, the 
  4882. name of the executable file - with the extension removed - becomes the name of 
  4883. the application. 
  4884.  
  4885. If <apptype> is given, it defines the type of application: 
  4886.  
  4887. WINDOWAPI 
  4888.      Presentation Manager application. The application uses the API provided by 
  4889.      the Presentation Manager and must be executed in the Presentation Manager 
  4890.      environment. 
  4891.  
  4892. WINDOWCOMPAT 
  4893.      Application compatible with Presentation Manager. The application can run 
  4894.      inside the Presentation Manager, or it can run in a separate screen group. 
  4895.      An application can be of this type if it uses the proper subset of OS/2 
  4896.      video, keyboard, and mouse functions supported in the Presentation Manager 
  4897.      applications. 
  4898.  
  4899. NOTWINDOWCOMPAT 
  4900.      Application that is not compatible with the Presentation Manager and must 
  4901.      operate in a separate screen group from the Presentation Manager. 
  4902.  
  4903. If the NAME statement appears, the LIBRARY, VIRTUAL DEVICE and PHYSICAL DEVICE 
  4904. statements cannot appear. If none of these statements appear, the module 
  4905. definition file is assumed to describe an application. 
  4906.  
  4907. Example 
  4908.  
  4909. The following example assigns the name calendar to the application being 
  4910. defined. 
  4911.  
  4912. NAME calendar WINDOWCOMPAT
  4913.  
  4914. This application is Presentation Manager-compatible. 
  4915.  
  4916.  
  4917. ΓòÉΓòÉΓòÉ <hidden> LINK386 - OLD Statement ΓòÉΓòÉΓòÉ
  4918.  
  4919. Syntax: OLD 'filename' 
  4920.  
  4921. This statement directs LINK386 to search another dynamic-link module for export 
  4922. ordinals. Exported names in the current module that match exported names in the 
  4923. OLD module are assigned ordinal values from that module unless one of the 
  4924. following conditions is in effect: 
  4925.  
  4926. o The name in the OLD module has no ordinal value assigned. 
  4927.  
  4928. o An ordinal value is explicitly assigned in the current module. 
  4929.  
  4930. This statement is useful for preserving export ordinal values throughout 
  4931. successive versions of a dynamic-link module. The OLD statement has no effect 
  4932. on application modules. 
  4933.  
  4934. Related Topics 
  4935.  
  4936. EXPORTS Statement 
  4937. IMPORTS Statement 
  4938.  
  4939.  
  4940. ΓòÉΓòÉΓòÉ <hidden> LINK386 - PHYSICAL DEVICE statement ΓòÉΓòÉΓòÉ
  4941.  
  4942. Syntax: PHYSICAL DEVICE [drivername] 
  4943.  
  4944. This statement identifies the executable file as a physical device driver. 
  4945.  
  4946. If <drivername> is given, it becomes the name of the driver as it is known by 
  4947. OS/2*. This name can be any valid file name. If <drivername> is not given, the 
  4948. name of the executable file - with the extension removed - becomes the name of 
  4949. the driver. 
  4950.  
  4951.  
  4952. ΓòÉΓòÉΓòÉ <hidden> LINK386 - PROTMODE Statement ΓòÉΓòÉΓòÉ
  4953.  
  4954. Syntax: PROTMODE 
  4955.  
  4956. This statement specifies that the module runs only in protected mode and not in 
  4957. Windows** or dual mode. This statement is always optional and permits a 
  4958. protected mode only application to omit some information from the executable 
  4959. file header. 
  4960.  
  4961. If this statement is not included in the module definition file, LINK386 
  4962. assumes the application can be run in either real or protected mode. 
  4963.  
  4964.  
  4965. ΓòÉΓòÉΓòÉ <hidden> LINK386 - STACKSIZE Statement ΓòÉΓòÉΓòÉ
  4966.  
  4967. Syntax: STACKSIZE number 
  4968.  
  4969. This statement performs the same function as the LINK386 /ST option; if both 
  4970. are used, the STACKSIZE statement overrides the /ST option.  See Control Stack 
  4971. Size Option (/ST). 
  4972.  
  4973. The field <number> contains a positive integer.  You can specify <number> in 
  4974. decimal, octal, or hexadecimal radix. See Entering Numeric Arguments. 
  4975.  
  4976. Example 
  4977.  
  4978. STACKSIZE 4096
  4979.  
  4980. This example allocates 4,096 bytes of local-stack space. 
  4981.  
  4982.  
  4983. ΓòÉΓòÉΓòÉ <hidden> LINK386 - STUB Statement ΓòÉΓòÉΓòÉ
  4984.  
  4985. Syntax: STUB 'filename' 
  4986.  
  4987. This statement adds a DOS executable file to the beginning of the application 
  4988. or library being created. The stub is invoked whenever the module is executed 
  4989. under DOS. Typically, the stub displays a message and terminates execution. By 
  4990. default, LINK386 adds its own standard stub for this purpose. 
  4991.  
  4992. The field <filename> specifies the DOS executable file to be added. LINK386 
  4993. looks for <filename> in the current directory and in the directories specified 
  4994. by the PATH environment variable. 
  4995.  
  4996. Example 
  4997.  
  4998. STUB 'STOPIT.EXE'
  4999.  
  5000. This example appends the DOS executable file STOPIT.EXE to the beginning of the 
  5001. module. STOPIT.EXE is executed when the module is run under DOS. 
  5002.  
  5003.  
  5004. ΓòÉΓòÉΓòÉ <hidden> LINK386 - VIRTUAL DEVICE Statement ΓòÉΓòÉΓòÉ
  5005.  
  5006. Syntax: VIRTUAL DEVICE [drivername] 
  5007.  
  5008. This statement identifies the executable file as a virtual device driver. 
  5009.  
  5010. If <drivername> is given, it becomes the name of the driver as it is known by 
  5011. OS/2*. This name can be any valid file name.  If <drivername> is not given, the 
  5012. name of the executable file - with the extension removed - becomes the name of 
  5013. the driver. 
  5014.  
  5015.  
  5016. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Error Messages ΓòÉΓòÉΓòÉ
  5017.  
  5018. Format of Error Messages 
  5019.  
  5020. There are three types of LINK386 error messages: 
  5021.  
  5022. o Fatal errors cause LINK386 to stop running. They have the following format: 
  5023.   location : fatal error L1xxx : message text 
  5024.  
  5025. o Nonfatal errors indicate problems in the executable file. LINK386 produces 
  5026.   the executable file and sets the error bit in the header for the OS/2* 
  5027.   environment. This means that the executable file cannot be run from OS/2. 
  5028.   Nonfatal error messages have the following format: 
  5029.  
  5030.    location : error L2xxx : message text 
  5031.  
  5032. o Warnings indicate possible problems in the executable file. LINK386 produces 
  5033.   the executable file, but does not set the error bit in the header for the 
  5034.   OS/2 environment. Warnings have the following format: 
  5035.  
  5036.    location : warning L4xxx : message text 
  5037.  
  5038. In all these messages, location is the input file associated with the error, or 
  5039. it is LINK386 itself if there is no input file.  The message text is the actual 
  5040. text message that LINK386 generates.  When the input file is a module 
  5041. definition file, the line number is included, as in this example: 
  5042.  
  5043. myfile.def(3): fatal error L1030: missing internal name
  5044.  
  5045. When the input file is an object file or library file and has a module name, 
  5046. the module name is enclosed in parentheses, as in the following examples: 
  5047.  
  5048. SLIBCE.LIB(_file)
  5049. MAIN.OBJ(main.c)
  5050. TEXT.OBJ
  5051.  
  5052. Error Message Descriptions 
  5053.  
  5054. LINK386 Fatal Error Messages (part 1) 1001 - 1049 
  5055. LINK386 Fatal Error Messages (part 2) 1050 - 1098 
  5056. LINK386 Fatal Error Messages (part 3) 1100 - 1130 
  5057. LINK386 Nonfatal Error Messages 2000 - 2063 
  5058. LINK386 Warning Error Messages 4000 - 4094 
  5059.  
  5060.  
  5061. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Fatal Error Messages (Part 1) 1001 - 1049 ΓòÉΓòÉΓòÉ
  5062.  
  5063. L1001     option : option name ambiguous 
  5064.           Explanation: A unique option name does not appear after the option 
  5065.           indicator (/). 
  5066.           Example: The command 
  5067.  
  5068.                         LINK386 /N main;
  5069.           produces this error because LINK386 cannot tell which of the seven 
  5070.           options beginning with the letter N is intended. 
  5071.           Action: Retry using the correct minimum option abbreviation. 
  5072.  
  5073. L1004     option : invalid numeric value 
  5074.           Explanation: An incorrect value appeared for one of the LINK386 
  5075.           options. This might be because a character string has been entered 
  5076.           for an option that requires a numeric value or because the proper 
  5077.           numeric prefix (for example, 0x for hexidecimal) was not used for a 
  5078.           numeric value. 
  5079.           Action: Retry with a numeric value. 
  5080.  
  5081. L1006     option : stack size exceeds 65,535 bytes 
  5082.           Explanation: The size you specified for the stack in the /STACK 
  5083.           option of the link command is more than 65,535 bytes. 
  5084.           Action: Retry with a stack size of less than or equal to 65,535 
  5085.           bytes. 
  5086.  
  5087. L1008     option : segment limit set too high 
  5088.           Explanation: The specified limit on the /SEGMENTS option is greater 
  5089.           than 16 375. 
  5090.           Action: Retry with a limit in the range 1 to 16 375. 
  5091.  
  5092. L1020     no object modules specified 
  5093.           Explanation: You did not specify any object file names to the linker. 
  5094.           Action: Restart LINK386, including at least one object file name. 
  5095.  
  5096. L1021     cannot nest response files 
  5097.           Explanation: A response file has been named within another response 
  5098.           file. You have used @filename within the response file. The @ symbol 
  5099.           is reserved by LINK386 to signify a response file name. 
  5100.           Action: Edit the response file to remove the nested response file. 
  5101.  
  5102. L1022     response line too long 
  5103.           Explanation: A line in an automatic response file is longer than 256 
  5104.           characters. 
  5105.           Action: Edit the line to make it shorter than 256 characters. 
  5106.           Response files can contain more than one line. 
  5107.  
  5108. L1023     terminated by user 
  5109.           Explanation: You pressed Ctrl+C or Ctrl+Break. 
  5110.           Action: Your action has terminated LINK386. Restart if necessary. 
  5111.  
  5112. L1030     missing internal name 
  5113.           Explanation: You have not specified an internal name for an import in 
  5114.           the module definition file. 
  5115.           Action: Edit the module definition file, giving an internal name so 
  5116.           that LINK386 can identify references to the import. 
  5117.  
  5118. L1031     module description redefined 
  5119.           Explanation: You have used the DESCRIPTION keyword for a module in 
  5120.           the module definition file more than once. 
  5121.           Action: Edit the module definition file, deleting the extra 
  5122.           descriptions. 
  5123.  
  5124. L1032     module name redefined 
  5125.           Explanation: You have defined a module name more than once with the 
  5126.           NAME or LIBRARY keyword in the module definition file. 
  5127.           Action: Edit the module definition file, checking the module name 
  5128.           definitions. 
  5129.  
  5130. L1033     input line too long; number characters allowed 
  5131.           Explanation: The input line contains more than number characters. 
  5132.           Action: Retry the command with fewer characters on the input line. 
  5133.  
  5134. L1040     too many exported entries 
  5135.           Explanation: You have tried to export more than 65535 names. 
  5136.           Action: Retry with fewer names, creating an additional executable 
  5137.           module if necessary. 
  5138.  
  5139. L1041     resident-name table overflow 
  5140.           Explanation: The total length of all your resident-names, together 
  5141.           with an overhead of 3 bytes for each name, is greater than 65,534. 
  5142.           Action: Reduce the number or the length of your resident names. 
  5143.  
  5144. L1042     nonresident-name table overflow 
  5145.           Explanation: The total length of all your nonresident-names, together 
  5146.           with an overhead of 3 bytes for each name, is greater than 65,534. 
  5147.           Action: Reduce the number or the length of your nonresident-names. 
  5148.  
  5149. L1043     relocation table overflow 
  5150.           Explanation: There are more than 65,535 load-time relocations for a 
  5151.           single segment. 
  5152.           Action: Reduce the number of relocations in the source files and 
  5153.           recompile or reassemble them. Interframe references generate 
  5154.           load-time relocations. 
  5155.  
  5156. L1044     imported-name table overflow 
  5157.           Explanation: The total length of all your imported-names, together 
  5158.           with an overhead of 1 byte for each name, is greater than 65,535 
  5159.           bytes. 
  5160.           Action: Reduce the number or the length of your imported-names. 
  5161.  
  5162. L1045     too many TYPDEF records 
  5163.           Explanation: An object module contains more than 255 TYPDEF records. 
  5164.           These records describe communal variables. This error can only appear 
  5165.           with programs produced by compilers that support communal variables. 
  5166.           Action: Reduce the number of TYPDEF records, breaking the module into 
  5167.           smaller parts, if necessary. 
  5168.  
  5169. L1046     too many external symbols in one module 
  5170.           Explanation: An object module specifies more than the limit of 1023 
  5171.           external symbols. 
  5172.           Action: Reduce the number of external symbols, breaking the module 
  5173.           into smaller parts, if necessary. 
  5174.  
  5175. L1047     too many group, segment, and class names in one module 
  5176.           Explanation: The program module contains too many group, segment, and 
  5177.           class names. 
  5178.           Action: Reduce the number of groups, segments, or classes, and 
  5179.           re-create the object files. 
  5180.  
  5181. L1048     too many segments in one module 
  5182.           Explanation: An object module has more than 255 segments. 
  5183.           Action: Reduce the number of segments, splitting the module or 
  5184.           combining some segments. 
  5185.  
  5186. L1049     too many segments 
  5187.           Explanation: The program has more than the maximum number of 
  5188.           segments. The /SEGMENTS option specifies the maximum allowed number; 
  5189.           the maximum is 16375. 
  5190.           Action: Restart LINK386 using the /SEGMENTS option with an 
  5191.           appropriate number of segments. 
  5192.  
  5193.  
  5194. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Fatal Error Messages (Part 2) 1050  - 1098 ΓòÉΓòÉΓòÉ
  5195.  
  5196. L1050     too many groups in one module 
  5197.           Explanation: LINK386 found more than 32 group definitions (GRPDEF) in 
  5198.           a single module. 
  5199.           Action: Reduce the number of group definitions by splitting the 
  5200.           module, by eliminating one or more group definitions, or combining 
  5201.           group definitions. 
  5202.  
  5203. L1051     too many groups 
  5204.           Explanation: The program defines more than 32 groups in addition to 
  5205.           DGROUP. 
  5206.           Action: Reduce the number of group definitions by splitting the 
  5207.           module, by eliminating one or more group definitions, or combining 
  5208.           group definitions. 
  5209.  
  5210. L1052     too many libraries 
  5211.           Explanation: You tried to link with more than 32 libraries. 
  5212.           Action: Combine libraries, or use modules that require fewer 
  5213.           libraries. 
  5214.  
  5215. L1053     out of memory for symbol table 
  5216.           Explanation: The program has more symbolic information, such as 
  5217.           public, external, segment, group, class, and file names, than the 
  5218.           amount that could fit in available real memory. Maximum is 65,535 
  5219.           bytes. 
  5220.           Action: Combine modules or segments and recreate the object files. 
  5221.           Eliminate as many public symbols as possible or use shorter names. 
  5222.  
  5223. L1054     requested segment limit too high 
  5224.           Explanation: There is not enough memory to allocate the necessary 
  5225.           tables for the amount of segments requested. 
  5226.           Action: Reduce the number of segments by combining or creating 
  5227.           additional executable modules. 
  5228.  
  5229. L1057     data record too large 
  5230.           Explanation: A LEDATA record (in an object module) contained more 
  5231.           than 1024 bytes of data. This is a translator (compiler or assembler) 
  5232.           error. 
  5233.           Action: Note which translator (compiler or assembler) produced the 
  5234.           incorrect object module and the circumstances, and contact your 
  5235.           supplier. 
  5236.  
  5237. L1060     program exceeds number bytes 
  5238.           Explanation: There is not enough memory to process all segments. 
  5239.           Action: Reduce the number of segments by combining or creating 
  5240.           additional executable modules. 
  5241.  
  5242. L1063     out of memory for debugging information 
  5243.           Explanation: LINK386 was given too many object files with debug 
  5244.           information, and ran out of space to store them. 
  5245.           Action: Reduce the number of object files that have debug 
  5246.           information. 
  5247.  
  5248. L1064     out of memory - name heap exhausted 
  5249.           Explanation: The linker ran out of heap space; name = near or far. 
  5250.           Action: Reduce the number of background processes or install more 
  5251.           memory. 
  5252.  
  5253. L1070     name: segment size exceeds 64K 
  5254.           Explanation: A single segment contains more than 64K of code or data. 
  5255.           This could be because you attempted to combine identically named 
  5256.           segments. 
  5257.           Action: Try compiling (or assembling) and linking using a larger 
  5258.           memory model or breaking up the named segment. 
  5259.  
  5260. L1071     segment _TEXT larger than 65,520 bytes 
  5261.           Explanation: This error is likely to occur only in small-model C 
  5262.           programs, but it can occur when any program with a segment named 
  5263.           _TEXT is linked using the /DOSSEG option of the LINK386 command. 
  5264.           Small-model C programs must reserve code addresses 0 and 1; the 
  5265.           reserve is increased to 16 for alignment purposes. 
  5266.           Action: Make the program source code smaller, or change to a larger 
  5267.           memory model. 
  5268.  
  5269. L1072     common area longer than 65,536 bytes 
  5270.           Explanation: The program has more than 64K of communal variables. 
  5271.           This error occurs only with programs produced by compilers that 
  5272.           support communal variables. 
  5273.           Action: Rewrite your program using fewer or smaller communal 
  5274.           variables. 
  5275.  
  5276. L1073     file-segment limit exceeded 
  5277.           Explanation: There are more than 255 physical or file segments. 
  5278.           Action: Reduce the number of physical or file segments. You could use 
  5279.           the Pack Contiguous Data (/PACKD) option for combining data segments 
  5280.           or the Pack Contiguous Code (/PACKC) option for combining code 
  5281.           segments. 
  5282.  
  5283. L1074     name: group larger than 64K 
  5284.           Explanation: A group contains segments that total more than 65,536 
  5285.           bytes. 
  5286.           Action: Reduce the number or size of segments or remove segments from 
  5287.           the group. 
  5288.  
  5289. L1075     entry table larger than 65,535 bytes 
  5290.           Explanation: You have exceeded a linker table size limit because of 
  5291.           an excessive number of entry names. 
  5292.           Action: Reduce the number of names in the modules that you are 
  5293.           linking or create additional executable modules. 
  5294.  
  5295. L1076     name: segment size exceeds numberM 
  5296.           Explanation: The named segment is larger than the specified size. 
  5297.           Action: Break the segment into smaller segments and try again. 
  5298.  
  5299. L1077     common area longer than 4G-1 bytes 
  5300.           Explanation: The space for the C languages common area is too big. 
  5301.           Action: If the load module is an .EXE, consider putting some routines 
  5302.           in .DLL; otherwise, link without debugging information or create 
  5303.           additional executable modules. 
  5304.  
  5305. L1080     cannot open list file 
  5306.           Explanation: The disk or a directory is full, or an invalid file name 
  5307.           was specified. 
  5308.           Action: Check that the file name specified is correct. Delete or move 
  5309.           files to make space and restart LINK386. 
  5310.  
  5311. L1081     out of space for run file 
  5312.           Explanation: The disk on which the .EXE file is being written is 
  5313.           full. 
  5314.           Action: Delete or move files to make space and restart LINK386. 
  5315.  
  5316. L1082     name: stub file not found 
  5317.           Explanation: The stub file specified in the module definition file 
  5318.           could not be found. 
  5319.           Action: Check that the correct path to the stub file has been 
  5320.           specified. 
  5321.  
  5322. L1083     cannot open run file - reason 
  5323.           Explanation: The run file could not be opened for the stated reason. 
  5324.           Action: Correct the problem and restart LINK386. 
  5325.  
  5326. L1084     cannot create temporary file 
  5327.           Explanation: The disk or a directory is full. 
  5328.           Action: Delete or move files to make space and restart LINK386. 
  5329.  
  5330. L1085     cannot open temporary file - reason 
  5331.           Explanation: The run file could not be opened for the stated reason. 
  5332.           Action: Correct the problem and restart LINK386. 
  5333.  
  5334. L1086     scratch file missing 
  5335.           Explanation: LINK386 was unable to open the temporary linker output 
  5336.           file. 
  5337.           Action: Note the conditions when the error occurs and contact your 
  5338.           supplier. 
  5339.  
  5340. L1087     unexpected end-of-file on scratch file 
  5341.           Explanation: The disk with the temporary linker output file has been 
  5342.           removed or is corrupted. 
  5343.           Action: Replace the disk containing the library and restart LINK386. 
  5344.  
  5345. L1088     out of space for list file 
  5346.           Explanation: The disk on which the listing file is being written is 
  5347.           full. 
  5348.           Action: Delete or move files to make space and restart LINK386. 
  5349.  
  5350. L1089     filename: cannot open response file 
  5351.           Explanation: LINK386 cannot find the specified response file. This 
  5352.           usually indicates a typing error. 
  5353.           Action: Include the drive specifier or path, or both, for the 
  5354.           response file. 
  5355.  
  5356. L1091     unexpected end-of-file on library 
  5357.           Explanation: The disk containing the library has probably been 
  5358.           removed or is corrupted. 
  5359.           Action: Replace the disk containing the library and restart LINK386. 
  5360.  
  5361. L1092     cannot open module definition file 
  5362.           Explanation: The specified module definition file cannot be opened, 
  5363.           or an invalid file name was specified. 
  5364.           Action: Check that the specified file name is correct. Include the 
  5365.           drive specifier or path, or both, for the module definition file. 
  5366.  
  5367. L1093     name: object not found 
  5368.           Explanation: LINK386 could not open the object module you specified. 
  5369.           Action: Specify full path name or directory in which object module 
  5370.           resides. 
  5371.  
  5372. L1096     unexpected end-of-file 
  5373.           Explanation: LINK386 encountered an end-of-file character while 
  5374.           reading an input file AND expected more information. 
  5375.           Action: Check input files for errors and relink. 
  5376.  
  5377. L1097     I/O error - string 
  5378.           Explanation: The linker encountered the I/O error shown while reading 
  5379.           from a file. 
  5380.           Action: Make sure the file is not corrupted or on a bad disk sector 
  5381.           and relink. 
  5382.  
  5383. L1098     cannot open include file filename - reason 
  5384.           Explanation: LINK386 could not open the include file for the stated 
  5385.           reason. 
  5386.           Action: Correct the problem and restart LINK386. 
  5387.  
  5388.  
  5389. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Fatal Error Messages (Part 3) 1100  - 1130 ΓòÉΓòÉΓòÉ
  5390.  
  5391. L1100     stub .EXE file invalid 
  5392.           Explanation: The stub file specified in the module definition file is 
  5393.           not a valid .EXE file. 
  5394.           Action: Ensure that the stub file is an executable file. 
  5395.  
  5396. L1101     invalid object module 
  5397.           Explanation: One of the object modules was incorrectly formed during 
  5398.           compilation or assembly. 
  5399.           Action: Recompile or reassemble your source code. If the error 
  5400.           persists, contact your supplier. 
  5401.  
  5402. L1102     unexpected end-of-file 
  5403.           Explanation: An invalid format for a library was found. 
  5404.           Action: Restore the library file from your backup disk and restart 
  5405.           LINK386. If this does not work, rebuild your library or contact your 
  5406.           supplier. 
  5407.  
  5408. L1103     name: attempt to access data outside segment bounds 
  5409.           Explanation: A data record in an object module specified data 
  5410.           extending beyond the end of a segment. This is a translator error. 
  5411.           Action: Note which translator (compiler or assembler) produced the 
  5412.           incorrect object module and the circumstances, and contact your 
  5413.           supplier. 
  5414.  
  5415. L1104     filename: not valid library 
  5416.           Explanation: The specified file is not a valid library file. This 
  5417.           error causes LINK386 to stop running. 
  5418.           Action: Ensure that the named file is a valid library file and 
  5419.           restart LINK386. If this does not work, rebuild your library or 
  5420.           contact your supplier. 
  5421.  
  5422. L1105     invalid object due to aborted incremental compile 
  5423.           Explanation: An object file from an aborted compile is trying to be 
  5424.           linked. 
  5425.           Action: Recompile the source that produced the bad compile and then 
  5426.           relink. 
  5427.  
  5428. L1106     unknown COMDAT allocation type for name; record ignored 
  5429.           Explanation: The COMDAT (record in .OBJ) allocation type for the 
  5430.           named COMDAT was not valid. 
  5431.           Action: Recompile or reassemble .OBJ and try again. If that does not 
  5432.           work, contact your supplier. 
  5433.  
  5434. L1107     unknown COMDAT selection type for name; record ignored 
  5435.           Explanation: The COMDAT (record in .OBJ) selection type for the named 
  5436.           COMDAT is not valid. 
  5437.           Action: Recompile or reassemble .OBJ and try again. If that does not 
  5438.           work, contact your supplier. 
  5439.  
  5440. L1108     invalid format of debugging information 
  5441.           Explanation: An error was detected in a segment that contains debug 
  5442.           information. 
  5443.           Action: Recompile or reassemble and try again. If that does not work, 
  5444.           try relinking without using the /DE or /CO options. 
  5445.  
  5446. L1113     unresolved COMDEF; internal error 
  5447.           Explanation: LINK386 encountered a COMDEF (record in .OBJ) in pass 2 
  5448.           that was not defined in pass 1. 
  5449.           Action: Recompile or reassemble and try again. If that does not work, 
  5450.           contact your supplier. 
  5451.  
  5452. L1114     unresolved COMDAT name: internal error 
  5453.           Explanation: LINK386 found specified COMDAT in pass 2 that does not 
  5454.           correspond to COMDATs found in pass 1. 
  5455.           Action: Recompile or reassemble and try again. If that does not work, 
  5456.           contact your supplier. 
  5457.  
  5458. L1117     unallocated COMDAT name; internal error 
  5459.           Explanation: The linker encountered COMDAT in pass 2 for which space 
  5460.           was not allocated during pass 1. 
  5461.           Action: Recompile or reassemble and try again. If that does not work, 
  5462.           contact your supplier. 
  5463.  
  5464. L1121     name: group larger than 4G-1 bytes 
  5465.           Explanation: The group indicated is too large. 
  5466.           Action: Recompile or reassemble and try again. Remove segments from 
  5467.           the group or create additional executables if necessary. 
  5468.  
  5469. L1123     name: segment defined both 16- and 32-bit 
  5470.           Explanation: The segment named was defined as both 16-bit and 32-bit. 
  5471.           Action: Create two segments (one for 16-bit, one for 32-bit), or make 
  5472.           sure the segment is defined one way and relink. 
  5473.  
  5474. L1126     conflicting IOPL-parameter-words value 
  5475.           Explanation: The IOPL parameter words in the .DEF file does not 
  5476.           exactly match those in the corresponding EXPDEF object record. 
  5477.           Action: Make sure .DEF file coincides with that defined in .OBJ. 
  5478.           Relink. 
  5479.  
  5480. L1128     too many nested include files in module-definition file 
  5481.           Explanation: The .DEF file exceeded a nesting level. 
  5482.           Action: Combine some nestings into one .DEF file and try again. 
  5483.  
  5484. L1129     missing or bad include file name 
  5485.           Explanation: LINK386 could not find a file included by .DEF file. 
  5486.           Action: Make sure the file exists and can be located and that any 
  5487.           path is specified correctly. Try again. 
  5488.  
  5489. L1130     internal fix-up applied to undefined area at offset in object number 
  5490.           Explanation: LINK386 attempted to apply an internal fix-up beyond the 
  5491.           defined limits of the object. Action: This is probably a compiler or 
  5492.           assembler error. Revise the source file and re-create the object 
  5493.           file. If that does not work, contact your supplier. 
  5494.  
  5495.  
  5496. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Nonfatal Error Messages 2000 - 2063 ΓòÉΓòÉΓòÉ
  5497.  
  5498. L2000     imported starting address 
  5499.           Explanation:  A MODEND, or starting address record, referred to an 
  5500.           imported name. Imported program-starting addresses are not supported. 
  5501.           Action: The starting address record must refer to a nonimported name. 
  5502.           Edit the source file and recompile or reassemble. 
  5503.  
  5504. L2002     fix-up overflow at location in segment name 
  5505.           Explanation: A fixup overflow occurred near location, in the named 
  5506.           segment. See Conditions That Can Cause LINK386 Error 2002 
  5507.           Action: Revise the source file and re-create the object file. If that 
  5508.           does not work, contact your supplier. 
  5509.  
  5510. L2003     intersegment self-relative fix-up at location in segment name 
  5511.           Explanation: LINK386 detected an intersegment self-relative fix-up. A 
  5512.           self-relative fix-up cannot be in another segment. This is probably a 
  5513.           compiler or assembler error. 
  5514.           Action: Revise the source file and re-create the object file. If that 
  5515.           does not work, contact your supplier. 
  5516.  
  5517. L2005     fix-up type unsupported at location in segment name 
  5518.           Explanation:  LINK386 detected an unsupported fixup type. This is 
  5519.           probably a compiler or assembler error. 
  5520.           Action: Revise the source file and re-create the object file. If that 
  5521.           does not work, contact your supplier. 
  5522.  
  5523. L2010 Revise the source file and re-create the object file. If that does not 
  5524. work, contact your supplier. too many fix-ups in LIDATA record 
  5525.           Explanation:  There are more fixups applying to a LIDATA record than 
  5526.           will fit into the LINK386's 1024 byte buffer. The buffer is divided 
  5527.           between the data in the LIDATA record itself and the run-time 
  5528.           relocation items.  These are 8 bytes each, so the maximum varies from 
  5529.           0 to 128.  This is probably a compiler error. 
  5530.           Action: Revise the source file and re-create the object file. If that 
  5531.           does not work, contact your supplier. 
  5532.  
  5533. L2011     name: NEAR/HUGE conflict 
  5534.           Explanation:  There are conflicting NEAR and HUGE attributes for a 
  5535.           communal variable. This error can occur only with programs produced 
  5536.           by compilers that support communal variables. 
  5537.           Action: Specify only one of these attributes. 
  5538.  
  5539. L2012     name: array-element size mismatch 
  5540.           Explanation: A far communal array has been declared with two or more 
  5541.           different array-element sizes (for example, an array declared once as 
  5542.           an array of characters and once as an array of real numbers). This 
  5543.           error occurs only when using compilers that support far communal 
  5544.           arrays. 
  5545.           Action: Match the definitions and re-create the object module or 
  5546.           modules. 
  5547.  
  5548. L2013     LIDATA record too large 
  5549.           Explanation: A LIDATA record in an object module contains more than 
  5550.           512 bytes of data. It is likely that one of your assembler modules 
  5551.           contains a complex structure definition or a series of deeply-nested 
  5552.           DUP operators. (LIDATA is a DOS term.) 
  5553.           Example: The following structure definition causes this error: 
  5554.  
  5555.                     alpha   DB     10DUP(11 DUP(12 DUP(13 DUP(...))))
  5556.  
  5557.           Action: Simplify the structure definition and reassemble the module. 
  5558.  
  5559. L2022     name (alias internalname) : export undefined 
  5560.           Explanation: A name has been directed to be exported but is not 
  5561.           defined anywhere. 
  5562.           Action: Edit the source file and define the export. 
  5563.  
  5564. L2023     name (alias internalname) : export imported 
  5565.           Explanation: An imported name has been directed to be exported. Items 
  5566.           that are not in the source file itself cannot be exported. You cannot 
  5567.           export this imported name. 
  5568.           Action: Edit the source file to not export the imported name. 
  5569.  
  5570. L2024     name: special symbol already defined 
  5571.           Explanation: Your program defined a symbol name that LINK386 already 
  5572.           used for one of its low-level symbols.  For example, the linker 
  5573.           generates special names for overlay support. 
  5574.           Action: Edit the source file and choose another name for the symbol. 
  5575.  
  5576. L2025     name: symbol defined more than once 
  5577.           Explanation: A symbol has been defined more than once in the object 
  5578.           file. 
  5579.           Action: Edit the source file, removing the extra symbol definition. 
  5580.  
  5581. L2026     entry ordinal number, name name : multiple definitions for same 
  5582.           ordinal 
  5583.           Explanation: More than one entry point name has been assigned to the 
  5584.           same ordinal in the module definition file. 
  5585.           Action: Edit the module definition file to correct the usage of the 
  5586.           ordinal. 
  5587.  
  5588. L2027     number: ordinal too large for export 
  5589.           Explanation: You tried to export more than 3072 names or indicated 
  5590.           too large of an ordinal. 
  5591.           Action: Edit the source file or define smaller ordinals in the module 
  5592.           definition file. 
  5593.  
  5594. L2029     string: unresolved external 
  5595.           Explanation: A symbol declared to be external in one or more modules 
  5596.           was not found among the given objects and libraries. 
  5597.           Action: Supply files that will resolve these external calls. 
  5598.  
  5599. L2030     starting address not code (use class `CODE') 
  5600.           Explanation: You specified a starting address to LINK386 that is not 
  5601.           within a segment of type 'CODE.' 
  5602.           Action: Reclassify the segment to CODE, or correct the starting 
  5603.           point. 
  5604.  
  5605. L2044     string: symbol multiple defines, use /NOE 
  5606.           Explanation: The symbol shown was defined more than once, perhaps for 
  5607.           different things. 
  5608.           Action: Recompile with the /NOEXDICTIONARY option. 
  5609.  
  5610. L2047     IOPL attribute conflict - segment: name in group:name 
  5611.           Explanation: The segment indicated within the group shown has 
  5612.           different IOPL attributes from the rest of the segments in the group. 
  5613.           Action: Remove the segment from the group or make sure all segments 
  5614.           have the same IOPL attributes. Relink. 
  5615.  
  5616. L2050     use16/use32 attribute conflict - segment:name in group:name 
  5617.           Explanation: The segment indicated within the group shown has a 
  5618.           different USE16/USE32 attribute from the rest of the segments in the 
  5619.           group. 
  5620.           Action: Remove the segment from the group or make sure all segments 
  5621.           have the same USE16/USE32 attribute. 
  5622.  
  5623. L2052     name: unresolved external - possible calling convention mismatch 
  5624.           Explanation: LINK386 encountered an undefined external, which could 
  5625.           be a fast-call/C-call mismatch. 
  5626.           Action: Make sure the external is defined and called the same way 
  5627.           (for example, all C-calls). 
  5628.  
  5629. L2053     call gates are NOT allowed in 32-bit object if its size exceeds 64K - 
  5630.           memory object number number 
  5631.           Explanation: The memory object indicated is larger than 64K and uses 
  5632.           call gates. 
  5633.           Action: Remove the call gates or break the object into smaller 
  5634.           portions.  Relink. 
  5635.  
  5636. L2054     data for invalid page in segment name 
  5637.           Explanation: LINK386 encountered data past the defined end of 
  5638.           initialized data in the segment indicated. 
  5639.           Action:  The .OBJ is probably corrupted. Recompile or reassemble and 
  5640.           try again.  If that does not work, contact your supplier. 
  5641.  
  5642. L2055     fix-up for invalid page at location in segment name 
  5643.           Explanation: LINK386 encountered a fixup past the defined end of 
  5644.           initialized data in the segment indicated. 
  5645.           Action: The .OBJ is probably corrupted. Recompile or reassemble and 
  5646.           try again.  If that does not work, contact your 
  5647.  
  5648. L2056     object type conflict - segment: name in group: name 
  5649.           Explanation: The segment indicated within the group shown has a 
  5650.           different TYPE attribute from the rest of the segments in the group. 
  5651.           Action: Remove the segment from the group or make sure all segments 
  5652.           have the same TYPE attribute. 
  5653.  
  5654. L2057     duplicate of name with different size found; record ignored 
  5655.           Explanation: LINK386 encountered two COMDAT records with the 
  5656.           selection type "SAME SIZE." The records have the same name but have 
  5657.           different sizes. 
  5658.           Action: The .OBJ is probably corrupted. Recompile or reassemble and 
  5659.           try again.  If that does not work, contact your 
  5660.  
  5661. L2058     different duplicate of name found; record ignored 
  5662.           Explanation: LINK386 encountered two COMDAT records with the 
  5663.           selection type "EXACT." The records have the same name but have 
  5664.           different sizes. 
  5665.           Action: The .OBJ is probably corrupted. Recompile or reassemble and 
  5666.           try again.  If that does not work, contact your 
  5667.  
  5668. L2059     size of the data block associated with name exceeds 4G 
  5669.           Explanation: LINK386 encountered a continuation COMDAT record whose 
  5670.           additional size made the communal data too large. 
  5671.           Action: The .OBJ is probably corrupted. Recompile or reassemble and 
  5672.           try again.  If that does not work, contact your 
  5673.  
  5674. L2061     no space for the data block associated with record name inside the 
  5675.           segment name 
  5676.           Explanation: While being allocated space for a COMDAT record inside 
  5677.           the segment indicated, the segment grew larger than 64K. 
  5678.           Action: Make the segment smaller or move communal data into a 
  5679.           different segment. 
  5680.  
  5681. L2062     continuation of COMDAT name has conflicting attributes; record 
  5682.           ignored 
  5683.           Explanation: While concatenating the COMDAT record indicated, LINK386 
  5684.           found attributes that differ from those defined in the initial COMDAT 
  5685.           record. 
  5686.           Action: The .OBJ is probably corrupted. Recompile or reassemble and 
  5687.           try again.  If that does not work, contact your 
  5688.  
  5689. L2063     name allocated in undefined segment 
  5690.           Explanation: LINK386 encountered a COMDAT record in an undefined 
  5691.           explicit allocation segment. 
  5692.           Action: The .OBJ is probably corrupted. Recompile or reassemble and 
  5693.           try again.  If that does not work, contact your supplier. 
  5694.  
  5695.  
  5696. ΓòÉΓòÉΓòÉ <hidden> LINK386 - Warning Error Messages 4000 - 4087 ΓòÉΓòÉΓòÉ
  5697.  
  5698. L4000     seg disp. included near location in segment name 
  5699.           Explanation: This error is caused by using the LINK386 Warn Fixup 
  5700.           (/WA) option. 
  5701.           Action: The segment name and the location offset is displayed. 
  5702.  
  5703. L4001     frame-relative fix-up, frame ignored near location in segment name 
  5704.           Explanation: A fixup occurred with a frame segment different from the 
  5705.           target segment where either the frame or the target segment is not 
  5706.           absolute. Such a fix-up is meaningless in the OS/2* environment, so 
  5707.           the target segment is assumed for the frame segment. 
  5708.           Action: Check that this is acceptable. 
  5709.  
  5710. L4002     frame-relative absolute fix-up near location in segment name 
  5711.           Explanation: A fixup occurred with a frame segment different from the 
  5712.           target segment where both frame and target segments are absolute. 
  5713.           This fixup is processed using base-offset arithmetic, but the warning 
  5714.           is issued because the fixup might not be valid in the OS/2 
  5715.           environment. 
  5716.           Action: Check that this is acceptable. 
  5717.  
  5718. L4003     intersegment self-relative fix up at location in segment name 
  5719.           Explanation: LINK386 found an intersegment self-relative fix-up at 
  5720.           the specified location. This might cause a problem with the 
  5721.           executable file. 
  5722.           Action: The error might have been caused by the way the program was 
  5723.           written or when it was compiled or assembled. 
  5724.  
  5725. L4004     possible fix-up overflow at location in segment name 
  5726.           Explanation: LINK386 found a possible fix-up overflow at the 
  5727.           specified location. This might cause a problem with the executable 
  5728.           file. 
  5729.           Action: The error might have been caused by the way the program was 
  5730.           written or when it was compiled or assembled. 
  5731.  
  5732. L4005     32-bit fix-up in 16-bit record ignored at location in segment name 
  5733.           Explanation: LINK386 encountered a 32-bit fix-up in a 16-bit record 
  5734.           at the specified location. This might cause a problem with the 
  5735.           executable file. 
  5736.           Action: The error might have been caused by the way the program was 
  5737.           written or when it was compiled or assembled. 
  5738.  
  5739. L4006     illegal 16-bit flat-relative offset fix-up at location in object name 
  5740.           Explanation: LINK386 encountered an illegal 16-bit flat relative 
  5741.           offset fix-up at the specified location. This might cause a problem 
  5742.           with the executable file. 
  5743.           Action: The error might have been caused by the way the program was 
  5744.           written or when it was compiled or assembled. 
  5745.  
  5746. L4007     illegal 16-bit flat-relative pointer fix-up at location in object 
  5747.           name 
  5748.           Explanation: LINK386 encountered an illegal 16-bit flat-relative 
  5749.           pointer fix-up at the specified location. 
  5750.           Action: The error might have been caused by the way the program was 
  5751.           written or when it was compiled or assembled. 
  5752.  
  5753. L4008     aliased fix-up to non-alias object near location in object name 
  5754.           Explanation: LINK386 encountered an aliased fix-up to a non-alias 
  5755.           object at the specified location. 
  5756.           Action: The error might have been caused by the way the program was 
  5757.           written or when it was compiled or assembled. 
  5758.  
  5759. L4009     illegal target of flat-relative fix-up ignored at number in segment 
  5760.           name 
  5761.           Explanation: LINK386 encountered an illegal flat-relative fix-up at 
  5762.           the specified location. 
  5763.           Action: The error might have been caused by the way the program was 
  5764.           written or when it was compiled or assembled. 
  5765.  
  5766. L4010     invalid alignment specification; assuming number 
  5767.           Explanation: The number following the /ALIGNMENT option is not a 
  5768.           power of 2, or is not in numerical form. The maximum alignment value 
  5769.           is 4096. 
  5770.           Action: If the default alignment of 512 is not acceptable, restart 
  5771.           LINK386 using a valid number. 
  5772.  
  5773. L4016     /CODEVIEW disables /EXEPACK 
  5774.           Explanation: Under certain circumstances, the options /CODEVIEW and 
  5775.           /EXEPACK are mutually exclusive. For this executable, /CO or /DE 
  5776.           disables the /EXEP option. 
  5777.           Action: Restart LINK386 with only one of these options. 
  5778.  
  5779. L4017     name: unrecognized option name; option ignored 
  5780.           Explanation: The option specified is not valid for LINK386. 
  5781.           Action: Specify a valid option or remove the unrecognized option and 
  5782.           relink. 
  5783.  
  5784. L4018     missing or bad application type; option name ignored 
  5785.           Explanation: The /PMTYPE option was specified without an application 
  5786.           type or with an invalid application type. 
  5787.           Action: Relink with an application type of PM, VIO, or NOVIO. 
  5788.  
  5789. L4020     name: code segment size exceeds 65,500 
  5790.           Explanation: The code segment indicated is larger than 65,500 bytes 
  5791.           and might not be reliable. 
  5792.           Action: Break the segment into smaller segments and try again. 
  5793.  
  5794. L4021     no stack segment 
  5795.           Explanation: The program does not contain a stack segment defined 
  5796.           with the STACK combine type. Normally, every .EXE program should have 
  5797.           a stack segment with the combine type specified as STACK. 
  5798.           Action: You can ignore this message if you have a specific reason for 
  5799.           not defining a stack or for defining one without the STACK combine 
  5800.           type. 
  5801.  
  5802. L4022     name1, name2: groups overlap 
  5803.           Explanation: Two groups are defined in such a way that one starts in 
  5804.           the middle of another. This can occur if you defined segments in a 
  5805.           module definition file or assembly file and did not correctly order 
  5806.           the segments by class. 
  5807.           Action: Edit the source file and reorder the segments in the group. 
  5808.  
  5809. L4023     name (alias): export internal name conflict 
  5810.           Explanation: An exported name, or its associated internal name, 
  5811.           conflicts with an already defined public symbol. 
  5812.           Action: Edit the source file using new names. 
  5813.  
  5814. L4024     name: multiple definitions for export name 
  5815.           Explanation: The module named has been exported more than once with 
  5816.           different internal names. All internal names except the first one are 
  5817.           ignored. 
  5818.           Action: Edit the source file using new names. 
  5819.  
  5820. L4025     modname impname (intname): import internal name conflict 
  5821.           Explanation: An imported name, or its associated internal name, is 
  5822.           also defined as an exported name. The import name is ignored. The 
  5823.           conflict could come from a definition in either the module definition 
  5824.           file or an object file. 
  5825.           Action: Edit the source file or module definition file using new 
  5826.           names. 
  5827.  
  5828. L4026     modname impname (intname): self-imported 
  5829.           Explanation: The module definition file directed that a name be 
  5830.           imported from the module being produced. 
  5831.           Action: Edit the module definition file. 
  5832.  
  5833. L4027     name: multiple definitions for import internal name 
  5834.           Explanation: An imported name, or its associated internal name, is 
  5835.           imported more than once. The imported name is ignored after the first 
  5836.           mention. 
  5837.           Action: Check that the name has been defined correctly. 
  5838.  
  5839. L4028     name: segment already defined 
  5840.           Explanation: A segment is defined more than once with the same name 
  5841.           in the module definition file. Segments must have unique names for 
  5842.           LINK386. All definitions with the same name are ignored after the 
  5843.           first mention. 
  5844.           Action: Check that the segment has been defined correctly. 
  5845.  
  5846. L4029     name: DGROUP segment converted to type data 
  5847.           Explanation: A segment that is a member of DGROUP has been defined as 
  5848.           type CODE in a module definition file or object file. This probably 
  5849.           happened because a CLASS keyword in a SEGMENTS statement was not 
  5850.           given. 
  5851.           Action: Check the module definition file syntax. 
  5852.  
  5853. L4030     name: segment attributes changed to conform with automatic data 
  5854.           segment 
  5855.           Explanation: The segment named is defined in DGROUP, but the shared 
  5856.           attribute is in conflict with the instance attribute. 
  5857.           Example:  The shared attribute is NONSHARED and the instance 
  5858.           attribute is SINGLE, or the shared attribute is SHARED and the 
  5859.           instance attribute is MULTIPLE. The bad segment is forced to have the 
  5860.           right shared attribute and the link continues. 
  5861.           Action: Check that the LINK386 action is acceptable. 
  5862.  
  5863. L4031     name: segment declared in more than one group 
  5864.           Explanation: A segment is declared to be a member of two different 
  5865.           groups. 
  5866.           Action: Correct the source file and re-create the object files. 
  5867.  
  5868. L4032     name: code-group size exceeds 65500 bytes 
  5869.           Explanation: The code group indicated is larger than 65500 bytes and 
  5870.           therefore might not be reliable. 
  5871.           Action: Break the group into smaller groups or remove one or more 
  5872.           segments and try again. 
  5873.  
  5874. L4036     no automatic data segment 
  5875.           Explanation: The program or dynamic link library did not define a 
  5876.           group named DGROUP. This is recognized by LINK386 as the automatic 
  5877.           data segment. 
  5878.           Action: Edit the source file. 
  5879.  
  5880. L4038     program has no starting address 
  5881.           Explanation: The program did not contain a starting address. 
  5882.           Action: Recompile the program and try again. 
  5883.  
  5884. L4044     CODE segment :name in DATA group:name; assuming DATA 
  5885.           Explanation: A CODE statement in a module definition file was used to 
  5886.           define default attributes for a DATA segment. 
  5887.           Action: Define a CODE statement and relink. 
  5888.  
  5889. L4045     name of output file is name 
  5890.           Explanation: A dynamic link library file was created without 
  5891.           specifying an extension.  In such cases, LINK386 supplies an 
  5892.           extension of .DLL.  This is to warn you in case you expected an .EXE 
  5893.           file to be generated 
  5894.           Action: No action. 
  5895.  
  5896. L4046     DATA segment: name in CODE group: name; assuming CODE 
  5897.           Explanation: A DATA statement in a module definition file was used to 
  5898.           define default attributes for a CODE segment. 
  5899.           Action: Define a DATA statement and relink. 
  5900.  
  5901. L4048     ignoring non-zero heap size 
  5902.           Explanation: The module definition file does not contain a HEAPSIZE 
  5903.           statement. 
  5904.           Action: Edit the file and relink. 
  5905.  
  5906. L4049     ignoring non-zero stack size 
  5907.           Explanation: The module definition file does not contain a STACKSIZE 
  5908.           statement. 
  5909.           Action: Edit the file and relink. 
  5910.  
  5911. L4051     filename: cannot find library 
  5912.           Explanation: LINK386 could not find the specified library file. 
  5913.           Action: Enter a new file name, a new path specification, or both. 
  5914.  
  5915. L4053     VM.TMP :illegal file name; ignored 
  5916.           Explanation: VM.TMP cannot be used for an object file name. 
  5917.           Action: Rename the file and restart LINK386. 
  5918.  
  5919. L4054     filename: cannot find file 
  5920.           Explanation: LINK386 could not find the specified file. 
  5921.           Action: Enter a new file name, a new path specification, or both. 
  5922.  
  5923. L4067     changing default resolution for weak external name from oldname to 
  5924.           newname 
  5925.           Explanation: LINK386 encountered a redefinition of a default 
  5926.           resolution and is changing it to the value indicated. 
  5927.           Action: If the change is OK, no action is required; otherwise, fix 
  5928.           the module definition file and try again. 
  5929.  
  5930. L4068     ignoring stack size greater than 64K 
  5931.           Explanation: LINK386 encountered a stack greater than 64K or zero and 
  5932.           is assuming a stack size of 65,534. 
  5933.           Action: Edit the file and relink. 
  5934.  
  5935. L4069     filename truncated to name 
  5936.           Explanation: LINK386 encountered a file name greater than 256 bytes 
  5937.           (including terminating null) and truncated it to the size indicated. 
  5938.           Action: Edit the file and relink. 
  5939.  
  5940. L4071     application type not specified; assuming name 
  5941.           Explanation: An application type of WINDOWAPI, WINDOWCOMPAT, 
  5942.           NOTWINDOWCOMPAT, or PRIVATE was not specified. LINK386 is assuming 
  5943.           the application type indicated. 
  5944.           Action: Edit the file and relink. 
  5945.  
  5946. L4072     changing application type from oldname to newname 
  5947.           Explanation: The application type specified with /PMTYPE is different 
  5948.           from that in .DEF file. LINK386 is using the application type 
  5949.           indicated. 
  5950.           Action: Edit the file and relink. 
  5951.  
  5952. L4073     name: 32-bit aliased data segment size exceeds 64K 
  5953.           Explanation: The segment indicated is greater than 64K in length and 
  5954.           is a 32-bit aliased data segment 
  5955.           Action: If this is expected, do nothing; if not, break into smaller 
  5956.           segments. 
  5957.  
  5958. L4074     attribute conflict for segment name; ignoring attribute type 
  5959.           Explanation: The segment indicated for the .DEF file is defined with 
  5960.           conflicting characteristics. LINK386 is ignoring the attribute 
  5961.           indicated. 
  5962.           Action: Edit the file and relink. 
  5963.  
  5964. L4075     object type conflict - assuming name 
  5965.           Explanation: The .DEF files specified conflicting attributes for an 
  5966.           object; only one of the following attributes are allowed: RESIDENT, 
  5967.           NONPERMANENT, PERMANENT, CONTIGUOUS, or DYNAMIC. LINK386 is assuming 
  5968.           the attribute indicated. 
  5969.           Action: Edit the file and relink. 
  5970.  
  5971. L4077     symbol name not defined; ordered allocation ignored 
  5972.           Explanation: While doing ordered allocation of COMDAT records, 
  5973.           LINK386 encountered an undefined COMDAT record; ordered allocation is 
  5974.           determined from the .DEF file. 
  5975.           Action: Edit the file and relink. 
  5976.  
  5977. L4079     symbol name already defined for ordered allocation; duplicate ignored 
  5978.           Explanation: While processing ORDER list in .DEF file, LINK386 
  5979.           encountered a COMDAT record already defined for ordered allocation. 
  5980.           Action: Edit the file and relink. 
  5981.  
  5982. L4080     changing substitute name for alias name from name to name 
  5983.           Explanation: LINK386 encountered an alias redefiniton and is changing 
  5984.           it to the values indicated. 
  5985.           Action: If this is OK, no action is required. Otherwise, edit the 
  5986.           file and relink. 
  5987.  
  5988. L4082     name ignored for module with 16-bit starting address 
  5989.           Explanation: LINK386 encountered a DLL module with a 16-bit entry 
  5990.           point requesting termination. Only modules with 32-bit entry points 
  5991.           can specify DLL termination. 
  5992.           Action: Remove the termination request from the module definition 
  5993.           file. 
  5994.  
  5995. L4083     invalid base address specification; assuming number 
  5996.           Explanation: The base address specified with the /BASE option or in 
  5997.           the module definition file is illegal, and LINK386 is assuming the 
  5998.           given value. 
  5999.           Action: Change the base address if necessary; otherwise, ignore the 
  6000.           message. 
  6001.  
  6002. L4084     module name truncated to string 
  6003.           Explanation: The module name was truncated to the number of 
  6004.           characters indicated. 
  6005.           Action: If this action is satisfactory, no action is required. 
  6006.           Otherwise, edit the module definition file and shorten the name. 
  6007.  
  6008. L4085     name (alias alias name): forwarder entry created for imported export 
  6009.           Explanation: LINK386 created a forwarder entry within the entry table 
  6010.           for the named export. 
  6011.           Action If this action is satisfactory, no action is required. 
  6012.  
  6013. L4087     internal fix-up applied to uninitialized area at offset in object 
  6014.           number 
  6015.           Explanation: LINK386 attempted to apply an internal fix-up beyond the 
  6016.           initialize limits of the object. 
  6017.           Action: If this is acceptable, no action is required. If the problem 
  6018.           continues, you might want to disable based addressing. 
  6019.  
  6020. L4090     cannot load identifier manipulation DLL name 
  6021.  
  6022.           Explanation: LINK386 detected an error while trying to load an 
  6023.           identifier manipulator dynamic link library.  This DLL was specified 
  6024.           in an object file, and is used by LINK386 to demangle a compiler 
  6025.           generated mangled name into a function prototype when printing an 
  6026.           error message. Error messages will not be demangled for this object 
  6027.           file. 
  6028.  
  6029.           Action:  Make sure the appropriate identifier manipulator DLL is in 
  6030.           the LIBPATH 
  6031.  
  6032. L4091     cannot locate procedure in identifier manipulation DLL name 
  6033.  
  6034.           Explanation: LINK386 detected an error while trying to load a 
  6035.           procedure from an identifier manipulator dynamic link library.  This 
  6036.           DLL was specified in an object file, and is used by LINK386 to 
  6037.           demangle a compiler generated mangled name into a function prototype 
  6038.           when printing an error message. Error messages will not be demangled 
  6039.           for this object file. 
  6040.  
  6041.           Action:  Make sure the appropriate identifier manipulator DLL is in 
  6042.           the LIBPATH 
  6043.  
  6044. L4092     too many identifier manipulation DLLs 
  6045.  
  6046.           Explanation: Too many identifier manipulator dynamic link libraries 
  6047.           have been specified.  These DLL's are specified in object files, and 
  6048.           are used by LINK386 to demangle compiler generated mangled names into 
  6049.           function prototypes when printing an error messages. Error messages 
  6050.           may not be demangled for some object files. 
  6051.  
  6052.           Action: Reduce the number of different compilers used to create the 
  6053.           objects. 
  6054.  
  6055. L4093     cannot initialize identifier manipulation DLL name 
  6056.  
  6057.           Explanation: LINK386 detected an error while trying to initialize an 
  6058.           identifier manipulator dynamic link library.  This DLL was specified 
  6059.           in an object file, and is used by LINK386 to demangle a compiler 
  6060.           generated mangled name into a function prototype when printing an 
  6061.           error message. Error messages will not be demangled for this object 
  6062.           file. 
  6063.  
  6064.           Action: Make sure the appropriate identifier manipulator DLL is in 
  6065.           the LIBPATH. 
  6066.  
  6067. L4094     increasing stack size from number to number 
  6068.  
  6069.           Explanation:  The stack size specified by either 
  6070.  
  6071.             1. size of a segment with combine type stack 
  6072.             2. STACKSIZE statement in the .DEF file 
  6073.             3. /STACK LINK386 command line option 
  6074.  
  6075.           will cause a system error if the program is executed on an OS/2 2.0 
  6076.           system.  LINK386 has changed the stacksize to a larger value to 
  6077.           preserve compatibility. 
  6078.  
  6079.           Action: No action required, LINK386 has corrected the problem.  To 
  6080.           eliminate the warning message, restart LINK386 and specify the new 
  6081.           stack size. 
  6082.  
  6083.  
  6084. ΓòÉΓòÉΓòÉ <hidden> Conditions That Can Cause LINK386 Error 2002 ΓòÉΓòÉΓòÉ
  6085.  
  6086. LINK386 Error 2002 can be caused by the following conditions: 
  6087.  
  6088. o A group is larger than 64K. 
  6089. o The program contains an intersegment short jump or intersegment short call. 
  6090. o The name of a data item in the program conflicts with that of a subroutine in 
  6091.   a library included in the link. 
  6092. o An EXTRN declaration in an assembler language source file appeared inside the 
  6093.   body of a segment, as in the following example: 
  6094.  
  6095.     code    SEGMENT public  'CODE'
  6096.             EXTRN   main:far
  6097.     start   PROC    far
  6098.             call    main
  6099.             ret
  6100.     start   ENDP
  6101.     code    ENDS
  6102.  
  6103.   The following construction is preferred: 
  6104.  
  6105.             EXTRN   main:far
  6106.     code    SEGMENT public  'CODE'
  6107.     start   PROC    far
  6108.             call    main
  6109.             ret
  6110.     start   ENDP
  6111.     code    ENDS
  6112.  
  6113.  
  6114. ΓòÉΓòÉΓòÉ 10. MAPSYM ΓòÉΓòÉΓòÉ
  6115.  
  6116. Select One: 
  6117.  
  6118. Introduction 
  6119. Help 
  6120. Options 
  6121.  
  6122.  
  6123. ΓòÉΓòÉΓòÉ <hidden> MAPSYM - Introduction ΓòÉΓòÉΓòÉ
  6124.  
  6125. MAPSYM program creates .SYM files from .MAP files. SYM files are used by the 
  6126. kernel debugger for symbolic debugging. 
  6127.  
  6128. Note:  You must run MAPSYM from the directory in which the file to be converted 
  6129. is located. 
  6130.  
  6131. To create a .SYM file, follow these steps: 
  6132.  
  6133.  1. Make sure you are in the correct directory. 
  6134.  
  6135.  2. At the prompt type the following: 
  6136.  
  6137.         mapsym filename
  6138.  
  6139.     Note that the .MAP extension is not required. 
  6140.  
  6141.  
  6142. ΓòÉΓòÉΓòÉ <hidden> MAPSYM - Help ΓòÉΓòÉΓòÉ
  6143.  
  6144. To display MAPSYM help, type MAPSYM at the prompt, with no arguments. The 
  6145. appropriate copyright statement appears, along with the following: 
  6146.  
  6147. usage: mapsym [-aln] mapfile
  6148.  
  6149.  
  6150. ΓòÉΓòÉΓòÉ <hidden> MAPSYM - Options ΓòÉΓòÉΓòÉ
  6151.  
  6152. The following options may be used with MAPSYM: 
  6153.  
  6154. /A 
  6155.      Omits Alphabetical sorting of symbols. 
  6156.  
  6157. /N 
  6158.      Includes source code line Numbers in *.SYM file. 
  6159.  
  6160. /L 
  6161.      Produces verbose Listing. 
  6162.  
  6163.  
  6164. ΓòÉΓòÉΓòÉ 11. MSGBIND ΓòÉΓòÉΓòÉ
  6165.  
  6166.  
  6167. ΓòÉΓòÉΓòÉ <hidden> Topics ΓòÉΓòÉΓòÉ
  6168.  
  6169. Select One: . 
  6170.  
  6171. Introduction 
  6172. Syntax 
  6173. Help 
  6174. Input File Example 
  6175. Multiple Code-Page Message Files 
  6176. Message Retrieval 
  6177. Error Messages 
  6178.  
  6179.  
  6180. ΓòÉΓòÉΓòÉ <hidden> MSGBIND - Syntax ΓòÉΓòÉΓòÉ
  6181.  
  6182. The MSGBIND command line has the following form: 
  6183.  
  6184. MSGBIND infile
  6185.  
  6186. The infile field specifies the input file that identifies the executable files, 
  6187. output message files, and message numbers that will be bound.  The input-file 
  6188. name can be any valid OS/2* file name and can include an optional file name 
  6189. extension. 
  6190.  
  6191.  
  6192. ΓòÉΓòÉΓòÉ <hidden> MSGBIND - Introduction ΓòÉΓòÉΓòÉ
  6193.  
  6194. The MSGBIND program binds a message segment to an executable program. It does 
  6195. this by reading an input file that specifies the executable files to modify. 
  6196. For each executable file, MSGBIND specifies which message files to scan, and 
  6197. for each message file, it specifies which messages to include in the executable 
  6198. file. Although the resulting executable file will be larger, access to messages 
  6199. will be faster. 
  6200.  
  6201. In the OS/2* operating system, message segment/objects are packed with other 
  6202. application code.  If the size of the code segment/object and the bound 
  6203. messages exceeds 64KB, the following statement in the program definition file 
  6204. (.DEF) isolates the application code from the message statement/object: 
  6205.  
  6206. 16 Bit Applications 
  6207.      SEGMENT '_MSGSEG' CLASS 'CODE' 
  6208.  
  6209. 32 Bit Applications 
  6210.      SEGMENT '_MSGSEG32' CLASS 'CODE' 
  6211.  
  6212.  
  6213. ΓòÉΓòÉΓòÉ <hidden> MSGBIND - Input File ΓòÉΓòÉΓòÉ
  6214.  
  6215. The input file contains the following three types of lines: 
  6216.  
  6217. o > Executable file 
  6218.  
  6219. o < Message file 
  6220.  
  6221. o Message numbers. 
  6222.  
  6223. Executable file 
  6224.  
  6225. The File in which messages are to be bound is preceded by a greater-than symbol 
  6226. (>).  The name of the file can be any valid OS/2* file name. 
  6227.  
  6228. Two or more different executable files can be modified by the specifications 
  6229. found in one input file.  MSGBIND continues to use this file until it 
  6230. encounters another greater-than symbol. 
  6231.  
  6232. Message file 
  6233.  
  6234. The message file to be read from is preceded by a less-than sign (<). You 
  6235. create this file by using the MKMSGF program.  The name can be any valid OS/2* 
  6236. file name.  All message numbers that follow it are located in the specified 
  6237. message file and are copied to the current output executable file.  MSGBIND 
  6238. reads the message-number list until it encounters one of the following: the end 
  6239. of the input file, a new output specification, or a new input message file. 
  6240.  
  6241. Message Numbers 
  6242.  
  6243. The messages in the message file are listed below the message-file name.  Only 
  6244. those message numbers that you specify will be added. You can also specify an 
  6245. asterisk (*) to indicate that all messages within the message file will be 
  6246. added. Message numbers must consist of a three-letter component identifier 
  6247. followed by a four-digit message number. 
  6248.  
  6249. See MKMSGF - Input File for a more detailed description of message numbers. 
  6250.  
  6251.  
  6252. ΓòÉΓòÉΓòÉ <hidden> MSGBIND - Multiple Code-Page Message Files ΓòÉΓòÉΓòÉ
  6253.  
  6254. Multiple code-page message files can also be bound to an executable file, which 
  6255. enables a user to bind to an application messages for different countries. 
  6256.  
  6257. The following example shows how three messages in two different languages can 
  6258. be bound to an executable file: 
  6259.  
  6260. MSGBIND infile
  6261.  
  6262. where infile consists of the following: 
  6263.  
  6264.  >PROG1.EXE
  6265.  <TEXTUS.MSG
  6266.  MSG0001
  6267.  MSG0002
  6268.  MSG0003
  6269.  <TEXTIT.MSG
  6270.  MSG0001
  6271.  MSG0002
  6272.  MSG0003
  6273.  
  6274. where: 
  6275.  
  6276. o PROG1.EXE is the executable file to be modified. 
  6277.  
  6278. o TEXTUS.MSG is the file, created using MKMSGF, which contains messages in US 
  6279.   English. 
  6280.  
  6281. o TEXTIT.MSG is the file, created using MKMSGF, which contains the same 
  6282.   messages translated into Italian. 
  6283.  
  6284. o MSGnnnn defines the messages to be bound to the application: 
  6285.  
  6286.    MSG       Message component ID 
  6287.    0001      Message number 
  6288.  
  6289.  
  6290. ΓòÉΓòÉΓòÉ <hidden> MSGBIND - Help ΓòÉΓòÉΓòÉ
  6291.  
  6292. To display MSGBIND help, type MSGBIND at the prompt, with no parameters. The 
  6293. following will be displayed: 
  6294.  
  6295. usage: MSGBIND scriptfile
  6296.  
  6297.  
  6298. ΓòÉΓòÉΓòÉ <hidden> MSGBIND & MKMSGF - How Message Retrieval Works ΓòÉΓòÉΓòÉ
  6299.  
  6300. When an application requests the message retriever for text associated with a 
  6301. message number, a test is made to determine if there is a bound message segment 
  6302. with this executable file.  If true, each bound message segment is searched for 
  6303. a match with the current session's code-page number. 
  6304.  
  6305. If a match is made, then the message number is searched for.  If it is found, 
  6306. the message will be returned to the caller. Otherwise, the search of remaining 
  6307. bound message segments will continue. 
  6308.  
  6309. If no match results from a search of all message segments, the message file on 
  6310. the disk is searched. DosGetMessage will access the message file under any of 
  6311. the following conditions: 
  6312.  
  6313. o The message file is in the current directory. 
  6314. o The message file is in the path specified in the DPATH environment variable 
  6315.   (protect mode). 
  6316. o The message file is in the path specified in the APPEND environment variable 
  6317.   (real mode). 
  6318. o The fully-qualified file name is specified in DosGetMessage. 
  6319.  
  6320.  
  6321. ΓòÉΓòÉΓòÉ <hidden> MSGBIND - Sample Input File ΓòÉΓòÉΓòÉ
  6322.  
  6323. >c:\cmd.exe
  6324. <c:\os20\dosutil.msg
  6325. DOS0100
  6326. DOS0123
  6327. DOS0245
  6328. >c:\format.exe
  6329. <c:\os20\dosutil.msg
  6330. DOS0001
  6331. DOS0006
  6332. <c:\format.msg
  6333. FMT0001
  6334. FMT0002
  6335. <c:\myown.msg
  6336. *
  6337.  
  6338. The first line of a MSGBIND input file specifies that the executable file to 
  6339. modify is CMD.EXE.  The messages DOS0100, DOS0123, and DOS0245 are read from 
  6340. the file DOSUTIL.MSG and added to the CMD.EXE file.  The MSGBIND program then 
  6341. encounters an executable-file option for the FORMAT.EXE file.  The messages 
  6342. DOS0001 and DOS0006 are read from DOSUTIL.MSG and added to FORMAT.EXE.  Next, 
  6343. the messages FMT0001 and FMT0002 are read from the file FORMAT.MSG and added to 
  6344. FORMAT.EXE.  Finally, because an asterisk is specified, all the messages are 
  6345. read from the file MYOWN.MSG and added to FORMAT.EXE. 
  6346.  
  6347. The files DOSUTIL.MSG and FORMAT.MSG in this example are two 
  6348. output-message-file names from the MKMSGF program. 
  6349.  
  6350.  
  6351. ΓòÉΓòÉΓòÉ <hidden> MSGBIND - Error Messages ΓòÉΓòÉΓòÉ
  6352.  
  6353. usage: MSGBIND scriptfile 
  6354.           Explanation: The command was entered incorrectly. 
  6355.           Action: Restart MSGBIND. Refer to MSGBIND Syntax for the correct 
  6356.           syntax. 
  6357.  
  6358. Reading messages from xxxxxxxx 
  6359.           Explanation: Messages from the displayed message file are being read 
  6360.           into memory. 
  6361.           Action: None. This message is for information only. 
  6362.  
  6363. Reading messages from xxxxxxxx -file not found 
  6364.           Explanation: The message file was not found in the path specified in 
  6365.           the input file. 
  6366.           Action: Edit the input file, correcting the path or file name, or 
  6367.           both. Restart MSGBIND. 
  6368.  
  6369. Reading messages from xxxxxxxx -not created with MKMSGF program 
  6370.           Explanation: The message file displayed was not created using the 
  6371.           MKMSGF program. 
  6372.           Action: Convert the source message file to a formatted message file 
  6373.           using the MKMSGF program, and restart MSGBIND. See the MKMSGF program 
  6374.  
  6375. Reading messages from xxxxxxxx -not enough memory 
  6376.           Explanation: There was not enough memory available to store the 
  6377.           messages. 
  6378.           Action: Reduce the number of programs running in your system, and 
  6379.           restart MSGBIND. 
  6380.  
  6381. Updating xxxxxxxx 
  6382.           Explanation: The .EXE file name displayed is being updated with the 
  6383.           requested messages. 
  6384.           Action: None. This message is for information only. 
  6385.  
  6386. Updating xxxxxxxx -file not found 
  6387.           Explanation: The .EXE file name was not found in the path specified 
  6388.           in the input file. 
  6389.           Action: Edit the input file, correcting the path and  r file name, or 
  6390.           both. Restart MSGBIND. 
  6391.  
  6392. Updating xxxxxxxx -not linked with MSGSEG.OBJ 
  6393.           Explanation: The .EXE file name displayed made no DosGetMessage 
  6394.           functions, or the .EXE file was not linked with the correct library. 
  6395.           Messages can only be bound to applications that call message 
  6396.           retriever function, such as DosGetMessage. 
  6397.           Action: If the .EXE file does make call message retriever functions, 
  6398.           relink the application using the correct library, and restart 
  6399.           MSGBIND. 
  6400.  
  6401. Writing messages 
  6402.           Explanation: The .EXE file is being updated with the messages 
  6403.           requested. 
  6404.           Action: None. This message is for information only. 
  6405.  
  6406. MSGBIND: I/O error seeking infile 
  6407.           Explanation: A disk error occurred while seeking either the message 
  6408.           file or the .EXE file. 
  6409.           Action: Run CHKDSK on the drive containing the file and restart 
  6410.           MSGBIND. 
  6411.  
  6412. MSGBIND: I/O error writing file 
  6413.           Explanation: A disk error occurred while writing messages to the .EXE 
  6414.           file. 
  6415.           Action: Run CHKDSK on the drive containing the .EXE file, and restart 
  6416.           MSGBIND. 
  6417.  
  6418. MSGBIND: Must specify .EXE file before message file 
  6419.           Explanation: The input file was in error. 
  6420.           Action: Correct input file. 
  6421.  
  6422. MSGBIND: Must specify message file before message number 
  6423.           Explanation: The input file was in error. 
  6424.           Action: Correct the input file. 
  6425.  
  6426. MSGBIND: Out of memory, needed xxxx bytes 
  6427.           Explanation: There was not enough memory available to run MSGBIND. 
  6428.           Action: Reduce the number of programs presently running in your 
  6429.           system and restart MSGBIND. 
  6430.  
  6431. MSGBIND: Premature EOF during copy 
  6432.           Explanation: The .EXE file was not built correctly. 
  6433.           Action: Rebuild the .EXE file and restart MSGBIND. 
  6434.  
  6435. MSGBIND: Unable to create temp file-MSGBIND.TMP 
  6436.           Explanation: An error occurred while creating the intermediary file 
  6437.           MSGBIND.TMP. 
  6438.           Action: Delete or move files to make disk space available. If 
  6439.           MSGBIND.TMP is present as a read-only file, it must first be deleted. 
  6440.           Restart MSGBIND. 
  6441.  
  6442. MSGBIND: Unable to open xxxxxxxx 
  6443.           Explanation: The input file specified was not found or an error 
  6444.           occurred when opening the message file. 
  6445.           Action: Restart MSGBIND using the correct input file name or a backup 
  6446.           copy of the message file. 
  6447.  
  6448. WARNING: Skipping messages for this file 
  6449.           Explanation: The .EXE file was in error, so the messages were not 
  6450.           bound to it. Either the .EXE file does not exist, or it has not been 
  6451.           linked with the correct library. 
  6452.           Action: If the .EXE file name is correct, relink the application 
  6453.           using the correct library, and restart MSGBIND. 
  6454.  
  6455. WARNING: Skipping message numbers for this file 
  6456.           Explanation: The message file was in error, so all messages from this 
  6457.           message file were ignored. The message file may not exist, may not be 
  6458.           formatted correctly, or there may not be enough memory to store all 
  6459.           the messages. 
  6460.           Action: If the message file name is correct and has been correctly 
  6461.           formatted, check the memory available for the file. Restart MSGBIND. 
  6462.  
  6463. WARNING: xxxx is an invalid message number 
  6464.           Explanation: The message number specified was not found in the 
  6465.           message file. 
  6466.           Action: Edit the input file and correct any message numbers that are 
  6467.           in error. Restart MSGBIND. 
  6468.  
  6469. Number of Message Files exceeded. Only nnn allowed 
  6470.           Explanation: The number of message files specified in the input file 
  6471.           exceeds the maximum number of files that MSGBIND can process at one 
  6472.           time. 
  6473.           Action: Correct the input file or combine message files then restart 
  6474.           MSGBIND. 
  6475.  
  6476. The object that would contain the bound messages would be too large. Refer to 
  6477. the Toolkit Documentation for more information. 
  6478.           Explanation: (self explanatory) 
  6479.           Action: Do one, or more, of the following: 
  6480.  
  6481.     1. Modify the module definition file to isolate the message object then 
  6482.        relink the application. 
  6483.     2. Reduce the number of messages to be bound to the application as 
  6484.        specified in the input file. 
  6485.     3. Reduce the size of the messages and rebuild the message file with 
  6486.        MKMSGF. 
  6487.  
  6488.           Then restart MSGBIND. 
  6489.  
  6490. Unable to bind message nnnn, message segment would exceed 64K. The remaining 
  6491. messages will NOT be bound. 
  6492.           Explanation: (self explanatory) 
  6493.           Action: Do one, or more, of the following: 
  6494.  
  6495.     1. Modify the module definition file to isolate the message object then 
  6496.        relink the application. 
  6497.     2. Reduce the number of messages to be bound to the application as 
  6498.        specified in the input file. 
  6499.     3. Reduce the size of the messages and rebuild the message file with 
  6500.        MKMSGF. 
  6501.  
  6502.           Then restart MSGBIND. 
  6503.  
  6504. Unable to locate call to Dos32GetMessage, messages will not be bound. 
  6505.           Explanation: The executable file to be modified makes no function 
  6506.           calls to the message retriever, or was not linked with the correct 
  6507.           library file. 
  6508.           Action: If the application does use the message retriever function, 
  6509.           such as DosGetMessage, relink the application using the correct 
  6510.           library file then restart MSGBIND. 
  6511.  
  6512.           If not, messages cannot be bound to the application. 
  6513.  
  6514. Warning: No msgseg data found in new executable 
  6515.           Explanation: The executable file to be modified makes no function 
  6516.           calls to the message retriever, or was not linked with the correct 
  6517.           library file. 
  6518.           Action: If the application does use the message retriever function, 
  6519.           such as DosGetMessage, relink the application using the correct 
  6520.           library file then restart MSGBIND. 
  6521.  
  6522.           If not, messages cannot be bound to the application. 
  6523.  
  6524.  
  6525. ΓòÉΓòÉΓòÉ 12. MKMSGF ΓòÉΓòÉΓòÉ
  6526.  
  6527.  
  6528. ΓòÉΓòÉΓòÉ <hidden> Topics ΓòÉΓòÉΓòÉ
  6529.  
  6530. Select one: 
  6531.  
  6532. Introduction 
  6533. Syntax 
  6534. Help 
  6535. Input File 
  6536.   Example 
  6537. Output File 
  6538. Options 
  6539. Control Files 
  6540. Message Retrieval 
  6541. Error Messages 
  6542.  
  6543.  
  6544. ΓòÉΓòÉΓòÉ <hidden> MKMSGF - Introduction ΓòÉΓòÉΓòÉ
  6545.  
  6546. The MKMSGF program reads the input message file that you specify and creates an 
  6547. output message file that DosGetMessage uses to display messages. 
  6548.  
  6549. There are two ways that the output message file can be used: 
  6550.  
  6551. o Selected messages can be bound to the message segment of an executable file 
  6552.   using the MSGBIND program. 
  6553.  
  6554. o Messages can be accessed directly from the output message file. 
  6555.  
  6556. See How Message Retrieval Works for additional information. 
  6557.  
  6558.  
  6559. ΓòÉΓòÉΓòÉ <hidden> MKMSGF - Syntax ΓòÉΓòÉΓòÉ
  6560.  
  6561. MKMSGF infile outfile [options] 
  6562.  
  6563.    OR 
  6564.  
  6565. MKMSGF @controlfile 
  6566.  
  6567. The infile field specifies the input file that contains message definitions. 
  6568. The input-file name can be any valid OS/2* file name, optionally preceded by a 
  6569. drive letter and a path. 
  6570.  
  6571. The outfile field specifies the output file created by MKMSGF.  The output-file 
  6572. name can be any valid OS/2* file name, optionally preceded by a drive letter 
  6573. and a path. 
  6574.  
  6575. To differentiate between the two files, the following convention is 
  6576. recommended, using the same file name. 
  6577.  
  6578. o The infile file should have a .TXT extension. 
  6579. o The outfile file should have a .MSG extension. 
  6580.  
  6581. Note:  The output file cannot have the same file name and extension as the 
  6582.        input file.
  6583.  
  6584.  
  6585. ΓòÉΓòÉΓòÉ <hidden> MKMSGF - Help ΓòÉΓòÉΓòÉ
  6586.  
  6587. There are two ways to display MKMSGF help. 
  6588.  
  6589. Short Syntax Help 
  6590.  
  6591. To display a short version of MKMSGF syntax help, type MKMSGF at the prompt, 
  6592. with no parameters. The following will be displayed: 
  6593.  
  6594. MKMSGF infile[.ext] outfile[.ext] [/V]
  6595. [/D <DBCS range or country>] [/P <code page>]
  6596. [/L <language id,sub id>]
  6597.  
  6598. Long Help 
  6599.  
  6600. To display a longer version of MKMSGF help, including defaults, country codes, 
  6601. and language IDs, type MKMSGF /? at the prompt. The following will be 
  6602. displayed: 
  6603.  
  6604. Use MKMSGF as follows:
  6605.  
  6606. MKMSGF <inputfile> <outputfile> [/V]
  6607.         [/D <DBCS range or country>]
  6608.         [/P <code page>]
  6609.         [/L <language family id,sub id>]
  6610.  
  6611. where the default values are:
  6612.    code page  -  none
  6613.    DBCS range -  none
  6614. A valid DBCS range is: n10,n11,n20,n21,...,nn0,nn1
  6615. A single number is taken as a DBCS country code.
  6616.  
  6617. The valid OS/2 language/sublanguage ID values are:
  6618.  
  6619.  
  6620.  Code  Fam Sub Language               Principal country
  6621.  
  6622.  ARA   1   2   Arabic                 Arab Countries
  6623.  
  6624.  BGR   2   1   Bulgarian              Bulgaria
  6625.  
  6626.  CAT   3   1   Catalan                Spain
  6627.  
  6628.  CHT   4   1   Traditional Chinese    R.O.C.
  6629.  
  6630.  CHS   4   2   Simplified Chinese     P.R.C.
  6631.  
  6632.  CSY   5   1   Czech                  Czechoslovakia
  6633.  
  6634.  DAN   6   1   Danish                 Denmark
  6635.  
  6636.  DEU   7   1   German                 Germany
  6637.  
  6638.  DES   7   2   Swiss German           Switzerland
  6639.  
  6640.  EEL   8   1   Greek                  Greece
  6641.  
  6642.  ENU   9   1   US English             United States
  6643.  
  6644.  ENG   9   2   UK English             United Kingdom
  6645.  
  6646.  ESP   10  1   Castilian Spanish      Spain
  6647.  
  6648.  ESM   10  2   Mexican Spanish        Mexico
  6649.  
  6650.  FIN   11  1   Finnish                Finland
  6651.  
  6652.  FRA   12  1   French                 France
  6653.  
  6654.  FRB   12  2   Belgian French         Belgium
  6655.  
  6656.  FRC   12  3   Canadian French        Canada
  6657.  
  6658.  FRS   12  4   Swiss French           Switzerland
  6659.  
  6660.  HEB   13  1   Hebrew                 Israel
  6661.  
  6662.  HUN   14  1   Hungarian              Hungary
  6663.  
  6664.  ISL   15  1   Icelandic              Iceland
  6665.  
  6666.  ITA   16  1   Italian                Italy
  6667.  
  6668.  ITS   16  2   Swiss Italian          Switzerland
  6669.  
  6670.  JPN   17  1   Japanese               Japan
  6671.  
  6672.  KOR   18  1   Korean                 Korea
  6673.  
  6674.  NLD   19  1   Dutch                  Netherlands
  6675.  
  6676.  NLB   19  2   Belgian Dutch          Belgium
  6677.  
  6678.  NOR   20  1   Norwegian - Bokmal     Norway
  6679.  
  6680.  NON   20  2   Norwegian - Nynorsk    Norway
  6681.  
  6682.  PLK   21  1   Polish                 Poland
  6683.  
  6684.  PTB   22  1   Brazilian Portugues    Brazil
  6685.  
  6686.  PTG   22  2   Portuguese             Portugal
  6687.  
  6688.  RMS   23  1   Rhaeto-Romanic         Switzerland
  6689.  
  6690.  ROM   24  1   Romanian               Romania
  6691.  
  6692.  RUS   25  1   Russian                U.S.S.R.
  6693.  
  6694.  SHL   26  1   Croato-Serbian (Lat    Yugoslavia
  6695.  
  6696.  SHC   26  2   Serbo-Croatian (Cyr    Yugoslavia
  6697.  
  6698.  SKY   27  1   Slovakian              Czechoslovakia
  6699.  
  6700.  SQI   28  1   Albanian               Albania
  6701.  
  6702.  SVE   29  1   Swedish                Sweden
  6703.  
  6704.  THA   30  1   Thai                   Thailand
  6705.  
  6706.  TRK   31  1   Turkish                Turkey
  6707.  
  6708.  URD   32  1   Urdu                   Pakistan
  6709.  
  6710.  BAH   33  1   Bahasa                 Indonesia
  6711.  
  6712.  
  6713. ΓòÉΓòÉΓòÉ <hidden> MKMSGF - Input Message File ΓòÉΓòÉΓòÉ
  6714.  
  6715. The input message file is a standard ASCII file that contains three types of 
  6716. lines: 
  6717.  
  6718. o Comment lines 
  6719. o Component identifier line 
  6720. o Component message lines 
  6721.  
  6722. Comment Lines 
  6723.  
  6724. Comment lines are allowed anywhere in the input message file, except between 
  6725. the component identifier and the first message. Comment lines must begin with a 
  6726. semicolon (;) in the first column. 
  6727.  
  6728. In the Input Message File Example, the comment lines are 
  6729.  
  6730. ; This is a sample of an input
  6731. ; message file for component DOS
  6732. ; starting with three comment lines.
  6733.  
  6734. Component Identifier Line 
  6735.  
  6736. The component-identifier line contains a three-character name identifier that 
  6737. precedes all MKMSGF message numbers. 
  6738.  
  6739. In the example, the component identifier is DOS. 
  6740.  
  6741. Component-Message Lines 
  6742.  
  6743. Each component-message line consists of a message header and an ASCII text 
  6744. message. 
  6745.  
  6746. The message header is comprised of the following parts: 
  6747.  
  6748. o A three-character component identifier 
  6749. o A four-digit message number 
  6750. o A single character specifying message type (E, H, I, P, W, ?) 
  6751. o A colon (:) 
  6752. o Followed by a blank space. 
  6753.  
  6754. The following message types are used: 
  6755.  
  6756. Type   Meaning 
  6757. E      Error 
  6758. H      Help 
  6759. I      Information 
  6760. P      Prompt 
  6761. W      Warning 
  6762. ?      no message assigned to this number 
  6763.  
  6764. The message header must begin in the first column of the line. Only one header 
  6765. can precede the text of a message, although a message can span multiple lines. 
  6766.  
  6767. Message numbers can start at any number, but messages must be numbered 
  6768. sequentially.  If you do not use a message number, you must insert an empty 
  6769. entry in its place in the text file. An empty entry consists of the message 
  6770. number, with ? as the message type, and no text. 
  6771.  
  6772. The character % has a special meaning when used within the text of a message: 
  6773.  
  6774. %0 is placed at the end of a prompt (type P) to prevent DosGetMessage from 
  6775. executing a carriage return and line feed. This allows the user to be prompted 
  6776. for input on the same line as the message text. 
  6777.  
  6778. %1 - %9 are used to identify variable string insertion within the text of a 
  6779. message. These variables correspond to the Itable and IvCount parameters in the 
  6780. DosGetMessage call. 
  6781.  
  6782. Component-Message Example 
  6783.  
  6784. For example, DOS0100E: is DOS error message 100. For additional examples, see 
  6785. the Input Message File Example. 
  6786.  
  6787.  
  6788. ΓòÉΓòÉΓòÉ <hidden> MKMSGF - Output File ΓòÉΓòÉΓòÉ
  6789.  
  6790. The output file contains the indexed message file that DosGetMessage will use. 
  6791. The output-file name can be any valid OS/2* file name, optionally preceded by a 
  6792. drive letter and a path.  The output file cannot have the same name as the 
  6793. input file. 
  6794.  
  6795. To differentiate between the two files, the following convention is 
  6796. recommended, using the same file name. 
  6797.  
  6798. o The infile file should have a .TXT extension. 
  6799. o The outfile file should have a .MSG extension. 
  6800.  
  6801. Help-message file names begin with the component identifier, followed by H.MSG. 
  6802. For example, the help file associated with the component identifier DOS would 
  6803. be DOSH.MSG. 
  6804.  
  6805.  
  6806. ΓòÉΓòÉΓòÉ <hidden> MKMSGF - Options ΓòÉΓòÉΓòÉ
  6807.  
  6808. Text-based messages in different code pages can be created using MKMSGF to 
  6809. display errors, help information, prompt, or provide general information to the 
  6810. application user. 
  6811.  
  6812. MKMSGF uses the following parameter formats to build message files: 
  6813.  
  6814. MKMSGF infile outfile /Pcodepage 
  6815.  
  6816. MKMSGF infile outfile /Ddbcsrange or country id 
  6817.  
  6818. MKMSGF infile outfile /LlangID,VerId 
  6819.  
  6820. MKMSGF infile outfile /V 
  6821.  
  6822. MKMSGF infile outfile /? 
  6823.  
  6824. MKMSGF @controlfile 
  6825.  
  6826. o Infile is the ASCII-text source file. 
  6827.  
  6828.   Example: 
  6829.  
  6830.     MSG
  6831.     MSG0001I: (mm%4dd%4yy) %2%4%1%4%3
  6832.     MSG0002I: (dd%4mm%4yy) %1%4%2%4%3
  6833.     MSG0003I: Current date is: %0
  6834.  
  6835.   %0 is a special argument that displays a prompt for user input. 
  6836.  
  6837.   %1 - %9 are the arguments the user can use to insert text in a message. 
  6838.  
  6839. o Outfile is the binary output message file. 
  6840.  
  6841. o @controlfile is the message definition file. 
  6842.  
  6843. Options 
  6844.  
  6845. /P        Code-page ID for the input message file. 
  6846.  
  6847. /D        DbcsRange or country ID for the input message file. 
  6848.  
  6849. /L        Language family ID (one word) and language version ID (one word). 
  6850.  
  6851. /V        Verbose display of message file control variables as the message file 
  6852.           is being created. See Verbose Option Output Example. 
  6853.  
  6854. /?        Help display of command syntax for MKMSGF. 
  6855.  
  6856. Note:  Any combination of /P, /D, /L, and /V switches can be used for either 
  6857.        the command line or @controlfile execution method. 
  6858.  
  6859. The / switch prefix and the - prefix can be used interchangeably when defining 
  6860. switches to MKMSGF. 
  6861.  
  6862.  
  6863. ΓòÉΓòÉΓòÉ <hidden> MKMSGF - /Verbose Option Output Example ΓòÉΓòÉΓòÉ
  6864.  
  6865. Following is a sample of MKMSGF output, using the Verbose option (/V). This 
  6866. output was produced using the following command: 
  6867.  
  6868. mkmsgf myapp.txt myapp.msg /v
  6869.  
  6870.   strIn     = myapp.txt
  6871.   strOut    = myapp.msg
  6872.   StrIncDir = (null)
  6873.   CodePages = 437
  6874.   Language family id = 0 and sub id = 0
  6875.   Language family id and sub id = unspecified
  6876.   flags     = none
  6877.   CP_type   = SBCS
  6878. "myapp.txt": length = 382 bytes.
  6879. 29 messages scanned.  Writing output file...
  6880. Size of table entry: word
  6881.  
  6882.  
  6883. ΓòÉΓòÉΓòÉ <hidden> MKMSGF - /P Option ΓòÉΓòÉΓòÉ
  6884.  
  6885. The Code-page option (/P) specifies the code-page ID for that input message 
  6886. file. 
  6887.  
  6888. Up to 16 /P combinations can be saved with the message file. 
  6889.  
  6890. /P cannot be used to identify DBCS data. 
  6891.  
  6892.  
  6893. ΓòÉΓòÉΓòÉ <hidden> MKMSGF - /D Option ΓòÉΓòÉΓòÉ
  6894.  
  6895. The DBCS option (/D) specifies the DBCSRange or country ID for that input 
  6896. message file. 
  6897.  
  6898. Valid DBCS country ID will cause the initialization of valid DBCS ranges to be 
  6899. set up for this file. For additional information about dbcs, see Double-Byte 
  6900. Character Set. 
  6901.  
  6902.  
  6903. ΓòÉΓòÉΓòÉ <hidden> MKMSGF - /L Option ΓòÉΓòÉΓòÉ
  6904.  
  6905. The Language option (/L) specifies the language family ID (one word) and 
  6906. language version ID (one word). 
  6907.  
  6908. Valid combination of language family and language version will be set for this 
  6909. file. 
  6910.  
  6911. A valid language family with invalid or undefined language version id will 
  6912. cause a default value of 1 to be set for language version. 
  6913.  
  6914.  
  6915. ΓòÉΓòÉΓòÉ <hidden> MKMSGF - Control Files ΓòÉΓòÉΓòÉ
  6916.  
  6917. The control file (@controlfile) is used to create multiple-code-page message 
  6918. files.  The at sign (@) is not part of the file name, but rather, a delimiter 
  6919. required before a control-file name. 
  6920.  
  6921. The control file has the following format: 
  6922.  
  6923. Example: 
  6924.  
  6925. root.in root.out /Pcodepage /Ddbcsrang/ctryid /LlangID,VerId
  6926. sub.001 sub1.out /Pcodepage /Ddbcsrang/ctryid /LlangID,VerId
  6927.                  .
  6928.                  .
  6929. sub.00n subn.out /Pcodepage /Ddbcsrang/ctryid /LlangID,VerId 
  6930.  
  6931. The help option (/?)  is invalid due to the purpose of the definition file. 
  6932.  
  6933. Note:  Any combination of /P /D /L and /V switches can be used for either the 
  6934.        command line or msg_definition_file execution method. 
  6935.  
  6936.  
  6937. ΓòÉΓòÉΓòÉ <hidden> MKMSGF - Input Message File Example ΓòÉΓòÉΓòÉ
  6938.  
  6939. Following is an example of an input message file: 
  6940.  
  6941. ; This is a sample of an input
  6942. ; message file for component MAB
  6943. ; starting with three comment lines.
  6944. MAB
  6945. MAB0100E: File not found
  6946. MAB0101?:
  6947. MAB0102H: Usage: del [drive:][path] filename
  6948. MAB0103?:
  6949. MAB0104I: %1 files copied
  6950. MAB0105W: Warning! All data will be destroyed!
  6951. MAB0106?:
  6952. MAB0107?:
  6953. MAB0108P: Do you wish to apply these patches (Y or N)? %0
  6954. MAB0109E: Divide overflow
  6955.  
  6956.  
  6957. ΓòÉΓòÉΓòÉ <hidden> MKMSGF - Error Messages ΓòÉΓòÉΓòÉ
  6958.  
  6959. MKMSGF: Error writing output file 
  6960.           Explanation: Error during output to target file. 
  6961.           Action: Make sure there is sufficient disk space or that the drive is 
  6962.           ready.  Retry the command. 
  6963.  
  6964. MKMSGF: Error reading input file 
  6965.           Explanation: Error during input from source file. 
  6966.           Action: Make sure the source message file exists and that the drive 
  6967.           is ready.  Retry the command. 
  6968.  
  6969. MKMSGF: File not found 
  6970.           Explanation: Input file could not be found 
  6971.           Action: Retry the command, using the correct source message file 
  6972.           name. 
  6973.  
  6974. MKMSGF: Insufficient storage 
  6975.           Explanation: Not enough storage to execute program or too many 
  6976.           messages in the file.  Message limit is about 6000. 
  6977.           Action: Reduce the number of programs running in your system.  Or 
  6978.           reduce the size of the message file by either deleting messages or by 
  6979.           having shorter messages.  Retry the command. 
  6980.  
  6981. MKMSGF: Invalid message file format 
  6982.           Explanation: Input file is not a recognizable message text file. 
  6983.           Action: If an incorrect file name was entered, retry the command with 
  6984.           the correct source message file name. 
  6985.  
  6986. MKMSGF: Message ID out of sequence 
  6987.           Explanation: A message was detected that was out of the required 
  6988.           sequential order. 
  6989.           Action: Correct the error by editing your source message file and 
  6990.           renumbering the messages. You may also want to delete or insert the 
  6991.           appropriate message numbers to achieve the required sequential order. 
  6992.  
  6993. MKMSGF: Message XXXX too long 
  6994.           Explanation: The message was too long to be processed (limit is 
  6995.           approximately 2K characters). 
  6996.           Action: Correct the error by editing your source message file and 
  6997.           making the message shorter. Then, retry the command. 
  6998.  
  6999. MKMSGF: infile[.ext] outfile[.ext] [/V] 
  7000. [/D <DBCS range or country>] [/P <code page>] [/L <language id,sub id>] 
  7001.           Explanation: This is the proper syntax for MKMSGF.  It is displayed 
  7002.           when no operands are specified on the command line and after some 
  7003.           syntax errors. 
  7004.           Action: None 
  7005.  
  7006. MKMSGF: Syntax error 
  7007.           Explanation: The user entered the command incorrectly. 
  7008.           Action: Retry the command using proper syntax. To display the proper 
  7009.           syntax, just enter MKMSGF on the command line. 
  7010.  
  7011. MKMSGF: Codepage %s error in numeric conversion 
  7012.           Explanation: The code-page ID specified with the /P option is not 
  7013.           numeric. The message file is built with a code-page of zero. 
  7014.           Action: Retry the command using the correct code-page specification. 
  7015.  
  7016. MKMSGF: Codepage %s is all zeroes 
  7017.           Explanation: The code-page ID specified with the /P option is zero. 
  7018.           The message file is built with a code-page of zero. 
  7019.           Action: Retry the command using the correct code-page specification. 
  7020.  
  7021. MKMSGF: Codepage %s is too large 
  7022.           Explanation: The code-page ID specified with the /P option is too 
  7023.           large. The message file is built with a code-page of zero. 
  7024.           Action: Retry the command using the correct code-page specification. 
  7025.  
  7026. MKMSGF: Country %u is not supported 
  7027.           Explanation: The country ID specified in the /D option is not 
  7028.           supported. MKMSGF processing is stopped. 
  7029.           Action: Retry the command using the correct country code 
  7030.           specification. 
  7031.  
  7032. MKMSGF: DBCS code page not found 
  7033.           Explanation: No DBCS code page has been found that supports the DBCS 
  7034.           Range specified in the /D option.  MKMSGF processing is stopped. 
  7035.           Action: Retry the command using the correct DBCS ranges or country ID 
  7036.           for the input message file. 
  7037.  
  7038. MKMSGF: Input file same as output file 
  7039.           Explanation: The input and output file names are the same, processing 
  7040.           is stopped. 
  7041.           Action: Correct the command line or the controlfile and restart 
  7042.           MKMSGF. 
  7043.  
  7044. MKMSGF: Invalid language or sub id 
  7045.           Explanation: The language family ID specified in the /L option is not 
  7046.           supported.  The message file is built with a language family ID of 
  7047.           Action: Retry the command using the correct language family ID. 
  7048.  
  7049. MKMSGF: Language family %s error in numeric conversion 
  7050.           Explanation: The language family ID specified with the /L option is 
  7051.           not numeric.  The message file is built with a language family ID of 
  7052.           zero. 
  7053.           Action: Retry the command using the correct language family ID. 
  7054.  
  7055. MKMSGF: Language family %s is all zeroes 
  7056.           Explanation: The language family ID specified with the /L option is 
  7057.           zero. The message file is built with a language family ID of zero. 
  7058.           Action: Retry the command using the correct language family ID. 
  7059.  
  7060. MKMSGF: Language family %s is too large 
  7061.           Explanation: The language family ID specified with the /L option is 
  7062.           not supported.  The message file is built with a language family ID 
  7063.           of zero. 
  7064.           Action: Retry the command using the correct language family ID. 
  7065.  
  7066. MKMSGF: More than NN codepages entered 
  7067.           Explanation: A maximum of NN code-page ID's may specified for a 
  7068.           single message file, Only the first NN will be accepted. 
  7069.           Action: Retry the command using the correct code-page 
  7070.           specification(s). 
  7071.  
  7072. MKMSGF: No sub id using 1 default 
  7073.           Explanation: The language version ID specified in the /L option is 
  7074.           either invalid or not supported.  The message file is built using the 
  7075.           default value shown. 
  7076.           Action: Retry the command using the correct language version ID. 
  7077.  
  7078. MKMSGF: Sub id %s error in numeric conversion 
  7079.           Explanation: The language version specified with the /L option is not 
  7080.           numeric. The message file is built with a default language version. 
  7081.           Action: Retry the command using the correct language version ID. 
  7082.  
  7083.  
  7084. ΓòÉΓòÉΓòÉ 13. MARKEXE ΓòÉΓòÉΓòÉ
  7085.  
  7086. Select one: 
  7087.  
  7088. Introduction 
  7089. Syntax 
  7090. Syntax Definitions 
  7091. Viewing Program Type 
  7092. Setting Program Type 
  7093.  
  7094.  
  7095. ΓòÉΓòÉΓòÉ <hidden> MARKEXE - Introduction ΓòÉΓòÉΓòÉ
  7096.  
  7097. The MARKEXE program enables you to view and set the program type for an 
  7098. executable file.  The program type identifies the OS/2* sessions in which a 
  7099. program can run. 
  7100.  
  7101. Use MARKEXE with the OS/2 Linear Executable Linker (LINK386) or the OS/2 
  7102. Segmented Executable Linker (LINK) to change or set the program type of 
  7103. programs you have created. 
  7104.  
  7105. You can set DLL initialization and termination and also enable long file name 
  7106. support. When using LINK386, you can set DLL initialization and termination; 
  7107. long file name support is already set. When using LINK, you can set DLL 
  7108. initialization and long file name support. 
  7109.  
  7110.  
  7111. ΓòÉΓòÉΓòÉ <hidden> MARKEXE - Command-Line Syntax ΓòÉΓòÉΓòÉ
  7112.  
  7113. MARKEXE uses the following syntax: 
  7114.  
  7115. MARKEXE [/?] [FORCE] [NO] [options] filename...
  7116.  
  7117. Filename is a file name or a list of file names. Global file-name characters 
  7118. (*.EXE) also can be used. For descriptions of the above terms, see Syntax 
  7119. Definitions. If no option is given, DISPLAY is assumed. 
  7120.  
  7121. Typing MARKEXE /? at the command line displays the appropriate copyright 
  7122. statement along with a list of options. 
  7123.  
  7124.   DISPLAY         - display status of flags
  7125.   DLLINIT         - per-process initialization
  7126.   DLLTERM         - per-process termination
  7127.   WINDOWAPI       - window api (PM application)
  7128.   WINDOWCOMPAT    - window compatible application
  7129.   NOTWINDOWCOMPAT - not window compatible application
  7130.   UNSPECIFIED     - unspecified application type
  7131.   LFNS            - long file name support
  7132.  
  7133.  
  7134. ΓòÉΓòÉΓòÉ <hidden> MARKEXE - Syntax Definitions ΓòÉΓòÉΓòÉ
  7135.  
  7136. MARKEXE has the following keywords, options, and program types. You can also 
  7137. specify any number of files to be viewed or marked. 
  7138.  
  7139. KEYWORDS 
  7140.  
  7141. FORCE 
  7142.      Marks the executable file with OS/2 as the target operating system even 
  7143.      though the file was marked for another operating system. Using FORCE might 
  7144.      produce internally inconsistent executable files. 
  7145.  
  7146. NO 
  7147.      Sets the command to the opposite condition. This keyword does not apply to 
  7148.      the DISPLAY, UNSPECIFIED, or WINDOWAPI options. 
  7149.  
  7150. OPTIONS 
  7151.  
  7152. DISPLAY 
  7153.      Displays the application type in a message; does not make any changes. 
  7154.  
  7155. DLLINIT 
  7156.      Sets per process initialization for the dynamic link library. (Use with 
  7157.      LINK386 only.) 
  7158.  
  7159. DLLTERM 
  7160.      Sets per process termination for the dynamic link library. (Use with LINK 
  7161.      only.) 
  7162.  
  7163. LFNS 
  7164.      Enables support of long file names.  (Use with LINK only.) 
  7165.  
  7166. PROGRAM TYPES 
  7167.  
  7168. MARKEXE does not modify the file if the executable file's program type is the 
  7169. same as the requested type.  It displays a message instead. 
  7170.  
  7171. WINDOWAPI 
  7172.      The application is a Presentation Manager* application and can run in the 
  7173.      Presentation Manager session only. 
  7174.  
  7175. WINDOWCOMPAT 
  7176.      The application can run in a Presentation Manager window or in an 
  7177.      full-screen session. 
  7178.  
  7179. NOTWINDOWCOMPAT 
  7180.      The application must run in an OS/2 full-screen session. 
  7181.  
  7182. UNSPECIFIED 
  7183.      The application type is not known. By default, the OS/2 operating system 
  7184.      will force the program to run in a full-screen session. 
  7185.  
  7186. Note:  Specifying an incorrect program type might cause undesirable results 
  7187.        when you try to run that program. For example, do not change a 
  7188.        WINDOWCOMPAT program to WINDOWAPI.
  7189.  
  7190.  
  7191. ΓòÉΓòÉΓòÉ <hidden> MARKEXE - Viewing Program Type ΓòÉΓòÉΓòÉ
  7192.  
  7193. To display the program type of an executable file without changing the file, 
  7194. specify only a file name, omitting an option. 
  7195.  
  7196.    MARKEXE filename.exe
  7197.  
  7198. Example 
  7199.  
  7200. To view the program type of MYPROG.EXE, type the following: 
  7201.  
  7202.    MARKEXE myprog.exe
  7203.  
  7204. MARKEXE displays the type in a message that looks like this: 
  7205.  
  7206.    myprog.exe: OS/2 1.x, WINDOWCOMPAT, LFNS
  7207.  
  7208.  
  7209. ΓòÉΓòÉΓòÉ <hidden> MARKEXE - Setting Program Type ΓòÉΓòÉΓòÉ
  7210.  
  7211. To set the program type of an executable file, specify one of the program 
  7212. types. More than one executable file can be set to the same program type on a 
  7213. single command line. 
  7214.  
  7215.    MARKEXE type filename.exe another.exe
  7216.  
  7217. Examples 
  7218.  
  7219. To set WINDOWCOMPAT as the program type of MYPROG.EXE, type: 
  7220.  
  7221.    MARKEXE WINDOWCOMPAT myprog.exe
  7222.  
  7223. To set WINDOWAPI as the program type of several executable files, type: 
  7224.  
  7225.    MARKEXE WINDOWAPI marion.exe alex.exe
  7226.  
  7227.  
  7228. ΓòÉΓòÉΓòÉ 14. NMAKE ΓòÉΓòÉΓòÉ
  7229.  
  7230.  
  7231. ΓòÉΓòÉΓòÉ <hidden> Topics ΓòÉΓòÉΓòÉ
  7232.  
  7233. Select One: 
  7234.  
  7235. Introduction 
  7236. Help 
  7237. Syntax 
  7238. Running NMAKE 
  7239. Command Line 
  7240. Command-Line Syntax 
  7241. Command Files 
  7242. Options 
  7243. Description Files 
  7244. Using Macros 
  7245. Command Line Macros 
  7246. Directives 
  7247. Inference Rules 
  7248. Pseudotargets 
  7249. Error Messages 
  7250.  
  7251.  
  7252. ΓòÉΓòÉΓòÉ <hidden> NMAKE - Introduction ΓòÉΓòÉΓòÉ
  7253.  
  7254. The Program Maintenance Utility (NMAKE) automates the process of updating 
  7255. project files. NMAKE compares the modification dates for one set of files (the 
  7256. target files) with those of another set of files (the dependent files). If any 
  7257. dependent files have changed more recently than the target files, NMAKE 
  7258. executes a series of commands to bring the targets up-to-date. 
  7259.  
  7260. Why Use NMAKE? 
  7261.  
  7262. The most common use of NMAKE is to automate the process of updating a project 
  7263. after you make a change to a source file. Large projects tend to have many 
  7264. source files. Often, only a few of your source files need to be compiled when 
  7265. you make a change. You set up a special text file called a "description" file 
  7266. (or "makefile") that tells NMAKE: 
  7267.  
  7268. o Which files depend on others 
  7269. o Which commands, such as compile and link commands, need to be carried out to 
  7270.   bring your program up-to-date 
  7271.  
  7272. This use of NMAKE is only one example of its power. By building suitable 
  7273. description files, you can use NMAKE to 
  7274.  
  7275. o Make backups 
  7276. o Configure data files 
  7277. o Run programs when data files are modified 
  7278.  
  7279.  
  7280. ΓòÉΓòÉΓòÉ <hidden> NMAKE - Help ΓòÉΓòÉΓòÉ
  7281.  
  7282. To display NMAKE help, type NMAKE /? at the prompt. The appropriate copyright 
  7283. statement appears, along with the following: 
  7284.  
  7285. Usage:
  7286.     NMAKE @commandfile
  7287.     NMAKE /help
  7288.     NMAKE [/nologo] [/acdeinpqrst?] [/f makefile] [/x stderrfile] 
  7289.  
  7290. [macrodefs][targets]
  7291.  
  7292. Where the options stand for
  7293.  /a    force All targets to be built
  7294.  /c    Cryptic mode; suppress sign-on banner & warning messages
  7295.  /d    Display modification dates
  7296.  /e    Environment variables override macros in the makefile
  7297.  /i    Ignore exit codes of commands invoked
  7298.  /n    No execute mode; display commands only
  7299.  /p    Print macro definitions & target descriptions
  7300.  /q    Query if target is up to date; for use in batch files
  7301.  /r    inference Rules from 'tools.ini' to be ignored
  7302.  /s    Silent execution of commands
  7303.  /t    Touch targets with current date & time
  7304.  /?    Help message
  7305.  /help  Help message
  7306.  /nologo do not display sign-on banner
  7307.  
  7308.  
  7309. ΓòÉΓòÉΓòÉ <hidden> NMAKE - Command-Line Syntax ΓòÉΓòÉΓòÉ
  7310.  
  7311. NMAKE [options] [macrodefinitions] [targets] [/F filename] * 
  7312.  
  7313. Command-Line Syntax Example 
  7314.  
  7315. NMAKE /S "program = flash" SORT.EXE SEARCH.EXE
  7316.  
  7317. The above example 
  7318.  
  7319. o Invokes NMAKE with the /S option 
  7320. o Defines a macro, assigning the string "flash" to the string "program" 
  7321. o Specifies two targets: SORT.EXE and SEARCH.EXE 
  7322.  
  7323. By default, NMAKE uses the file named MAKEFILE as the description file 
  7324.  
  7325.  
  7326. ΓòÉΓòÉΓòÉ <hidden> NMAKE - Using the Command Line ΓòÉΓòÉΓòÉ
  7327.  
  7328. Usage Notes 
  7329.  
  7330. o All fields are optional. 
  7331. o NMAKE always looks first in the current directory for a description file 
  7332.   called MAKEFILE. If MAKEFILE does not exist, NMAKE uses the <filename> given 
  7333.   with the /F (specify description file) option. 
  7334.  
  7335. <options> 
  7336.      Specifies options that modify NMAKE's actions. 
  7337.  
  7338. <macrodefinitions> 
  7339.      Lists macro definitions for NMAKE to use.  Macro definitions that contain 
  7340.      spaces must be enclosed by double quotation marks. 
  7341.  
  7342. <targets> 
  7343.      Specifies the names of one or more target files to build.  If you do not 
  7344.      list any targets, NMAKE builds the first target in the description file. 
  7345.  
  7346. /F <filename> 
  7347.      Gives the name of the description file where you specify file dependencies 
  7348.      and which commands to execute when a file is out-of-date. 
  7349.  
  7350.  
  7351. ΓòÉΓòÉΓòÉ <hidden> Running NMAKE ΓòÉΓòÉΓòÉ
  7352.  
  7353. Run NMAKE by typing NMAKE on the operating-system command line. Supply input to 
  7354. NMAKE by either of two methods: 
  7355.  
  7356. o Enter the input directly on the  command line 
  7357. o Put your input into a command file (a text file also called a response file) 
  7358.   and enter the file name on the command line. 
  7359.  
  7360. Press CTRL+C at any time during an NMAKE run to return to the operating system. 
  7361.  
  7362. Note:  Under the OS/2 operating system, do not use the ampersand character (&) 
  7363.        to combine the NMAKE command with the CD, CHDIR, or SET command.
  7364.  
  7365.  
  7366. ΓòÉΓòÉΓòÉ <hidden> NMAKE - Using NMAKE Command Files ΓòÉΓòÉΓòÉ
  7367.  
  7368. A command file is a response file used to extend command-line input to NMAKE. 
  7369.  
  7370. You can split input to NMAKE between the command line and a command file.  Use 
  7371. the name of a command file (preceded by @) where you normally type the input 
  7372. information on the command line. 
  7373.  
  7374. Why Use a Command File? 
  7375.  
  7376. Use a command file for 
  7377.  
  7378. o Complex and long commands you type frequently 
  7379. o Strings of command-line arguments, such as macro definitions, that exceed the 
  7380.   limit for command-line length 
  7381.  
  7382.   Note:  A command file is not the same as a description file.
  7383.  
  7384.  
  7385. Command File Syntax 
  7386.  
  7387. To provide input to NMAKE with a command file, type 
  7388.  
  7389. NMAKE @commandfile
  7390.  
  7391. In the <commandfile> field, enter the name of a file containing the same 
  7392. information as is normally entered on the command line. 
  7393.  
  7394. NMAKE treats line breaks that occur between arguments as spaces. Macro 
  7395. definitions can span multiple lines if you end each line except the last with a 
  7396. backslash (\). Macro definitions that contain spaces must be enclosed by 
  7397. quotation marks, just as if they were entered directly on the command line. 
  7398.  
  7399. Example 
  7400.  
  7401. The following is a command file called UPDATE: 
  7402.  
  7403. /S "program \
  7404. = flash" SORT.EXE SEARCH.EXE
  7405.  
  7406. You can use this command file by typing the following command: 
  7407.  
  7408. NMAKE @UPDATE
  7409.  
  7410. This runs NMAKE using: 
  7411.  
  7412. o The /S option 
  7413. o The macro definition "program = flash" 
  7414. o The targets specified as SORT.EXE and SEARCH.EXE 
  7415. o The description file MAKEFILE by default 
  7416.  
  7417. Note that the backslash allows the macro definition to span two lines. 
  7418.  
  7419.  
  7420. ΓòÉΓòÉΓòÉ <hidden> NMAKE Options ΓòÉΓòÉΓòÉ
  7421.  
  7422. NMAKE Options Example 
  7423. /? 
  7424. /A 
  7425. /C 
  7426. /D 
  7427. /E 
  7428. /F 
  7429. /HELP 
  7430. /I 
  7431. /N 
  7432. /NOLOGO 
  7433. /P 
  7434. /Q 
  7435. /R 
  7436. /S 
  7437. /T 
  7438. /X 
  7439.  
  7440.  
  7441. ΓòÉΓòÉΓòÉ <hidden> NMAKE - Options Summary ΓòÉΓòÉΓòÉ
  7442.  
  7443. Usage Notes 
  7444.  
  7445. o Option characters are not case sensitive; /I and /i are equivalent. 
  7446. o You can use either a slash or dash before the option characters; -a and /a 
  7447.   are equivalent. 
  7448.  
  7449. /?  Display Short Help 
  7450. /A  Build All Targets 
  7451. /C  Suppress Messages 
  7452. /D  Display Modification Dates 
  7453. /E  Override Environment Variables 
  7454. /F  Specify Description File 
  7455. /HELP Display Help 
  7456. /I  Ignore Exit Codes 
  7457. /N  Display Commands 
  7458. /NOLOGO Suppress Sign-On Banner 
  7459. /P  Print Macro and Target Definitions 
  7460. /Q  Return Exit Code 
  7461. /R  Ignore TOOLS.INI File 
  7462. /S  Suppress Command Display 
  7463. /T  Change Target Modification Dates 
  7464. /X  Produce standard error file 
  7465.  
  7466.  
  7467. ΓòÉΓòÉΓòÉ <hidden> NMAKE - Options Example ΓòÉΓòÉΓòÉ
  7468.  
  7469. NMAKE /F QUICK.MAK /C F1 F2
  7470.  
  7471. The command above causes NMAKE to execute the commands in the description file 
  7472. QUICK.MAK to update the targets F1 and F2. The /C option suppresses the display 
  7473. of nonfatal error messages and warnings. 
  7474.  
  7475. NMAKE /D /N F1
  7476.  
  7477. The command above causes NMAKE to display the commands it would execute to 
  7478. update the target F1. The current directory is assumed to contain a file named 
  7479. MAKEFILE. The /D option displays the modification date of each file, and the /N 
  7480. option displays the commands without executing them. 
  7481.  
  7482.  
  7483. ΓòÉΓòÉΓòÉ <hidden> NMAKE - OPTION X (/X) ΓòÉΓòÉΓòÉ
  7484.  
  7485. Syntax: /X stderrfile 
  7486.  
  7487. This option produces a standard error file. 
  7488.  
  7489.  
  7490. ΓòÉΓòÉΓòÉ <hidden> NMAKE - Build All Targets (/A) ΓòÉΓòÉΓòÉ
  7491.  
  7492. Syntax: /A 
  7493.  
  7494. This option builds all specified targets even if they are not out-of-date with 
  7495. respect to their dependent files. 
  7496.  
  7497. See Description Files 
  7498.  
  7499.  
  7500. ΓòÉΓòÉΓòÉ <hidden> NMAKE - Suppress Messages (/C0) ΓòÉΓòÉΓòÉ
  7501.  
  7502. Syntax: /C 
  7503.  
  7504. This option suppresses display of the NMAKE sign-on banner, nonfatal error 
  7505. messages, and warning messages. To suppress the sign-on banner without 
  7506. suppressing other messages, use the /NOLOGO option. 
  7507.  
  7508.  
  7509. ΓòÉΓòÉΓòÉ <hidden> NMAKE - Display Modification Dates (/D) ΓòÉΓòÉΓòÉ
  7510.  
  7511. Syntax: /D 
  7512.  
  7513. This option displays the modification date of each file when the dates of 
  7514. target and dependent files are checked. 
  7515.  
  7516. See Description Files 
  7517.  
  7518.  
  7519. ΓòÉΓòÉΓòÉ <hidden> NMAKE - Override Environment Variables (/E) ΓòÉΓòÉΓòÉ
  7520.  
  7521. Syntax: /E 
  7522.  
  7523. This option disables inherited macro redefinition. 
  7524.  
  7525. NMAKE inherits all current environment variables as macros, which can be 
  7526. redefined in a description file.  The /E option disables any redefinition - the 
  7527. inherited macro always has the value of the environment variable. 
  7528.  
  7529.  
  7530. ΓòÉΓòÉΓòÉ <hidden> NMAKE - Specify Description File (/F) ΓòÉΓòÉΓòÉ
  7531.  
  7532. Syntax: /F filename 
  7533.  
  7534. This option specifies <filename> as the name of the description file to use. If 
  7535. a dash (-) is entered instead of a file name, NMAKE reads a description file 
  7536. from the standard input device, typically the keyboard. 
  7537.  
  7538. If a filename is not specified, it defaults to MAKEFILE. 
  7539.  
  7540.  
  7541. ΓòÉΓòÉΓòÉ <hidden> NMAKE - Display Help (/HELP or /?) ΓòÉΓòÉΓòÉ
  7542.  
  7543. Syntax:   /HELP    OR   /HELP 
  7544.  
  7545. This option displays a brief summary of NMAKE syntax. 
  7546.  
  7547.  
  7548. ΓòÉΓòÉΓòÉ <hidden> NMAKE - Ignore Exit Codes (/I) ΓòÉΓòÉΓòÉ
  7549.  
  7550. Syntax: /I 
  7551.  
  7552. This option ignores exit codes (also called errorlevel or return codes) 
  7553. returned by programs such as compilers or linkers called by NMAKE. If this 
  7554. option is not specified, NMAKE ends when any program returns a nonzero exit 
  7555. code. 
  7556.  
  7557.  
  7558. ΓòÉΓòÉΓòÉ <hidden> NMAKE - Display Commands (/N) ΓòÉΓòÉΓòÉ
  7559.  
  7560. Syntax: /N 
  7561.  
  7562. This option causes NMAKE commands to be displayed but not executed. Use the /N 
  7563. option to 
  7564.  
  7565. o Check which targets are out-of-date with respect to their dependents 
  7566.  
  7567. o Debug description files 
  7568.  
  7569.  
  7570. ΓòÉΓòÉΓòÉ <hidden> NMAKE - Suppress Sign-On Banner (/NOLOGO) ΓòÉΓòÉΓòÉ
  7571.  
  7572. Syntax: /NOLOGO 
  7573.  
  7574. This option suppresses the sign-on banner display when NMAKE is started.  If 
  7575. you want to suppress nonfatal error messages and warnings as well, use the 
  7576. suppress messages (/C) option. 
  7577.  
  7578.  
  7579. ΓòÉΓòÉΓòÉ <hidden> NMAKE - Print Macro and Target Definitions (/P) ΓòÉΓòÉΓòÉ
  7580.  
  7581. Syntax: /P 
  7582.  
  7583. This option writes out all macro definitions and target definitions. Output is 
  7584. sent to standard output (typically the display). 
  7585.  
  7586.  
  7587. ΓòÉΓòÉΓòÉ <hidden> NMAKE - Return Exit Code (/Q) ΓòÉΓòÉΓòÉ
  7588.  
  7589. Syntax: /Q 
  7590.  
  7591. This option causes NMAKE to return either of the following: 
  7592.  
  7593. o A 0 exit code if all targets built during an NMAKE run are up to date 
  7594. o A nonzero exit code if they are not up to date 
  7595. Use this option to run NMAKE from within a batch file. 
  7596.  
  7597.  
  7598. ΓòÉΓòÉΓòÉ <hidden> NMAKE - Ignore TOOLS.INI File (/R) ΓòÉΓòÉΓòÉ
  7599.  
  7600. Syntax: /R 
  7601.  
  7602. This option ignores the following: 
  7603.  
  7604. o All inference rules and macros contained in the TOOLS.INI file 
  7605. o All predefined inference rules and macros 
  7606.  
  7607. See Using a TOOLS.INI File 
  7608.  
  7609.  
  7610. ΓòÉΓòÉΓòÉ <hidden> NMAKE - Suppress Command Display (/S) ΓòÉΓòÉΓòÉ
  7611.  
  7612. Syntax: /S 
  7613.  
  7614. This option suppresses the display of commands as they are executed by NMAKE. 
  7615. It does not suppress the display of messages generated by the commands 
  7616. themselves. 
  7617.  
  7618. The /N command (Display Commands) takes precedence over the /S option. If you 
  7619. use /N and /S together, commands are displayed but not executed. 
  7620.  
  7621.  
  7622. ΓòÉΓòÉΓòÉ <hidden> NMAKE - Change Target Modification Dates (/T) ΓòÉΓòÉΓòÉ
  7623.  
  7624. Syntax: /T 
  7625.  
  7626. This option changes the modification dates for out-of-date target files to the 
  7627. current date. No commands are executed, and the target file is left unchanged. 
  7628.  
  7629.  
  7630. ΓòÉΓòÉΓòÉ <hidden> NMAKE - Description Files ΓòÉΓòÉΓòÉ
  7631.  
  7632. NMAKE uses a description file to determine what to do. In its simplest form, a 
  7633. description file tells NMAKE which files depend on others and which commands 
  7634. need to be executed if a file changes. 
  7635.  
  7636. A description file looks like this: 
  7637.  
  7638. targets... : dependents...Γöé
  7639.      command              Γöé"ΓöÇΓöÇΓöÇdescription block
  7640.         :                 Γöé
  7641. targets... : dependents...
  7642.      command
  7643.  
  7644. Description File Topics 
  7645.  
  7646. Description Blocks 
  7647. Special Features 
  7648.  
  7649.  
  7650. ΓòÉΓòÉΓòÉ <hidden> NMAKE - Description Blocks ΓòÉΓòÉΓòÉ
  7651.  
  7652. A dependent relationship between files is defined in a description block. A 
  7653. "description block" indicates the relationship among various parts of the 
  7654. program. It contains commands to bring all components up to date. The 
  7655. description file can contain any number of description blocks. 
  7656.  
  7657. Description File                 Description Block
  7658. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ     ΓöîΓöÇΓöÇΓöÇ ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  7659. Γöé Description  Γöé     Γöé     Γöé                            Γöé
  7660. Γöé Block 1      Γöé     Γöé     Γöé targets... : dependents... Γöé
  7661. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ ΓöÇΓöÇΓöÇΓöÇΓöÿ     Γöé   command                  Γöé
  7662. Γöé Descr Blk 2  Γöé           Γöé   command                  Γöé
  7663. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ ΓöÇΓöÇΓöÇΓöÇΓöÉ     Γöé   command                  Γöé
  7664. Γöé      :       Γöé     Γöé     Γöé      :                     Γöé
  7665. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ     Γöé     Γöé                            Γöé
  7666. Γöé Descr Blk n  Γöé     Γöé     Γöé                            Γöé
  7667. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ     ΓööΓöÇΓöÇΓöÇ ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  7668.  
  7669.  
  7670. ΓòÉΓòÉΓòÉ <hidden> NMAKE - Description File Special Features ΓòÉΓòÉΓòÉ
  7671.  
  7672. o Description files can contain macro definitions and use macros in description 
  7673.   blocks. Macros allow easy substitution of one text string for another. 
  7674.  
  7675. o Description files can contain inference rules.  Inference rules allow NMAKE 
  7676.   to infer which commands to execute based on the file name extensions used for 
  7677.   targets and dependents. 
  7678.  
  7679. o You can specify directories for NMAKE to search for dependent  files by using 
  7680.   the following syntax: 
  7681.  
  7682.     targets : {directory1;directory2...}dependents
  7683.  
  7684.   NMAKE searches the current directory first, then <directory1>, <directory2>, 
  7685.   and so on. 
  7686.  
  7687. o A command can be placed on the same line as the target and dependent files by 
  7688.   using a semicolon (;) as depicted below: 
  7689.  
  7690.     targets... : dependents... ; command
  7691.  
  7692. o A long command can span several lines if each line ends with a backslash ( \ 
  7693.   ): 
  7694.  
  7695.     command \
  7696.       continuation of command
  7697.  
  7698. o The execution of a command can be modified if you precede the command with 
  7699.   special characters 
  7700.  
  7701. o If you do not specify a command in a description block, NMAKE looks for an 
  7702.   inference rule to build the target. 
  7703.  
  7704. o DOS and OS/2 wild-card characters (* and ?) can be used in description 
  7705.   blocks. For example, the following description block compiles all source 
  7706.   files with the .C extension: 
  7707.  
  7708.     ASTRO.EXE : *.C
  7709.       ICC *.C
  7710.  
  7711. o NMAKE uses several punctuation characters in its syntax. To use one of these 
  7712.   characters as a literal character, place an escape character ( ^ ) in front 
  7713.   of it. 
  7714.  
  7715. o Normally a target file can appear in only one description block. A special 
  7716.   syntax allows you to use a target in several description blocks. 
  7717.  
  7718. o A special syntax allows you to determine the drive, path, base name, and 
  7719.   extension of the first dependent file in a description block. 
  7720.  
  7721.  
  7722. ΓòÉΓòÉΓòÉ <hidden> NMAKE - Macros ΓòÉΓòÉΓòÉ
  7723.  
  7724. Macros provide a convenient way to replace one string with another in the 
  7725. description file. The text is automatically replaced each time NMAKE is run. 
  7726. This feature makes it easy to change text throughout the description file 
  7727. without having to edit every line that uses the text. 
  7728.  
  7729. Defining a Macro 
  7730.  
  7731. In a Description File 
  7732. On the Command Line 
  7733. In TOOLS.INI 
  7734. Inherited from Environment Variables 
  7735.  
  7736. Using Macros 
  7737.  
  7738. Using a Defined Macro 
  7739.  
  7740. Other Macro Topics 
  7741.  
  7742. Example 
  7743. Why Use Macros? 
  7744. Special Features of Macros 
  7745. Macro Substitutions 
  7746.  
  7747.  
  7748. ΓòÉΓòÉΓòÉ <hidden> NMAKE - Macros Example ΓòÉΓòÉΓòÉ
  7749.  
  7750. program = FLASH
  7751. c = LINK
  7752. options =
  7753.  
  7754. $(program).EXE : $(program).OBJ
  7755.   $c $(options) $(program).OBJ;
  7756.  
  7757. The file above defines three macros. The description block executes the 
  7758. following commands: 
  7759.  
  7760. FLASH.EXE : FLASH.OBJ
  7761.   LINK  FLASH.OBJ;
  7762.  
  7763.  
  7764. ΓòÉΓòÉΓòÉ <hidden> NMAKE - Why Use Macros? ΓòÉΓòÉΓòÉ
  7765.  
  7766. Two Common Uses of Macros 
  7767.  
  7768. o To create a standard description file for several projects. The macro 
  7769.   represents the file names in commands. These file names are defined when you 
  7770.   run NMAKE. When you switch to a different project, changing the macro changes 
  7771.   the file names NMAKE uses throughout the description file. 
  7772.  
  7773. o To control the options that NMAKE passes to the compiler, assembler, or 
  7774.   linker. When using a macro to specify the options, you can quickly change the 
  7775.   options throughout the description file in one easy step. 
  7776.  
  7777.  
  7778. ΓòÉΓòÉΓòÉ <hidden> NMAKE - Macro Special Features ΓòÉΓòÉΓòÉ
  7779.  
  7780. Macros have the following special features: 
  7781.  
  7782. o When using a macro, you can substitute text in the macro itself. 
  7783.  
  7784. o Several macros have been predefined for special purposes 
  7785.  
  7786. o If a macro is defined more than once, precedence rules govern which 
  7787.   definition is used. 
  7788.  
  7789. o You can also put macros into your TOOLS.INI file. 
  7790.  
  7791.  
  7792. ΓòÉΓòÉΓòÉ <hidden> NMAKE - Defining Macros in a Description File ΓòÉΓòÉΓòÉ
  7793.  
  7794. Before using a macro, you need to define it, either on the NMAKE command line 
  7795. or in your description file. Description file macro definitions look like this: 
  7796.  
  7797. macroname = macrostring
  7798.  
  7799. Macro names can be any combination of alphanumeric characters and the 
  7800. underscore character ( _ ) and are case sensitive. A macro string can be any 
  7801. string of characters. 
  7802.  
  7803. The first character of the macro name must be the first character on the line. 
  7804. NMAKE ignores any spaces before or after the equal sign ( = ). 
  7805.  
  7806. The macro string can be a null string and can contain embedded spaces. Do not 
  7807. enclose the macro string in quotation marks; quotation marks are used only when 
  7808. you define macros on the command line. 
  7809.  
  7810.  
  7811. ΓòÉΓòÉΓòÉ <hidden> NMAKE - Macros on the Command Line ΓòÉΓòÉΓòÉ
  7812.  
  7813. Before using a macro, you need to define it, either on the NMAKE command line 
  7814. or in your description file. Command-line macro definitions look like this: 
  7815.  
  7816. macroname=macrostring
  7817.  
  7818. No spaces can surround the equal sign. If you embed spaces, NMAKE might 
  7819. misinterpret your macro. If your macro string contains embedded spaces, enclose 
  7820. it in double quotation marks ( " ) like this: 
  7821.  
  7822. macroname="macro string"
  7823.  
  7824. or simply enclose the entire macro definition in double quotation marks ( " ) 
  7825. like this: 
  7826.  
  7827. "macroname = macro string"
  7828.  
  7829. Macro names can be any combination of alphanumeric characters and the 
  7830. underscore character ( _ ), and they are case sensitive. A macro string can be 
  7831. any string of characters or a null string. 
  7832.  
  7833. See Using a Defined Macro 
  7834.  
  7835.  
  7836. ΓòÉΓòÉΓòÉ <hidden> NMAKE - Inherited Macros ΓòÉΓòÉΓòÉ
  7837.  
  7838. NMAKE inherits all current environment variables as macros. For example, if you 
  7839. have a PATH environment variable defined as PATH = C:\TOOLS\BIN,  the string 
  7840. C:\TOOLS\BIN  is substituted when you use PATH in the description file. 
  7841.  
  7842. You can redefine inherited macros by including a line such as the example above 
  7843. in a description file. While NMAKE is executing, the macro takes on the 
  7844. redefined definition. When NMAKE terminates, however, the environment variable 
  7845. resumes its original value. 
  7846.  
  7847. The Override Environment Variables (/E) option disables inherited macro 
  7848. redefinition. If you use this option, NMAKE ignores any attempt to redefine an 
  7849. inherited macro. 
  7850.  
  7851.  
  7852. ΓòÉΓòÉΓòÉ <hidden> NMAKE - Using Defined Macros ΓòÉΓòÉΓòÉ
  7853.  
  7854. After you have defined a macro, you can use it anywhere in your description 
  7855. file with the following syntax: 
  7856.  
  7857. $(macroname)
  7858.  
  7859. The parentheses are not required if the macro name is only one character long. 
  7860. To use a dollar sign ( $ ) without using a macro, enter two dollar signs ( $$ 
  7861. ), or use the caret ( ^ ) before the dollar sign as an escape character. 
  7862.  
  7863. When NMAKE runs, it replaces all occurrences of $(macroname) with the defined 
  7864. macro string. If the macro is undefined, nothing is substituted. Once a macro 
  7865. is defined, you can cancel it only with the !UNDEF directive. 
  7866.  
  7867.  
  7868. ΓòÉΓòÉΓòÉ <hidden> NMAKE - Macro Substitutions ΓòÉΓòÉΓòÉ
  7869.  
  7870. Just as you use macros to substitute text within a description file, you use 
  7871. the following syntax to substitute text within a macro: 
  7872.  
  7873. $(macroname: string1 = string2)
  7874.  
  7875. Every occurrence of <string1> is replaced by <string2> in <macroname>. Spaces 
  7876. between the colon and <string1> are considered part of <string1>. If <string2> 
  7877. is a null string, all occurrences of <string1> are deleted from the macro. The 
  7878. colon ( : ) must immediately follow <macroname>. 
  7879.  
  7880. Note:  The replacement of <string1> with <string2> in the macro is not a 
  7881.        permanent change. If you use the macro again without a substitution, you 
  7882.        get the original unchanged macro. 
  7883.  
  7884. Example 
  7885.  
  7886. SOURCES = ONE.C TWO.C THREE.C
  7887. PROGRAM.EXE : $(SOURCES:.C=.OBJ)
  7888.   LINK $**;
  7889.  
  7890. The description file above defines a macro called SOURCES, which contains the 
  7891. names of three C source files. With this macro, the target/dependent line 
  7892. substitutes the .OBJ extension for the .C extension. Thus, NMAKE executes the 
  7893. following command: 
  7894.  
  7895. LINK ONE.OBJ TWO.OBJ THREE.OBJ;
  7896.  
  7897. Note:  $** is a special macro that translates to all dependent files for a 
  7898.        given target.
  7899.  
  7900.  
  7901. ΓòÉΓòÉΓòÉ <hidden> NMAKE - Special Macros ΓòÉΓòÉΓòÉ
  7902.  
  7903. NMAKE predefines several macros.  The first six macros below return one or more 
  7904. file specifications for the files in the target/dependent line of a description 
  7905. block.  Except where noted, the file specification includes the path of the 
  7906. file, the base file name, and the file-name extension. 
  7907.  
  7908. Macro Value 
  7909.  
  7910. $@   The specification of the target file. 
  7911.  
  7912. $*   The base name (without extension or path) of the target file. This macro 
  7913.      can not be used in a dependents list. 
  7914.  
  7915. $**  The specifications of the dependent files. 
  7916.  
  7917. $?   The specifications for only those dependent files that are out-of-date 
  7918.      with respect to the targets. 
  7919.  
  7920. $<   The specification of a single dependent file that is out-of-date with 
  7921.      respect to the targets.  This macro is used only in inference rules. 
  7922.  
  7923. $$@  The file specification of the target that NMAKE is currently evaluating. 
  7924.      This is a dynamic dependency parameter, used only in dependents lists. 
  7925.  
  7926. $(CC) The string ICC, which is the command to run the C Optimizing Compiler. 
  7927.      You can redefine this macro to use a different command. 
  7928.  
  7929. $(AS) The string MASM, which is the command to run the Macro Assembler (MASM). 
  7930.      You can redefine this macro to use a different command. 
  7931.  
  7932. $(MAKE) The command name used to run NMAKE. This macro is used to invoke NMAKE 
  7933.      recursively. If you redefine this macro, NMAKE issues a warning message. 
  7934.  
  7935.      Note:  NMAKE executes the command line in which $(MAKE) appears, even if 
  7936.             the display commands (/N) option is on. 
  7937.  
  7938. $(MAKEFLAGS) The NMAKE options currently in effect.  You cannot redefine this 
  7939.      macro. 
  7940.  
  7941. Note:  The special macros $** and $$@ are the only exceptions to the rule that 
  7942.        macro names longer than one character must be enclosed in parentheses.
  7943.  
  7944. You can append characters to any of the first six macros in this list to modify 
  7945. the meaning of the macro. However, you cannot use macro substitutions in these 
  7946. macros. 
  7947.  
  7948.  
  7949. ΓòÉΓòÉΓòÉ <hidden> NMAKE - Special Macros Examples ΓòÉΓòÉΓòÉ
  7950.  
  7951. Special Macros 
  7952.  
  7953. TRIG.LIB : SIN.OBJ COS.OBJ ARCTAN.OBJ
  7954.   !LIB TRIG.LIB -+$?;
  7955.  
  7956. In the example above, the macro $? represents the names of all dependent files 
  7957. that are out-of-date with respect to the target file. The exclamation point ( ! 
  7958. ) preceding the LIB command causes NMAKE to execute the LIB command once for 
  7959. each dependent file in the list. As a result of this description, the LIB 
  7960. command is executed up to three times, each time replacing a module with a 
  7961. newer version. 
  7962.  
  7963. DIR=C:\INCLUDE
  7964. $(DIR)\GLOBALS.H : GLOBALS.H
  7965.  COPY GLOBALS.H $@
  7966. $(DIR)\TYPES.H : TYPES.H
  7967.  COPY TYPES.H $@
  7968. $(DIR)\MACROS.H : MACROS.H
  7969.  COPY MACROS.H $@
  7970.  
  7971. The example above shows how to update a group of include files. in the 
  7972. description file above, each of the files GLOBALS.H, TYPES.H, and MACROS.H in 
  7973. the directory C:\INCLUDE depends on its counterpart in the current directory. 
  7974. If one of the include files is out-of-date, NMAKE replaces it with the file of 
  7975. the same name from the current directory. 
  7976.  
  7977. The following description file, which uses the special macro $$@, is 
  7978. equivalent: 
  7979.  
  7980. DIR=C:\INCLUDE
  7981. $(DIR)\GLOBALS.H $(DIR)\TYPES.H $(DIR)\MACROS.H : $$(@F)
  7982. !COPY $? $@
  7983.  
  7984. The special macro $$(@F) signifies the file name (without the path) of the 
  7985. current target. 
  7986.  
  7987. When NMAKE evaluates the description block, it evaluates the three targets, one 
  7988. at a time, with respect to their dependents.  Thus, NMAKE first checks whether 
  7989. C:\INCLUDE\GLOBALS.H is out-of-date compared with GLOBALS.H in the current 
  7990. directory.  If so, it executes the command to copy the dependent file GLOBALS.H 
  7991. to the target.  NMAKE repeats the procedure for the other two targets. 
  7992.  
  7993. Note that on the command line, the macro $? refers to the dependent for this 
  7994. target. The macro $@ specifies the full file specification of the target file. 
  7995.  
  7996. Other Macro Topics 
  7997.  
  7998. Macros 
  7999. Why Use Macros? 
  8000. Macro Example 
  8001. Special Features of Macros 
  8002. Using a Defined Macro 
  8003. Defining a Macro 
  8004.  
  8005.    In a Description File 
  8006.    On the Command Line 
  8007.    In TOOLS.INI 
  8008.    Inherited from Environment Variables 
  8009.  
  8010.  
  8011. ΓòÉΓòÉΓòÉ <hidden> NMAKE - File-Specification Parts ΓòÉΓòÉΓòÉ
  8012.  
  8013. A full file specification gives the base name of the file, the file-name 
  8014. extension, and the path. The path provides the disk- drive identifier and the 
  8015. sequence of directories needed to locate the file on the disk. 
  8016.  
  8017. For example, the file specification 
  8018.  
  8019. C:\SOURCE\PROG\SORT.OBJ
  8020.  
  8021. has the following parts: 
  8022.  
  8023. Path Name
  8024.                     C:\SOURCE\PROG
  8025.  
  8026. Base File Name
  8027.                     SORT
  8028.  
  8029. File-Name Extension
  8030.                     .OBJ
  8031.  
  8032. Other Macro Topics 
  8033.  
  8034. Macros 
  8035. Why Use Macros? 
  8036. Macro Example 
  8037. Special Features of Macros 
  8038. Using a Defined Macro 
  8039. Defining a Macro 
  8040.  
  8041.    In a Description File 
  8042.    On the Command Line 
  8043.    In TOOLS.INI 
  8044.    Inherited from Environment Variables 
  8045.  
  8046.  
  8047. ΓòÉΓòÉΓòÉ <hidden> NMAKE - Characters that Modify Special Macros ΓòÉΓòÉΓòÉ
  8048.  
  8049. Example 
  8050.  
  8051. The following six macros all resolve to a file specification (or possibly 
  8052. several file specifications for $** and $?): 
  8053.  
  8054.      $*     $@     $**     $<     $?     $$@
  8055.  
  8056. You can append characters to any of these macros to modify the file name 
  8057. returned by the macro. Depending on which character you use, parts of the full 
  8058. file specification are returned: 
  8059.  
  8060.                                 Appended Character
  8061.      File Part Returned         D        F       B       R
  8062.  
  8063.      File Path                  Yes     No      No      Yes
  8064.      Base File Name          No      Yes     Yes     Yes
  8065.      File Name Extension     No      Yes     No      No
  8066.  
  8067. Other Macro Topics 
  8068.  
  8069. Macros 
  8070. Why Use Macros? 
  8071. Macro Example 
  8072. Special Features of Macros 
  8073. Using a Defined Macro 
  8074. Defining a Macro 
  8075.  
  8076.    In a Description File 
  8077.    On the Command Line 
  8078.    In TOOLS.INI 
  8079.    Inherited from Environment Variables 
  8080.  
  8081.  
  8082. ΓòÉΓòÉΓòÉ <hidden> NMAKE - Modified Special Macros Example ΓòÉΓòÉΓòÉ
  8083.  
  8084. Modifying Special Macros 
  8085.  
  8086. If the macro $@ has the value 
  8087.  
  8088. C:\SOURCE\PROG\SORT.OBJ
  8089.  
  8090. then the following values are returned for the modified macro: 
  8091.  
  8092. Macro     Value 
  8093.  
  8094. $(@D)     C:\SOURCE\PROG 
  8095.  
  8096. $(@F)     SORT.OBJ 
  8097.  
  8098. $(@B)     SORT 
  8099.  
  8100. $(@R)     C:\SOURCE\PROG\SORT 
  8101.  
  8102. Note:  Modified macros are always longer than a single character - they must be 
  8103.        enclosed by parentheses when used.
  8104.  
  8105. Other Macro Topics 
  8106.  
  8107. Macros 
  8108. Why Use Macros? 
  8109. Macro Example 
  8110. Special Features of Macros 
  8111. Using a Defined Macro 
  8112. Defining a Macro 
  8113.  
  8114.    In a Description File 
  8115.    On the Command Line 
  8116.    In TOOLS.INI 
  8117.    Inherited from Environment Variables 
  8118.  
  8119.  
  8120. ΓòÉΓòÉΓòÉ <hidden> NMAKE - Macro Precedence Rules ΓòÉΓòÉΓòÉ
  8121.  
  8122. When the same macro is defined in more than one place, the definition with the 
  8123. highest priority is used: 
  8124.  
  8125. Priority
  8126.                               Definition
  8127.  
  8128. 1 (Highest)
  8129.                               Command line
  8130.  
  8131. 2
  8132.                               Description file
  8133.  
  8134. 3
  8135.                               Environment variables
  8136.  
  8137. 4
  8138.                               TOOLS.INI file
  8139.  
  8140. 5 (Lowest)
  8141.                               Predefined macros (such as CC and AS)
  8142.  
  8143. If you invoke NMAKE with the Overriding Macro Definitions (/E) option, macros 
  8144. defined by environment variables take precedence over those defined in a 
  8145. description file. 
  8146.  
  8147. Other Macro Topics 
  8148.  
  8149. Macros 
  8150. Why Use Macros? 
  8151. Macro Example 
  8152. Special Features of Macros 
  8153. Using a Defined Macro 
  8154. Defining a Macro 
  8155.  
  8156.  
  8157. In a Description File
  8158.  
  8159. On the Command Line
  8160.  
  8161. In TOOLS.INI
  8162.  
  8163. Inherited from Environment Variables
  8164.  
  8165.  
  8166. ΓòÉΓòÉΓòÉ <hidden> NMAKE - Inference Rules ΓòÉΓòÉΓòÉ
  8167.  
  8168. Inference rules are templates from which NMAKE infers what to do with a 
  8169. description block when no commands are given.  Only those extensions defined in 
  8170. a .SUFFIXES list can have inference rules.  The extensions .C, .OBJ, .ASM, and 
  8171. .EXE are automatically included in .SUFFIXES. 
  8172.  
  8173. When NMAKE encounters a description block with no commands, it looks for an 
  8174. inference rule that specifies how to create the target from the dependent 
  8175. files, given the two file extensions. Similarly, if a dependent file does not 
  8176. exist, NMAKE looks for an inference rule that specifies how to create the 
  8177. dependent from another file with the same base name. 
  8178.  
  8179. NMAKE applies an inference rule only if the base name of the file it is trying 
  8180. to create matches the base name of a file that already exists. 
  8181.  
  8182. In effect, inference rules are useful only when there is a one-to-one 
  8183. correspondence between the files with the "from" extension and the files with 
  8184. the "to" extension. You cannot, for example, define an inference rule that 
  8185. inserts a number of modules into a library. 
  8186.  
  8187. The use of inference rules eliminates the need to put the same commands in 
  8188. several description blocks. For example, you can use inference rules to specify 
  8189. a single ICC command that changes any C source file (with a .C extension) to an 
  8190. object file (with a .OBJ extension). 
  8191.  
  8192. You define an inference rule by including text of the following form in your 
  8193. description file (or in your TOOLS.INI file - see Special Features below): 
  8194.  
  8195. .fromext.toext:
  8196. commands
  8197. :
  8198.  
  8199. The elements of the inference rule are: 
  8200.  
  8201. <fromext> 
  8202.      The file name extension for dependent files to build a target 
  8203. <toext> 
  8204.      The file name extension for target files to be built 
  8205. <commands> 
  8206.      The commands to build the <toext> target from the <fromext> dependents 
  8207.  
  8208. For example, an inference rule to convert C source files (with the .C 
  8209. extension) to C object files (with the .OBJ extension) is 
  8210.  
  8211. .C.OBJ:
  8212.  ICC $<;
  8213.  
  8214. Note:  The special macro $< represents the name of a dependent out-of-date 
  8215.        relative to the target.
  8216.  
  8217. Special Features 
  8218.  
  8219. o You can specify a path where NMAKE should look for target and dependent files 
  8220.   used in inference rules. 
  8221.  
  8222. o Inference rules are predefined for compiling and linking C programs, and for 
  8223.   assembling programs. 
  8224.  
  8225. o NMAKE looks for inference rules in the TOOLS.INI file if it cannot find a 
  8226.   rule in a description file. 
  8227.  
  8228. o Only those extensions defined in a .SUFFIXES list can have inference rules. 
  8229.   The extensions .C, .OBJ, .ASM, and .EXE are automatically included in 
  8230.   .SUFFIXES. 
  8231.  
  8232. o Description 
  8233.  
  8234. Inference Rules Topics 
  8235.  
  8236. Inference Rules Example 
  8237. Inference-Rule Path Specifications 
  8238. Predefined Inference Rules 
  8239. Description File Special Features 
  8240. Macros and Inference Rules in TOOLS.INI 
  8241. Ignore TOOLS.INI File (/R) 
  8242.  
  8243.  
  8244. ΓòÉΓòÉΓòÉ <hidden> NMAKE - Inference Rules Example ΓòÉΓòÉΓòÉ
  8245.  
  8246. .OBJ.EXE:
  8247.   LINK $<;
  8248.  
  8249. EXAMPLE1.EXE: EXAMPLE1.OBJ
  8250.  
  8251. EXAMPLE2.EXE: EXAMPLE2.OBJ
  8252.   LINK /CO EXAMPLE2,,,LIBV3.LIB
  8253.  
  8254. The first line above defines an inference rule that causes the LINK command to 
  8255. create an executable file whenever a change is made in the corresponding object 
  8256. file.  The file name in the inference rule is specified with the special macro 
  8257. $< so that the rule applies to any .OBJ file with an out-of-date executable 
  8258. file. 
  8259.  
  8260. When NMAKE does not find any commands in the first description block, it checks 
  8261. for a rule that may apply and finds the rule defined on the first two lines of 
  8262. the description file. NMAKE applies the rule, replacing $< with EXAMPLE1.OBJ 
  8263. when it executes the command, so that the LINK command becomes 
  8264.  
  8265. LINK EXAMPLE1.OBJ;
  8266.  
  8267. NMAKE does not search for an inference rule when examining the second 
  8268. description block, because a command is explicitly given. 
  8269.  
  8270. Inference Rules Topics 
  8271.  
  8272. Inference Rules 
  8273. Inference-Rule Path Specifications 
  8274. Predefined Inference Rules 
  8275. Description File Special Features 
  8276. Macros and Inference Rules in TOOLS.INI 
  8277. Ignore TOOLS.INI File (/R) 
  8278.  
  8279.  
  8280. ΓòÉΓòÉΓòÉ <hidden> NMAKE - Inference-Rule Path Specifications ΓòÉΓòÉΓòÉ
  8281.  
  8282. When defining an inference rule, you can indicate to NMAKE where to look for 
  8283. target and dependent files. Use the following syntax: 
  8284.  
  8285. {frompath}.fromext{topath}.toext
  8286.  commands
  8287.  :
  8288.  
  8289. NMAKE looks in the directory specified by <frompath> for files with the 
  8290. <fromext> extension. It executes the commands to build files with the <toext> 
  8291. extension in the directory specified by <topath>. 
  8292.  
  8293. Inference Rules Topics 
  8294.  
  8295. Inference Rules 
  8296. Inference Rules Example 
  8297. Predefined Inference Rules 
  8298. Description File Special Features 
  8299. Macros and Inference Rules in TOOLS.INI 
  8300. Ignore TOOLS.INI File (/R) 
  8301.  
  8302.  
  8303. ΓòÉΓòÉΓòÉ <hidden> NMAKE - Predefined Inference Rules ΓòÉΓòÉΓòÉ
  8304.  
  8305. NMAKE predefines three inference rules: 
  8306.  
  8307. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  8308. ΓöéInferenceΓöéDefault                ΓöéCommand   Γöé
  8309. ΓöéRule     Γöé                       ΓöéAction    Γöé
  8310. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8311. Γöé.C.OBJ   Γöé$(CC) $(CFLAGS) /C $*.CΓöéICC /C    Γöé
  8312. Γöé         Γöé                       Γöé$*.C      Γöé
  8313. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8314. Γöé.C.EXE   Γöé$(CC) $(CFLAGS) $*.C   ΓöéICC $*.C  Γöé
  8315. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8316. Γöé.ASM.OBJ Γöé$(AS) $(AFLAGS) $*;    ΓöéMASM $*;  Γöé
  8317. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  8318.  
  8319. Note:  The first two rules automatically compile and link C programs. 
  8320.  
  8321. The last rule automatically assembles programs.
  8322.  
  8323. Inference Rules Topics 
  8324.  
  8325. Inference Rules 
  8326. Inference Rules Example 
  8327. Inference-Rule Path Specifications 
  8328. Description File Special Features 
  8329. Macros and Inference Rules in TOOLS.INI 
  8330. Ignore TOOLS.INI File (/R) 
  8331.  
  8332.  
  8333. ΓòÉΓòÉΓòÉ <hidden> NMAKE - Directives ΓòÉΓòÉΓòÉ
  8334.  
  8335. Example 
  8336.  
  8337. Using directives, you can construct description files similar to batch files. 
  8338. NMAKE provides directives that 
  8339.  
  8340. o Conditionally execute commands 
  8341.  
  8342. o Display error messages 
  8343.  
  8344. o Include the contents of other files 
  8345.  
  8346. o Turn some NMAKE options on or off 
  8347.  
  8348. Each directive begins with an exclamation point ( ! ) in the first column of 
  8349. the description file. Spaces can be placed between the exclamation point and 
  8350. the directive keyword. 
  8351.  
  8352. The list below describes the directives: 
  8353.  
  8354. !IF <expression> 
  8355.      Executes the statements between the !IF keyword and the next !ELSE or 
  8356.      !ENDIF directive if <expression> evaluates to a nonzero value. 
  8357.  
  8358.      See Expressions in !IF Directives 
  8359.  
  8360. !ELSE 
  8361.      Executes the statements between the !ELSE and !ENDIF directives if the 
  8362.      statements preceding the !ELSE directive were not executed. 
  8363.  
  8364. !ENDIF 
  8365.      Marks the end of the !IF, !IFDEF, or !IFNDEF block of statements. 
  8366.  
  8367. !IFDEF <macroname> 
  8368.      Executes the statements between the !IFDEF keyword and the next !ELSE or 
  8369.      !ENDIF directive if <macroname> is defined in the description file.  If a 
  8370.      macro has been defined as null, it is still considered to be defined. 
  8371.  
  8372. !IFNDEF <macroname> 
  8373.      Executes the statements between the !IFNDEF keyword and the next !ELSE or 
  8374.      !ENDIF directive if <macroname> is not defined in the description file. 
  8375.  
  8376. !UNDEF <macroname> 
  8377.      Undefines a previously defined macro. 
  8378.  
  8379. !ERROR <text> 
  8380.      Prints text and then stops execution. 
  8381.  
  8382. !INCLUDE <filename> 
  8383.      Reads and evaluates the file <filename> before continuing with the current 
  8384.      description file.  If <filename> is enclosed by angle brackets (<>), NMAKE 
  8385.      searches for the file in the directories specified by the INCLUDE macro; 
  8386.      otherwise, it looks only in the current directory.  The INCLUDE macro is 
  8387.      initially set to the value of the INCLUDE environment variable. 
  8388.  
  8389. !CMDSWITCHES {+|-}<opt> 
  8390.      Turns on or off one of four NMAKE options: /D, /I, /N, and /S.  If no 
  8391.      options are specified, the options are reset to the values they had when 
  8392.      NMAKE was started. To turn an option on, precede it with a plus sign (+); 
  8393.      to turn it off, precede it with a minus sign (-). This directive updates 
  8394.      the MAKEFLAGS macro. 
  8395.  
  8396.      See Special Macros 
  8397.  
  8398.  
  8399. ΓòÉΓòÉΓòÉ <hidden> NMAKE - Directives Example ΓòÉΓòÉΓòÉ
  8400.  
  8401. Directives 
  8402.  
  8403. !INCLUDE <INFRULES.TXT>
  8404. !CMDSWITCHES +D
  8405. WINNER.EXE:WINNER.OBJ
  8406. !IFDEF DEBUG
  8407. ! IF "$(DEBUG)"=="y"
  8408.      LINK /CO WINNER.OBJ;
  8409. ! ELSE
  8410.      LINK WINNER.OBJ;
  8411. ! ENDIF
  8412. !ELSE
  8413. ! ERROR Macro named DEBUG is not defined.
  8414. !ENDIF
  8415.  
  8416. This description file does the following: 
  8417.  
  8418. o The !INCLUDE directive causes the file INFRULES.TXT to be read and evaluated 
  8419.   as if it were part of the description file. 
  8420.  
  8421. o The !CMDSWITCHES directive turns on the /D option, which displays the dates 
  8422.   of the files as they are checked. 
  8423.  
  8424. o If WINNER.EXE is out-of-date with respect to WINNER.OBJ, the !IFDEF directive 
  8425.   checks to see whether the macro DEBUG is defined. If it is defined, the !IF 
  8426.   directive checks to see whether it is set to y. If it is, the linker is 
  8427.   invoked with the /CO option; otherwise, it is invoked without the /CO. If the 
  8428.   DEBUG macro is not defined, the !ERROR directive prints the message and NMAKE 
  8429.   stops executing. 
  8430.  
  8431.  
  8432. ΓòÉΓòÉΓòÉ <hidden> NMAKE - Expressions in !IF Directives ΓòÉΓòÉΓòÉ
  8433.  
  8434. The <expression> used with the !IF directive can consist of integer constants, 
  8435. string constants, or exit codes returned by programs. Integer constants can use 
  8436. the C unary operators for numerical negation (-), one's complement ( ~ ), and 
  8437. logical negation (!). You can also use any of the C binary operators listed 
  8438. below: 
  8439.  
  8440. Operator       Description 
  8441.  
  8442. +              Addition 
  8443.  
  8444. -              Subtraction 
  8445.  
  8446. *              Multiplication 
  8447.  
  8448. /              Division 
  8449.  
  8450. %              Modulus 
  8451.  
  8452. &              Bitwise AND 
  8453.  
  8454. |              Bitwise OR 
  8455.  
  8456. ^^             Bitwise XOR 
  8457.  
  8458. &&             Logical AND 
  8459.  
  8460. ||             Logical OR 
  8461.  
  8462. <<             Left shift 
  8463.  
  8464. >>             Right shift 
  8465.  
  8466. ==             Equality 
  8467.  
  8468. !=             Inequality 
  8469.  
  8470. <              Less than 
  8471.  
  8472. >              Greater than 
  8473.  
  8474. <=             Less than or equal to 
  8475.  
  8476. >=             Greater than or equal to 
  8477.  
  8478. NOTES 
  8479.  
  8480. o You can use parentheses to group expressions. 
  8481.  
  8482. o Values are assumed to be decimal values unless specified with a leading 0 
  8483.   (octal) or leading 0x (hexadecimal). 
  8484.  
  8485. o Strings are enclosed by quotes ( " ). You can use the equality (==) and 
  8486.   inequality (!=) operators to compare two strings. 
  8487.  
  8488. o You can invoke a program in an expression by enclosing the program name in 
  8489.   square brackets ( [ ] ). The exit code returned by the program is used in the 
  8490.   expression. 
  8491.  
  8492.  
  8493. ΓòÉΓòÉΓòÉ <hidden> NMAKE - Pseudotargets ΓòÉΓòÉΓòÉ
  8494.  
  8495. A "pseudotarget" is a target in a description block that is not a file. 
  8496. Instead, it is a name that serves as a "handle" for building a group of files 
  8497. or executing a group of commands. In the following example, UPDATE is a 
  8498. pseudotarget: 
  8499.  
  8500. UPDATE: *.*
  8501.   !copy $** A:\PRODUCT
  8502.  
  8503. When NMAKE evaluates a pseudotarget, it always considers the dependents to be 
  8504. out-of-date. In the description above, NMAKE copies each of the dependent files 
  8505. to the specified drive and directory. 
  8506.  
  8507. NMAKE predefines several pseudotargets for special purposes. 
  8508.  
  8509. See Predefined Pseudotargets 
  8510.  
  8511.  
  8512. ΓòÉΓòÉΓòÉ <hidden> NMAKE - Error Messages ΓòÉΓòÉΓòÉ
  8513.  
  8514. This section provides a convenient reference to the many error messages that 
  8515. can be encountered when using the NMAKE facility. 
  8516.  
  8517. Error Message Descriptions 
  8518.  
  8519. NMAKE Fatal Error Messages          (Part 1) 1000 - 1098 
  8520.  
  8521. NMAKE Warnings                      (Part 2) 4001 - 4008 
  8522.  
  8523. NMAKE Informational Messages        (Part 3)   2 -   6 
  8524.  
  8525.  
  8526. ΓòÉΓòÉΓòÉ <hidden> NMAKE - Fatal Error Messages (Part 1) 1000 - 1098 ΓòÉΓòÉΓòÉ
  8527.  
  8528. U1000     syntax error : `)' missing in macro invocation 
  8529.           Explanation: A left parenthesis appeared without a matching right 
  8530.           parenthesis in a macro invocation.  The correct form is $(name). 
  8531.           Action: Add the right parenthesis in the proper syntax. 
  8532.  
  8533. U1001     syntax error : illegal character `character' in macro 
  8534.           Explanation: A non-alphanumeric character other than underscore 
  8535.           appeared in a macro. 
  8536.           Action: Use only characters valid for a macro name. 
  8537.  
  8538. U1002     syntax error : bad macro invocation `$' 
  8539.           Explanation: A single dollar sign ($) appeared without a macro name 
  8540.           associated with it. The correct form is $(name). 
  8541.           Action: Use a defined macro name. 
  8542.  
  8543. U1003     syntax error : `=' mising in macro 
  8544.           Explanation: The = sign was missing in a macro definition. The 
  8545.           correct form is `name = value'. 
  8546.           Action: Insert an equals sign (=) and retry. 
  8547.  
  8548. U1004     syntax error : macro name missing 
  8549.           Explanation: A macro invocation appeared without a name. The correct 
  8550.           form is $(name). 
  8551.           Action: Supply the macro name and retry. 
  8552.  
  8553. U1005     syntax error : text must follow `:' in macro 
  8554.           Explanation: A string substitution was specified for a macro, but the 
  8555.           string to be changed in the macro was not specified. 
  8556.           Action: Specify the string to be substituted. 
  8557.  
  8558. U1006     syntax error : missing closing double quotation mark 
  8559.           Explanation: An opening double quotation mark appeared without a 
  8560.           closing quotation mark. 
  8561.           Action: Edit the line and add the closing quotation mark. 
  8562.  
  8563. U1007     double quotation mark not allowed in name 
  8564.           Explanation: You used a `"' symbol inside a macro name. 
  8565.           Action: Correct the name without the quotation mark. 
  8566.  
  8567. U1017     unknown directive `directive' 
  8568.           Explanation: The directive specified is not a recognized directive. 
  8569.           Action: Check your spelling of the intended directive. 
  8570.  
  8571. U1018     directive and/or expression part missing 
  8572.           Explanation: The directive is incompletely specified. The expression 
  8573.           part is required. 
  8574.           Action: Supply the expression and retry the directive. 
  8575.  
  8576. U1019     too many nested if blocks 
  8577.           Explanation: You exceeded the limit of 16 levels of nested !IF 
  8578.           directives. 
  8579.           Action: Simplify your nesting logic to fewer than 16 levels. 
  8580.  
  8581. U1020     EOF found before next directive 
  8582.           Explanation: A directive, such as !ENDIF, was missing. 
  8583.           Action: Insert the required directive and retry. 
  8584.  
  8585. U1021     syntax error : else unexpected 
  8586.           Explanation: An !ELSE directive was found that was not expected, or 
  8587.           was placed in a syntactically incorrect place. 
  8588.           Action: Correct the position of the !ELSE directive. 
  8589.  
  8590. U1022     missing terminating character for string/program invocation : 
  8591.           `character' 
  8592.           Explanation: The closing double quotation mark in a string comparison 
  8593.           in an !IF directive was missing.  Or else the closing bracket (]) in 
  8594.           a program invocation in a directive is missing. 
  8595.           Action: Insert the proper termination character. 
  8596.  
  8597. U1023     syntax error present in expression 
  8598.           Explanation: An expression is incorrect. 
  8599.           Action: Check the allowed operators and operator precedence for the 
  8600.           expression. 
  8601.  
  8602. U1024     illegal argument to !CMDSWITCHES 
  8603.           Explanation: An unrecognized !CMDSWITCHES option was specified. 
  8604.           Action: Use the correct !CMDSWITCHES option. 
  8605.  
  8606. U1031     file name missing (or macro is null) 
  8607.           Explanation: An !INCLUDE directive was found, but the name of the 
  8608.           file to include is missing. 
  8609.           Action: Supply the name of the file to be included. 
  8610.  
  8611. U1033     syntax error : `string' unexpected 
  8612.           Explanation: The specified string is not part of the valid syntax for 
  8613.           a makefile. 
  8614.           Action: Correct the line according to the proper syntax. 
  8615.  
  8616. U1034     syntax error : separator missing 
  8617.           Explanation: The colon that separates targets from dependents is 
  8618.           missing. 
  8619.           Action: Insert a colon after the target list. 
  8620.  
  8621. L1035     syntax error : expected `:' or `=' separator 
  8622.           Explanation: Either a colon, implying a dependency line, or an = 
  8623.           sign, implying a macro definition, was expected. 
  8624.           Action: Insert the proper separator in the line. 
  8625.  
  8626. U1036     syntax error : too many names to left of `=' 
  8627.           Explanation: Only one string is allowed to the left of a macro 
  8628.           definition. 
  8629.           Action: Remove the incorrect text before the = sign. 
  8630.  
  8631. U1037     syntax error : target name missing 
  8632.           Explanation: A colon (:) was found before a target name was found. At 
  8633.           least one target is required. 
  8634.           Action: Insert the correct target name before the colon. 
  8635.  
  8636. U1038     internal error : lexer 
  8637.           Explanation: The lexer encountered an unexpected condition. 
  8638.           Action: Note the circumstances of the failure and contact IBM 
  8639.           Support. 
  8640.  
  8641. U1039     internal error : parser 
  8642.           Explanation: The parser encountered an unexpected condition. 
  8643.           Action: Note the circumstances of the failure and contact IBM 
  8644.           Support. 
  8645.  
  8646. U1040     internal error : macro expansion 
  8647.           Explanation: An unexpected condition was found during macro 
  8648.           expansion. 
  8649.           Action: Note the circumstances of the failure and contact IBM 
  8650.           Support. 
  8651.  
  8652. U1041     internal error : target building 
  8653.           Explanation: An unexpected condition was found during target 
  8654.           building. 
  8655.           Action: Note the circumstances of the failure and contact IBM 
  8656.           Support. 
  8657.  
  8658. U1042     internal error : expression stack overflow 
  8659.           Explanation: An expression was too complex to decode using internal 
  8660.           memory space. 
  8661.           Action: Note the circumstances of the failure and contact IBM 
  8662.           Support. 
  8663.  
  8664. U1043     internal error : temp file limit exceeded 
  8665.           Explanation: NMAKE required too many temporary files. 
  8666.           Action: Note the circumstances of the failure and contact IBM 
  8667.           Support. 
  8668.  
  8669. U1044     internal error : too many levels of recursion building a target 
  8670.           Explanation: Recursive invocations of NMAKE exceeded available 
  8671.           memory. 
  8672.           Action: Note the circumstances of the failure and contact IBM 
  8673.           Support. 
  8674.  
  8675. U1045     messagetext 
  8676.           Explanation: NMAKE encountered an unexpected condition. 
  8677.           Action: Note the text of the message and contact IBM Support. 
  8678.  
  8679. U1046     internal error : out of search handles 
  8680.           Explanation: NMAKE exceeded an internal limit on handles. 
  8681.           Action: Note the circumstances of the failure and contact IBM 
  8682.           Support. 
  8683.  
  8684. U1049     macro too long (max allowed size : 64K) 
  8685.           Explanation: One of your macros expanded to longer than 65535 bytes. 
  8686.           Action: Recode the macro definition so that it is less than 64K. 
  8687.  
  8688. U1050     user-specified text 
  8689.           Explanation: The message specified with the !ERROR directive is 
  8690.           displayed. 
  8691.           Action: Action depends on the defined error condition. 
  8692.  
  8693. U1051     out of memory 
  8694.           Explanation: NMAKE ran out of space in the far heap. 
  8695.           Action: Note the circumstances of the failure and contact IBM 
  8696.           Support. 
  8697.  
  8698. U1052     file `filename' not found 
  8699.           Explanation: The file was not found. 
  8700.           Action: Specify the filename properly in the makefile. 
  8701.  
  8702. U1053     file `filename' unreadable 
  8703.           Explanation: The filename cannot be read. 
  8704.           Action: Be sure that the file has the appropriate attributes to be 
  8705.           read. 
  8706.  
  8707. U1054     cannot create in-line file `filename' 
  8708.           Explanation: The program was unable to generate the specified in-line 
  8709.           file as a uniquely-named temporary file. 
  8710.           Action: Be sure your file system has enough space for temporary 
  8711.           files. 
  8712.  
  8713. U1055     out of environment space 
  8714.           Explanation: The environment space limit was reached. 
  8715.           Action: Restart NMAKE with a larger environment space. 
  8716.  
  8717. U1056     cannot find command processor 
  8718.           Explanation: The command processor CMD.EXE could not be found. 
  8719.           Action: Be sure that the COMSPEC environment variable points to a 
  8720.           command processor on your file system. 
  8721.  
  8722. U1057     cannot delete temporary file `filename' 
  8723.           Explanation: The program was unable to delete the specified file. 
  8724.           Action: The file needs to exist and have the write attribute. 
  8725.  
  8726. U1058     terminated by user 
  8727.           Explanation: You pressed Ctrl+Break to stop NMAKE. 
  8728.           Action: None, the program has stopped. 
  8729.  
  8730. U1060     unable to close file : `filename' 
  8731.           Explanation: NMAKE was unable to close filename. 
  8732.           Action: Look for the named file with write attribute on your file 
  8733.           system. 
  8734.  
  8735. U1061     /F option requires a file name 
  8736.           Explanation: You coded command-line option /f but failed to follow it 
  8737.           with the name of a description file. 
  8738.           Action: Specify the description file name after the option. 
  8739.  
  8740. U1062     missing file name with /X option 
  8741.           Explanation: You coded command-line option /x but failed to follow it 
  8742.           with the name of a file to receive redirected stderr output. 
  8743.           Action: Give an output error file name after the option. 
  8744.  
  8745. U1063     missing macro name before `=' 
  8746.           Explanation: You coded `=' in a command line macro definition, but 
  8747.           failed to supply the name of the macro. 
  8748.           Action: Give the macro name in the definition. 
  8749.  
  8750. U1064     MAKEFILE not found and no target specified 
  8751.           Explanation: You invoked NMAKE without a /f option, and no file named 
  8752.           MAKEFILE was present. 
  8753.           Action: Either create a file named MAKEFILE, or use the /f switch. 
  8754.  
  8755. U1065     incorrect option `option' 
  8756.           Explanation: NMAKE does not use the option which you specified. 
  8757.           Action: Use a valid command line option. 
  8758.  
  8759. U1070     cycle in macro definition `macroname' 
  8760.           Explanation: A cycle was detected in the macro definition specified. 
  8761.           Action: Rewrite the macro to avoid the circular definition. 
  8762.  
  8763. U1071     cycle in dependency tree for target `targetname' 
  8764.           Explanation: A cycle was detected in the target dependency tree. 
  8765.           Action: Check the dependency lists descending from the given target 
  8766.           and remove the circular dependency. 
  8767.  
  8768. U1072     cycle in include files : `filenames' 
  8769.           Explanation: A cycle was detected in the tree of included files. 
  8770.           Action: Check the file names included by the given include file and 
  8771.           remove the circular inclusion. 
  8772.  
  8773. U1073     don't know how to make `filename' 
  8774.           Explanation: The specified target does not exist and there are no 
  8775.           commands to execute or inference rules given for it.  Hence NMAKE 
  8776.           cannot build it. 
  8777.           Action: Correct the specification of the file, which should exist on 
  8778.           your file system. 
  8779.  
  8780. U1076     name too long 
  8781.           Explanation: The macro name, target name, or build command name would 
  8782.           overflow an internal buffer. 
  8783.           Action: Reduce the length of the specified name. 
  8784.  
  8785. U1077     `program' : return code `value' 
  8786.           Explanation: The invocation of NMAKE failed with a nonzero return 
  8787.           value. 
  8788.           Action: Determine the cause of failure of the specified program. 
  8789.  
  8790. U1078     constant overflow at `directive' 
  8791.           Explanation: A constant in `directive' expression was too big. 
  8792.           Action: Reduce the size of the specified constant to a value within 
  8793.           the range of a signed long integer, -2147483648 <= value <= 
  8794.           2147483647. 
  8795.  
  8796. U1079     illegal expression : divide by zero present 
  8797.           Explanation: An expression contains a division by zero. 
  8798.           Action: Remove the undefined division by zero from the expression. 
  8799.  
  8800. U1080     operator and/or operand out of place : usage illegal 
  8801.           Explanation: The expression uses an operand or operator incorrectly. 
  8802.           Action: Check the allowed set of operators and their precedence. 
  8803.  
  8804. U1081     `program' : program not found 
  8805.           Explanation: NMAKE could not find the external command or program. 
  8806.           Action: Be sure that the program is located in the PATH. 
  8807.  
  8808. U1082     `command' : cannot execute command: out of memory 
  8809.           Explanation: NMAKE ran out of memory while running command. 
  8810.           Action: Make more memory available while running NMAKE. 
  8811.  
  8812. U1083     target macro `macroname' expands to nothing 
  8813.           Explanation: The expansion of the given macro is a null string. 
  8814.           Action: Correct the definition of the macro. 
  8815.  
  8816. U1084     cannot create temporary file `filename' 
  8817.           Explanation: NMAKE was unable to open the specified temporary file. 
  8818.           Action: Check the filename specification for validity. 
  8819.  
  8820. U1085     cannot mix implicit and explicit rules 
  8821.           Explanation: A regular target was specified along with the target for 
  8822.           a rule (which has the form .sufx1.sufx2). 
  8823.           Action: Separate targets built by implicit and explicit inference 
  8824.           rules into different lists. 
  8825.  
  8826. U1086     inference rule cannot have dependents 
  8827.           Explanation: Dependents are not allowed in the definition of an 
  8828.           inference rule. 
  8829.           Action: Remove the dependents list from the rule. 
  8830.  
  8831. U1087     cannot have : and :: dependents for same target 
  8832.           Explanation: A target cannot have both a single-colon and 
  8833.           double-colon dependency. 
  8834.           Action: Choose either single-colon or double-colon separator for the 
  8835.           target. 
  8836.  
  8837. U1088     invalid separator on inference rule : `::' 
  8838.           Explanation: Inference rules can use only a single-colon separator. 
  8839.           Action: Use a single-colon dependency for the target. 
  8840.  
  8841. U1089     cannot have build commands for pseudotarget `targetname' 
  8842.           Explanation: Pseudotargets (for example, .PRECIOUS, .SUFFIXES) cannot 
  8843.           have build commands specified. 
  8844.           Action: Remove the build commands from the specification of 
  8845.           targetname. 
  8846.  
  8847. U1090     cannot have dependents for pseudotarget `targetname' 
  8848.           Explanation: The specified pseudotarget, for example, .SILENT, 
  8849.           .IGNORE) cannot have a dependent. 
  8850.           Action: Remove the dependent from the specification of targetname. 
  8851.  
  8852. U1092     too many names in rule 
  8853.           Explanation: The rules cannot have more than one pair of extensions 
  8854.           (ext1.ext2) as a target for the rule. 
  8855.           Action: Use only one pair of extensions in any inference rule. 
  8856.  
  8857. U1093     cannot mix special pseudotargets 
  8858.           Explanation: It is illegal to list two or more pseudotargets 
  8859.           together. 
  8860.           Action: Use only one pseudotarget in any list. 
  8861.  
  8862. U1094     syntax error : only [no]keep allowed here 
  8863.           Explanation: In a context where only KEEP or NOKEEP is accepted to 
  8864.           indicate the desired disposition of the inline file, you used an 
  8865.           incorrect string. 
  8866.           Action: Use the correct syntax for In-Line Files. 
  8867.  
  8868. U1095     expanded command line `string' too long 
  8869.           Explanation: After macro expansion, the command line length exceeds 
  8870.           1024 bytes. 
  8871.           Action: Rewrite the command line to stay within a 1024-byte limit. 
  8872.  
  8873. U1097     extmake syntax usage error, no dependent 
  8874.           Explanation: You used the extmake file syntax on a description block 
  8875.           which had no dependent files. 
  8876.           Action: Specify one or more dependent files for the block. 
  8877.  
  8878. U1098     extmake syntax in `string' incorrect 
  8879.           Explanation: The given string contains an extmake syntax error. 
  8880.           Action: Correct the string according to the proper syntax. 
  8881.  
  8882.  
  8883. ΓòÉΓòÉΓòÉ <hidden> NMAKE - Warnings (Part 2) 4001 - 4008 ΓòÉΓòÉΓòÉ
  8884.  
  8885. U4001     command file can be invoked only from command line 
  8886.           Explanation: You used an @ symbol on an argument in a command file. 
  8887.           You cannot invoke another command file from within a command file. 
  8888.           Action: If the you want `@' to be part of an argument in a command 
  8889.           file, you must enclose that argument in quotation marks. 
  8890.  
  8891. U4002     no match found for wild card `string' 
  8892.           Explanation: NMAKE expanded wildcards in the given string, but found 
  8893.           no files matching the specification. 
  8894.           Action: Check the existence of desired files on your file system. 
  8895.  
  8896. U4004     too many rules for target `targetname' 
  8897.           Explanation: You specified too many inference rules for the specified 
  8898.           targetname. 
  8899.           Action: Revise your rules specification for targetname. 
  8900.  
  8901. U4005     ignoring rule `string' (extension not in .SUFFIXES) 
  8902.           Explanation: You specified an inference rule with a suffix which was 
  8903.           not in the .SUFFIXES list. 
  8904.           Action: To use the suffix, be sure to include it in the .SUFFIXES 
  8905.           list. 
  8906.  
  8907. U4006     special macro undefined : `macroname' 
  8908.           Explanation: You specified the undefined macro macroname. 
  8909.           Action: NMAKE will ignore the undefined macroname.  You may use only 
  8910.           predefined special macros. 
  8911.  
  8912. U4007     file name `filename' too long; truncating to 8.3 
  8913.           Explanation: The specified filename is too long for a FAT file system 
  8914.           name. 
  8915.           Action: NMAKE will shorten the filename to at most an eight-character 
  8916.           name and 3-character extension. 
  8917.  
  8918. U4008     removed target `filename' 
  8919.           Explanation: While deleting non-precious files, NMAKE erased the 
  8920.           specified filename which was a target. 
  8921.           Action: Check your lists of targets and dependent files to be sure 
  8922.           that filename is not needed. 
  8923.  
  8924.  
  8925. ΓòÉΓòÉΓòÉ <hidden> NMAKE - Informational Messages (Part 3) 2-6 ΓòÉΓòÉΓòÉ
  8926.  
  8927. Message 2 `filename' is up-to-date. 
  8928.           Explanation: The specified target filename is no older than any of 
  8929.           its dependent files. 
  8930.           Action: NMAKE does not need to rebuild this target. 
  8931.  
  8932. Message 3 **`file1' newer than `file2' 
  8933.           Explanation: While reporting creation times of files, NMAKE notes 
  8934.           that file1 was created after file2. 
  8935.           Action: [none] 
  8936.  
  8937. Message 5 touch `filename' 
  8938.           Explanation: You specified option /t to touch targets with the 
  8939.           current date and time. 
  8940.           Action: NMAKE has updated the creation time of filename. 
  8941.  
  8942. Message 6 `filename' target does not exist 
  8943.           Explanation: The specified filename could not be found. 
  8944.           Action: NMAKE will rebuild the target. 
  8945.  
  8946.  
  8947. ΓòÉΓòÉΓòÉ <hidden> NMAKE - Predefined Pseudotargets ΓòÉΓòÉΓòÉ
  8948.  
  8949. NMAKE predefines several pseudotargets that provide special rules within a 
  8950. description file: 
  8951.  
  8952. .SILENT 
  8953.      Suppresses command display 
  8954.  
  8955. .IGNORE 
  8956.      Ignores exit codes 
  8957.  
  8958. .SUFFIXES 
  8959.      Defines file suffixes 
  8960.  
  8961. .PRECIOUS 
  8962.      Preserves target file 
  8963.  
  8964.  
  8965. ΓòÉΓòÉΓòÉ <hidden> NMAKE - .SILENT Pseudotarget ΓòÉΓòÉΓòÉ
  8966.  
  8967. Syntax:  .SILENT : dependents... 
  8968.  
  8969. This pseudotarget suppresses the display of executed commands for a single 
  8970. description block. The /S option does the same thing for all description 
  8971. blocks. 
  8972.  
  8973. See Suppress Command Display (/S) 
  8974.  
  8975.  
  8976. ΓòÉΓòÉΓòÉ <hidden> NMAKE - xxx .IGNORE Pseudotarget ΓòÉΓòÉΓòÉ
  8977.  
  8978. Syntax:  .IGNORE : dependents... 
  8979.  
  8980. This pseudotarget ignores exit codes returned by programs for a single 
  8981. description block. The /I option does the same thing for all description 
  8982. blocks. 
  8983.  
  8984. See Ignore Exit Codes (/I) 
  8985.  
  8986.  
  8987. ΓòÉΓòÉΓòÉ <hidden> NMAKE - .SUFFIXES Pseudotarget ΓòÉΓòÉΓòÉ
  8988.  
  8989. Syntax:  .SUFFIXES : extensions... 
  8990.  
  8991. This pseudotarget defines file extensions to try when NMAKE needs to build a 
  8992. target file for which no dependents are specified. NMAKE searches the current 
  8993. directory for a file with the same name as the target file and an extension in 
  8994. <extensions...>. If NMAKE finds such a file, and if an inference rule applies 
  8995. to the file, NMAKE treats the file as a dependent of the target. 
  8996.  
  8997. The .SUFFIXES pseudotarget is predefined as 
  8998.  
  8999. .SUFFIXES : .OBJ .EXE .C .ASM
  9000.  
  9001. To add extensions to the list, specify .SUFFIXES : followed by the new 
  9002. extensions. To clear the list, specify 
  9003.  
  9004. .SUFFIXES:
  9005.  
  9006. Note:  Only those extensions specified in .SUFFIXES can have inference rules. 
  9007.        NMAKE ignores inference rules unless the extensions have been specified 
  9008.        in a .SUFFIXES list.
  9009.  
  9010.  
  9011. ΓòÉΓòÉΓòÉ <hidden> NMAKE - .PRECIOUS Pseudotarget ΓòÉΓòÉΓòÉ
  9012.  
  9013. Syntax:  .PRECIOUS : targets... 
  9014.  
  9015. This pseudotarget tells NMAKE not to delete a target even if the commands that 
  9016. build it are terminated or interrupted. This pseudotarget overrides the NMAKE 
  9017. default. By default, NMAKE deletes the target if it cannot be sure that the 
  9018. target was built successfully. 
  9019.  
  9020. For example, 
  9021.  
  9022. .PRECIOUS : TOOLS.LIB
  9023. TOOLS.LIB : A2Z.OBJ Z2A.OBJ
  9024.  command
  9025.   :
  9026.  
  9027. If the commands to build TOOLS.LIB are interrupted, leaving an incomplete file, 
  9028. NMAKE does not delete the partially built TOOLS.LIB. 
  9029.  
  9030. Note:  The pseudotarget .PRECIOUS is useful only in limited circumstances. Most 
  9031.        professional development tools have their own interrupt handlers and 
  9032.        "clean up" when errors occur.
  9033.  
  9034.  
  9035. ΓòÉΓòÉΓòÉ <hidden> NMAKE - In-Line Files ΓòÉΓòÉΓòÉ
  9036.  
  9037. Example 
  9038.  
  9039. You may need to issue a command in the description file with a list of 
  9040. arguments exceeding the command-line limit of the operating system. Just as 
  9041. NMAKE supports the use of command files, it can also generate in-line files 
  9042. which are read as response files by other programs. 
  9043.  
  9044. To generate an in-line file, use the following syntax for your description 
  9045. block: 
  9046.  
  9047. target : dependents
  9048.   command @<<[filename]
  9049. in-line file text
  9050. << [KEEP | NOKEEP]
  9051.  
  9052. All of the text between the two sets of double brackets (<<) is placed into an 
  9053. in-line file and given the name <filename>. You can refer to the in-line file 
  9054. at a later time by using <filename>. If <filename> is not given, NMAKE gives 
  9055. the file a unique name in the directory specified by the TMP environment 
  9056. variable if it is defined. Otherwise, NMAKE creates a unique filename in the 
  9057. current directory. 
  9058.  
  9059. The in-line file can be temporary or permanent. If you do not specify 
  9060. otherwise, or if you specify the keyword NOKEEP, the in-line file is temporary. 
  9061. Specify KEEP to retain the file. 
  9062.  
  9063. Note:  The at sign (@) is not part of the NMAKE syntax but is the typical 
  9064.        character used by utilities (such as LINK386) to designate a file as a 
  9065.        response file. 
  9066.  
  9067.  
  9068. ΓòÉΓòÉΓòÉ <hidden> NMAKE - In-Line Files Example ΓòÉΓòÉΓòÉ
  9069.  
  9070. In-Line Files 
  9071.  
  9072. MATH.LIB : ADD.OBJ SUB.OBJ MUL.OBJ DIV.OBJ
  9073.   LIB @<<
  9074. MATH.LIB
  9075. -+ADD.OBJ-+SUB.OBJ-+MUL.OBJ-+DIV.OBJ
  9076. listing
  9077. <<
  9078.  
  9079. The above example creates an in-line file and uses it to invoke the Library 
  9080. Manager (LIB). The in-line file is used as a response file by (LIB). It 
  9081. specifies which library to use, the commands to execute, and the listing file 
  9082. to produce. The in-line file contains the following: 
  9083.  
  9084.           MATH.LIB
  9085.           -+ADD.OBJ-+SUB.OBJ-+MUL.OBJ-+DIV.OBJ
  9086.           listing
  9087.  
  9088. Since no file name is listed after the LIB command, the in-line file is given a 
  9089. unique name and placed into the current directory (or the directory defined by 
  9090. the TMP environment variable). 
  9091.  
  9092.  
  9093. ΓòÉΓòÉΓòÉ <hidden> NMAKE - Escape Characters ΓòÉΓòÉΓòÉ
  9094.  
  9095. NMAKE uses the following punctuation characters in its syntax: 
  9096.  
  9097.  
  9098.  (      )      #      $      ^      \
  9099.  
  9100.  {      }      !      @      -
  9101.  
  9102. To use one of these characters in a command and not have it interpreted by 
  9103. NMAKE, use a caret ( ^ ) in front of the character. 
  9104.  
  9105. For example, 
  9106.  
  9107. BIG^#.C
  9108.  
  9109. is treated as 
  9110.  
  9111. BIG#.C
  9112.  
  9113. With the caret, you can include a literal newline character in a description 
  9114. file. This capability is useful in macro definitions, as in the following 
  9115. example: 
  9116.  
  9117. XYZ=abc^<ENTER>
  9118. def
  9119.  
  9120. The effect is equivalent to the effect of assigning the C-style string abc\ndef 
  9121. to the XYZ macro. Note that this effect differs from the effect of using the 
  9122. backslash ( \ ) to continue a line. A newline character that follows a 
  9123. backslash is replaced with a space. 
  9124.  
  9125. NMAKE ignores a caret that is not followed by any of the characters it uses in 
  9126. its syntax. A caret that appears within quotation marks is not treated as an 
  9127. escape character. 
  9128.  
  9129. Note:  The escape character cannot be used in the command portion of a 
  9130.        dependency block. 
  9131.  
  9132.  
  9133. ΓòÉΓòÉΓòÉ <hidden> NMAKE - Characters that Modify Commands ΓòÉΓòÉΓòÉ
  9134.  
  9135. Any of three characters can be placed in front of a command to modify how the 
  9136. command is run: 
  9137.  
  9138. - (dash) 
  9139.      Turns off error checking for the command 
  9140.  
  9141. @ (at sign) 
  9142.      Suppresses display of the command 
  9143.  
  9144. ! (exclamation point) 
  9145.      Executes the command for each dependent file 
  9146.  
  9147. Note: 
  9148.  
  9149. o Spaces can separate the modifying character from the command. Any command on 
  9150.   a separate line  - whether modified or not - must be indented by one or more 
  9151.   spaces or tabs. 
  9152. o You can use more than one character to modify a single command. 
  9153.  
  9154.  
  9155. ΓòÉΓòÉΓòÉ <hidden> NMAKE - Turn Error Checking Off (-) ΓòÉΓòÉΓòÉ
  9156.  
  9157. Example 
  9158.  
  9159. Syntax:  -[n] command 
  9160.  
  9161. The /I option globally turns command error-checking off. The dash (-) command 
  9162. modifier overrides the global setting to turn error checking off for commands 
  9163. individually. This modifier is used in two ways: 
  9164.  
  9165. o A dash without a number turns off all error checking. 
  9166.  
  9167. o A dash followed by a number causes NMAKE to abort only if the exit code 
  9168.   returned by the command is greater than the number. 
  9169.  
  9170. See Ignore Exit Codes (/I) 
  9171.  
  9172.  
  9173. ΓòÉΓòÉΓòÉ <hidden> NMAKE - Dash Command Modifier Examples ΓòÉΓòÉΓòÉ
  9174.  
  9175. Error Check Off 
  9176.  
  9177. LIGHT.LST : LIGHT.TXT
  9178.   - FLASH LIGHT.TXT
  9179.  
  9180. In the example above, NMAKE never aborts, regardless of the exit code returned 
  9181. by FLASH. 
  9182.  
  9183. LIGHT.LST : LIGHT.TXT
  9184.   -1 FLASH LIGHT.TXT
  9185.  
  9186. In the example above, NMAKE aborts if the exit code returned by FLASH is 
  9187. greater than 1. 
  9188.  
  9189.  
  9190. ΓòÉΓòÉΓòÉ <hidden> NMAKE - Suppress Command Display (@) ΓòÉΓòÉΓòÉ
  9191.  
  9192. Example 
  9193.  
  9194. Syntax:  @ command 
  9195.  
  9196. The /S option globally suppresses the display of commands while NMAKE is 
  9197. running. The at sign (@) modifier suppresses the display for individual 
  9198. commands. 
  9199.  
  9200. Note:  Regardless of the /S option or the @ modifier, output generated by the 
  9201.        command itself always appears. 
  9202.  
  9203. See Suppress Command Display (/S) 
  9204.  
  9205.  
  9206. ΓòÉΓòÉΓòÉ <hidden> NMAKE - At Sign (@) Command Modifier Example ΓòÉΓòÉΓòÉ
  9207.  
  9208. Suppress Command Display (@) 
  9209.  
  9210. SORT.EXE:SORT.OBJ
  9211.   @ ECHO sorting
  9212.  
  9213. The command line calling the ECHO command is not displayed. The output of the 
  9214. ECHO command, however, is displayed. 
  9215.  
  9216.  
  9217. ΓòÉΓòÉΓòÉ <hidden> NMAKE - Execute Command for Dependents (!) ΓòÉΓòÉΓòÉ
  9218.  
  9219. Syntax:  ! command 
  9220.  
  9221. The exclamation-point command modifier causes the command to be executed for 
  9222. each dependent file if the command uses one of the special macros $? or $**. 
  9223. The $? macro refers to all dependent files out-of-date with respect to the 
  9224. target. The $** macro refers to all dependent files in the description block. 
  9225.  
  9226. See Special Macros 
  9227.  
  9228.  
  9229. ΓòÉΓòÉΓòÉ <hidden> NMAKE - Exclamation Point (!) Command Modifier Examples ΓòÉΓòÉΓòÉ
  9230.  
  9231. Execute Dependents Command (!) 
  9232.  
  9233. LEAP.TXT : HOP.ASM SKIP.BAS JUMP.C
  9234.   ! print $** lpt1:
  9235.  
  9236. The description block above executes the following three commands, regardless 
  9237. of the modification dates of the dependent file: 
  9238.  
  9239. print HOP.ASM lpt1:
  9240. print SKIP.BAS lpt1:
  9241. print JUMP.C lpt1:
  9242.  
  9243. LEAP.TXT : HOP.ASM SKIP.BAS JUMP.C
  9244.   ! print $? lpt1:
  9245.  
  9246. The description block above executes the print command only for those dependent 
  9247. files with modification dates later than that of the LEAP.TXT file. If HOP.ASM 
  9248. and JUMP.C have modification dates later than LEAP.TXT, the following two 
  9249. commands are executed: 
  9250.  
  9251. print HOP.ASM lpt1:
  9252. print JUMP.C lpt1:
  9253.  
  9254.  
  9255. ΓòÉΓòÉΓòÉ <hidden> NMAKE - Using a Target in Several Description Blocks ΓòÉΓòÉΓòÉ
  9256.  
  9257. Using a file as a target in more than one description block causes NMAKE to 
  9258. abort. You can overcome this limitation by using two colons (::) as the 
  9259. target/dependent separator instead of one colon. 
  9260.  
  9261. The following description block is legal: 
  9262.  
  9263. X :: A
  9264.   command
  9265. X :: B
  9266.   command
  9267.  
  9268. The following causes NMAKE to abort: 
  9269.  
  9270. X : A
  9271.   command
  9272. X : B
  9273.   command
  9274.  
  9275. It is legal to use single colons if the target/dependent lines are grouped 
  9276. above the same commands. The following is legal: 
  9277.  
  9278. X : A
  9279. X : B
  9280.   command
  9281.  
  9282. Related Topics 
  9283.  
  9284. Double Colon (::) Target/Dependent Separator Example 
  9285.  
  9286.  
  9287. ΓòÉΓòÉΓòÉ <hidden> NMAKE - Double Colon (::) Target/Dependent Separator Example ΓòÉΓòÉΓòÉ
  9288.  
  9289. TARGET.LIB :: A.ASM B.ASM C.ASM
  9290.   ML A.ASM B.ASM C.ASM
  9291.   LIB TARGET -+A.OBJ -+B.OBJ -+C.OBJ;
  9292.  
  9293. TARGET.LIB :: D.C E.C
  9294.   ICC /C D.C E.C
  9295.   LIB TARGET -+D.OBJ -+E.OBJ;
  9296.  
  9297. These two description blocks both update the library named TARGET.LIB. If any 
  9298. of the assembly-language files have changed more recently than the library 
  9299. file, NMAKE executes the commands in the first block to assemble the source 
  9300. files and update the library. Similarly, if any of the C-language files have 
  9301. changed, NMAKE executes the second group of commands to compile the C files and 
  9302. update the library. 
  9303.  
  9304.  
  9305. ΓòÉΓòÉΓòÉ <hidden> NMAKE - EXTMAKE Syntax ΓòÉΓòÉΓòÉ
  9306.  
  9307. Description files can use a special syntax to determine the drive, path, base 
  9308. name, and extension of the first dependent file in a description block. This 
  9309. syntax is called the "extmake" syntax. 
  9310.  
  9311. The characters %s represent the complete file specification of the first 
  9312. dependent file. Various parts of the file specification are represented using 
  9313. the syntax 
  9314.  
  9315. %|partsF
  9316.  
  9317. where <parts> is a combination of the following letters: 
  9318.  
  9319. Letter File-Specification Part 
  9320. p  Path 
  9321. d  Drive 
  9322. f  Base name 
  9323. e  Extension 
  9324.  
  9325. The percent symbol (%) is a replacement in DOS and OS/2 command lines. To use 
  9326. the percent symbol in command-line arguments, use a double percent (%%). 
  9327.  
  9328.  
  9329. ΓòÉΓòÉΓòÉ <hidden> NMAKE - Differences between NMAKE and MAKE ΓòÉΓòÉΓòÉ
  9330.  
  9331. The predecessor of NMAKE was a similar utility called MAKE. NMAKE differs from 
  9332. MAKE in the following ways: 
  9333.  
  9334. o NMAKE can use a command file for command-line arguments. 
  9335.  
  9336. o NMAKE provides more command-line options. 
  9337.  
  9338. o NMAKE no longer evaluates targets sequentially. Instead, it updates the 
  9339.   primary targets you specify when you invoke NMAKE, regardless of their 
  9340.   positions in the description file. If the dependent files of the primary 
  9341.   targets are used as targets in other description blocks, NMAKE ensures that 
  9342.   these files are built before it builds the primary targets. 
  9343.  
  9344. o NMAKE provides more special macros. 
  9345.  
  9346. o NMAKE permits substitutions within macros. 
  9347.  
  9348. o NMAKE supports directives placed in the description file. 
  9349.  
  9350. o NMAKE allows you to specify include files in the description file. 
  9351.  
  9352. MAKE assumed that all targets in the description file would be built. Because 
  9353. NMAKE builds the first target in the file unless you specify otherwise, you may 
  9354. need to change your old description files to work with the new utility. 
  9355.  
  9356. Description files written for use with MAKE typically list a series of 
  9357. subordinate targets, followed by a higher-level target that depends on the 
  9358. subordinates. As MAKE executed, it built the targets sequentially, creating the 
  9359. highest-level target at the end. 
  9360.  
  9361. The easiest way to convert these description files is to create a new 
  9362. description block at the top of the file. Give this block a pseudotarget named 
  9363. ALL and set its dependents to all of the other targets in the file. When NMAKE 
  9364. executes the description, it assumes you want to build the target ALL and 
  9365. consequently builds all targets in the file. 
  9366.  
  9367. If your description file already contains a block that builds a single 
  9368. top-level target, you can simply make that block the first in the file. 
  9369.  
  9370. Related Topic 
  9371.  
  9372. NMAKE and MAKE Conversion Example 
  9373.  
  9374.  
  9375. ΓòÉΓòÉΓòÉ <hidden> NMAKE - NMAKE and MAKE Conversion Example ΓòÉΓòÉΓòÉ
  9376.  
  9377. ONE.OBJ: ONE.C
  9378. TWO.OBJ: TWO.C
  9379. THREE.OBJ: THREE.C
  9380. PROG1.EXE: ONE.OBJ TWO.OBJ THREE.OBJ
  9381.      link ONE TWO THREE, PROG1;
  9382.  
  9383. X.OBJ: X.C
  9384. Y.OBJ: Y.C
  9385. Z.OBJ: Z.C
  9386. XYZ.EXE: X.OBJ Y.OBJ Z.OBJ
  9387.      link X Y Z, XYZ;
  9388.  
  9389. Assume the example above is an old MAKE description file named MAKEFILE. Note 
  9390. that it builds two top-level targets, PROG1.EXE and XYZ.EXE. To use this file 
  9391. with the new NMAKE, insert the following as the first line in the file: 
  9392.  
  9393. ALL : PROG1.EXE XYZ.EXE
  9394.  
  9395. With the addition of this line, ALL becomes the first target in the file. Since 
  9396. NMAKE builds the first target by default, you can invoke NMAKE with NMAKE  and 
  9397. it builds both PROG1.EXE and XYZ.EXE. 
  9398.  
  9399.  
  9400. ΓòÉΓòÉΓòÉ <hidden> NMAKE - Macros and Inference Rules in TOOLS.INI ΓòÉΓòÉΓòÉ
  9401.  
  9402. You can place either macros or inference rules in your TOOLS.INI file. NMAKE 
  9403. looks for the TOOLS.INI file first in the current directory and then in the 
  9404. directory indicated by the INIT environment variable. 
  9405.  
  9406. If NMAKE finds a TOOLS.INI file, it looks for the following tag: 
  9407.  
  9408. [nmake]
  9409.  
  9410. You can place macros and inference rules below this tag in the same format you 
  9411. would use in a description file. 
  9412.  
  9413. If a macro or inference rule is defined in both the TOOLS.INI file and the 
  9414. description file, the definition in the description file takes precedence. 
  9415. Also, if you use the /R option, the TOOLS.INI file is ignored. 
  9416.  
  9417. Related Topics 
  9418.  
  9419. TOOLS.INI Example 
  9420. Ignore TOOLS.INI File (/R) 
  9421.  
  9422.  
  9423. ΓòÉΓòÉΓòÉ <hidden> NMAKE - TOOLS.INI Example ΓòÉΓòÉΓòÉ
  9424.  
  9425. [nmake]
  9426. CC=QCL
  9427. CFLAGS=-Gc -Gx -W3 -Oat
  9428. .C.OBJ:
  9429.   $(CC) -c $(CFLAGS) $*.C
  9430.  
  9431. These lines in the TOOLS.INI file do the following: 
  9432.  
  9433. o Redefine the predefined macro CC by setting it to "QCL" rather than "CL" 
  9434.  
  9435. o Define the CFLAGS macro as "-Gc -Gx -W3 -Oat" 
  9436.  
  9437. o Redefine the predefined inference rule to build .OBJ files from .C source 
  9438.   files 
  9439.  
  9440.  
  9441. ΓòÉΓòÉΓòÉ 15. PACK ΓòÉΓòÉΓòÉ
  9442.  
  9443. Select one: 
  9444.  
  9445. Introduction 
  9446. Starting PACK: 
  9447.   Method One 
  9448.   Method Two 
  9449. Syntax Definitions 
  9450. Creating a List File 
  9451. Starting UNPACK 
  9452.  
  9453.  
  9454. ΓòÉΓòÉΓòÉ <hidden> PACK - Introduction ΓòÉΓòÉΓòÉ
  9455.  
  9456. PACK reduces the size of a file by compressing its data.  You can use PACK for 
  9457. a single file, or a group of files, thereby reducing the disk space required 
  9458. for your OS/2* application. 
  9459.  
  9460. You can start PACK with a single command from the command line. The input 
  9461. required can be specified in one of two ways: 
  9462.  
  9463. o You can type the names of all the files you want to compress directly in the 
  9464.   command line (  Method 1). 
  9465.  
  9466. o You can type the name of a single file that contains a list of all the files 
  9467.   you want to compress (  Method 2). 
  9468.  
  9469. When using PACK, select the method that is suitable for you. Include the drive 
  9470. and path if the files are not in the working directory.  You can specify file 
  9471. names with any combination of uppercase and lowercase letters. File-name 
  9472. extensions are not required; however, if you specify a file name that has an 
  9473. extension, also type the extension. 
  9474.  
  9475.  
  9476. ΓòÉΓòÉΓòÉ <hidden> Starting PACK: Method 1 ΓòÉΓòÉΓòÉ
  9477.  
  9478. You can start PACK with a single command from the command line.  You can type 
  9479. the names of all the files you want to compress directly in the command line. 
  9480. Include the drive and path if the files are not in the working directory.  You 
  9481. can specify file names with any combination of uppercase and lowercase letters. 
  9482. File-name extensions are not required; however, if you specify a file name that 
  9483. has an extension, also type the extension. 
  9484.  
  9485. Example of the command-syntax follows: 
  9486.  
  9487.   PACK sourcefile [packedfile]
  9488.     [/H:headerpath\
  9489.     |/H:headerfile
  9490.     |/H:headerpath\ headerfile]
  9491.     [/D:headerdate]
  9492.     [/T:headertime]
  9493.     [/C] [/A] [/R]
  9494.  
  9495. where: 
  9496.  
  9497. sourcefile 
  9498.   Specifies the name of the file you want packed (compressed). This parameter 
  9499.   is required.  Include the drive and path if the file is not in the working 
  9500.   directory.  Global file-name characters are permitted. 
  9501.  
  9502.   When the data is compressed, the name of the source file is placed in the 
  9503.   header of the compressed file and is used as the destination file name during 
  9504.   unpacking. 
  9505.  
  9506. packedfile 
  9507.   Specifies the name of the file that will contain the compressed data.  Files 
  9508.   that contain compressed data can be recognized by the @ symbol as the last 
  9509.   character in the file name. If you do not specify this parameter, PACK places 
  9510.   the compressed data in sourcefile and modifies its name to contain the @ 
  9511.   symbol. 
  9512.  
  9513. /H:headerpath\ or /H:headerfile or /H:headerpath\ headerfile 
  9514.   These parameters can be used separately or paired. 
  9515.  
  9516.    /H:headerpath\ 
  9517.      Specifies the destination path (drive letters are not permitted) to be 
  9518.      placed in the header of the file that contains the compressed data. Unless 
  9519.      this path is overridden with the UNPACK command, it will be the 
  9520.      destination path when the file is uncompressed. Headerpath must end with a 
  9521.      back slash (\). 
  9522.  
  9523.    /H:headerfile 
  9524.      Specifies the name of the file to be placed in the header of the 
  9525.      compressed file.  This file name will be used as the destination file for 
  9526.      the uncompressed data and cannot be overridden. 
  9527.  
  9528.      If a header file name is not specified, PACK automatically uses sourcefile 
  9529.      as the name of the file that is placed in the header of the compressed 
  9530.      file. 
  9531.  
  9532.    /H:headerpath\ headerfile 
  9533.      Specifies that both a destination path and a destination file name are to 
  9534.      be placed in the header of the file that has the compressed data. 
  9535.  
  9536. /D:headerdate 
  9537.   Records the date in the header of the file that has the compressed data, and 
  9538.   also in the destination file when it is uncompressed. 
  9539.  
  9540.   The date must follow the format /D:MM-DD-YYYY.  For example: /D:08-20-1991 
  9541.   and /D:12-30-2010. 
  9542.  
  9543. /T:headertime 
  9544.   Records the time in the header of the file that has the compressed data, and 
  9545.   also in the destination file when it is uncompressed. 
  9546.  
  9547.   The time must follow the format /T:HH.MM.  For example /T:02.06 and /T:14.54. 
  9548.   Hour 00 represents 12 a.m. and hour 12 represents 12 p.m. 
  9549.  
  9550. /A 
  9551.   Adds data from sourcefile to the data in packedfile. 
  9552.  
  9553.   The source file can be either in a compressed or uncompressed state.  If the 
  9554.   source file is in an uncompressed state, the data is compressed before being 
  9555.   added to the file containing the compressed data. 
  9556.  
  9557. /C 
  9558.   Specifies that the current path be placed in the header of the file that 
  9559.   contains the compressed data. When the UNPACK command is used, this path will 
  9560.   be the destination path for the file that contains the uncompressed data. 
  9561.  
  9562.   You cannot use /C when the headerpath is used. 
  9563.  
  9564. /R 
  9565.   Removes the file specified by sourcefile from the file that contains only 
  9566.   compressed data.  The sourcefile parameter must specify the path and file 
  9567.   name exactly as they appear in the header of the file with the compressed 
  9568.   data; otherwise, the following error message 
  9569.  
  9570.     The specified file to remove was not found.
  9571.   appears on the screen. 
  9572.  
  9573.   The /R parameter is valid only when used in conjunction with sourcefile and 
  9574.   packedfile. 
  9575.  
  9576. Note:  The path and file-name information stored in the header of the file that 
  9577.        contains the compressed data can be displayed by using the /SHOW option 
  9578.        available with UNPACK. For information about the /SHOW option, see the 
  9579.        UNPACK command in the online OS/2 Command Reference. 
  9580.  
  9581.  
  9582. ΓòÉΓòÉΓòÉ <hidden> Starting PACK: Method 2 ΓòÉΓòÉΓòÉ
  9583.  
  9584. You can start PACK with a single command from the command line. You can type 
  9585. the name of a single file that contains a list of all the files you want to 
  9586. compress. 
  9587.  
  9588. Include the drive and path if the files are not in the working directory.  You 
  9589. can specify file names with any combination of uppercase and lowercase letters. 
  9590. File-name extensions are not required; however, if you specify a file name that 
  9591. has an extension, also type the extension. 
  9592.  
  9593. Example of the command-line syntax follows: 
  9594.  
  9595.   PACK listfile [packedfile] /L
  9596.     [/H:headerpath\
  9597.     |/H:headerfile
  9598.     |/H:headerpath\ headerfile]
  9599.     [/D:headerdate]
  9600.     [/T:headertime]
  9601.     [/C]
  9602.  
  9603. where: 
  9604.  
  9605. listfile 
  9606.   Specifies the name of the file that contains a list of files that are to be 
  9607.   compressed. When naming a list file, do not use global file-name characters. 
  9608.  
  9609.   For information about list files, see Creating a List File 
  9610.  
  9611. packedfile 
  9612.   Specifies the name of the file that will contain the compressed data.  Files 
  9613.   that contain compressed data can be recognized by the @ symbol as the last 
  9614.   character in the file name. If you do not specify this parameter, PACK places 
  9615.   the compressed data in sourcefile and modifies its name to contain the @ 
  9616.   symbol. 
  9617.  
  9618. /H:headerpath\ or /H:headerfile or /H:headerpath\ headerfile 
  9619.   These parameters can be used separately or paired. 
  9620.  
  9621.    /H:headerpath\ 
  9622.      Specifies the destination path (drive letters are not permitted) to be 
  9623.      placed in the header of the file that contains the compressed data. Unless 
  9624.      this path is overridden with the UNPACK command, it will be the 
  9625.      destination path when the file is uncompressed. Headerpath must end with a 
  9626.      back slash (\). 
  9627.  
  9628.    /H:headerfile 
  9629.      Specifies the name of the file to be placed in the header of the 
  9630.      compressed file.  This file name will be used as the destination file for 
  9631.      the uncompressed data and cannot be overridden. 
  9632.  
  9633.      If a header file name is not specified, PACK automatically uses sourcefile 
  9634.      as the name of the file that is placed in the header of the compressed 
  9635.      file. 
  9636.  
  9637.    /H:headerpath\ headerfile 
  9638.      Specifies that both a destination path and a destination file name are to 
  9639.      be placed in the header of the file that has the compressed data. 
  9640.  
  9641. /D:headerdate 
  9642.   Records the date in the header of the file that has the compressed data, and 
  9643.   also in the destination file when it is uncompressed. 
  9644.  
  9645.   The date must follow the format /D:MM-DD-YYYY.  For example: /D:08-20-1991 
  9646.   and /D:12-30-2010. 
  9647.  
  9648. /T:headertime 
  9649.   Records the time in the header of the file that has the compressed data, and 
  9650.   also in the destination file when it is uncompressed. 
  9651.  
  9652.   The time must follow the format /T:HH.MM.  For example /T:02.06 and /T:14.54. 
  9653.   Hour 00 represents 12 a.m. and hour 12 represents 12 p.m. 
  9654.  
  9655. /C 
  9656.   Specifies that the current path be placed in the header of the file that 
  9657.   contains the compressed data. When the UNPACK command is used, this path will 
  9658.   be the destination path for the file that contains the uncompressed data. 
  9659.  
  9660.   You cannot use /C when the headerpath is used. 
  9661.  
  9662. /L 
  9663.   Indicates that filename is a list file. A list file is not compressed; it 
  9664.   simply contains a listing of the names of the files that are to be 
  9665.   compressed. 
  9666.  
  9667. Note:  The path and file-name information stored in the header of the file that 
  9668.        contains the compressed data can be displayed by using the /SHOW option 
  9669.        available with UNPACK. For information about the /SHOW option, see the 
  9670.        UNPACK command in the online OS/2 Command Reference. 
  9671.  
  9672.  
  9673. ΓòÉΓòÉΓòÉ <hidden> PACK - Syntax Definitions ΓòÉΓòÉΓòÉ
  9674.  
  9675. The PACK command line includes the following parameters: 
  9676.  
  9677. sourcefile 
  9678.   Specifies the name of the file you want packed (compressed). This parameter 
  9679.   is required.  Include the drive and path if the file is not in the working 
  9680.   directory.  Global file-name characters are permitted. 
  9681.  
  9682.   When the data is compressed, the name of the source file is placed in the 
  9683.   header of the compressed file and is used as the destination file name during 
  9684.   unpacking. 
  9685.  
  9686. listfile 
  9687.   Specifies the name of the file that contains a list of files that are to be 
  9688.   compressed. When naming a list file, do not use global file-name characters. 
  9689.   (See Creating a List File.) 
  9690.  
  9691. packedfile 
  9692.   Specifies the name of the file that will contain the compressed data.  Files 
  9693.   that contain compressed data can be recognized by the @ symbol as the last 
  9694.   character in the file name. If you do not specify this parameter, PACK places 
  9695.   the compressed data in sourcefile and modifies its name to contain the @ 
  9696.   symbol. 
  9697.  
  9698. /H:headerpath\ or /H:headerfile or /H:headerpath\ headerfile 
  9699.   These parameters can be used separately or paired. 
  9700.  
  9701.    /H:headerpath\ 
  9702.      Specifies the destination path (drive letters are not permitted) to be 
  9703.      placed in the header of the file that contains the compressed data. Unless 
  9704.      this path is overridden with the UNPACK command, it will be the 
  9705.      destination path when the file is uncompressed. Headerpath must end with a 
  9706.      back slash (\). 
  9707.  
  9708.    /H:headerfile 
  9709.      Specifies the name of the file to be placed in the header of the 
  9710.      compressed file.  This file name will be used as the destination file for 
  9711.      the uncompressed data and cannot be overridden. 
  9712.  
  9713.      If a header file name is not specified, PACK automatically uses sourcefile 
  9714.      as the name of the file that is placed in the header of the compressed 
  9715.      file. 
  9716.  
  9717.    /H:headerpath\ headerfile 
  9718.      Specifies that both a destination path and a destination file name are to 
  9719.      be placed in the header of the file that has the compressed data. 
  9720.  
  9721. /D:headerdate 
  9722.   Records the date in the header of the file that has the compressed data, and 
  9723.   also in the destination file when it is uncompressed. 
  9724.  
  9725.   The date must follow the format /D:MM-DD-YYYY.  For example: /D:08-20-1991 
  9726.   and /D:12-30-2010. 
  9727.  
  9728. /T:headertime 
  9729.   Records the time in the header of the file that has the compressed data, and 
  9730.   also in the destination file when it is uncompressed. 
  9731.  
  9732.   The time must follow the format /T:HH.MM.  For example /T:02.06 and /T:14.54. 
  9733.   Hour 00 represents 12 a.m. and hour 12 represents 12 p.m. 
  9734.  
  9735. /A 
  9736.   Adds data from sourcefile to the data in packedfile. 
  9737.  
  9738.   The source file can be either in a compressed or uncompressed state.  If the 
  9739.   source file is in an uncompressed state, the data is compressed before being 
  9740.   added to the file containing the compressed data. 
  9741.  
  9742. /C 
  9743.   Specifies that the current path be placed in the header of the file that 
  9744.   contains the compressed data. When the UNPACK command is used, this path will 
  9745.   be the destination path for the file that contains the uncompressed data. 
  9746.  
  9747.   You cannot use /C when the headerpath is used. 
  9748.  
  9749. /L 
  9750.   Indicates that filename is a list file. A list file is not compressed; it 
  9751.   simply contains a listing of the names of the files that are to be 
  9752.   compressed. 
  9753.  
  9754. /R 
  9755.   Removes the file specified by sourcefile from the file that contains only 
  9756.   compressed data.  The sourcefile parameter must specify the path and file 
  9757.   name exactly as they appear in the header of the file with the compressed 
  9758.   data; otherwise, the following error message 
  9759.  
  9760.     The specified file to remove was not found.
  9761.   appears on the screen. 
  9762.  
  9763.   The /R parameter is valid only when used in conjunction with sourcefile and 
  9764.   packedfile. 
  9765.  
  9766. Note:  The path and file-name information stored in the header of the file that 
  9767.        contains the compressed data can be displayed by using the /SHOW option 
  9768.        available with UNPACK. For information about the /SHOW option, see the 
  9769.        UNPACK command in the online OS/2 Command Reference. 
  9770.  
  9771.  
  9772. ΓòÉΓòÉΓòÉ <hidden> PACK - Creating a List File ΓòÉΓòÉΓòÉ
  9773.  
  9774. To use a list file with PACK, you must first create a file that contains the 
  9775. names of the files you want to compress.  You can give the list file any name. 
  9776. Following is an example of specifying a list file at the command line. 
  9777.  
  9778.   PACK DEVICE.LST DEVICE.DRV /L
  9779.  
  9780. The /L indicates that DEVICE.LST is a list file.  If the list file is not in 
  9781. the working directory, you must specify the drive and path.  Global file-name 
  9782. characters are not permitted in the list-file name. DEVICE.DRV is the 
  9783. destination file for the end-to-end-compressed data. (End-to-end compressed 
  9784. data is the data from each of the files contained in the list file.  This data 
  9785. is stored in a contiguous format in the destination file.) 
  9786.  
  9787. You can also get end-to-end compressed data by using global file-name 
  9788. characters.  For example: 
  9789.  
  9790.   PACK *.EXE BUNDLE
  9791.  
  9792. The syntax used in the list file is similar to that used in the command line. 
  9793. The syntax for a single line in the list file follows: 
  9794.  
  9795.   sourcefile
  9796.     [/H:headerpath\
  9797.     |/H:headerfile
  9798.     |/H:headerpath\ headerfile]
  9799.     [/D:headerdate]
  9800.     [/T:headertime]
  9801.     [/C]
  9802.  
  9803. Remember, when using the list-file method (method 2), global file-name 
  9804. characters are not permitted in the source-file name.  Notice also that "PACK" 
  9805. is excluded, and packedfile is not permitted in the list file, because they 
  9806. were specified on the command line. You can include comments or blank lines by 
  9807. entering a semicolon as the first character of the line. An example of a list 
  9808. file follows. 
  9809.  
  9810.   ;This is a comment
  9811.   C:\OS2\COMMAND.COM
  9812.   CONFIG.SYS /H:CONFIG.BAK /C
  9813.   \OS2\INSTALL\DDINSTAL.EXE
  9814.    /H:\OS2\DDINSTAL.TMP
  9815.    /D:10-15-91 /T:11.45
  9816.  
  9817.  
  9818. ΓòÉΓòÉΓòÉ <hidden> PACK - Starting UNPACK ΓòÉΓòÉΓòÉ
  9819.  
  9820. UNPACK restores a file of compressed data to its original size, and copies it 
  9821. to a specified drive and path. To start the UNPACK command, type: 
  9822.  
  9823.   UNPACK sourcefile
  9824.   [destinationdrive:] [destinationpath]
  9825.   [/SHOW] [/N:singlefile]
  9826.   [/V] [/F]
  9827.  
  9828. where: 
  9829.  
  9830. sourcefile 
  9831.   Specifies the name of an existing file that contains compressed data.  If 
  9832.   this file contains one or more files of compressed data, UNPACK restores each 
  9833.   file within the file. 
  9834.  
  9835. destinationdrive: 
  9836.   Specifies the name of the drive to which you want UNPACK to copy one or more 
  9837.   restored files. 
  9838.  
  9839.   When you specify a destination drive but not a path, UNPACK uses the path 
  9840.   information stored in the header of the file that contains the compressed 
  9841.   data. 
  9842.  
  9843. destinationpath 
  9844.   Specifies the name of the directory (and its subdirectories) to which you 
  9845.   want UNPACK to copy one or more restored files. 
  9846.  
  9847.   When specified, the destination path overrides the path information stored in 
  9848.   the header of the file that contains the compressed data. 
  9849.  
  9850. /SHOW 
  9851.   Displays the destination path and file-name information that are saved in the 
  9852.   header of each file containing compressed data. 
  9853.  
  9854. /N:singlefile 
  9855.   Extracts and uncompresses one file from a file that contains multiple files 
  9856.   of compressed data. 
  9857.  
  9858. /V 
  9859.   Verifies that sectors written to the target disk are recorded properly.  This 
  9860.   parameter lets you know that critical data has been correctly recorded. 
  9861.  
  9862.   This parameter causes UNPACK to run slower because a check is made for each 
  9863.   entry recorded on the disk. 
  9864.  
  9865. /F 
  9866.   Specifies that files with extended attributes should not be unpacked or 
  9867.   copied if the destination file system does not support extended attributes. 
  9868.  
  9869.  
  9870. ΓòÉΓòÉΓòÉ 16. Resource Compiler ΓòÉΓòÉΓòÉ
  9871.  
  9872. Select One: 
  9873.  
  9874. Introduction 
  9875. Help 
  9876. Using 
  9877. Options 
  9878. Resource Script Files 
  9879. Constants 
  9880. Binary Resource Files 
  9881. About Statements 
  9882. Statements/Directives 
  9883. Error Messages 
  9884.  
  9885.  
  9886. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - Introduction ΓòÉΓòÉΓòÉ
  9887.  
  9888. The OS/2* Resource Compiler (RC) is an application-development tool that lets 
  9889. you add application resources, such as message strings, pointers, menus, and 
  9890. dialog boxes, to the executable file of your application.  The Resource 
  9891. Compiler is primarily intended to prepare data for OS/2 applications that use 
  9892. functions such as WinLoadString, WinLoadPointer, WinLoadMenu, and WinLoadDlg. 
  9893. These functions load resources from the executable file of your application or 
  9894. another specified executable file.  The application can then use the loaded 
  9895. resources as needed. 
  9896.  
  9897. The Resource Compiler and the resource functions let you quickly define and/or 
  9898. modify application resources without recompiling the application itself.  That 
  9899. is, RC can modify the resources in an executable file at any time without 
  9900. affecting the rest of the file. This means that you can create custom 
  9901. applications from a single executable file - you just use RC to add the custom 
  9902. resources you need to each application. 
  9903.  
  9904. The Resource Compiler is especially important for international applications 
  9905. because it lets you define all language-dependent data, such as message 
  9906. strings, as resources.  Preparing the application for a new language is simply 
  9907. a matter of adding new resources to the existing executable file. 
  9908.  
  9909. Note:  Make sure the file RCPP.EXE (the Resource Compiler preprocessor) is 
  9910.        available for the use of the Resource Compiler.  It can be in the 
  9911.        current directory, or in a directory to which there is a path.
  9912.  
  9913.  
  9914. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - Command-Line Options ΓòÉΓòÉΓòÉ
  9915.  
  9916. The following options can be specified on the Resource Compiler command line: 
  9917.  
  9918. -d defname Preprocessor define 
  9919.  
  9920. -Ddefname Preprocessor define 
  9921.  
  9922. -i        Include file path 
  9923.  
  9924. -r        Create .res file 
  9925.  
  9926. -p        Pack - 386 resources will not cross 64K boundaries. 
  9927.  
  9928. -cp cp | lb,tb,... DBCS codepage or lead/trail byte information. 
  9929.  
  9930. -h        Access Help 
  9931.  
  9932. -x        Causes the resource to be compressed when it is written to the 
  9933.           executable. 
  9934.  
  9935.  
  9936. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - Help ΓòÉΓòÉΓòÉ
  9937.  
  9938. To display Resource Compiler help, type RC at the prompt, with no parameters. 
  9939. The appropriate copyright statement will be displayed, along with a list of 
  9940. Resource Compiler options. 
  9941.  
  9942. Usage:  rc [<options>] <.RC input file>
  9943. [<.EXE output file>]
  9944.  
  9945.   -d defname         - Preprocessor define
  9946.   -Ddefname          - Preprocessor define
  9947.   -i                 - Include file path
  9948.   -r                 - Create .res file
  9949.   -p                 - Pack - 386 resources will not cross 64K boundaries
  9950.   -cp cp | lb,tb,... - DBCS codepage or lead/trail byte information
  9951.   -h                 - Access Help
  9952.  
  9953. Environment variables:
  9954.   DBCS=cp | lb,tb,...
  9955.   TMP=temporary file path
  9956.   TEMP=temporary file path
  9957.   INCLUDE=include file path
  9958.  
  9959.  
  9960. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - Resource Script Files ΓòÉΓòÉΓòÉ
  9961.  
  9962. This topic describes the resource script file used to define your application 
  9963. resources and explains how to compile the file and add the resources to your 
  9964. executable file. 
  9965.  
  9966. Use the Resource Compiler to perform the following actions: 
  9967.  
  9968. o Create a resource script file. 
  9969.  
  9970. o Compile the file. 
  9971.  
  9972. o Add the file to the executable file of your application (optional). 
  9973.  
  9974. The following sections describe the resource script file and the RC program. 
  9975.  
  9976. Resource Script Files 
  9977.  
  9978. A resource script file consists of one or more resource statements that define 
  9979. the type, identifier, and data for each resource. For example, the following 
  9980. multiple-line resource statement defines a menu to be used with an application: 
  9981.  
  9982.   MENU 1
  9983.   BEGIN
  9984.       MENUITEM "Alpha", 101
  9985.       MENUITEM "Beta", 102
  9986.   END
  9987.  
  9988. A resource script file is a text file you can create by using an ordinary text 
  9989. editor. Since some resources may contain binary data that cannot be created 
  9990. using a text editor, many resource statements let you specify additional files 
  9991. to include when compiling the resource script file. For example, the following 
  9992. statement defines an icon and specifies the file MYICON.ICO as containing the 
  9993. icon data: 
  9994.  
  9995.   ICON 1 myicon.ico
  9996.  
  9997. Directives 
  9998.  
  9999. A resource script file can also contain directives.  For example, the following 
  10000. directive includes the header file OS2.H when RC processes the resource script 
  10001. file: 
  10002.  
  10003.   #include <os2.h>
  10004.  
  10005. Resource script files typically have the .RC filename extension. .RC is the 
  10006. default extension; use it for all your resource script files. 
  10007.  
  10008. Note:  Although the Resource Compiler is C-like in syntax, it is not a C 
  10009.        compiler. Use only the Resource Compiler statements.
  10010.  
  10011.  
  10012. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - Directives ΓòÉΓòÉΓòÉ
  10013.  
  10014. A directive is a statement that carries out a task such as including a header 
  10015. file, defining constants, or conditionally compiling portions of the resource 
  10016. script file. 
  10017.  
  10018. Directives 
  10019.  
  10020. elif Directive 
  10021. else Directive 
  10022. endif Directive 
  10023. if Directive 
  10024. ifdef Directive 
  10025. ifndef Directive 
  10026.  
  10027.  
  10028. ΓòÉΓòÉΓòÉ <hidden> Using the Resource Compiler ΓòÉΓòÉΓòÉ
  10029.  
  10030. The Resource Compiler (RC) compiles a resource script file to create a new file 
  10031. called a binary resource file. 
  10032.  
  10033. The binary resource file is added to the executable file of the application, 
  10034. replacing any existing resources in that file. 
  10035.  
  10036. You can start RC in any of three ways. 
  10037.  
  10038. o Compile and add a resource definition file to an executable file 
  10039. o Compile a resource script file 
  10040. o Add a binary resource file to an executable file 
  10041.  
  10042. The RC command line has the following three basic forms: 
  10043.  
  10044.   rc resource-script-file [executable-file]
  10045.  
  10046.   rc resource-file [executable-file]
  10047.  
  10048.   rc -r  resource-script-file [resource-file]
  10049.  
  10050. Note:  The third option does not add to the executable file.
  10051.  
  10052. The resource-script-file field must be the filename of the resource script file 
  10053. to be compiled.  If the file is not in the current directory, you must provide 
  10054. a full path.  If you provide a filename without specifying a filename 
  10055. extension, RC automatically appends the .RC extension to the name. 
  10056.  
  10057. The executable-file field must be the name of the executable file to receive 
  10058. the compiled resources.  This is a file having a filename extension of either 
  10059. .EXE or .DLL.  If the file is not in the current directory, you must provide a 
  10060. full path.  If you omit the executable-file field, RC adds the compiled 
  10061. resources to the executable file that has the same name as the resource script 
  10062. file but which has the .EXE filename extension.  If you specify the 
  10063. executable-file field but omit the filename extension, RC will append the .EXE 
  10064. extension.  If this executable file does not exist, RC displays an error 
  10065. message. 
  10066.  
  10067. The -r option directs RC to compile the resource script file without adding it 
  10068. to an executable file.  You can use this option to prepare a binary resource 
  10069. file that you can add to an executable file at a later time.  If you do not 
  10070. explicitly name a binary resource file along with the -r option, RC uses the 
  10071. same name as the resource script file but with the .RES filename extension. 
  10072.  
  10073. The resource-file field must be the name of the binary resource file to be 
  10074. added to the executable file.  If the binary resource file does not already 
  10075. exist, rc creates it; otherwise, rc replaces the existing file.  If the file is 
  10076. not in the current directory, you must provide a full path.  The binary 
  10077. resource file must have the .RES filename extension. 
  10078.  
  10079. For example, to compile the resource script file EXAMPLE.RC, and add the result 
  10080. to the executable file EXAMPLE.EXE, use the following command: 
  10081.  
  10082.   rc example
  10083.  
  10084. You do not need to specify the .RC extension. RC creates the binary resource 
  10085. file EXAMPLE.RES and adds the compiled resource to the executable file 
  10086. EXAMPLE.EXE. 
  10087.  
  10088. To compile the resource script file EXAMPLE.RC into a binary resource file 
  10089. without adding the resources to an executable file, use the following command: 
  10090.  
  10091.   rc -r example
  10092.  
  10093. The compiler creates the binary resource file EXAMPLE.RES. To create a binary 
  10094. resource file that has a name different from the resource script file, use the 
  10095. following command: 
  10096.  
  10097.   rc -r example newfile.res
  10098.  
  10099. To add the compiled resources in the binary resource file EXAMPLE.RES to an 
  10100. executable file, use the following command: 
  10101.  
  10102.   rc example.res
  10103.  
  10104. To specify the name of the executable file, if the name is different from the 
  10105. resource file, use the following command: 
  10106.  
  10107.   rc example.res newfile.exe
  10108.  
  10109. To add the compiled resources to a dynamic-link-library (.DLL) file, use the 
  10110. following command: 
  10111.  
  10112.   rc example.res dynalink.dll
  10113.  
  10114. In addition to -r, RC offers two other command-line options: -k and -d. The -k 
  10115. option lets you specify a code-page identifier or country code.  The syntax is 
  10116. as follows: 
  10117.  
  10118.   [-k codepage-id | country-code]
  10119.  
  10120. The codepage-id or country-code field contains one of the Constants. 
  10121.  
  10122.  
  10123. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - Constants ΓòÉΓòÉΓòÉ
  10124.  
  10125. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10126. ΓöéCODE-PAGE ID   ΓöéCOUNTRY CODE   ΓöéMEANING   Γöé
  10127. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10128. Γöé932            Γöé81             ΓöéJapan     Γöé
  10129. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10130. Γöé934            Γöé82             ΓöéKorea     Γöé
  10131. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10132. Γöé936            Γöé86             ΓöéChina     Γöé
  10133. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10134. Γöé938            Γöé88             ΓöéTaiwan    Γöé
  10135. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10136.  
  10137. The -d option lets you define up to eight symbolic constants on the command 
  10138. line. The syntax is as follows: 
  10139.  
  10140.   [-d string] [-d string] [...]
  10141.  
  10142. In the previous example, string is a name, an integer constant, or an 
  10143. expression.  The -d option is useful for passing conditional-compilation flags 
  10144. to the RC preprocessor. 
  10145.  
  10146. The following example specifies a Japanese code-page identifier and also 
  10147. defines two symbolic constants to be passed to the preprocessor as 
  10148. conditional-compilation flags. 
  10149.  
  10150.   rc -k 932 -d DEBUG -d VERSION=2 example
  10151.  
  10152. Note:  To process directives in the resource script file, RC uses the files 
  10153. RCPP.EXE and RCPP.ERR.  Be sure that these files are in the current directory 
  10154. or in a directory specified by your PATH environment variable.  RC creates many 
  10155. temporary files and writes them to the directory indicated by the TMP or TEMP 
  10156. environment variable.  If RC cannot write these temporary files to this 
  10157. directory, it writes them to the current directory. 
  10158.  
  10159.  
  10160. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - About Resource Statements ΓòÉΓòÉΓòÉ
  10161.  
  10162. Each resource statement consists of one or more keywords, numbers, character 
  10163. strings, constants, or filenames.  You combine these to define the resource 
  10164. type, identifier, and data. 
  10165.  
  10166. Keywords are words that have a special meaning to the Resource Compiler. In a 
  10167. statement, keywords specify the resource type, the load and memory options, and 
  10168. the beginning and end of nested statements.  You can use the RC keywords only 
  10169. as specified in the statement syntax. 
  10170.  
  10171. Keywords, except for those specifying directives, can be any combination of 
  10172. uppercase and lowercase letters.  Note that the curly braces, { and }, are 
  10173. reserved characters.  You can use them in place of the BEGIN and END keywords. 
  10174.  
  10175. Numbers are integers that represent coordinates, dimensions, styles, and other 
  10176. numeric data.  You can specify numbers in decimal, octal, or hexadecimal 
  10177. notation: 
  10178.  
  10179. Decimal numbers must contain decimal digits but can start with a minus sign (-) 
  10180. when they represent a negative number. 
  10181. Hexadecimal numbers must contain hexadecimal digits (uppercase or lowercase) 
  10182. and must start with the characters 0x. 
  10183. Octal numbers are similar to hexadecimal numbers, except that a lowercase 
  10184. letter o replaces the x. 
  10185.  
  10186. The following example shows several numbers represented in decimal, octal, and 
  10187. hexadecimal notation: 
  10188.  
  10189. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10190. ΓöéDECIMAL     ΓöéOCTAL     ΓöéHEXADECIMAL   Γöé
  10191. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10192. Γöé1           Γöé0o1       Γöé0x1           Γöé
  10193. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10194. Γöé10          Γöé0o12      Γöé0xA           Γöé
  10195. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10196. Γöé255         Γöé0o377     Γöé0xFF          Γöé
  10197. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10198. Γöé-1          Γöé0o177777  Γöé0xFFFF        Γöé
  10199. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10200. Γöé65 535      Γöé0o177777  Γöé0xFFFF        Γöé
  10201. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10202.  
  10203. Statements that create controls in dialog windows and menu items in menus 
  10204. require that you specify an identifier for each control or menu item. 
  10205. Statements that create controls also require you to specify coordinates and 
  10206. dimensions.  You specify identifiers, coordinates, and dimensions using 
  10207. integers in the range 0 through 65 535.  Optionally, you can use simple 
  10208. expressions that evaluate to integers from 0 through 65 535; this lets you 
  10209. specify identifiers, dimensions, and coordinates that are relative to those of 
  10210. the corresponding dialog window or menu. 
  10211.  
  10212. Character strings represent names, labels, titles, and messages.  A character 
  10213. string consists of one or more characters enclosed in double quotation marks. 
  10214. Character values must be in the range 1 through 255. If a double quotation mark 
  10215. (") is required in a string, you must include the double quotation mark twice. 
  10216. The meaning of each character value (that is, the character each value 
  10217. represents) depends on the code page (character set) defined for the resource 
  10218. script file. 
  10219.  
  10220. The Resource Compiler interprets the backslash (\) as an escape character in 
  10221. character strings.  You can include any ASCII character in a character string 
  10222. by specifying either \xdd, where dd is the hexadecimal representation of an 
  10223. ASCII character, or \nnn, where nnn is the octal representation of an ASCII 
  10224. character.  If a backslash is required in a string, you must include the 
  10225. backslash twice. 
  10226.  
  10227. Constants are names that have been assigned values by using the define 
  10228. directive.  A constant can represent a number, a character string, or other 
  10229. data.  Most resource statements in a resource script file use constants, and 
  10230. many use the constants defined in the OS/2* header files (for example, os2.h). 
  10231. For this reason, you should always use the include directive to include OS2.H 
  10232. in your resource script file. 
  10233.  
  10234. Filenames are OS/2 filenames.  If the specified file is not in the current 
  10235. directory, you must specify the drive, directory, and filename. 
  10236.  
  10237. Resource statements have three basic forms: 
  10238.  
  10239. Single-line statements 
  10240. Multiple-line statements 
  10241. Directives 
  10242.  
  10243. Single-line statements consist of a keyword identifying the resource type, a 
  10244. constant or number specifying the resource identifier, and a filename 
  10245. specifying the file containing the resource data.  For example, this ICON 
  10246. statement defines an icon resource: 
  10247.  
  10248.   ICON 1 myicon.ico
  10249.  
  10250. The icon resource has the icon identifier 1. The file MYICON.ICO contains the 
  10251. icon data. 
  10252.  
  10253. Multiple-line statements consist of a keyword identifying the resource type, a 
  10254. constant or number specifying the resource identifier, and, between the BEGIN 
  10255. and END keywords, additional resource statements that define the resource data. 
  10256. For example, this MENU statement defines a menu resource: 
  10257.  
  10258.   MENU 1
  10259.   BEGIN
  10260.       MENUITEM "Alpha", 101
  10261.       MENUITEM "Beta",  102
  10262.   END
  10263.  
  10264. The menu identifier is 1. The menu contains two MENUITEM statements that define 
  10265. the contents of the menu. 
  10266.  
  10267. In multiple-line statements such as DLGTEMPLATE and WINDOWTEMPLATE, RC allows 
  10268. any level of nested statements.  For example, the DLGTEMPLATE and 
  10269. WINDOWTEMPLATE statements typically contain a single DIALOG or FRAME statement. 
  10270. These statements can contain any number of WINDOW and CONTROL statements; the 
  10271. WINDOW and CONTROL statements can contain additional WINDOW and CONTROL 
  10272. statements; and so on.  The nested statements let you define controls and other 
  10273. child windows for the dialog boxes and windows.  If a nested statement creates 
  10274. a child window or control, the parent and owner of the new window is the window 
  10275. created by the containing statement.  (FRAME statements occasionally create 
  10276. frame controls whose parent and owner windows are not the same.) 
  10277.  
  10278. Directives consist of the reserved character # in the first column of a line, 
  10279. followed by the directive keyword and any additional numbers, character 
  10280. strings, or filenames. 
  10281.  
  10282.  
  10283. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - Binary Resource Files ΓòÉΓòÉΓòÉ
  10284.  
  10285. The binary resource file created by the Resource Compiler consists of one or 
  10286. more resource entries, each in the following form: 
  10287.  
  10288.   struct {
  10289.       UCHAR  fResType;
  10290.       USHORT usResType;
  10291.       UCHAR  fResID;
  10292.       USHORT resid;
  10293.       USHORT fsOptions;
  10294.       ULONG  cb;
  10295.       BYTE   bytes[1];
  10296.   };
  10297.  
  10298. The fields in each entry have the following meanings: 
  10299.  
  10300. Restype 
  10301.      Specifies whether the resource-type identifier is a string or an integer. 
  10302.      For OS/2* , the resource type is always an integer and this field is set 
  10303.      to 0xFF. 
  10304.  
  10305. _ResType 
  10306.      Specifies the resource-type identifier. This value is an integer in the 
  10307.      range 0 through 65 535. The following resource types are predefined: 
  10308.  
  10309.    RT_ACCELTABLE 
  10310.         Accelerator table 
  10311.    RT_BITMAP 
  10312.         Bit map 
  10313.    RT_CHARTBL 
  10314.         Character table 
  10315.    RT_DIALOG 
  10316.         Dialog template 
  10317.    RT_DISPLAYINFO 
  10318.         Display information 
  10319.    RT_DLGINCLUDE 
  10320.         Dialog include-file name 
  10321.  
  10322. RT_FKALONG 
  10323.      Long-form function-key area 
  10324.  
  10325. RT_FKASHORT 
  10326.      Short-form function-key area 
  10327.  
  10328.    RT_FONT 
  10329.         Font 
  10330.    RT_FONTDIR 
  10331.         Font directory 
  10332.    RT_HELPSUBTABLE 
  10333.         Help subtable 
  10334.    RT_HELPTABLE 
  10335.         Help table 
  10336.    RT_KEYTBL 
  10337.         Key table 
  10338.    RT_MENU 
  10339.         Menu template 
  10340.    RT_MESSAGE 
  10341.         Error-message table 
  10342.    RT_POINTER 
  10343.         Mouse-pointer shape 
  10344.    RT_RCDATA 
  10345.         Binary data 
  10346.    RT_STRING 
  10347.         String table 
  10348.    RT_VKEYTBL 
  10349.         Virtual key table 
  10350.  
  10351. ResID 
  10352.      Specifies whether the resource identifier is a string or an integer. For 
  10353.      OS/2, the resource identifier is always an integer and this field is set 
  10354.      to 0xFF. 
  10355.  
  10356. resid 
  10357.      Specifies the resource identifier. This value is an integer in the range 0 
  10358.      through 65 535. 
  10359.  
  10360. Options 
  10361.      Specifies the load and memory options. This value can be a combination of 
  10362.      the following: 
  10363.  
  10364.    0x0010 
  10365.         MOVEABLE resource. If not given, the resource is FIXED. 
  10366.    0x0040 
  10367.         PRELOAD resource. If not given, the resource is LOADONCALL. 
  10368.    0x1000 
  10369.         DISCARDABLE resource. 
  10370.  
  10371. cb 
  10372.      Specifies the size of the resource (in bytes). 
  10373.  
  10374. bytes 
  10375.      Contains the resource. 
  10376.  
  10377.  
  10378. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - Statements ΓòÉΓòÉΓòÉ
  10379.  
  10380. The following statements and directives are used by the Resource Compiler (RC): 
  10381.  
  10382. ACCELTABLE Statement 
  10383. ASSOCTABLE Statement 
  10384. AUTOCHECKBOX Statement 
  10385. AUTORADIOBUTTON Statement 
  10386. BITMAP Statement 
  10387. CHECKBOX Statement 
  10388. CODEPAGE Statement 
  10389. COMBOBOX Statement 
  10390. CONTAINER Statement 
  10391. CONTROL Statement 
  10392. CTEXT Statement 
  10393. CTLDATA Statement 
  10394. define Directive 
  10395. DEFPUSHBUTTON Statement 
  10396. DIALOG Statement 
  10397. DLGINCLUDE Statement 
  10398. DLGTEMPLATE Statement 
  10399. EDITTEXT Statement 
  10400. elif Directive 
  10401. else Directive 
  10402. endif Directive 
  10403. ENTRYFIELD Statement 
  10404. FONT Statement 
  10405. FRAME Statement 
  10406. GROUPBOX Statement 
  10407. HELPITEM Statement 
  10408. HELPSUBITEM Statement 
  10409. HELPSUBTABLE Statement 
  10410. HELPTABLE Statement 
  10411. ICON Statement (Resource) 
  10412. ICON Statement (Control) 
  10413. if Directive 
  10414. ifdef Directive 
  10415. ifndef Directive 
  10416. include Directive 
  10417. LISTBOX Statement 
  10418. LTEXT Statement 
  10419. MENU Statement 
  10420. MENUITEM Statement 
  10421. MESSAGETABLE Statement 
  10422. MLE Statement 
  10423. NOTEBOOK Statement 
  10424. POINTER Statement 
  10425. PRESPARAMS Statement 
  10426. PUSHBUTTON Statement 
  10427. RADIOBUTTON Statement 
  10428. RCDATA Statement 
  10429. RCINCLUDE Statement 
  10430. RESOURCE Statement 
  10431. RTEXT Statement 
  10432. SLIDER Statement 
  10433. SPINBUTTON Statement 
  10434. STRINGTABLE Statement 
  10435. SUBITEMSIZE Statement 
  10436. SUBMENU Statement 
  10437. undef Directive 
  10438. VALUESET Statement 
  10439. WINDOW Statement 
  10440. WINDOWTEMPLATE Statement 
  10441.  
  10442.  
  10443. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - ACCELTABLE Statement ΓòÉΓòÉΓòÉ
  10444.  
  10445. Syntax: 
  10446.  
  10447.   ACCELTABLE acceltable-id [mem-option]
  10448.   BEGIN
  10449.   key-value, command[, accelerator-options]
  10450.       .
  10451.       .
  10452.       .
  10453.   END
  10454.  
  10455. Description 
  10456.  
  10457. The ACCELTABLE statement creates a table of accelerators for an application. 
  10458. An accelerator is a keystroke that gives the user a quick way to choose a 
  10459. command from a menu or carry out some other task.  An accelerator table can be 
  10460. loaded when needed from the executable file by using the WinLoadAccelTable 
  10461. function. 
  10462.  
  10463. You can provide any number of ACCELTABLE statements in a resource script file. 
  10464. Each statement must specify a unique table identifier.  You can provide any 
  10465. number of accelerator definitions in an accelerator table; however, no two 
  10466. definitions in a table can specify the same key. 
  10467.  
  10468. Each accelerator definition must specify a key value and command. The 
  10469. WinSetAccelTable function used in the application translates the accelerator 
  10470. keystroke into a WM_COMMAND, WM_HELP, or WM_SYSCOMMAND message that has the 
  10471. corresponding command value.  The message type depends on the 
  10472. accelerator-option field. 
  10473.  
  10474. acceltable-id 
  10475.      Specifies the accelerator-table identifier. This value must be an integer 
  10476.      in the range 0 through 65 535, or a simple expression that evaluates to a 
  10477.      value in that range. Each accelerator table in a resource script file must 
  10478.      have a unique identifier. 
  10479.  
  10480.  mem-option 
  10481.      Specifies how the system manages the resource when it is in memory. This 
  10482.      value must be one of the following: 
  10483.  
  10484.    Option 
  10485.         Meaning 
  10486.  
  10487.    FIXED 
  10488.         System keeps the resource at a fixed memory location. 
  10489.  
  10490.    MOVEABLE 
  10491.         System moves the resource as necessary to compact memory. This is the 
  10492.         default option. 
  10493.  
  10494.    DISCARDABLE 
  10495.         System discards the resource if it is no longer needed. 
  10496.  
  10497. key-value 
  10498.      Specifies the character, scan, or virtual-key code of the accelerator key. 
  10499.      The meaning depends on the accelerator-options field.  The key-value field 
  10500.      must be a single character enclosed in double-quotation marks or an 
  10501.      integer in the range 0 through 255.  If you specify an integer, you must 
  10502.      specify the CHAR, SCANCODE, or VIRTUALKEY accelerator option; otherwise, 
  10503.      the default option is CHAR. Integers must be in decimal or hexadecimal 
  10504.      notation. 
  10505.  
  10506. command 
  10507.      Specifies the command value for the corresponding WM_COMMAND, WM_HELP, or 
  10508.      WM_SYSCOMMAND message. This value must be an integer in the range 0 
  10509.      through 65 535, or a simple expression that evaluates to an integer in 
  10510.      that range. 
  10511.  
  10512. accelerator-options 
  10513.      Specifies the accelerator type. This value can be a combination of the 
  10514.      following: 
  10515.  
  10516.    VIRTUALKEY 
  10517.         Specifies that the key-value field is a virtual-key code. 
  10518.  
  10519.    SCANCODE 
  10520.         Specifies that the key-value field is a keyboard scan code. 
  10521.  
  10522.    CHAR 
  10523.         Specifies that the key-value field is a character code. 
  10524.  
  10525.    SHIFT 
  10526.         Specifies that the user must press the Shift key and the key 
  10527.         corresponding to the key-value field to generate the accelerator. 
  10528.  
  10529.    CONTROL 
  10530.         Specifies that the user must press the Ctrl key and the key 
  10531.         corresponding to the key-value field to generate the accelerator. 
  10532.  
  10533.    ALT 
  10534.         Specifies that the user must press the Alt key and the key 
  10535.         corresponding to the key-value field to generate the accelerator. 
  10536.  
  10537.    LONEKEY 
  10538.         Specifies that the user needs to press only the key corresponding to 
  10539.         the key-value field to generate the accelerator. 
  10540.  
  10541.    SYSCOMMAND 
  10542.         Specifies that the accelerator translates to a WM_SYSCOMMAND message. 
  10543.         If you do not include this option, the accelerator translates to a 
  10544.         WM_COMMAND message. 
  10545.  
  10546.    HELP 
  10547.         Specifies that the accelerator translates to a WM_HELP message. If you 
  10548.         do not include this option, the accelerator translates to a WM_COMMAND 
  10549.         message. 
  10550.  
  10551. Note:  VIRTUALKEY, SCANCODE, and CHAR are mutually exclusive. SYSCOMMAND and 
  10552. HELP are also mutually exclusive. 
  10553.  
  10554. Comments 
  10555.  
  10556. If two accelerators use the same key with different Shift, Control, or ALT 
  10557. options, you should specify the more restrictive accelerator first in the 
  10558. table.  For example, you should place Shift+Enter before Enter. 
  10559.  
  10560. If you include the OS2.H header file, you can use the following constants to 
  10561. specify the accelerator options: 
  10562.  
  10563.                 Γöé                   Γöé
  10564.  AF_ALT         ΓöéAF_CHAR            ΓöéAF_CONTROL
  10565.  ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  10566.  AF_HELP        ΓöéAF_LONEKEY         ΓöéAF_SCANCODE
  10567.  ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
  10568.  AF_SHIFT       ΓöéAF_SYSCOMMAND      ΓöéAF_VIRTUALKEY
  10569.                 Γöé                   Γöé
  10570.  
  10571. To combine these constants, you must use the bitwise OR (|) operator. 
  10572.  
  10573. Example 
  10574.  
  10575. This example creates an accelerator table whose accelerator-table identifier is 
  10576. 1. The table contains two accelerators: Ctrl+S and Ctrl+G.  These accelerators 
  10577. generate WM_COMMAND messages with values of 101 and 102, respectively, when the 
  10578. user presses the corresponding keys. 
  10579.  
  10580.   ACCELTABLE 1
  10581.   BEGIN
  10582.       "S", 101, CONTROL
  10583.       "G", 102, CONTROL
  10584.   END
  10585.  
  10586.  
  10587. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - ASSOCTABLE Statement ΓòÉΓòÉΓòÉ
  10588.  
  10589. Syntax: 
  10590.  
  10591.   ASSOCTABLE assoctable-id [load-option][mem-option]
  10592.   BEGIN
  10593.   association-name, file-match-string[, extended-attribute-flag]
  10594.     [, icon-filename]
  10595.     .
  10596.     .
  10597.     .
  10598.   END
  10599.  
  10600. Description 
  10601.  
  10602. The ASSOCTABLE statement defines a file-association table for an application. 
  10603. This table associates the data files that an application creates with the 
  10604. executable file of the application.  When the user selects one of these data 
  10605. files from File Manager, the associated application begins executing. 
  10606.  
  10607. A file-association table can also associate icons with the data files that an 
  10608. application creates.  File Manager uses these icons to identify the data files 
  10609. graphically.  Because a file-association table associates icons by file type, 
  10610. all data files having the same file type have the same icon. 
  10611.  
  10612. You can provide any number of ASSOCTABLE statements in a resource script file, 
  10613. but each statement must specify a unique assoctable-id value.  The 
  10614. file-association tables are written not only to the resources within your 
  10615. executable file, but also to the .ASSOC extended attribute.  However, only the 
  10616. last file-association table specified in the resource script file is actually 
  10617. written to the extended attribute. 
  10618.  
  10619. assoctable-id 
  10620.      Specifies the association-table identifier. This value must be an integer 
  10621.      in the range 0 through 65 535, or a simple expression that evaluates to a 
  10622.      value in that range. 
  10623.  
  10624. load-option 
  10625.      Specifies when the system loads the resource from the executable file into 
  10626.      memory. This value must be one of the following: 
  10627.  
  10628.    PRELOAD 
  10629.         System loads the resource when the application starts. 
  10630.  
  10631.    LOADONCALL 
  10632.         System loads the resource when the application calls the DosGetResource 
  10633.         or DosGetResource2 function. This is the default option. 
  10634.  
  10635. mem-option 
  10636.      Specifies how the system manages the resource when it is in memory. This 
  10637.      value must be one of the following: 
  10638.  
  10639.    FIXED 
  10640.         System keeps the resource at a fixed memory location. 
  10641.  
  10642.    MOVEABLE 
  10643.         System moves the resource as necessary to compact memory. This is the 
  10644.         default option. 
  10645.  
  10646.    DISCARDABLE 
  10647.         System discards the resource if it is no longer needed. 
  10648.  
  10649. association-name 
  10650.      Specifies the name of the file type the application recognizes. This field 
  10651.      must contain zero or more characters enclosed in double quotation marks. 
  10652.  
  10653.      Character values must be in the range 1 through 255. If a double quotation 
  10654.      mark is required in the name, you must include the double quotation mark 
  10655.      twice. 
  10656.  
  10657. file-match-string 
  10658.      Specifies the file-matching string of a particular type of data file that 
  10659.      the application creates. This field must contain zero or more characters 
  10660.      enclosed in double quotation marks. You can only use characters that are 
  10661.      valid in OS/2* filenames and extensions and the OS/2 wildcard characters 
  10662.      question mark (?) and asterisk (*). 
  10663.  
  10664. extended-attribute-flag 
  10665.      Specifies the extended-attribute options. This value can be a combination 
  10666.      of the following: 
  10667.  
  10668.    EAF_DEFAULTOWNER 
  10669.         Specifies that the application containing the file-association table 
  10670.         starts when the user selects any file matching the file-match-string 
  10671.         field from File Manager. 
  10672.  
  10673.    EAF_REUSEICON 
  10674.         Specifies that the icon defined in the previous entry of the 
  10675.         file-association table is used as the icon for the current data-file 
  10676.         type. 
  10677.  
  10678.    EAF_UNCHANGEABLE 
  10679.         Specifies that the entry should not be edited. 
  10680.  
  10681. icon-filename 
  10682.      Specifies the name of the file containing an icon. File Manager uses this 
  10683.      icon to represent all application-created data files matching the 
  10684.      file-match-string field. The file must be in the current directory. 
  10685.  
  10686.  
  10687. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - AUTOCHECKBOX Statement ΓòÉΓòÉΓòÉ
  10688.  
  10689. Syntax: 
  10690.  
  10691.   AUTOCHECKBOX text, id, x, y, width, height[, style]
  10692.  
  10693. Description 
  10694.  
  10695. The AUTOCHECKBOX statement creates an automatic-check-box control. The control 
  10696. is a small rectangle (check box) that contains an X when the user selects it. 
  10697. The specified text is displayed to the right of the check box.  An X appears in 
  10698. the square when the user first selects the control and disappears the next time 
  10699. the user selects it.  The AUTOCHECKBOX statement, which you can use only in a 
  10700. DIALOG or WINDOW statement, defines the text, identifier, dimensions, and 
  10701. attributes of a control window.  The predefined class for this control is 
  10702. WC_BUTTON. If you do not specify the style, the default style is 
  10703. BS_AUTOCHECKBOX and WS_TABSTOP. 
  10704.  
  10705. text 
  10706.      Specifies text that is displayed to the right of the control. This field 
  10707.      must contain zero or more characters enclosed in double quotation marks. 
  10708.      Character values must be in the range 1 through 255. If a double quotation 
  10709.      mark is required in the text, you must include the double quotation mark 
  10710.      twice. A tilde ( ~ ) character in the text indicates that the following 
  10711.      character is used as a mnemonic character for the control. When the 
  10712.      control is displayed, the tilde is not shown, but the mnemonic character 
  10713.      is underlined. The user can choose the control by pressing the key 
  10714.      corresponding to the underlined mnemonic character. 
  10715.  
  10716. id 
  10717.      Specifies the control identifier. This value must be an integer in the 
  10718.      range 0 through 65 535, or a simple expression that evaluates to a value 
  10719.      in that range. 
  10720.  
  10721.      Specifies the x-coordinate of the lower-left corner of the control. This 
  10722.      value must be an integer in the range 0 through 65 535 or an expression 
  10723.      consisting of integers and the addition (+) or subtraction (-) operator. 
  10724.      The coordinate is assumed to be in dialog units and is relative to the 
  10725.      origin of the dialog box, window, or control containing the specified 
  10726.      control. 
  10727.  
  10728.      Specifies the y-coordinate of the lower-left corner of the control. This 
  10729.      value must be an integer in the range 0 through 65 535 or an expression 
  10730.      consisting of integers and the addition (+) or subtraction (-) operator. 
  10731.      The coordinate is assumed to be in dialog units and is relative to the 
  10732.      origin of the dialog box, window, or control containing the specified 
  10733.      control. 
  10734.  
  10735. width 
  10736.      Specifies the width of the control. This value must be an integer in the 
  10737.      range 1 through 65 535 or an expression consisting of integers and the 
  10738.      addition (+) or subtraction (-) operator. The width is in n-character 
  10739.      units. 
  10740.  
  10741. height 
  10742.      Specifies the height of the control. This value must be an integer in the 
  10743.      range 1 through 65 535 or an expression consisting of integers and the 
  10744.      addition (+) or subtraction (-) operator. The height is in 1/8-character 
  10745.      units. 
  10746.  
  10747. style 
  10748.      Specifies the control styles. This value can be a combination of the 
  10749.      styles specified for WC_BUTTON. You can use the bitwise OR (|) operator to 
  10750.      combine styles. 
  10751.  
  10752. Example 
  10753.  
  10754. This example creates an automatic-check-box control that is labeled "Italic." 
  10755.  
  10756.   AUTOCHECKBOX "Italic", 101, 10, 10, 100, 100
  10757.  
  10758. Related Topics 
  10759.  
  10760. AUTORADIOBUTTON 
  10761. CHECKBOX 
  10762. CONTROL 
  10763. DEFPUSHBUTTON Statement 
  10764. DIALOG Statement 
  10765. GROUPBOX Statement 
  10766. PUSHBUTTON Statement 
  10767. RADIOBUTTON Statement 
  10768. WINDOW Statement 
  10769.  
  10770.  
  10771. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - AUTORADIOBUTTON Statement ΓòÉΓòÉΓòÉ
  10772.  
  10773. Syntax: 
  10774.  
  10775. AUTORADIOBUTTON text, id, x, y, width, height[, style]
  10776.  
  10777. Description 
  10778.  
  10779. The AUTORADIOBUTTON statement creates an automatic-radio-button control.  This 
  10780. control is a small circle with the given text displayed to its right.  The 
  10781. control highlights the circle and sends a message to its parent window when the 
  10782. user selects the button.  The control also removes the selection from any other 
  10783. automatic-radio-button controls in the same group.  When the user selects the 
  10784. button again, the control removes the highlight before sending a message.  The 
  10785. AUTORADIOBUTTON statement, which you can use only in a DIALOG or WINDOW 
  10786. statement, defines the text, identifier, dimensions, and attributes of a 
  10787. control window.  The predefined class for this control is WC_BUTTON.  If you do 
  10788. not specify a style, the default style is BS_AUTORADIOBUTTON. 
  10789.  
  10790. text 
  10791.      Specifies text that is displayed to the right of the control.  This field 
  10792.      must contain zero or more characters enclosed in double quotation marks. 
  10793.      Character values must be in the range 1 through 255.  If a double 
  10794.      quotation mark is required in the text, you must include the double 
  10795.      quotation mark twice.  A tilde ( ~ ) character in the text indicates that 
  10796.      the following character is used as a mnemonic character for the control. 
  10797.      When the control is displayed, the tilde is not shown, but the mnemonic 
  10798.      character is underlined. The user can choose the control by pressing the 
  10799.      key corresponding to the underlined mnemonic character. 
  10800.  
  10801. id 
  10802.      Specifies the control identifier. This value must be an integer in the 
  10803.      range 0 through 65 535, or a simple expression that evaluates to a value 
  10804.      in that range. 
  10805.  
  10806.      Specifies the x-coordinate of the lower-left corner of the control. This 
  10807.      value must be an integer in the range 0 through 65 535 or an expression 
  10808.      consisting of integers and the addition (+) or subtraction (-) operator. 
  10809.      The coordinate is assumed to be in dialog units and is relative to the 
  10810.      origin of the dialog box, window, or control containing the specified 
  10811.      control. 
  10812.  
  10813.      This value must be an integer in the range 0 through 65 535 n expression 
  10814.      consisting of integers and the addition (+) or subtraction (-) operator. 
  10815.      The coordinate is assumed to be in dialog units and is relative to the 
  10816.      origin of the dialog box, window, or control containing the specified 
  10817.      control. 
  10818.  
  10819. width 
  10820.      Specifies the width of the control. This value must be an integer in the 
  10821.      range 1 through 65 535 or an expression consisting of integers and the 
  10822.      addition (+) or subtraction (-) operator. The width is in n-character 
  10823.      units. 
  10824.  
  10825. height 
  10826.      Specifies the height of the control. This value must be an integer in the 
  10827.      range 1 through 65 535 or an expression consisting of integers and the 
  10828.      addition (+) or subtraction (-) operator. The height is in 1/8-character 
  10829.      units. 
  10830.  
  10831. style 
  10832.      Specifies the control styles.  This value can be a combination of the 
  10833.      styles specified for WC_BUTTON. You can use the bitwise OR (|) operator to 
  10834.      combine styles. 
  10835.  
  10836. Example 
  10837.  
  10838. This example creates an automatic-radio-button control that is labeled 
  10839. "Italic." 
  10840.  
  10841.   AUTORADIOBUTTON "Italic", 101, 10, 10, 24, 50
  10842.  
  10843. Related Topics 
  10844.  
  10845. AUTOCHECKBOX 
  10846. CHECKBOX 
  10847. CONTROL 
  10848. DEFPUSHBUTTON Statement 
  10849. DIALOG Statement 
  10850. GROUPBOX Statement 
  10851. PUSHBUTTON Statement 
  10852. RADIOBUTTON Statement 
  10853. WINDOW Statement 
  10854.  
  10855.  
  10856. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - BITMAP Statement ΓòÉΓòÉΓòÉ
  10857.  
  10858. Syntax: 
  10859.  
  10860. BITMAP bitmap-id [load-option] [mem-option] filename
  10861.  
  10862. Description 
  10863.  
  10864. The BITMAP statement defines a bit map resource for an application. A bit map 
  10865. resource, typically created using the Icon Editor, is a custom bit map that an 
  10866. application uses in its display or as an item in a menu. The BITMAP statement 
  10867. copies the bit-map resource from the file specified in the filename field and 
  10868. adds it to the application's other resources. A bit-map resource can be loaded 
  10869. from the executable file when needed by using the GpiLoadBitmap function. 
  10870.  
  10871. You can provide any number of BITMAP statements in a resource script file, but 
  10872. each statement must specify a unique bitmap-id value. 
  10873.  
  10874. bitmap-id 
  10875.      Specifies the bit-map-resource identifier.  This value must be an integer 
  10876.      in the range 0 through 65 535, or a simple expression that evaluates to a 
  10877.      value in that range. 
  10878.  
  10879. load-option 
  10880.      Specifies when the system loads the resource from the executable file into 
  10881.      memory. This value must be one of the following: 
  10882.  
  10883.    PRELOAD 
  10884.         System loads the resource when the application starts. 
  10885.  
  10886.    LOADONCALL 
  10887.         System loads the resource when the application calls the GpiLoadBitmap 
  10888.         function.  This is the default option. 
  10889.  
  10890. mem-option 
  10891.      Specifies how the system manages the resource when it is in memory. This 
  10892.      value must be one of the following: 
  10893.  
  10894.    FIXED 
  10895.         System keeps the resource at a fixed memory location. 
  10896.  
  10897.    MOVEABLE 
  10898.         System moves the resource as necessary to compact memory. This is the 
  10899.         default option. 
  10900.  
  10901.    DISCARDABLE 
  10902.         System discards the resource if it is no longer needed. 
  10903.  
  10904. filename 
  10905.      Specifies the name of the file containing the icon resource. If the file 
  10906.      is not in the current directory, filename must be preceded by a full path. 
  10907.  
  10908. Example 
  10909.  
  10910. This example defines a bit map whose bit-map identifier is 12. The bit-map 
  10911. resource is copied from the file CUSTOM.BMP. 
  10912.  
  10913.   BITMAP 12 custom.bmp
  10914.  
  10915. Related Topics 
  10916.  
  10917. See "GpiLoadBitmap" in the Presentation Manager Reference. 
  10918.  
  10919.  
  10920. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - CHECKBOX Statement ΓòÉΓòÉΓòÉ
  10921.  
  10922. Syntax: 
  10923.  
  10924. CHECKBOX text, id, x, y, width, height[, style]
  10925.  
  10926. Description 
  10927.  
  10928. The CHECKBOX statement creates a check-box control.  The control is a small 
  10929. rectangle (check box) that has the specified text displayed to the right.  The 
  10930. control highlights the rectangle and sends a message to its parent window when 
  10931. the user selects the control.  The CHECKBOX statement, which you can use only 
  10932. in a DIALOG or WINDOW statement, defines the text, identifier, dimensions, and 
  10933. attributes of a control window.  The predefined class for this control is 
  10934. WC_BUTTON.  If you do not specify a style, the default style is BS_CHECKBOX and 
  10935. WS_TABSTOP. 
  10936.  
  10937. text 
  10938.      Specifies text that is displayed to the right of the control. This field 
  10939.      must contain zero or more characters enclosed in double quotation marks. 
  10940.      Character values must be in the range 1 through 255. If a double quotation 
  10941.      mark is required in the text, you must include the double quotation mark 
  10942.      twice. A tilde ( ~ ) character in the text indicates that the following 
  10943.      character is used as a mnemonic character for the control. When the 
  10944.      control is displayed, the tilde is not shown, but the mnemonic character 
  10945.      is underlined. The user can choose the control by pressing the key 
  10946.      corresponding to the underlined mnemonic character. 
  10947.  
  10948. id 
  10949.      Specifies the control identifier. This value must be an integer in the 
  10950.      range 0 through 65 535, or a simple expression that evaluates to a value 
  10951.      in that range. 
  10952.  
  10953.      Specifies the x-coordinate of the lower-left corner of the control. This 
  10954.      value must be an integer in the range 0 through 65 535 or an expression 
  10955.      consisting of integers and the addition (+) or subtraction (-) operator. 
  10956.      The coordinate is assumed to be in dialog units and is relative to the 
  10957.      origin of the dialog box, window, or control containing the specified 
  10958.      control. 
  10959.  
  10960.      Specifies the y-coordinate of the lower-left corner of the control. This 
  10961.      value must be an integer in the range 0 through 65 535 or an expression 
  10962.      consisting of integers and the addition (+) or subtraction (-) operator. 
  10963.      The coordinate is assumed to be in dialog units and is relative to the 
  10964.      origin of the dialog box, window, or control containing the specified 
  10965.      control. 
  10966.  
  10967. width 
  10968.      Specifies the width of the control. This value must be an integer in the 
  10969.      range 1 through 65 535 or an expression consisting of integers and the 
  10970.      addition (+) or subtraction (-) operator. The width is in n-character 
  10971.      units. 
  10972.  
  10973. height 
  10974.      Specifies the height of the control. This value must be an integer in the 
  10975.      range 1 through 65 535 or an expression consisting of integers and the 
  10976.      addition (+) or subtraction (-) operator. The height is in 1/8-character 
  10977.      units. 
  10978.  
  10979. style 
  10980.      Specifies the control styles. This value can be a combination of the 
  10981.      styles specified for WC_BUTTON. You can use the bitwise OR (|) operator to 
  10982.      combine styles. 
  10983.  
  10984. Example 
  10985.  
  10986. This example creates a check-box control that is labeled "Italic." 
  10987.  
  10988.   CHECKBOX "Italic", 101, 10, 10, 100, 100
  10989.  
  10990. Related Topics 
  10991.  
  10992. AUTOCHECKBOX 
  10993. AUTORADIOBUTTON 
  10994. CONTROL 
  10995. DEFPUSHBUTTON Statement 
  10996. DIALOG Statement 
  10997. GROUPBOX Statement 
  10998. PUSHBUTTON Statement 
  10999. RADIOBUTTON Statement 
  11000. WINDOW Statement 
  11001.  
  11002.  
  11003. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - CODEPAGE Statement ΓòÉΓòÉΓòÉ
  11004.  
  11005. Syntax: 
  11006.  
  11007. CODEPAGE codepage-id
  11008.  
  11009. Description 
  11010.  
  11011. The CODEPAGE statement sets the code page for all subsequent resources.  The 
  11012. code page specifies the character set used for characters in the resource. 
  11013.  
  11014. If the CODEPAGE statement is not given in a resource script file, RC uses the 
  11015. code page set up for the individual system.  If more than one CODEPAGE 
  11016. statement is given in the file, each CODEPAGE statement applies to the resource 
  11017. statements between it and the next CODEPAGE statement. 
  11018.  
  11019. codepage-id 
  11020.      Identifies the code page to be used for subsequent resources. This value 
  11021.      can be one of the following: 
  11022.  
  11023.    437 
  11024.         United States 
  11025.  
  11026.    850 
  11027.         Multilingual 
  11028.  
  11029.    860 
  11030.         Portuguese 
  11031.  
  11032.    863 
  11033.         Canadian French 
  11034.  
  11035.    932 
  11036.         Japanese 
  11037.  
  11038. Comments 
  11039.  
  11040. You may also specify a code page by placing a code-page identifier in the 
  11041. load-options or memory-options field of any RC statement that uses those 
  11042. fields. 
  11043.  
  11044. Example 
  11045.  
  11046. In this example, the code page for the character-string resources is set to 
  11047. Portuguese (860). 
  11048.  
  11049.   CODEPAGE 860
  11050.  
  11051.   STRINGTABLE
  11052.   BEGIN
  11053.       1 "Filename not found"
  11054.       2 "Cannot open file for reading"
  11055.   END
  11056.  
  11057.  
  11058. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - COMBOBOX Statement ΓòÉΓòÉΓòÉ
  11059.  
  11060. Syntax: 
  11061.  
  11062.   COMBOBOX text, id, x, y, width, height[, style]
  11063.  
  11064. Description 
  11065.  
  11066. The COMBOBOX statement creates a combination-box control. This control combines 
  11067. a list-box control with an entry-field control. It allows the user to place the 
  11068. selected item from a list box into an entry field. 
  11069.  
  11070. The COMBOBOX statement, which you can use only in a DIALOG or WINDOW statement, 
  11071. defines the text, identifier, dimensions, and attributes of a control window. 
  11072. The predefined class for this control is WC_COMBOBOX. If you do not specify a 
  11073. style, the default style is CBS_SIMPLE, WS_GROUP, WS_TABSTOP, and WS_VISIBLE. 
  11074.  
  11075. text 
  11076.      Specifies text that is displayed in the entry field of the control. This 
  11077.      field must contain zero or more characters enclosed in double quotation 
  11078.      marks. Character values must be in the range 1 through 255. If a double 
  11079.      quotation mark is required in the text, you must include the double 
  11080.      quotation mark twice. 
  11081.  
  11082. id 
  11083.      Specifies the control identifier. This value must be an integer in the 
  11084.      range 0 through 65 535, or a simple expression that evaluates to a value 
  11085.      in that range. 
  11086.  
  11087.      Specifies the x-coordinate of the lower-left corner of the control This 
  11088.      value must be an integer in the range 0 through 65 535 or an expression 
  11089.      consisting of integers and the addition (+) or subtraction (-) operator. 
  11090.      The coordinate is assumed to be in dialog units and is relative to the 
  11091.      origin of the dialog box, window, or control containing the specified 
  11092.      control. 
  11093.  
  11094.      Specifies the y-coordinate of the lower-left corner of the control This 
  11095.      value must be an integer in the range 0 through 65 535 or an expression 
  11096.      consisting of integers and the addition (+) or subtraction (-) operator. 
  11097.      The coordinate is assumed to be in dialog units and is relative to the 
  11098.      origin of the dialog box, window, or control containing the specified 
  11099.      control. 
  11100.  
  11101. width 
  11102.      Specifies the width of the control.  This value must be an integer in the 
  11103.      range 1 through 65 535 or an expression consisting of integers and the 
  11104.      addition (+) or subtraction (-) operator.  The width is in n-character 
  11105.      units. 
  11106.  
  11107. height 
  11108.      Specifies the height of the control.  This value must be an integer in the 
  11109.      range 1 through 65 535 or an expression consisting of integers and the 
  11110.      addition (+) or subtraction (-) operator.  The height is in 1/8-character 
  11111.      units. 
  11112.  
  11113. style 
  11114.      Specifies the control styles. This value can be a combination of the 
  11115.      styles specified for WC_COMBOBOX. You can use the bitwise OR (|) operator 
  11116.      to combine styles. 
  11117.  
  11118. Example 
  11119.  
  11120. This example creates a combination-box control. 
  11121.  
  11122.   COMBOBOX "", 101, 10, 10, 24, 50
  11123.  
  11124. Related Topics 
  11125.  
  11126. CONTROL 
  11127. DIALOG Statement 
  11128. ENTRYFIELD Statement 
  11129. LISTBOX Statement 
  11130. MLE Statement 
  11131. WINDOW Statement 
  11132.  
  11133.  
  11134. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - CONTAINER Statement ΓòÉΓòÉΓòÉ
  11135.  
  11136. Syntax: 
  11137.  
  11138. CONTAINER  id, x, y, width, height, style
  11139.  
  11140. Description 
  11141.  
  11142. The CONTAINER statement creates a container control within a dialog window. 
  11143. The container control is a visual component that holds objects.  The CONTAINER 
  11144. statement defines the identifier, position, dimensions, and attributes of a 
  11145. container control.   The predefined class for this control is WC_CONTAINER.  If 
  11146. you do not specify a style, the default style is WS_TABSTOP, WS_VISIBLE, and 
  11147. CCS_SINGLESEL. 
  11148.  
  11149. id        Specifies the control identifier.  This value is any integer 0 
  11150.           through 65535, or a simple expression that evaluates to a value in 
  11151.           that range. 
  11152.  
  11153. x         Specifies the x-coordinate of the lower-left corner of the control. 
  11154.           This value is any integer 0 through 65535 or an expression consisting 
  11155.           of integers and the addition [+] or subtraction [-] operator.  The 
  11156.           coordinate is assumed to be in dialog units and is relative to the 
  11157.           origin of the dialog window containing the container control. 
  11158.  
  11159. y         Specifies the y-coordinate of the lower-left corner of the control. 
  11160.           This value is any integer 0 through 65535 or an expression consisting 
  11161.           of integers and the addition [+] or subtraction [-] operator.  The 
  11162.           coordinate is assumed to be in dialog units and is relative to the 
  11163.           origin of the dialog window containing the container control. 
  11164.  
  11165. width     Specifies the width of the control.  This value is any integer 0 
  11166.           through 65535 or an expression consisting of integers and the 
  11167.           addition [+] or subtraction [-] operator. The width is in n-character 
  11168.           units. 
  11169.  
  11170. height    Specifies the height of the control.  This value is any integer 0 
  11171.           through 65535 or an expression consisting of integers and the 
  11172.           addition [+] or subtraction [-] operator. The height is in 
  11173.           1/8-character units. 
  11174.  
  11175. style     Specifies the control styles.  This value can be a combination of the 
  11176.           styles specified for WC_CONTAINER. Use the bitwise OR [|] operator to 
  11177.           combine styles. 
  11178.  
  11179. Comments 
  11180.  
  11181. A CONTAINER statement is only used in a DIALOG or WINDOW statement. 
  11182.  
  11183. Example 
  11184.  
  11185. This example creates a container control at position (30,30) within the dialog 
  11186. window.  The container has a width of 70 character units and a height of 25 
  11187. character units.  Its resource ID is 301.  The default style CCS_SINGLESEL has 
  11188. been overridden by the style specification CCS_MULTIPLESEL.  The default styles 
  11189. WS_TABSTOP and WS_GROUP are both in effect, though only the latter is 
  11190. specified. 
  11191.  
  11192. #define IDC_CONTAINER    301
  11193. #define IDD_CONTAINERDLG 504
  11194. DIALOG "Container", IDD_CONTAINERDLG, 23, 6, 120, 280, FS_NOBYTEALIGN |
  11195.         WS_VISIBLE, FCF_SYSMENU | FCF_TITLEBAR
  11196.   BEGIN
  11197.      CONTAINER   IDC_CONTAINER, 30, 30, 70, 200, CCS_MULTIPLESEL |
  11198.                        WS_GROUP
  11199.   END
  11200.  
  11201. Related Topics 
  11202.  
  11203. CONTROL Statement 
  11204. DIALOG Statement 
  11205. WINDOW Statement 
  11206.  
  11207.  
  11208. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - CONTROL Statement ΓòÉΓòÉΓòÉ
  11209.  
  11210. Syntax: 
  11211.  
  11212.   CONTROL text, id, x, y, width, height, class[, style]
  11213.   [ data-definitions ]
  11214.   [ BEGIN
  11215.   control-definition
  11216.       .
  11217.       .
  11218.       .
  11219.   END ]
  11220.  
  11221. Description 
  11222.  
  11223. The CONTROL statement defines a control as belonging to the specified class. 
  11224. The statement defines the position and dimensions of the control within the 
  11225. parent window, as well as the control style. The CONTROL statement is most 
  11226. often used in a DIALOG or WINDOW statement. 
  11227.  
  11228. Typically, several CONTROL statements are used in each DIALOG statement, and 
  11229. each CONTROL statement must have a unique id value. The optional BEGIN and END 
  11230. statements enclose any CONTROL statements that may be given with the control. 
  11231. CONTROL statements given in this manner represent child windows belonging to 
  11232. the control created by the CONTROL statement. 
  11233.  
  11234. text 
  11235.      Specifies text that is displayed to the right of the control. This field 
  11236.      must contain zero or more characters enclosed in double quotation marks. 
  11237.      Character values must be in the range 1 through 255. If a double quotation 
  11238.      mark is required in the text, you must include the double quotation mark 
  11239.      twice. In the appropriate styles, a tilde ( ~ ) character in the text 
  11240.      indicates that the following character is used as a mnemonic character for 
  11241.      the control. When the control is displayed, the tilde is not shown, but 
  11242.      the mnemonic character is underlined. The user can choose the control by 
  11243.      pressing the key corresponding to the underlined mnemonic character. 
  11244.  
  11245. id 
  11246.      Specifies the control identifier. This value must be an integer in the 
  11247.      range 0 through 65 535, or a simple expression that evaluates to a value 
  11248.      in that range. 
  11249.  
  11250.      Specifies the x-coordinate of the lower-left corner of the control. This 
  11251.      value must be an integer in the range 0 through 65 535 or an expression 
  11252.      consisting of integers and the addition (+) or subtraction (-) operator. 
  11253.      The coordinate is assumed to be in dialog units and is relative to the 
  11254.      origin of the parent window. 
  11255.  
  11256.      Specifies the y-coordinate of the lower-left corner of the control. This 
  11257.      value must be an integer in the range 0 through 65 535 or an expression 
  11258.      consisting of integers and the addition (+) or subtraction (-) operator. 
  11259.      The coordinate is assumed to be in dialog units and is relative to the 
  11260.      origin of the parent window. 
  11261.  
  11262. width 
  11263.      Specifies the width of the control. This value must be an integer in the 
  11264.      range 1 through 65 535 or an expression consisting of integers and the 
  11265.      addition (+) or subtraction (-) operator. The value is in n-character 
  11266.      units. 
  11267.  
  11268. height 
  11269.      Specifies the height of the control. This value must be an integer in the 
  11270.      range 1 through 65 535 or an expression consisting of integers and the 
  11271.      addition (+) or subtraction (-) operator. The value is in 1/8-character 
  11272.      units. 
  11273.  
  11274. class 
  11275.      Specifies the control class. This value can be one of the classes 
  11276.      specified in the table, "Control Classes," ("Control Classes@Control 
  11277.      Classes") or the name of the control class enclosed in double quotation 
  11278.      marks. 
  11279.  
  11280. style 
  11281.      Specifies the control style. This value can be a combination of control 
  11282.      styles. You can use the bitwise OR (|) operator to combine styles. 
  11283.  
  11284. data-definitions 
  11285.      Specifies a CTLDATA and/or PRESPARAMS statement. These statements define 
  11286.      control and presentation data for the control. For more information, see 
  11287.      CTLDATA and PRESPARAMS Statement. 
  11288.  
  11289. control-definition 
  11290.      Specifies a CONTROL statement or any one of several predefined control 
  11291.      statements. These statements define the style, position, and dimensions of 
  11292.      controls in the control.
  11293.  
  11294. Comments 
  11295.  
  11296. The CONTROL statement can actually contain any combination of CONTROL, DIALOG, 
  11297. and WINDOW statements.  But typically, a CONTROL statement contains no such 
  11298. statements. 
  11299.  
  11300. Example 
  11301.  
  11302. This example creates a pushbutton control with the WS_TABSTOP and WS_VISIBLE 
  11303. styles. 
  11304.  
  11305.   CONTROL "OK", 101, 10, 10, 20, 50, WC_BUTTON, BS_PUSHBUTTON |
  11306.                                                 WS_TABSTOP    |
  11307.                                                 WS_VISIBLE
  11308.  
  11309. Related Topics 
  11310.  
  11311. AUTOCHECKBOX 
  11312. AUTORADIOBUTTON 
  11313. CHECKBOX 
  11314. CTLDATA 
  11315. DEFPUSHBUTTON Statement 
  11316. DIALOG Statement 
  11317. GROUPBOX Statement 
  11318. PRESPARAMS Statement 
  11319. PUSHBUTTON Statement 
  11320. RADIOBUTTON Statement 
  11321. WINDOW Statement 
  11322.  
  11323.  
  11324. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - CTEXT Statement ΓòÉΓòÉΓòÉ
  11325.  
  11326. Syntax: 
  11327.  
  11328.   CTEXT text, id, x, y, width, height[, style]
  11329.  
  11330. Description 
  11331.  
  11332. The CTEXT statement creates a centered-text control. The control is a simple 
  11333. rectangle displaying the given text centered in the rectangle. The text is 
  11334. formatted before it is displayed. Words that would extend past the end of a 
  11335. line are automatically wrapped to the beginning of the next line. The CTEXT 
  11336. statement, which you can use only in a DIALOG or WINDOW statement, defines the 
  11337. text, identifier, dimensions, and attributes of the control. The predefined 
  11338. class for this control is WC_STATIC. If you do not specify a style, the default 
  11339. style is SS_TEXT, DT_CENTER, and WS_GROUP. 
  11340.  
  11341. text 
  11342.      Specifies text that is centered in the rectangular area of the control. 
  11343.      This field must contain zero or more characters enclosed in double 
  11344.      quotation marks. Character values must be in the range 1 through 255. If a 
  11345.      double quotation mark is required in the text, you must include the double 
  11346.      quotation mark twice. 
  11347.  
  11348. id 
  11349.      Specifies the control identifier. This value must be an integer in the 
  11350.      range 0 through 65 535, or a simple expression that evaluates to a value 
  11351.      in that range. 
  11352.  
  11353.      Specifies the x-coordinate of the lower-left corner of the control. This 
  11354.      value must be an integer in the range 0 through 65 535 or an expression 
  11355.      consisting of integers and the addition (+) or subtraction (-) operator. 
  11356.      The coordinate is assumed to be in dialog units and is relative to the 
  11357.      origin of the dialog box, window, or control containing the specified 
  11358.      control. 
  11359.  
  11360.      Specifies the y-coordinate of the lower-left corner of the control. This 
  11361.      value must be an integer in the range 0 through 65 535 or an expression 
  11362.      consisting of integers and the addition (+) or subtraction (-) operator. 
  11363.      The coordinate is assumed to be in dialog units and is relative to the 
  11364.      origin of the dialog box, window, or control containing the specified 
  11365.      control. 
  11366.  
  11367. width 
  11368.      Specifies the width of the control. This value must be an integer in the 
  11369.      range 1 through 65 535 or an expression consisting of integers and the 
  11370.      addition (+) or subtraction (-) operator. The width is in n-character 
  11371.      units. 
  11372.  
  11373. height 
  11374.      Specifies the height of the control. This value must be an integer in the 
  11375.      range 1 through 65 535 or an expression consisting of integers and the 
  11376.      addition (+) or subtraction (-) operator. The height is in 1/8-character 
  11377.      units. 
  11378.  
  11379. style 
  11380.      Specifies the control styles. This value can be a combination of the 
  11381.      styles specified for WC_STATIC. You can use the bitwise OR (|) operator to 
  11382.      combine styles.
  11383.  
  11384. Example 
  11385.  
  11386. This example creates a centered-text control that is labeled "Filename." 
  11387.  
  11388.   CTEXT "Filename", 101, 10, 10, 100, 100
  11389.  
  11390. Related Topics 
  11391.  
  11392. CONTROL 
  11393. DIALOG Statement 
  11394. LTEXT Statement 
  11395. RTEXT Statement 
  11396. WINDOW Statement 
  11397.  
  11398.  
  11399. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - CTLDATA Statement ΓòÉΓòÉΓòÉ
  11400.  
  11401. Syntax: 
  11402.  
  11403.   CTLDATA word-value[, word-value][...]
  11404.  
  11405.   CTLDATA string
  11406.  
  11407.   CTLDATA MENU
  11408.   BEGIN
  11409.   menuitem-definition
  11410.      .
  11411.      .
  11412.      .
  11413.   END
  11414.  
  11415. Description 
  11416.  
  11417. The CTLDATA statement defines control data for a custom dialog box, window, or 
  11418. control.  The statement has three basic forms to permit specifying a menu or 
  11419. specifying data in words or characters.  The data can be in any format, since 
  11420. only your window procedure will use it. The window procedure of the dialog box, 
  11421. window, or control receives this data when the item is created.  It is up to 
  11422. the window procedure to process the data. 
  11423.  
  11424. word-value 
  11425.      Specifies a 16-bit value. This value must be an integer in the range 0 
  11426.      through 65 535. It must be in decimal notation. 
  11427.  
  11428. string 
  11429.      Specifies a string of 8-bit characters. This field must contain zero or 
  11430.      more characters enclosed in double quotation marks. Character values must 
  11431.      be in the range 1 through 255. If a double quotation mark is required in 
  11432.      the string, you must include the double quotation mark twice. 
  11433.  
  11434. menuitem-definition 
  11435.      Specifies a MENUITEM or SUBMENU statement. These statements define the 
  11436.      individual commands or submenus in the given menu. For details about these 
  11437.      statements, see MENUITEM Statement and SUBMENU Statement. 
  11438.  
  11439. Comments 
  11440.  
  11441. CTLDATA is often used to supply data that controls the subsequent operation of 
  11442. the custom window. For example, the CTLDATA statement may contain extended 
  11443. style bits - that is, style bits designed specifically for your customized 
  11444. window. 
  11445.  
  11446. You should reserve the CTLDATA statement for window classes that you create 
  11447. yourself. 
  11448.  
  11449. Example 
  11450.  
  11451. This example creates a menu for the window created with the WINDOW statement. 
  11452.  
  11453.   WINDOWTEMPLATE 1
  11454.   BEGIN
  11455.       WINDOW "Sample", 1, 0, 0, 100, 100, "MYCLASS", 0, FCF_STANDARD
  11456.       CTLDATA MENU
  11457.       BEGIN
  11458.           MENUITEM "Exit", 101
  11459.       END
  11460.   END
  11461.  
  11462. Related Topics 
  11463.  
  11464. CONTROL 
  11465. DIALOG Statement 
  11466. FRAME Statement 
  11467. MENUITEM Statement 
  11468. PRESPARAMS Statement 
  11469. SUBMENU Statement 
  11470. WINDOW Statement 
  11471.  
  11472.  
  11473. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - define Directive ΓòÉΓòÉΓòÉ
  11474.  
  11475. Syntax: 
  11476.  
  11477.   define name value
  11478.  
  11479. Description 
  11480.  
  11481. The define directive assigns the given value to the specified name. All 
  11482. subsequent occurrences of the name are replaced by the value. 
  11483.  
  11484. name 
  11485.      Specifies the name to be defined.  This value is any combination of 
  11486.      letters, digits, and punctuation. 
  11487.  
  11488. value 
  11489.      Specifies any integer, character string, or line of text. This value can 
  11490.      contain another defined name, which creates a level of nested defines. You 
  11491.      are limited to 64 levels of nested defines. 
  11492.  
  11493. Example 
  11494.  
  11495. This example assigns values to the names "NONZERO" and "USERCLASS". 
  11496.  
  11497.   #define     NONZERO     1
  11498.   #define     USERCLASS   "MyControlClass"
  11499.  
  11500. Related Topics 
  11501.  
  11502. Directives 
  11503. ifdef Directive 
  11504. ifndef Directive 
  11505. undef Directive 
  11506.  
  11507.  
  11508. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - DEFPUSHBUTTON Statement ΓòÉΓòÉΓòÉ
  11509.  
  11510. Syntax: 
  11511.  
  11512. DEFPUSHBUTTON text, id, x, y, width, height[, style]
  11513.  
  11514. Description 
  11515.  
  11516. The DEFPUSHBUTTON statement creates a default pushbutton control. The control 
  11517. is a round-cornered rectangle containing the given text. The rectangle has a 
  11518. bold outline to represent that it is the default response for the user.  The 
  11519. control sends a message to its parent window when the user chooses the control. 
  11520. The DEFPUSHBUTTON statement, which you can use only in a DIALOG or WINDOW 
  11521. statement, defines the text, identifier, dimensions, and attributes of the 
  11522. control.  The predefined class for this control is WC_BUTTON.  If you do not 
  11523. specify a style, the default style is BS_PUSHBUTTON, BS_DEFAULT, and 
  11524. WS_TABSTOP. 
  11525.  
  11526. text 
  11527.      Specifies text that is centered in the rectangular area of the control. 
  11528.      This field must contain zero or more characters enclosed in double 
  11529.      quotation marks. Character values must be in the range 1 through 255. If a 
  11530.      double quotation mark is required in the text, you must include the double 
  11531.      quotation mark twice. A tilde ( ~ ) character in the text indicates that 
  11532.      the following character is used as a mnemonic character for the control. 
  11533.      When the control is displayed, the tilde is not shown, but the mnemonic 
  11534.      character is underlined. The user can choose the control by pressing the 
  11535.      key corresponding to the underlined mnemonic character. 
  11536. id 
  11537.      Specifies the control identifier. This value must be an integer in the 
  11538.      range 0 through 65 535, or a simple expression that evaluates to a value 
  11539.      in that range. 
  11540.      Specifies the x-coordinate of the lower-left corner of the control. This 
  11541.      value must be an integer in the range 0 through 65 535 or an expression 
  11542.      consisting of integers and the addition (+) or subtraction (-) operator. 
  11543.      The coordinate is assumed to be in dialog units and is relative to the 
  11544.      origin of the dialog box, window, or control containing the specified 
  11545.      control. 
  11546.      Specifies the y-coordinate of the lower-left corner of the control. This 
  11547.      value must be an integer in the range 0 through 65 535 or an expression 
  11548.      consisting of integers and the addition (+) or subtraction (-) operator. 
  11549.      The coordinate is assumed to be in dialog units and is relative to the 
  11550.      origin of the dialog box, window, or control containing the specified 
  11551.      control. 
  11552. width 
  11553.      Specifies the width of the control. This value must be an integer in the 
  11554.      range 1 through 65 535 or an expression consisting of integers and the 
  11555.      addition (+) or subtraction (-) operator. The width is in n-character 
  11556.      units. 
  11557. height 
  11558.      Specifies the height of the control. This value must be an integer in the 
  11559.      range 1 through 65 535 or an expression consisting of integers and the 
  11560.      addition (+) or subtraction (-) operator. The height is in 1/8-character 
  11561.      units. 
  11562. style 
  11563.      Specifies the control styles. This value can be a combination of the 
  11564.      styles specified for WC_BUTTON. You can use the bitwise OR (|) operator to 
  11565.      combine styles. 
  11566.  
  11567. Example 
  11568.  
  11569. This example creates a default pushbutton control that is labeled "Cancel." 
  11570.  
  11571. DEFPUSHBUTTON "Cancel", 101, 10, 10, 24, 50
  11572.  
  11573. Related Topics 
  11574.  
  11575. AUTOCHECKBOX 
  11576. AUTORADIOBUTTON 
  11577. CHECKBOX 
  11578. CONTROL 
  11579. DIALOG Statement 
  11580. GROUPBOX Statement 
  11581. PUSHBUTTON Statement 
  11582. RADIOBUTTON Statement 
  11583. WINDOW Statement 
  11584.  
  11585.  
  11586. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - DIALOG Statement ΓòÉΓòÉΓòÉ
  11587.  
  11588. Syntax: 
  11589.  
  11590. DIALOG text, id, x, y, width, height[, [style][,
  11591. framectl]][data-definitions]
  11592. BEGIN
  11593. control-definition
  11594.     .
  11595.     .
  11596.     .
  11597. END
  11598.  
  11599. Description 
  11600.  
  11601. The DIALOG statement defines a window that an application can use to create 
  11602. dialog boxes.  The statement defines the position and dimensions of the dialog 
  11603. box on the screen, as well as the dialog-box style.  The DIALOG statement is 
  11604. most often used in a DLGTEMPLATE statement. 
  11605.  
  11606. Typically, you use only one DIALOG statement in each DLGTEMPLATE statement, and 
  11607. the DIALOG statement contains at least one control definition. 
  11608.  
  11609. text 
  11610.      Specifies the dialog-box title if the style specifies a title bar. This 
  11611.      field must contain zero or more characters enclosed in double quotation 
  11612.      marks. Character values must be in the range 1 through 255. If a double 
  11613.      quotation mark is required in the title, you must include the double 
  11614.      quotation mark twice. 
  11615. id 
  11616.      Specifies the dialog-box identifier. This value must be an integer in the 
  11617.      range 0 through 65 535, or a simple expression that evaluates to a value 
  11618.      in that range. 
  11619.      Specifies the x-coordinate of the lower-left corner of the dialog box. 
  11620.      This value must be an integer in the range 0 through 65 535 or an 
  11621.      expression consisting of integers and the addition (+) or subtraction (-) 
  11622.      operator. The value is in dialog units, but its exact meaning depends on 
  11623.      the dialog style. See the "Comments" section for details. 
  11624.      Specifies the y-coordinate of the lower-left corner of the dialog box. 
  11625.      This value must be an integer in the range 0 through 65 535 or an 
  11626.      expression consisting of integers and the addition (+) or subtraction (-) 
  11627.      operator. The value is in dialog units, but its exact meaning depends on 
  11628.      the dialog style. See the "Comments" section for details. 
  11629. width 
  11630.      Specifies the width of the dialog box. This value must be an integer in 
  11631.      the range 1 through 65 535 or an expression consisting of integers and the 
  11632.      addition (+) or subtraction (-) operator. The value is in n-character 
  11633.      units. 
  11634. height 
  11635.      Specifies the height of the dialog box. This value must be an integer in 
  11636.      the range 1 through 65 535 or an expression consisting of integers and the 
  11637.      addition (+) or subtraction (-) operator. The value is in 1/8-character 
  11638.      units. 
  11639. style 
  11640.      Specifies the dialog-box style.  This value can be any of the window, 
  11641.      dialog-box, or frame styles. You can use the bitwise OR (|) operator to 
  11642.      combine styles. 
  11643. framectl 
  11644.      Specifies the styles for frame controls belonging to the dialog box.  This 
  11645.      value can be any of the frame-control styles specified in the table, 
  11646.      "Frame-Control Flags."  ("Frame-Control Flags@Frame-Control Flag") You can 
  11647.      use the bitwise OR (|) operator to combine styles. 
  11648. data-definitions 
  11649.      Specifies a CTLDATA and/or PRESPARAMS statement. These statements define 
  11650.      control and presentation data for the dialog box. For more information, 
  11651.      see CTLDATA and PRESPARAMS Statement. 
  11652. control-definition 
  11653.      Specifies a CONTROL statement or any one of several predefined control 
  11654.      statements. These statements define the style, position, and dimensions of 
  11655.      controls in the dialog box. 
  11656.  
  11657. Comments 
  11658.  
  11659. The exact meaning of the coordinates depends on the style defined by the style 
  11660. field. For dialog boxes with FS_SCREENALIGN style, the coordinates are relative 
  11661. to the origin of the display screen. For dialog boxes with the style 
  11662. FS_MOUSEALIGN, the coordinates are relative to the position of the mouse 
  11663. pointer at the time the dialog box is created. For all other dialog boxes, the 
  11664. coordinates are relative to the origin of the parent window. 
  11665.  
  11666. The DIALOG statement can actually contain any combination of CONTROL, DIALOG, 
  11667. and WINDOW statements. Typically, a DIALOG statement contains one or more 
  11668. CONTROL statements. 
  11669.  
  11670. Example 
  11671.  
  11672. This example creates a dialog box that is labeled "Disk Error." 
  11673.  
  11674. DLGTEMPLATE 1
  11675. BEGIN
  11676.     DIALOG  "Disk Error", 100, 10, 10, 300, 110
  11677.     BEGIN
  11678.         CTEXT "Select One:", 1, 10, 80, 280, 12
  11679.         RADIOBUTTON "Retry", 2, 75, 50, 60, 12
  11680.         RADIOBUTTON "Abort", 3, 75, 30, 60, 12
  11681.         RADIOBUTTON "Ignore", 4, 75, 10, 60, 12
  11682.     END
  11683. END
  11684.  
  11685. Related Topics 
  11686.  
  11687. CONTROL 
  11688. CTLDATA 
  11689. DLGTEMPLATE Statement 
  11690. PRESPARAMS Statement 
  11691. WINDOW Statement 
  11692.  
  11693.  
  11694. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - DLGINCLUDE Statement ΓòÉΓòÉΓòÉ
  11695.  
  11696. Syntax: 
  11697.  
  11698. DLGINCLUDE id filename
  11699.  
  11700. Description 
  11701.  
  11702. The DLGINCLUDE statement adds the specified filename to the resource file.  The 
  11703. DLGINCLUDE statement is typically used to let the application access the 
  11704. definitions file for the dialog box with the corresponding identifier.  The 
  11705. file named by filename must contain the define directives used by the dialog 
  11706. box. 
  11707.  
  11708. You can provide any number of DLGINCLUDE statements in a resource script file, 
  11709. but each must have a unique identifier. 
  11710.  
  11711. id 
  11712.      Specifies the dialog-box identifier.  This value must be an integer in the 
  11713.      range 0 through 65 535, or a simple expression that evaluates to a value 
  11714.      in that range. 
  11715. filename 
  11716.      Specifies the name of the file containing the define directives. If the 
  11717.      file is not in the current directory, filename must be preceded by a full 
  11718.      path. 
  11719.  
  11720. Example 
  11721.  
  11722. This example includes the name of the definition file dlgdef.h. The dialog-box 
  11723. identifier is 5. 
  11724.  
  11725. DLGINCLUDE 5 \\INCLUDE\\DLGREF.H
  11726.  
  11727. Related Topics 
  11728.  
  11729. define Directive 
  11730.  
  11731.  
  11732. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - DLGTEMPLATE Statement ΓòÉΓòÉΓòÉ
  11733.  
  11734. Syntax: 
  11735.  
  11736. DLGTEMPLATE dialog-id  load-option   mem-option
  11737. BEGIN
  11738. dialog-definition
  11739.     .
  11740.     .
  11741.     .
  11742. END
  11743.  
  11744. Description 
  11745.  
  11746. The DLGTEMPLATE statement creates a dialog-box template.  A dialog-box template 
  11747. consists of a series of statements that define the identifier, load and memory 
  11748. options, dialog-box dimensions, and controls in the dialog box.  The dialog-box 
  11749. template can be loaded from the executable file by using the WinLoadDlg 
  11750. function. 
  11751.  
  11752. You can provide any number of dialog-box templates in a resource script file, 
  11753. but each template must have a unique dialog-id value. 
  11754.  
  11755. dialog-id 
  11756.      Specifies the dialog-box identifier.  This value must be an integer in the 
  11757.      range 0 through 65 535, or a simple expression that evaluates to a value 
  11758.      in that range. 
  11759. load-option 
  11760.      Specifies when the system loads the resource from the executable file into 
  11761.      memory.  This value must be one of the following: 
  11762.  
  11763.    PRELOAD 
  11764.         System loads the resource when the application starts. 
  11765.    LOADONCALL 
  11766.         System loads the resource when the application calls the WinLoadDlg 
  11767.         function.  This is the default option. 
  11768. mem-option 
  11769.      Specifies how the system manages the resource when it is in memory. This 
  11770.      value must be one or more of the following: 
  11771.  
  11772.    FIXED 
  11773.         System keeps the resource at a fixed memory location. 
  11774.    MOVEABLE 
  11775.         System moves the resource as necessary to compact memory. 
  11776.    DISCARDABLE 
  11777.         System discards the resource if it is no longer needed. The default 
  11778.      setting is MOVEABLE and DISCARDABLE. 
  11779. dialog-definition 
  11780.      Specifies a DIALOG statement. The statement defines the dimensions and 
  11781.      style of the given dialog box. For details about the statement, see DIALOG 
  11782.      Statement. 
  11783.  
  11784. Comments 
  11785.  
  11786. A DLGTEMPLATE statement can actually contain DIALOG, CONTROL, and WINDOW 
  11787. statements.  Typically, you include only one DIALOG statement. 
  11788.  
  11789. Example 
  11790.  
  11791. This example uses a DLGTEMPLATE statement to create a dialog box. 
  11792.  
  11793. DLGTEMPLATE ID_GETTIMER
  11794. BEGIN
  11795.     DIALOG "Timer", 1, 10, 10, 100, 40
  11796.     BEGIN
  11797.         LTEXT "Time (0 - 15):", 4, 8, 24, 72, 12
  11798.         ENTRYFIELD "0", ID_TIME, 80, 28, 16, 8, ES_MARGIN
  11799.         DEFPUSHBUTTON "Enter", ID_TIMEOK, 10, 6, 36, 12
  11800.         PUSHBUTTON "Cancel", ID_TIMECANCEL, 52, 6, 40, 12
  11801.     END
  11802. END
  11803.  
  11804. Related Topics 
  11805.  
  11806. CONTROL 
  11807. DIALOG Statement 
  11808. WINDOW Statement 
  11809.  
  11810. See "WinLoadDlg" in the Presentation Manager Reference. 
  11811.  
  11812.  
  11813. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - EDITTEXT Statement ΓòÉΓòÉΓòÉ
  11814.  
  11815. Syntax: 
  11816.  
  11817. EDITTEXT text, id, x, y, width, height, style
  11818.  
  11819. Description 
  11820.  
  11821. The EDITTEXT statement creates an entry-field control.  This control is a 
  11822. rectangle in which the user can type and edit text. The control displays a 
  11823. pointer when the user selects the control.  The user can then use the keyboard 
  11824. to enter text or edit the existing text.  Editing keys include the BACKSPACE 
  11825. and DELETE keys.  By using the mouse or the DIRECTION keys, the user can select 
  11826. the character or characters to delete or select the place to insert new 
  11827. characters. 
  11828.  
  11829. The EDITTEXT statement defines the text, identifier, dimensions, and attributes 
  11830. of a control window.  The predefined class for this control is WC_ENTRYFIELD. 
  11831. If you do not specify a style, the default style is ES_AUTOSCROLL and 
  11832. WS_TABSTOP. 
  11833.  
  11834. text      Specifies text that is displayed in the rectangular area of the 
  11835.           control.  This field must contain zero or more characters enclosed in 
  11836.           double quotation marks.  Character values must be in the range 1 
  11837.           through 255.  If a double quotation mark is required in the text, you 
  11838.           must include the double quotation mark twice. 
  11839.  
  11840. id        Specifies the control identifier.  This value is any integer 0 
  11841.           through 65 535, or a simple expression that evaluates to a value in 
  11842.           that range. 
  11843.  
  11844. x         Specifies the x-coordinate of the lower-left corner of the control. 
  11845.           This value is any integer 0 through 65 535, or an expression 
  11846.           consisting of integers and the addition (+) or subtraction (-) 
  11847.           operator.  The coordinate is assumed to be in dialog units and is 
  11848.           relative to the origin of the dialog window. 
  11849.  
  11850. y         Specifies the y-coordinate of the lower-left corner of the control. 
  11851.           This value is any integer 0 through 65 535, or an expression 
  11852.           consisting of integers and the addition (+) or subtraction (-) 
  11853.           operator.  The coordinate is assumed to be in dialog units and is 
  11854.           relative to the origin of the dialog window. 
  11855.  
  11856. width     Specifies the width of the control.  This value is any integer 1 
  11857.           through 65 535, or an expression consisting of integers and the 
  11858.           addition (+) or subtraction (-) operator. The width is in n-character 
  11859.           units. 
  11860.  
  11861. height    Specifies the height of the control.  This value is any integer 1 
  11862.           through 65 535, or an expression consisting of integers and the 
  11863.           addition (+) or subtraction (-) operator. The height is in 
  11864.           1/8-character units. 
  11865.  
  11866. style     Specifies the control styles. This value can be a combination of the 
  11867.           styles specified for WC_ENTRYFIELD.  You can use the bitwise OR ( | ) 
  11868.           operator to combine styles. 
  11869.  
  11870. Comments 
  11871.  
  11872. The EDITTEXT control statement is identical to the ENTRYFIELD control 
  11873. statement. 
  11874.  
  11875. Use the EDITTEXT statement only in a DIALOG or WINDOW statement. 
  11876.  
  11877. Example 
  11878.  
  11879. This example creates an entry-field control that is not labeled. 
  11880.  
  11881.    EDITTEXT "", 101, 10, 10, 24, 50
  11882.  
  11883. Related Topics 
  11884.  
  11885. CONTROL Statement 
  11886. DIALOG Statement 
  11887. ENTRYFIELD Statement 
  11888. WINDOW Statement 
  11889.  
  11890.  
  11891. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - elif Directive ΓòÉΓòÉΓòÉ
  11892.  
  11893. Syntax: 
  11894.  
  11895. elif constant-expression
  11896.  
  11897. Description 
  11898.  
  11899. The elif directive marks an optional clause of a conditional-compilation block 
  11900. defined by a ifdef, ifndef, or if directive.  The directive controls 
  11901. conditional compilation of the resource file by checking the specified constant 
  11902. expression.  If the constant expression is nonzero, elif directs the compiler 
  11903. to continue processing statements up to the next endif, else, or elif directive 
  11904. and then skip to the statement after endif.  If the constant expression is 
  11905. zero, elif directs the compiler to skip to the next endif, else, or elif 
  11906. directive.  You can use any number of elif directives in a conditional block. 
  11907.  
  11908. constant-expression 
  11909.      Specifies the expression to be checked. This value is a defined name, an 
  11910.      integer constant, or an expression consisting of names, integers, and 
  11911.      arithmetic and relational operators. 
  11912.  
  11913. Example 
  11914.  
  11915. In this example, elif directs the compiler to process the second BITMAP 
  11916. statement only if the value assigned to the name "Version" is less than 7. The 
  11917. elif directive itself is processed only if Version is greater than or equal to 
  11918. 3. 
  11919.  
  11920. #if Version < 3
  11921. BITMAP 1 errbox.bmp
  11922. #elif Version < 7
  11923. BITMAP 1 userbox.bmp
  11924. #endif
  11925.  
  11926. Related Topics 
  11927.  
  11928. Directives 
  11929. Directives 
  11930. else Directive 
  11931. endif Directive 
  11932. if Directive 
  11933. ifdef Directive 
  11934. ifndef Directive 
  11935.  
  11936.  
  11937. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - else Directive ΓòÉΓòÉΓòÉ
  11938.  
  11939. Syntax:   else 
  11940.  
  11941. Description 
  11942.  
  11943. The else directive marks an optional clause of a conditional-compilation block 
  11944. defined by a ifdef, ifndef, or if directive.  The else directive must be the 
  11945. last directive before the endif directive. 
  11946.  
  11947.  This directive has no arguments. 
  11948.  
  11949. Example 
  11950.  
  11951. This example compiles the second BITMAP statement only if the name "DEBUG" is 
  11952. not defined. 
  11953.  
  11954.     #ifdef DEBUG
  11955.         BITMAP 1 errbox.bmp
  11956.     #else
  11957.         BITMAP 1 userbox.bmp
  11958.     #endif
  11959.  
  11960. Related Topics 
  11961.  
  11962. Directives 
  11963. elif Directive 
  11964. endif Directive 
  11965. if Directive 
  11966. ifdef Directive 
  11967. ifndef Directive 
  11968.  
  11969.  
  11970. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - endif Directive ΓòÉΓòÉΓòÉ
  11971.  
  11972. Syntax: endif 
  11973.  
  11974. Description 
  11975.  
  11976. The endif directive marks the end of a conditional-compilation block defined by 
  11977. a ifdef directive.  One endif is required for each if, ifdef, or ifndef 
  11978. directive. 
  11979.  
  11980. This directive has no arguments. 
  11981.  
  11982. Related Topics 
  11983.  
  11984. Directives 
  11985. elif Directive 
  11986. else Directive 
  11987. if Directive 
  11988. ifdef Directive 
  11989. ifndef Directive 
  11990.  
  11991.  
  11992. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - ENTRYFIELD Statement ΓòÉΓòÉΓòÉ
  11993.  
  11994. ENTRYFIELD text, id, x, y, width, height , style
  11995.  
  11996. The ENTRYFIELD statement creates an entry-field control.  This control is a 
  11997. rectangle in which the user can type and edit text.  The control displays a 
  11998. pointer when the user selects the control.  The user can then use the keyboard 
  11999. to enter text or edit the existing text. Editing keys include the BACKSPACE and 
  12000. DELETE keys.  By using the mouse or the DIRECTION keys, the user can select the 
  12001. character or characters to delete or select the place to insert new characters. 
  12002. The ENTRYFIELD statement, which you can use only in a DIALOG or WINDOW 
  12003. statement, defines the text, identifier, dimensions, and attributes of a 
  12004. control window.  The predefined class for this control is WC_ENTRYFIELD.  If 
  12005. you do not specify a style, the default style is ES_AUTOSCROLL and WS_TABSTOP. 
  12006.  
  12007. text 
  12008.      Specifies text that is displayed in the rectangular area of the control. 
  12009.      This field must contain zero or more characters enclosed in double 
  12010.      quotation marks. Character values must be in the range 1 through 255. If a 
  12011.      double quotation mark is required in the text, you must include the double 
  12012.      quotation mark twice. 
  12013. id 
  12014.      Specifies the control identifier. This value must be an integer in the 
  12015.      range 0 through 65 535, or a simple expression that evaluates to a value 
  12016.      in that range. 
  12017.      Specifies the x-coordinate of the lower-left corner of the control. This 
  12018.      value must be an integer in the range 0 through 65 535 or an expression 
  12019.      consisting of integers and the addition (+) or subtraction (-) operator. 
  12020.      The coordinate is assumed to be in dialog units and is relative to the 
  12021.      origin of the dialog box, window, or control containing the specified 
  12022.      control. 
  12023.      Specifies the y-coordinate of the lower-left corner of the control. This 
  12024.      value must be an integer in the range 0 through 65 535 or an expression 
  12025.      consisting of integers and the addition (+) or subtraction (-) operator. 
  12026.      The coordinate is assumed to be in dialog units and is relative to the 
  12027.      origin of the dialog box, window, or control containing the specified 
  12028.      control. 
  12029. width 
  12030.      Specifies the width of the control. This value must be an integer in the 
  12031.      range 1 through 65 535 or an expression consisting of integers and the 
  12032.      addition (+) or subtraction (-) operator. The width is in n-character 
  12033.      units. 
  12034. height 
  12035.      Specifies the height of the control. This value must be an integer in the 
  12036.      range 1 through 65 535 or an expression consisting of integers and the 
  12037.      addition (+) or subtraction (-) operator. The height is in 1/8-character 
  12038.      units. 
  12039. style 
  12040.      Specifies the control styles. This value can be a combination of the 
  12041.      styles specified for WC_ENTRYFIELD. You can use the bitwise OR (|) 
  12042.      operator to combine styles. 
  12043.  
  12044. Example 
  12045.  
  12046. This example creates an entry-field control that is not labeled. 
  12047.  
  12048. ENTRYFIELD "", 101, 10, 10, 24, 50
  12049.  
  12050. Related Topics 
  12051.  
  12052. CONTROL 
  12053. DIALOG Statement 
  12054. MLE Statement 
  12055. WINDOW Statement 
  12056.  
  12057.  
  12058. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - FONT Statement ΓòÉΓòÉΓòÉ
  12059.  
  12060. Syntax: 
  12061.  
  12062. FONT font-id  load-option mem-option  filename
  12063.  
  12064. Description 
  12065.  
  12066. The FONT statement defines a font resource for an application.  A font 
  12067. resource, typically created by using the OS/2* Font Editor, is a bit map 
  12068. defining the shape of the individual characters in a character set.  The FONT 
  12069. statement copies the font resource from the file specified in the filename 
  12070. field and adds it to the other resources of the application.  A font resource 
  12071. can be loaded from the executable file when needed by using the GpiLoadFonts 
  12072. function. 
  12073.  
  12074. You can provide any number of FONT statements in a resource script file, but 
  12075. each statement must specify a unique font-id value. 
  12076.  
  12077. font-id 
  12078.      Specifies the font-resource identifier. This value must be an integer in 
  12079.      the range 0 through 65 535, or a simple expression that evaluates to a 
  12080.      value in that range. 
  12081. load-option 
  12082.      Specifies when the system loads the resource from the executable file into 
  12083.      memory. This value must be one of the following: 
  12084.  
  12085.    PRELOAD 
  12086.         System loads the resource when the application starts. 
  12087.    LOADONCALL 
  12088.         System loads the resource when the application calls the GpiLoadFonts 
  12089.         function. This is the default option. 
  12090. mem-option 
  12091.      Specifies how the system manages the resource when it is i memory. This 
  12092.      value must be one or more of the following: 
  12093.  
  12094.    FIXED 
  12095.          System keeps the resource at a fixed memory location. 
  12096.    MOVEABLE 
  12097.          System moves the resource as necessary to compact memory. 
  12098.    DISCARDABLE 
  12099.         System discards the resource if it is no longer needed. The default 
  12100.      setting is MOVEABLE and DISCARDABLE. 
  12101. filename 
  12102.      Specifies the name of the file containing the font resource. If the file 
  12103.      is not in the current directory, filename must be preceded by a full path. 
  12104.  
  12105. Example 
  12106.  
  12107. This example defines a font whose font identifier is 5. The font resource is 
  12108. copied from the file cmroman.fon. 
  12109.  
  12110. FONT 5 cmroman.fon
  12111.  
  12112. Related Topics 
  12113.  
  12114. See "GpiLoadFonts" in the Presentation Manager Reference. 
  12115.  
  12116.  
  12117. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - FRAME Statement ΓòÉΓòÉΓòÉ
  12118.  
  12119. Syntax: 
  12120.  
  12121. FRAME text, id, x, y, width, height, style[, framectl]
  12122.   data-definitions
  12123. [ BEGIN
  12124. window-definition
  12125.     .
  12126.     .
  12127.     .
  12128. END ]
  12129.  
  12130. Description 
  12131.  
  12132. The FRAME statement defines a frame window.  The statement defines the title, 
  12133. identifier, position, and dimensions of the frame window, as well as the window 
  12134. style.  The FRAME statement is most often used in a WINDOWTEMPLATE statement, 
  12135. and typically, only one FRAME statement is used.  The FRAME statement, in turn, 
  12136. typically contains at least one WINDOW statement that defines the client window 
  12137. belonging to the frame window. 
  12138.  
  12139. The frame window has no default style.  You must use the framectl field to 
  12140. define additional frame controls, such as a title bar and system menu, to be 
  12141. created when the frame window is created.  If the text field is not empty, the 
  12142. statement automatically adds a title-bar control to the frame window, whether 
  12143. or not you specify the FCF_TITLEBAR style.  Frame controls are given default 
  12144. styles and control identifiers depending on their class.  For example, a 
  12145. title-bar control receives the identifier FID_TITLEBAR. 
  12146.  
  12147. text 
  12148.      Specifies the title of the frame window. This field must contain zero or 
  12149.      more characters enclosed in double quotation marks. Character values must 
  12150.      be in the range 1 through 255. If a double quotation mark is required in 
  12151.      the name, you must include the double quotation mark twice. 
  12152. id 
  12153.      Specifies the window identifier. This value must be an integer in the 
  12154.      range 0 through 65 535, or a simple expression that evaluates to a value 
  12155.      in that range. 
  12156.      Specifies the x-coordinate of the lower-left corner of the window. This 
  12157.      value must be an integer in the range 0 through 65 535 or an expression 
  12158.      consisting of integers and the addition (+) or subtraction (-) operator. 
  12159.      The coordinate is assumed to be in dialog units and is relative to the 
  12160.      origin of the dialog box, window, or control containing the specified 
  12161.      window. 
  12162.      Specifies the y-coordinate of the lower-left corner of the window. This 
  12163.      value must be an integer in the range 0 through 65 535 or an expression 
  12164.      consisting of integers and the addition (+) or subtraction (-) operator. 
  12165.      The coordinate is assumed to be in dialog units and is relative to the 
  12166.      origin of the dialog box, window, or control containing the specified 
  12167.      window. 
  12168. width 
  12169.      Specifies the width of the window. This value must be an integer in the 
  12170.      range 1 through 65 535 or an expression consisting of integers and the 
  12171.      addition (+) or subtraction (-) operator. The width is in n-character 
  12172.      units. 
  12173. height 
  12174.      Specifies the height of the window. This value must be a integer in the 
  12175.      range 1 through 65 535 or an expression consisting of integers and the 
  12176.      addition (+) or subtraction (-) operator. The height is in 1/8-character 
  12177.      units. 
  12178. style 
  12179.      Specifies the frame and window styles.  This value can be a combination of 
  12180.      frame styles. You can use the bitwise OR (|) operator to combine styles. 
  12181. framectl 
  12182.      Specifies the styles of frame controls belonging to the frame window. 
  12183.      This value can be a combination of the styles specified in the table, 
  12184.      "Frame-Control Styles."  ("Frame-Control Styles@Frame-Control Styles") You 
  12185.      can use the bitwise OR (|) operator to combine styles. 
  12186. data-definitions 
  12187.      Specifies a CTLDATA and/or PRESPARAMS statement. These statements define 
  12188.      control and presentation data for the frame window. For more information, 
  12189.      see CTLDATA and PRESPARAMS Statement. 
  12190. window-definition 
  12191.      Specifies a WINDOW statement or any one of several predefined control 
  12192.      statements. These statements define the style, position, and dimensions of 
  12193.      windows or controls in the frame window. 
  12194.  
  12195. Comments 
  12196.  
  12197. The FRAME statement can actually contain any combination of CONTROL, DIALOG, 
  12198. and WINDOW statements.  Typically, a FRAME statement contains one WINDOW 
  12199. statement. 
  12200.  
  12201. Example 
  12202.  
  12203. This example creates a standard frame window, with a title bar, a system menu, 
  12204. minimize and maximize boxes, and a vertical scroll bar. The FRAME statement 
  12205. contains a WINDOW statement defining the client window belonging to the frame 
  12206. window. 
  12207.  
  12208. WINDOWTEMPLATE 1
  12209. BEGIN
  12210.     FRAME "My Window", 1, 10, 10, 320, 130, 0,
  12211.             FCF_STANDARD | FCF_VERTSCROLL
  12212.     BEGIN
  12213.         WINDOW "", FID_CLIENT, 0, 0, 0, 0, "MyClientClass"
  12214.     END
  12215. END
  12216.  
  12217. Related Topics 
  12218.  
  12219. CONTROL 
  12220. CTLDATA 
  12221. PRESPARAMS Statement 
  12222. WINDOW Statement 
  12223. WINDOWTEMPLATE Statement 
  12224.  
  12225.  
  12226. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - GROUPBOX Statement ΓòÉΓòÉΓòÉ
  12227.  
  12228. Syntax: 
  12229.  
  12230. GROUPBOX text, id, x, y, width, height , style
  12231.  
  12232. Description 
  12233.  
  12234. The GROUPBOX statement creates a group-box control.  The control is a rectangle 
  12235. that groups other controls together.  The controls are grouped by drawing a 
  12236. border around them and displaying the given text in the upper-left corner.  The 
  12237. GROUPBOX statement, which you can use only in a DIALOG or WINDOW statement, 
  12238. defines the text, identifier, dimensions, and attributes of a control window. 
  12239. The predefined class for this control is WC_STATIC.  If you do not specify a 
  12240. style, the default style is SS_GROUPBOX and WS_TABSTOP. 
  12241.  
  12242. text 
  12243.      Specifies text that appears in the upper-left corner of the control. This 
  12244.      field must contain zero or more characters enclosed in double quotation 
  12245.      marks. Character values must be in the range 1 through 255. If a double 
  12246.      quotation mark is required in the text, you must include the double 
  12247.      quotation mark twice. 
  12248. id 
  12249.      Specifies the control identifier. This value must be an integer in the 
  12250.      range 0 through 65 535, or a simple expression that evaluates to a value 
  12251.      in that range. 
  12252.      Specifies the x-coordinate of the lower-left corner of the control. This 
  12253.      value must be an integer in the range 0 through 65 535 or an expression 
  12254.      consisting of integers and the addition (+) or subtraction (-) operator. 
  12255.      The coordinate is assumed to be in dialog units and is relative to the 
  12256.      origin of the dialog box, window, or control containing the specified 
  12257.      control. 
  12258.      Specifies the y-coordinate of the lower-left corner of the control. This 
  12259.      value must be an integer in the range 0 through 65 535 or an expression 
  12260.      consisting of integers and the addition (+) or subtraction (-) operator. 
  12261.      The coordinate is assumed to be in dialog units and is relative to the 
  12262.      origin of the dialog box, window, or control containing the specified 
  12263.      control. 
  12264. width 
  12265.      Specifies the width of the control.  This value must be an integer in the 
  12266.      range 1 through 65 535 or an expression consisting of integers and the 
  12267.      addition (+) or subtraction (-) operator.  The width is in n-character 
  12268.      units. 
  12269. height 
  12270.      Specifies the height of the control. This value must be an integer in the 
  12271.      range 1 through 65 535 or an expression consisting of integers and the 
  12272.      addition (+) or subtraction (-) operator. The height is in 1/8-character 
  12273.      units. 
  12274. style 
  12275.      Specifies the control styles.  This value can be a combination of the 
  12276.      styles specified for WC_STATIC. You can use the bitwise OR (|) operator to 
  12277.      combine styles. 
  12278.  
  12279. Example 
  12280.  
  12281. This example creates a group-box control that is labeled "Options." 
  12282.  
  12283. GROUPBOX "Options", 101, 10, 10, 100, 100
  12284.  
  12285. Related Topics 
  12286.  
  12287. AUTOCHECKBOX 
  12288. AUTORADIOBUTTON 
  12289. CHECKBOX 
  12290. CONTROL 
  12291. DEFPUSHBUTTON Statement 
  12292. DIALOG Statement 
  12293. PUSHBUTTON Statement 
  12294. RADIOBUTTON Statement 
  12295. WINDOW Statement 
  12296.  
  12297.  
  12298. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - HELPITEM Statement ΓòÉΓòÉΓòÉ
  12299.  
  12300. Syntax: 
  12301.  
  12302. HELPITEM application-window-id, help-subtable-id, extended-helppanel-id
  12303.  
  12304. Description 
  12305.  
  12306. The HELPITEM statement defines the help items in a help table.  The statement, 
  12307. permitted only in a HELPTABLE statement, specifies the resource identifier of 
  12308. an application window for which help is provided, and the resource identifiers 
  12309. of the help subtable and extended help panel associated with the application 
  12310. window. 
  12311.  
  12312. You can provide any number of HELPITEM statements in a HELPTABLE statement. 
  12313. You should provide one HELPITEM statement for each application window for which 
  12314. help is provided. 
  12315.  
  12316. application-window-id 
  12317.      Specifies the resource identifier of an application window for which help 
  12318.      is provided. 
  12319. help-subtable-id 
  12320.      Specifies the resource identifier of the help subtable associated with the 
  12321.      specified application window. 
  12322. extended-helppanel-id 
  12323.      Specifies the resource identifier of the extended help panel associated 
  12324.      with the specified application window. 
  12325.  
  12326. Example 
  12327.  
  12328. This example defines a help item that associates a help subtable called 
  12329. IDSUB_FILEMENU and an extended help panel called IDEXT_APPHLP with an 
  12330. application window called IDWIN_FILEMENU. 
  12331.  
  12332. HELPITEM IDWIN_FILEMENU, IDSUB_FILEMENU, IDEXT_APPHLP
  12333.  
  12334. Related Topics 
  12335.  
  12336. HELPSUBITEM Statement 
  12337. HELPSUBTABLE Statement 
  12338. HELPTABLE Statement 
  12339. SUBITEMSIZE Statement 
  12340.  
  12341.  
  12342. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - HELPSUBITEM Statement ΓòÉΓòÉΓòÉ
  12343.  
  12344. Syntax: 
  12345.  
  12346. HELPSUBITEM child-window-id, helppanel-id  , integer...
  12347.  
  12348. Description 
  12349.  
  12350. The HELPSUBITEM statement defines the help subitems in a help subtable.  This 
  12351. statement, which is permitted only in a HELPSUBTABLE statement, specifies the 
  12352. identifier of a child window for which help is provided, the identifier of the 
  12353. help panel associated with the child window, and one or more optional, 
  12354. application-defined integers. 
  12355.  
  12356. You can provide any number of HELPSUBITEM statements in a HELPSUBTABLE 
  12357. statement.  You should provide one HELPSUBITEM statement for each child window 
  12358. for which help is provided. 
  12359.  
  12360. child-window-id 
  12361.      Specifies the resource identifier of the child window for which help is 
  12362.      provided. 
  12363. helppanel-id 
  12364.      Specifies the resource identifier of the help panel associated with the 
  12365.      specified child window. 
  12366. integer 
  12367.      Specifies optional, application-defined integers. If you use this field, 
  12368.      you must include the SUBITEMSIZE statement in the help subtable to specify 
  12369.      the size, in words, of each help subitem in the help subtable. For details 
  12370.      about this statement, see SUBITEMSIZE Statement. 
  12371.  
  12372. Example 
  12373.  
  12374. This example defines a help subitem that associates a child window called 
  12375. IDCLD_FILEMENU with a help panel called IDHP_FILEMENU. 
  12376.  
  12377. HELPSUBITEM IDCLD_FILEMENU, IDHP_FILEMENU
  12378.  
  12379. Related Topics 
  12380.  
  12381. HELPITEM Statement 
  12382. HELPSUBTABLE Statement 
  12383. HELPTABLE Statement 
  12384. SUBITEMSIZE Statement 
  12385.  
  12386.  
  12387. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - HELPSUBTABLE Statement ΓòÉΓòÉΓòÉ
  12388.  
  12389. Syntax: 
  12390.  
  12391. HELPSUBTABLE helpsubtable-id
  12392.  SUBITEMSIZE size
  12393. BEGIN
  12394. helpsubitem-definition
  12395.     .
  12396.     .
  12397.     .
  12398. END
  12399.  
  12400. Description 
  12401.  
  12402. The HELPSUBTABLE statement defines the contents of a help-subtable resource.  A 
  12403. help-subtable resource contains a help-subitem entry for each item that can be 
  12404. selected in an application window.  Each of these items should be a child 
  12405. window of the application window specified in the help-table resource.  The 
  12406. help subtable should contain a help subitem for each control, child window, and 
  12407. menu item in the application window. 
  12408.  
  12409. You can provide any number of HELPSUBTABLE statements in a resource script 
  12410. file, but each statement must specify a unique helpsubtable-id value.  You can 
  12411. also provide any number of helpsubitem-definition statements in the help 
  12412. subtable.  These specify the child window for which help is provided, the help 
  12413. panel containing the help text for the child window, and one or more 
  12414. application-defined integers. 
  12415.  
  12416. If you include optional integers in the helpsubitem-definition statements, you 
  12417. must also include a SUBITEMSIZE statement to specify the size, in words, of 
  12418. each help subitem.  All help subitems in a help subtable must be the same size. 
  12419. The default size is two words per help subitem. 
  12420.  
  12421. helpsubtable-id 
  12422.      Specifies the resource identifier of the help subtable. This value must be 
  12423.      an integer in the range 0 through 65 535, or a simple expression that 
  12424.      evaluates to a value in that range. 
  12425. helpsubitem-definition 
  12426.      Specifies a HELPSUBITEM statement. A HELPSUBITEM statement specifies a 
  12427.      child window, the help panel associated with the child window, and one or 
  12428.      more optional, application-defined integers. For details about this 
  12429.      statement, see HELPSUBITEM Statement. 
  12430.  
  12431. Example 
  12432.  
  12433. This example creates a help-subtable resource whose help-subtable identifier is 
  12434. IDSUB_FILEMENU.  Each HELPSUBITEM statement specifies a child window and a help 
  12435. panel. 
  12436.  
  12437. HELPSUBTABLE IDSUB_FILEMENU
  12438. BEGIN
  12439.     HELPSUBITEM IDCLD_OPEN, IDPNL_OPEN
  12440.     HELPSUBITEM IDCLD_SAVE, IDPNL_SAVE
  12441. END
  12442.  
  12443. Related Topics 
  12444.  
  12445. HELPITEM Statement 
  12446. HELPSUBITEM Statement 
  12447. HELPTABLE Statement 
  12448. SUBITEMSIZE Statement 
  12449.  
  12450.  
  12451. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - HELPTABLE Statement ΓòÉΓòÉΓòÉ
  12452.  
  12453. Syntax: 
  12454.  
  12455. HELPTABLE helptable-id
  12456. BEGIN
  12457. helpitem-definition
  12458.     .
  12459.     .
  12460.     .
  12461. END
  12462.  
  12463. Description 
  12464.  
  12465. The HELPTABLE statement defines the contents of a help-table resource. A 
  12466. help-table resource contains a help-item entry for each application window, 
  12467. dialog box, and message box for which help is provided. 
  12468.  
  12469. You can provide any number of HELPTABLE statements in a resource script file, 
  12470. but each statement must specify a unique helptable-id value.  You can also 
  12471. provide any number of helpitem-definition statements in the help table.  These 
  12472. specify the application windows for which help is provided, the help subtables 
  12473. associated with each application window, and the extended help panels 
  12474. associated with each application window. 
  12475.  
  12476. helptable-id 
  12477.      Specifies the resource identifier of the help table.  This value must be 
  12478.      an integer in the range 0 through 65 535, or a simple expression that 
  12479.      evaluates to a value in that range. 
  12480. helpitem-definition 
  12481.      Specifies a HELPITEM statement.  A HELPITEM statement specifies an 
  12482.      application window and the associated help subtable and extended help 
  12483.      panel.  For details about this statement, see HELPITEM Statement. 
  12484.  
  12485. Example 
  12486.  
  12487. This example creates a help-table resource whose help-table identifier is 1. 
  12488. Each HELPITEM statement specifies an application window, a help subtable, and 
  12489. an extended help panel. 
  12490.  
  12491. HELPTABLE 1
  12492. BEGIN
  12493.     HELPITEM IDWIN_FILEMENU, IDSUB_FILEMENU, IDEXT_APPHLP
  12494.     HELPITEM IDWIN_EDITMENU, IDSUB_EDITMENU, IDEXT_APPHLP
  12495. END
  12496.  
  12497. Related Topics 
  12498.  
  12499. HELPITEM Statement 
  12500. HELPSUBITEM Statement 
  12501. HELPSUBTABLE Statement 
  12502. SUBITEMSIZE Statement 
  12503.  
  12504.  
  12505. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - ICON Statement (Resource) ΓòÉΓòÉΓòÉ
  12506.  
  12507. Syntax: 
  12508.  
  12509. ICON icon-id  load-option   mem-option  filename
  12510.  
  12511. Description 
  12512.  
  12513. This form of the ICON statement defines an icon resource for an application. 
  12514. An icon resource, typically created by using Icon Editor, is a bit map defining 
  12515. the shape of the icon to be used for a given application.  The ICON statement 
  12516. copies the icon resource from the file specified in the filename field and adds 
  12517. it to the application's other resources.  An icon resource can be loaded when 
  12518. creating a window by using the WinCreateStdWindow function with the FS_ICON 
  12519. style. 
  12520.  
  12521. You can provide any number of ICON statements in a resource script file, but 
  12522. each statement must specify a unique icon-id value. 
  12523.  
  12524. icon-id 
  12525.      Specifies the icon-resource identifier. This value must be an integer in 
  12526.      the range 0 through 65 535, or a simple expression that evaluates to a 
  12527.      value in that range. A icon-id of 1 has a special meaning; for details, 
  12528.      see the "Comment" section. 
  12529. load-option 
  12530.      Specifies when the system loads the resource from the executable file into 
  12531.      memory. This value must be one of the following: 
  12532.  
  12533.    PRELOAD 
  12534.         System loads the resource when the application starts. 
  12535.    LOADONCALL 
  12536.         System loads the resource when the application calls the 
  12537.         WinCreateStdWindow function. This is the default option. 
  12538. mem-option 
  12539.      Specifies how the system manages the resource when it is in memory. This 
  12540.      value must be one or more of the following: 
  12541.  
  12542.    FIXED 
  12543.         System keeps the resource at a fixed memory location. 
  12544.    MOVEABLE 
  12545.         System moves the resource as necessary to compact memory. 
  12546.    DISCARDABLE 
  12547.         System discards the resource if it is no longer needed. The default 
  12548.      setting is MOVEABLE and DISCARDABLE. 
  12549. filename 
  12550.      Specifies the name of the file containing the icon resource. If the file 
  12551.      is not in the current directory, filename must be preceded by a full path. 
  12552.  
  12553. Comments 
  12554.  
  12555. An icon with an icon-id of 1 is the default icon.  The RC program writes the 
  12556. icon not only to the resources in your executable file, but also as the .ICON 
  12557. extended attribute.  File Manager will display this icon next to the name of 
  12558. the executable file. 
  12559.  
  12560. Example 
  12561.  
  12562. This example defines an icon whose icon identifier is 11.  The icon resource is 
  12563. copied from the file custom.ico. 
  12564.  
  12565. ICON 11 custom.ico
  12566.  
  12567. Related Topics 
  12568.  
  12569. BITMAP 
  12570. ICON Statement (Control) 
  12571. POINTER Statement 
  12572.  
  12573.  
  12574. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - ICON Statement (Control) ΓòÉΓòÉΓòÉ
  12575.  
  12576. Syntax: 
  12577.  
  12578. ICON icon-id, id, x, y, width, height , style
  12579.  
  12580. Description 
  12581.  
  12582. This form of the ICON statement creates an icon control.  This control is an 
  12583. icon displayed in a dialog box.  The ICON statement, which you can use only in 
  12584. a DIALOG or WINDOW statement, defines the icon-resource identifier, 
  12585. icon-control identifier, position, and attributes of a control window.  The 
  12586. predefined class for this control is WC_STATIC.  If you do not specify a style, 
  12587. the default style is SS_ICON.  For the ICON statement, the width and height 
  12588. fields are ignored; the icon automatically sizes itself. 
  12589.  
  12590. icon-id 
  12591.      Specifies the resource identifier of an icon that is defined elsewhere in 
  12592.      the resource file. 
  12593. id 
  12594.      Specifies the control identifier. This value must be an integer in the 
  12595.      range 0 through 65 535, or a simple expression that evaluates to a value 
  12596.      in that range. 
  12597.      Specifies the x-coordinate of the lower-left corner of the control. This 
  12598.      value must be an integer in the range 0 through 65 535 or an expression 
  12599.      consisting of integers and the addition (+) or subtraction (-) operator. 
  12600.      The coordinate is assumed to be in dialog units and is relative to the 
  12601.      origin of the dialog box, window, or control containing the specified 
  12602.      control. 
  12603.      Specifies the y-coordinate of the lower-left corner of the control. This 
  12604.      value must be an integer in the range 0 through 65 535 or an expression 
  12605.      consisting of integers and the addition (+) or subtraction (-) operator. 
  12606.      The coordinate is assumed to be in dialog units and is relative to the 
  12607.      origin of the dialog box, window, or control containing the specified 
  12608.      control. 
  12609. width 
  12610.      Specifies a reserved value. Can be set to zero. 
  12611. height 
  12612.      Specifies a reserved value. Can be set to zero. 
  12613. style 
  12614.      Specifies the control styles.  This value can be a combination of the 
  12615.      styles specified for WC_STATIC. You can use the bitwise OR (|) operator to 
  12616.      combine styles. 
  12617.  
  12618. Example 
  12619.  
  12620. This example creates an icon control whose icon identifier is 99. 
  12621.  
  12622. ICON 99, 101, 10, 10, 0, 0
  12623.  
  12624. Related Topics 
  12625.  
  12626. CONTROL 
  12627. DIALOG Statement 
  12628. ICON Statement (Resource) 
  12629. WINDOW Statement 
  12630.  
  12631.  
  12632. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - if Directive ΓòÉΓòÉΓòÉ
  12633.  
  12634. Syntax: 
  12635.  
  12636. if constant-expression
  12637.  
  12638. Description 
  12639.  
  12640. The if directive controls conditional compilation of the resource file by 
  12641. checking the specified constant expression.  If the constant expression is 
  12642. nonzero, if directs the compiler to continue processing statements up to the 
  12643. next endif, else, or elif directive and then skip to the statement after the 
  12644. endif directive.  If the constant expression is zero, if directs the compiler 
  12645. to skip to the next endif, else, or elif directive. 
  12646.  
  12647. constant-expression 
  12648.      Specifies the expression to be checked. This value is a defined name, an 
  12649.      integer constant, or an expression consisting of names, integers, and 
  12650.      arithmetic and relational operators. 
  12651.  
  12652. Example 
  12653.  
  12654. This example compiles the BITMAP statement only if the value assigned to the 
  12655. name "Version" is less than 3. 
  12656.  
  12657. #if Version < 3
  12658. BITMAP 1 errbox.bmp
  12659. #endif
  12660.  
  12661. Related Topics 
  12662.  
  12663. Directives 
  12664. elif Directive 
  12665. else Directive 
  12666. endif Directive 
  12667. if Directive 
  12668. ifdef Directive 
  12669. ifndef Directive 
  12670.  
  12671.  
  12672. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - ifdef Directive ΓòÉΓòÉΓòÉ
  12673.  
  12674. Syntax: ifdef name 
  12675.  
  12676. Description 
  12677.  
  12678. The ifdef directive controls conditional compilation of the resource file by 
  12679. checking the specified name.  If the name has been defined by using a define 
  12680. directive or by using the -d command-line option of rc, ifdef directs the 
  12681. compiler to continue with the statement immediately after the ifdef directive. 
  12682. If the name has not been defined, ifdef directs the compiler to skip all 
  12683. statements up to the next endif directive. 
  12684.  
  12685. name 
  12686.      Specifies the name to be checked by the directive. 
  12687.  
  12688. Example 
  12689.  
  12690. This example compiles the BITMAP statement only if the name "Debug" is defined. 
  12691.  
  12692. #ifdef Debug
  12693. BITMAP 1 errbox.bmp
  12694. #endif
  12695.  
  12696. Related Topics 
  12697.  
  12698. Directives 
  12699. define Directive 
  12700. endif Directive 
  12701. if Directive 
  12702. ifndef Directive 
  12703. undef Directive 
  12704.  
  12705.  
  12706. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - ifndef Directive ΓòÉΓòÉΓòÉ
  12707.  
  12708. Syntax: ifndef name 
  12709.  
  12710. Description 
  12711.  
  12712. The ifndef directive controls conditional compilation of the resource file by 
  12713. checking the specified name.  If the name has not been defined or if its 
  12714. definition has been removed by using the undef directive, ifndef directs the 
  12715. compiler to continue processing statements up to the next endif, else, or elif 
  12716. directive and then skip to the statement after the endif directive.  If the 
  12717. name is defined, ifndef directs the compiler to skip to the next endif, else, 
  12718. or elif directive. 
  12719.  
  12720. name 
  12721.      Specifies the name to be checked by the directive. 
  12722.  
  12723. Example 
  12724.  
  12725. This example compiles the BITMAP statement only if the name "Optimize" is not 
  12726. defined. 
  12727.  
  12728. #ifndef Optimize
  12729. BITMAP 1 errbox.bmp
  12730. #endif
  12731.  
  12732. Related Topics 
  12733.  
  12734. Directives 
  12735. elif Directive 
  12736. else Directive 
  12737. endif Directive 
  12738. if Directive 
  12739. ifdef Directive 
  12740. undef Directive 
  12741.  
  12742.  
  12743. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - include Directive ΓòÉΓòÉΓòÉ
  12744.  
  12745. Syntax: 
  12746.  
  12747. include filename
  12748.  
  12749. Description 
  12750.  
  12751. The include directive causes RC to process the file specified in the filename 
  12752. field.  This file should be a header file that defines the constants used in 
  12753. the resource script file.  Only the define directives in the specified file are 
  12754. processed; all other statements are ignored. 
  12755.  
  12756. filename 
  12757.      Specifies the OS/2* name of the file to be included. This value must be an 
  12758.      ASCII string enclosed either in double quotation marks (if the file is in 
  12759.      the current directory) or in less-than and greater-than characters (<>) 
  12760.      (if the file is in the directory specified by the INCLUDE environment 
  12761.      variable). You must give a full path enclosed in double quotation marks if 
  12762.      the file is not in the current directory or in the directory specified by 
  12763.      the INCLUDE environment variable. 
  12764.  
  12765. Comments 
  12766.  
  12767. The filename field is handled as a C string.  Therefore, you must include two 
  12768. backslashes wherever one is required in the path.  (As an alternative, you can 
  12769. use a single forward slash (/) instead of two backslashes.) 
  12770.  
  12771. Example 
  12772.  
  12773. This example processes the header files OS2.H and HEADERS\MYDEFS.H\I while 
  12774. compiling the resource script file. 
  12775.  
  12776. #include <os2.h>
  12777. #include "headers\\\\mydefs.h"
  12778.  
  12779. Related Topics 
  12780.  
  12781. RCINCLUDE Statement 
  12782.  
  12783.  
  12784. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - LISTBOX Statement ΓòÉΓòÉΓòÉ
  12785.  
  12786. Syntax: 
  12787.  
  12788. LISTBOX id, x, y, width, height, style
  12789.  
  12790. Description 
  12791.  
  12792. The LISTBOX statement creates commonly used controls for a dialog box or 
  12793. window.  The control is a rectangle containing a list of user-selectable 
  12794. strings, such as filenames. 
  12795.  
  12796. The LISTBOX statement, which you can use only in a DIALOG or WINDOW statement, 
  12797. defines the identifier, dimensions, and attributes of a control window.  The 
  12798. predefined class for this control is WC_LISTBOX.  If you do not specify a 
  12799. style, the default style is WS_TABSTOP. 
  12800.  
  12801. id 
  12802.      Specifies the control identifier. This value must be an integer in the 
  12803.      range 0 through 65 535, or a simple expression that evaluates to a value 
  12804.      in that range. 
  12805.      Specifies the x-coordinate of the lower-left corner of the control. This 
  12806.      value must be an integer in the range 0 through 65 535 or an expression 
  12807.      consisting of integers and the addition (+) or subtraction (-) operator. 
  12808.      The coordinate is assumed to be in dialog units and is relative to the 
  12809.      origin of the dialog box, window, or control containing the specified 
  12810.      control. 
  12811.      Specifies the y-coordinate of the lower-left corner of the control. This 
  12812.      value must be an integer in the range 0 through 65 535 or an expression 
  12813.      consisting of integers and the addition (+) or subtraction (-) operator. 
  12814.      The coordinate is assumed to be in dialog units and is relative to the 
  12815.      origin of the dialog box, window, or control containing the specified 
  12816.      control. 
  12817. width 
  12818.      Specifies the width of the control. This value must be an integer in the 
  12819.      range 1 through 65 535 or an expression consisting of integers and the 
  12820.      addition (+) or subtraction (-) operator. The width is in n-character 
  12821.      units. 
  12822. height 
  12823.      Specifies the height of the control. This value must be an integer in the 
  12824.      range 1 through 65 535 or an expression consisting of integers and the 
  12825.      addition (+) or subtraction (-) operator. The height is in 1/8-character 
  12826.      units. 
  12827. style 
  12828.      Specifies the control styles. This value can be a combination of the 
  12829.      styles specified for WC_LISTBOX. You can use the bitwise OR (|) operator 
  12830.      to combine styles. 
  12831.  
  12832. Example 
  12833.  
  12834. This example creates a list-box control whose identifier is 101. 
  12835.  
  12836. LISTBOX 101, 10, 10, 100, 100
  12837.  
  12838. Related Topics 
  12839.  
  12840. CONTROL 
  12841. DIALOG Statement 
  12842. WINDOW Statement 
  12843.  
  12844.  
  12845. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - LTEXT Statement ΓòÉΓòÉΓòÉ
  12846.  
  12847. Syntax: 
  12848.  
  12849. LTEXT text, id, x, y, width, height , style
  12850.  
  12851. Description 
  12852.  
  12853. The LTEXT statement creates a left-aligned text control.  The control is a 
  12854. simple rectangle displaying the given text left-aligned in the rectangle.  The 
  12855. text is formatted before it is displayed.  Words that would extend past the end 
  12856. of a line are automatically wrapped to the beginning of the next line.  The 
  12857. LTEXT statement, which you can use only in a DIALOG or WINDOW statement, 
  12858. defines the text, identifier, dimensions, and attributes of the control.  The 
  12859. predefined class for this control is WC_STATIC.  If you do not specify a style, 
  12860. the default style is SS_TEXT, DT_LEFT, and WS_GROUP. 
  12861.  
  12862. text 
  12863.      Specifies text that is left-aligned in the rectangular area of the 
  12864.      control. This field must contain zero or more characters enclosed in 
  12865.      double quotation marks. Character values must be in the range 1 through 
  12866.      255. If a double quotation mark is required in the text, you must include 
  12867.      the double quotation mark twice. 
  12868. id 
  12869.      Specifies the control identifier. This value must be an integer in the 
  12870.      range 0 through 65 535, or a simple expression that evaluates to a value 
  12871.      in that range. 
  12872.      Specifies the x-coordinate of the lower-left corner of the control. This 
  12873.      value must be an integer in the range 0 through 65 535 or an expression 
  12874.      consisting of integers and the addition (+) or subtraction (-) operator. 
  12875.      The coordinate is assumed to be in dialog units and is relative to the 
  12876.      origin of the dialog box, window, or control containing the specified 
  12877.      control. 
  12878.      Specifies the y-coordinate of the lower-left corner of the control. This 
  12879.      value must be an integer in the range 0 through 65 535 or an expression 
  12880.      consisting of integers and the addition (+) or subtraction (-) operator. 
  12881.      The coordinate is assumed to be in dialog units and is relative to the 
  12882.      origin of the dialog box, window, or control containing the specified 
  12883.      control. 
  12884. width 
  12885.      Specifies the width of the control. This value must be an integer in the 
  12886.      range 1 through 65 535 or an expression consisting of integers and the 
  12887.      addition (+) or subtraction (-) operator. The width is in n-character 
  12888.      units. 
  12889. height 
  12890.      Specifies the height of the control. This value must be an integer in the 
  12891.      range 1 through 65 535 or an expression consisting of integers and the 
  12892.      addition (+) or subtraction (-) operator. The height is in 1/8-character 
  12893.      units. 
  12894. style 
  12895.      Specifies the control styles. This value can be a combination of the 
  12896.      styles specified for WC_STATIC. You can use the bitwise OR (|) operator to 
  12897.      combine styles. 
  12898.  
  12899. Example 
  12900.  
  12901. This example creates a left-aligned text control that is labeled "Filename." 
  12902.  
  12903. LTEXT "Filename", 101, 10, 10, 100, 100
  12904.  
  12905. Related Topics 
  12906.  
  12907. CTEXT 
  12908. CONTROL 
  12909. DIALOG Statement 
  12910. RTEXT Statement 
  12911. WINDOW Statement 
  12912.  
  12913.  
  12914. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - MENU Statement ΓòÉΓòÉΓòÉ
  12915.  
  12916. Syntax: 
  12917.  
  12918. MENU menu-id  load-option mem-option
  12919. BEGIN
  12920. menuitem-definition
  12921.     .
  12922.     .
  12923.     .
  12924. END
  12925.  
  12926. Description 
  12927.  
  12928. The MENU statement defines the contents of a menu resource.  A menu resource is 
  12929. a collection of information that defines the appearance and function of an 
  12930. application menu.  A menu is a special input tool that lets a user choose 
  12931. commands from a list of command names.  A menu resource can be loaded from the 
  12932. executable file when needed by using the WinLoadMenu function. 
  12933.  
  12934. You can provide any number of MENU statements in a resource script file, but 
  12935. each statement must specify a unique menu-id value.  You can provide any number 
  12936. of menuitem-definition statements in the menu. These define the submenus and 
  12937. menu items (commands) in the menu.  The order of the statements defines the 
  12938. order of the menu items. 
  12939.  
  12940. menu-id 
  12941.      Specifies the menu-resource identifier. This value must be an integer in 
  12942.      the range 0 through 65 535, or a simple expression that evaluates to a 
  12943.      value in that range. 
  12944. load-option 
  12945.      Specifies when the system loads the resource from the executable file into 
  12946.      memory. This value must be one of the following: 
  12947.  
  12948.    PRELOAD 
  12949.         System loads the resource when the application starts. 
  12950.    LOADONCALL 
  12951.         System loads the resource when the application calls the WinLoadMenu 
  12952.         function. This is the default option. 
  12953. mem-option 
  12954.      Specifies how the system manages the resource when it is in memory. This 
  12955.      value must be one or more of the following: 
  12956.  
  12957.    FIXED 
  12958.         System keeps the resource at a fixed memory location. 
  12959.    MOVEABLE 
  12960.         System moves the resource as necessary to compact memory. 
  12961.    DISCARDABLE 
  12962.         System discards the resource if it is no longer needed. The default 
  12963.      setting is MOVEABLE and DISCARDABLE. 
  12964. menuitem-definition 
  12965.      Specifies a PRESPARAMS, MENUITEM, or SUBMENU statement. You can use one or 
  12966.      more PRESPARAMS statements to control the appearance of a menu, such as 
  12967.      the font and the foreground and background colors. If used, PRESPARAMS 
  12968.      statements must be the first statements following the BEGIN keyword. For 
  12969.      details about the PRESPARAMS statement, see PRESPARAMS Statement. 
  12970.  
  12971.      MENUITEM and SUBMENU statements define the individual commands or submenus 
  12972.      in the given menu. For details about these statements, see MENUITEM 
  12973.      Statement and SUBMENU Statement. 
  12974.  
  12975. Example 
  12976.  
  12977. This example creates a menu resource whose menu identifier is 1. The menu 
  12978. contains a menu item named Alpha and a submenu named Beta. The submenu contains 
  12979. two menu items, Item 1 and Item 2. 
  12980.  
  12981. MENU 1
  12982. BEGIN
  12983.     MENUITEM "Alpha", 100
  12984.     SUBMENU "Beta", 101
  12985.     BEGIN
  12986.         MENUITEM "Item 1", 200
  12987.         MENUITEM "Item 2", 201, , MIA_CHECKED
  12988.     END
  12989. END
  12990.  
  12991. Related Topics 
  12992.  
  12993. MENUITEM Statement 
  12994. PRESPARAMS Statement 
  12995. SUBMENU Statement 
  12996.  
  12997.  
  12998. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - MENUITEM Statement ΓòÉΓòÉΓòÉ
  12999.  
  13000. Syntax: 
  13001.  
  13002. MENUITEM text, menu-id,  menu-style, menu-attribute
  13003.  
  13004. Description 
  13005.  
  13006. MENUITEM SEPARATOR 
  13007.  
  13008. The MENUITEM statement creates a menu item for a menu.  The statement, 
  13009. permitted only in a MENU or SUBMENU statement, defines the text, identifier, 
  13010. and attributes of a menu item.  The system displays the text when it displays 
  13011. the corresponding menu.  If the user chooses the menu item, the system 
  13012. generates a WM_COMMAND message that includes the specified menu-item identifier 
  13013. and sends it to the window owning the menu. 
  13014.  
  13015. You can provide any number of MENUITEM statements, but each must have a unique 
  13016. menu-id value. 
  13017.  
  13018. The alternative form of the MENUITEM statement, MENUITEM SEPARATOR, creates a 
  13019. menu separator.  A menu separator is a horizontal dividing bar between two menu 
  13020. items in a submenu.  The separator is not active - that is, the user cannot 
  13021. choose it, it has no text associated with it, and it has no identifier. 
  13022.  
  13023. text 
  13024.      Specifies the text of the menu item.  This field must contain zero or more 
  13025.      characters enclosed in double quotation marks.  Character values must be 
  13026.      in the range 1 through 255.  If a double quotation mark is required in the 
  13027.      string, you must include the double quotation mark twice.  The tilde 
  13028.      character ( ~ ) and the \t and \a character combinations have special 
  13029.      meanings in the string; for details, see the "Comments" section. 
  13030.  
  13031.      If the menu-style field is MIS_BITMAP, item-name must be a bit-map 
  13032.      identifier instead of a name.  The bit-map identifier must have been 
  13033.      previously defined using a BITMAP statement, must be preceded by the \b 
  13034.      character, and must be enclosed in double quotation marks. 
  13035. menu-id 
  13036.      Specifies the menu-item identifier.  This value must be an integer in the 
  13037.      range 0 through 65 535, or a simple expression that evaluates to a value 
  13038.      in that range.  Each identifier must be unique. 
  13039. menu-style 
  13040.      Specifies the menu-item style.  This value can be a combination of the 
  13041.      following: 
  13042.  
  13043.    MIS_BITMAP 
  13044.         Specifies that item-name is a bit map identifier. 
  13045.    MIS_BREAK 
  13046.         Specifies that the menu has multiple columns of items in one pull-down 
  13047.         menu or multiple lines of menus in the top-level menu. 
  13048.    MIS_BREAKSEPARATOR 
  13049.         Specifies that the menu has a vertical line between the columns in a 
  13050.         pull-down menu. 
  13051.    MIS_BUTTONSEPARATOR 
  13052.         Specifies that the user can activate the menu item only by using the 
  13053.         mouse.  The text is centered in the item, rather than left justified. 
  13054.         This option is used for the Help item on the right side of the menu 
  13055.         bar. 
  13056.    MIS_HELP 
  13057.         Specifies that the menu item generates a WM_HELP message. 
  13058.    MIS_OWNERDRAW 
  13059.         Specifies that the menu item is drawn by the owner window. 
  13060.    MIS_SEPARATOR 
  13061.         Specifies that the menu item is a menu separator.  Although the 
  13062.         item-name and menu-id fields are ignored, you must still give values if 
  13063.         you specify this style. 
  13064.    MIS_STATIC 
  13065.         Specifies that the user cannot choose the menu item. 
  13066.    MIS_SUBMENU 
  13067.         Specifies that the MENUITEM statement is to be treated as a SUBMENU 
  13068.         statement.  When you specify this option, you must follow the MENUITEM 
  13069.         statement with a BEGIN and END clause, as in a SUBMENU statement.  You 
  13070.         may include a PRESPARAMS statement immediately after the BEGIN keyword. 
  13071.    MIS_SYSCOMMAND 
  13072.         Specifies that the menu item generates a WM_SYSCOMMAND message. 
  13073.    MIS_TEXT 
  13074.         Specifies that item-name is a character string.  This is the default 
  13075.         option. 
  13076. menu-attribute 
  13077.      Specifies the menu-item attributes. This value can be a combination of the 
  13078.      following: 
  13079.  
  13080.    MIA_CHECKED 
  13081.         Places a check mark next to the menu-item name. 
  13082.    MIA_DISABLED 
  13083.         Disables the menu item, preventing the system from generating a message 
  13084.         when the user chooses the command. 
  13085.    MIA_FRAMED 
  13086.         Places a frame (heavy border) around the menu item. 
  13087.    MIA_HILITED 
  13088.         Places a highlight on the menu-item name when it is displayed, by 
  13089.         inverting the name and background. 
  13090.    MIA_NODISMISS 
  13091.         Causes a submenu or menu item to remain displayed after the user 
  13092.         chooses an item. 
  13093.  
  13094. Comments 
  13095.  
  13096. You can use the \t or \a character combination in any item name. The \t 
  13097. character inserts a tab when the name is displayed and is typically used to 
  13098. separate the menu-item name from the name of an accelerator key.  The \a 
  13099. character aligns to the right all text that follows it.  These characters are 
  13100. intended to be used for menu items in submenus only.  The width of the 
  13101. displayed submenu is always adjusted so that there is at least one space (and 
  13102. usually more) between any pieces of text separated by a \t or a \a.  (When 
  13103. compiling the menu resource, the compiler stores the \t and \a characters as 
  13104. control characters.  For example, the \t is stored as 0x09.) 
  13105.  
  13106. A tilde ( ~ ) character in the item name indicates that the following character 
  13107. is used as a mnemonic character for the item. When the menu is displayed, the 
  13108. tilde is not shown, but the mnemonic character is underlined.  The user can 
  13109. choose the menu item by pressing the key corresponding to the underlined 
  13110. mnemonic character. 
  13111.  
  13112. Example 
  13113.  
  13114. This example creates a menu item named Alpha. The item identifier is 101. 
  13115.  
  13116. MENUITEM "Alpha", 101
  13117.  
  13118. This example creates a menu item named Beta. The item identifier is 102. The 
  13119. menu item has a text style and a checked attribute. 
  13120.  
  13121. MENUITEM "Beta", 102, MIS_TEXT, MIA_CHECKED
  13122.  
  13123. This example creates a menu separator between menu items named Gamma and Delta. 
  13124.  
  13125. MENUITEM "Gamma", 103
  13126. MENUITEM SEPARATOR
  13127. MENUITEM "Delta", 104
  13128.  
  13129. This example creates a menu item that has a bit map instead of a name. The 
  13130. bit-map identifier, 1, is first defined using a BITMAP statement. The 
  13131. identifier for the menu item is 301.  Note that a sign must be placed in front 
  13132. of the bit map identifier in the MENUITEM statement. 
  13133.  
  13134. BITMAP 1 mybitmap.bmp
  13135.  
  13136. MENUITEM "#1", 301, MIS_BITMAP
  13137.  
  13138. Related Topics 
  13139.  
  13140. BITMAP 
  13141. PRESPARAMS Statement 
  13142. SUBMENU Statement 
  13143.  
  13144.  
  13145. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - MESSAGETABLE Statement ΓòÉΓòÉΓòÉ
  13146.  
  13147. Syntax: 
  13148.  
  13149. MESSAGETABLE  load-option   mem-option
  13150. BEGIN
  13151. string-id string-definition
  13152.     .
  13153.     .
  13154.     .
  13155. END
  13156.  
  13157. Description 
  13158.  
  13159. The MESSAGETABLE statement creates one or more string resources for an 
  13160. application.  A string resource is a null-terminated character string that has 
  13161. a unique string identifier.  A string resource can be loaded from the 
  13162. executable file when needed by using the DosGetResource or DosGetResource2 
  13163. function with the RT_MESSAGE resource type. 
  13164.  
  13165. You can provide any number of MESSAGETABLE statements in a resource script 
  13166. file. The compiler treats all the strings from the various MESSAGETABLE 
  13167. statements as if they belonged to a single statement. This means that no two 
  13168. strings in a resource script file can have the same string identifier. 
  13169.  
  13170. Although the MESSAGETABLE and STRINGTABLE statements are nearly identical, most 
  13171. applications use the STRINGTABLE statement instead of the MESSAGETABLE 
  13172. statement to create string resources. 
  13173.  
  13174. load-option 
  13175.      Specifies when the system loads the resource from the executable file into 
  13176.      memory. This value must be one of the following: 
  13177.  
  13178.    PRELOAD 
  13179.         System loads the resource when the application starts. 
  13180.    LOADONCALL 
  13181.         System loads the resource when the application calls the DosGetResource 
  13182.         or DosGetResource2 function. This is the default option. 
  13183. mem-option 
  13184.      Specifies how the system manages the resource when it is in memory. This 
  13185.      value must be one or more of the following: 
  13186.  
  13187.    FIXED 
  13188.         System keeps the resource at a fixed memory location. 
  13189.    MOVEABLE 
  13190.         System moves the resource as necessary to compact memory. 
  13191.    DISCARDABLE 
  13192.         System discards the resource if it is no longer needed. The default 
  13193.      setting is MOVEABLE and DISCARDABLE. 
  13194. string-id 
  13195.      Specifies the character-string identifier. This value must be an integer 
  13196.      in the range 0 through 65 535, or a simple expression that evaluates to a 
  13197.      value in that range. The value can be specified in decimal or hexadecimal 
  13198.      notation. Each string identifier in a resource script file must be unique. 
  13199. string-definition 
  13200.      Specifies a character string. This field must contain zero or more 
  13201.      characters enclosed in double quotation marks. Character values must be in 
  13202.      the range 1 through 255. If a double quotation mark is required in the 
  13203.      string, you must provide the double quotation mark twice. 
  13204.  
  13205. Comments 
  13206.  
  13207. You can continue a string on multiple lines by terminating the line with a 
  13208. backslash (\) or by terminating the line with a double quotation mark (") and 
  13209. then starting the next line with a double quotation mark. 
  13210.  
  13211. Example 
  13212.  
  13213. This example creates two string resources whose string identifiers are 1 and 2. 
  13214.  
  13215. MESSAGETABLE
  13216. BEGIN
  13217.     1 "Filename not found"
  13218.     2 "Cannot open file for reading"
  13219. END
  13220.  
  13221. Related Topics 
  13222.  
  13223. STRINGTABLE Statement 
  13224.  
  13225.  
  13226. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - MLE Statement ΓòÉΓòÉΓòÉ
  13227.  
  13228. Syntax: 
  13229.  
  13230. MLE text, id, x, y, width, height , style
  13231.  
  13232. Description 
  13233.  
  13234. The MLE statement creates a multiple-line entry-field control.  The control is 
  13235. a rectangle in which the user can type and edit multiple lines of text.  The 
  13236. control displays a pointer when the user selects it.  The user can then use the 
  13237. keyboard to enter text or edit the existing text.  Editing keys include the 
  13238. BACKSPACE and DELETE keys. By using the mouse or the DIRECTION keys, the user 
  13239. can select the character or characters to delete or select the place to insert 
  13240. new characters.  The MLE statement, which you can use only in a DIALOG or 
  13241. WINDOW statement, defines the text, identifier, dimensions, and attributes of a 
  13242. control window.  The predefined class for this control is WC_MLE.  If you do 
  13243. not specify a style, the default style is MLS_BORDER, WS_GROUP, and WS_TABSTOP. 
  13244.  
  13245. text 
  13246.      Specifies text that is displayed in the rectangular area of the control. 
  13247.      If the MLS_READONLY style is not specified, the user can edit the text. 
  13248.      This field must contain zero or more characters enclosed in double 
  13249.      quotation marks. Character values must be in the range 1 through 255. If a 
  13250.      double quotation mark is required in the text, you must include the double 
  13251.      quotation mark twice. 
  13252. id 
  13253.      Specifies the control identifier. This value must be an integer in the 
  13254.      range 0 through 65 535, or a simple expression that evaluates to a value 
  13255.      in that range. 
  13256.      Specifies the x-coordinate of the lower-left corner of the control. This 
  13257.      value must be an integer in the range 0 through 65 535 or an expression 
  13258.      consisting of integers and the addition (+) or subtraction (-) operator. 
  13259.      The coordinate is assumed to be in dialog units and is relative to the 
  13260.      origin of the dialog box, window, or control containing the specified 
  13261.      control. 
  13262.      Specifies the y-coordinate of the lower-left corner of the control. This 
  13263.      value must be an integer in the range 0 through 65 535 or an expression 
  13264.      consisting of integers and the addition (+) or subtraction (-) operator. 
  13265.      The coordinate is assumed to be in dialog units and is relative to the 
  13266.      origin of the dialog box, window, or control containing the specified 
  13267.      control. 
  13268. width 
  13269.      Specifies the width of the control. This value must be an integer in the 
  13270.      range 1 through 65 535 or an expression consisting of integers and the 
  13271.      addition (+) or subtraction (-) operator. The width is in n-character 
  13272.      units. 
  13273. height 
  13274.      Specifies the height of the control. This value must be an integer in the 
  13275.      range 1 through 65 535 or an expression consisting of integers and the 
  13276.      addition (+) or subtraction (-) operator. The height is in 1/8-character 
  13277.      units. 
  13278. style 
  13279.      Specifies the control styles. This value can be a combination of the 
  13280.      styles specified for WC_MLE. You can use the bitwise OR (|) operator to 
  13281.      combine styles. 
  13282.  
  13283. Example 
  13284.  
  13285. This example creates a multiple-line entry-field control that is not labeled. 
  13286.  
  13287. MLE "", 101, 10, 10, 50, 100
  13288.  
  13289. Related Topics 
  13290.  
  13291. CONTROL 
  13292. DIALOG Statement 
  13293. ENTRYFIELD Statement 
  13294. WINDOW Statement 
  13295.  
  13296.  
  13297. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - NOTEBOOK Statement ΓòÉΓòÉΓòÉ
  13298.  
  13299. Syntax: 
  13300.  
  13301. NOTEBOOK   id, x, y, width, height, style
  13302.  
  13303. Description 
  13304.  
  13305. The NOTEBOOK statement creates a notebook control within the dialog window. 
  13306. This control is used to organize information on individual pages so that it can 
  13307. be located and displayed easily. The NOTEBOOK statement defines the identifier, 
  13308. position, dimensions, and attributes of a notebook control.  The predefined 
  13309. class for this control is WC_NOTEBOOK.  If you do not specify a style, the 
  13310. default style is WS_TABSTOP and WS_VISIBLE. 
  13311.  
  13312. id        Specifies the control identifier.  The value is any integer 0 through 
  13313.           65535, or a simple expression that evaluates to a value in that 
  13314.           range. 
  13315.  
  13316. x         Specifies the x-coordinate of the lower-left corner of the control. 
  13317.           The value is any integer 0 through 65535 or an expression consisting 
  13318.           of integers and the addition [+] or subtraction [-] operator.  The 
  13319.           coordinate is assumed to be in dialog units and is relative to the 
  13320.           origin of the dialog window. 
  13321.  
  13322. y          Specifies the y-coordinate of the lower-left corner of the control. 
  13323.           The value is any integer 0 through 65535 or an expression consisting 
  13324.           of integers and the addition [+] or subtraction [-] operator.  The 
  13325.           coordinate is assumed to be in dialog units and is relative to the 
  13326.           origin of the dialog window. 
  13327.  
  13328. width     Specifies the width of the control.  The value is any integer 0 
  13329.           through 65535 or an expression consisting of integers and the 
  13330.           addition [+] or subtraction [-] operator. The width is in n-character 
  13331.           units. 
  13332.  
  13333. height    Specifies the height of the control.  The value is any integer 0 
  13334.           through 65535 or an expression consisting of integers and the 
  13335.           addition [+] or subtraction [-] operator. The height is in 
  13336.           1/8-character units. 
  13337.  
  13338. style     Specifies the control styles.  This value can be a combination of the 
  13339.           styles specified for WC_NOTEBOOK.  You can use the bitwise OR [ | ] 
  13340.           operator to combine styles. 
  13341.  
  13342. Comments 
  13343.  
  13344. The NOTEBOOK statement is used only in a DIALOG or WINDOW statement. 
  13345.  
  13346. Example 
  13347.  
  13348. This example creates a notebook control at position (20, 20) within the dialog 
  13349. window.  The notebook has a width of 200 character units and a height of 32 
  13350. character units.  Its resource ID is 201. The tabs style BKS_ROUNDEDTABS 
  13351. specification overrides the notebook default style of square tabs. The default 
  13352. styles WS_TABSTOP and WS_GROUP are both in effect, though only the latter is 
  13353. specified. 
  13354.  
  13355. #define    IDC_NOTEBOOK     201
  13356. #define    IDD_NOTEBOOKDLG  503
  13357. DIALOG "Notebook", IDD_NOTEBOOKDLG, 11, 11, 420, 420, FS_NOBYTEALIGN |
  13358.         WS_VISIBLE, FCF_SYSMENU | FCF_TITLEBAR
  13359.   BEGIN
  13360.     NOTEBOOK   IDC_NOTEBOOK, 20, 20, 200, 400, BKS_ROUNDEDTABS | WS_GROUP
  13361.   END
  13362.  
  13363. Related Topics 
  13364.  
  13365. CONTROL Statement 
  13366. DIALOG Statement 
  13367. WINDOW Statement 
  13368.  
  13369.  
  13370. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - POINTER Statement ΓòÉΓòÉΓòÉ
  13371.  
  13372. Syntax: 
  13373.  
  13374. POINTER pointer-id  load-option   mem-option  filename
  13375.  
  13376. Description 
  13377.  
  13378. The POINTER statement defines a pointer resource for an application. A pointer 
  13379. resource, typically created by using the OS/2* Icon Editor, is a bit map 
  13380. defining the shape of the mouse pointer on the screen. The POINTER statement 
  13381. copies the pointer resource from the file specified in the filename field and 
  13382. adds it to the application's other resources.  A pointer resource can be loaded 
  13383. from the executable file when needed by using the WinLoadPointer function. 
  13384.  
  13385. You can provide any number of POINTER statements in a resource script file, but 
  13386. each statement must specify a unique pointer-id value. 
  13387.  
  13388. pointer-id 
  13389.      Specifies the pointer-resource identifier. This value must be an integer 
  13390.      in the range 0 through 65 535, or a simple expression that evaluates to a 
  13391.      value in that range. 
  13392. load-option 
  13393.      Specifies when the system loads the resource from the executable file into 
  13394.      memory. This value must be one of the following: 
  13395.  
  13396.    PRELOAD 
  13397.         System loads the resource when the application starts. 
  13398.    LOADONCALL 
  13399.         System loads the resource when the application calls the WinLoadPointer 
  13400.         function. This is the default option. 
  13401. mem-option 
  13402.      Specifies how the system manages the resource when it is in memory. This 
  13403.      value must be one or more of the following: 
  13404.  
  13405.    FIXED 
  13406.         System keeps the resource at a fixed memory location. 
  13407.    MOVEABLE 
  13408.         System moves the resource as necessary to compact memory. 
  13409.    DISCARDABLE 
  13410.         System discards the resource if it is no longer needed. The default 
  13411.      setting is MOVEABLE and DISCARDABLE. 
  13412. filename 
  13413.      Specifies the name of the file containing the pointer resource. If the 
  13414.      file is not in the current directory, filename must be preceded by a full 
  13415.      path. 
  13416.  
  13417. Example 
  13418.  
  13419. This example defines a pointer whose pointer identifier is 10.  The pointer 
  13420. resource is copied from the file custom.cur. 
  13421.  
  13422. POINTER 10 custom.cur
  13423.  
  13424. Related Topics 
  13425.  
  13426. See "WinLoadPointer" in the Presentation Manager Reference. 
  13427.  
  13428.  
  13429. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - PRESPARAMS Statement ΓòÉΓòÉΓòÉ
  13430.  
  13431. Syntax: 
  13432.  
  13433. PRESPARAMS presparam, value, presparam, value, ...
  13434.  
  13435. Description 
  13436.  
  13437. The PRESPARAMS statement defines presentation fields that customize a dialog 
  13438. box, menu, window, or control.  PRESPARAMS data is a series of types and 
  13439. values.  The window procedure of the dialog box, menu, window or control 
  13440. receives and processes this data when the item is created.  The data for custom 
  13441. controls can be in any format. 
  13442.  
  13443. presparam 
  13444.      Specifies a presentation-field type. 
  13445. value 
  13446.      Specifies the presentation-field value. 
  13447.  
  13448. Comments 
  13449.  
  13450. PRESPARAMS is often used to supply data to control the appearance of the 
  13451. customized window when it is first created.  For example, the PRESPARAMS 
  13452. statement may specify the colors to be used in the window. 
  13453.  
  13454. Example 
  13455.  
  13456. This example creates a menu resource with a menu identifier of 1. The 
  13457. PRESPARAMS statement specifies that the following three menu items be displayed 
  13458. in the 12-point Helvetica font. 
  13459.  
  13460. MENU 1
  13461. BEGIN
  13462.     PRESPARAMS PP_FONTNAMESIZE, "12.Helv"
  13463.     MENUITEM "New", 100
  13464.     MENUITEM "Open", 101
  13465.     MENUITEM "Save", 102
  13466. END
  13467.  
  13468. Related Topics 
  13469.  
  13470. CONTROL 
  13471. CTLDATA 
  13472. DIALOG Statement 
  13473. FRAME Statement 
  13474. MENU Statement 
  13475. MENUITEM Statement 
  13476. SUBMENU Statement 
  13477. WINDOW Statement 
  13478.  
  13479.  
  13480. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - PUSHBUTTON Statement ΓòÉΓòÉΓòÉ
  13481.  
  13482. Syntax: 
  13483.  
  13484. PUSHBUTTON text, id, x, y, width, height , style
  13485.  
  13486. Description 
  13487.  
  13488. The PUSHBUTTON statement creates a pushbutton control.  The control is a 
  13489. round-cornered rectangle containing the given text.  The control sends a 
  13490. message to its parent whenever the user chooses the control. The PUSHBUTTON 
  13491. statement, which you can use only in a DIALOG or WINDOW statement, defines the 
  13492. text, identifier, dimensions, and attributes of a control window.  The 
  13493. predefined class for this control is WC_BUTTON. If you do not specify a style, 
  13494. the default style is BS_PUSHBUTTON and WS_TABSTOP. 
  13495.  
  13496. text 
  13497.      Specifies text that is centered in the rectangular area of the control. 
  13498.      This field must contain zero or more characters enclosed in double 
  13499.      quotation marks. Character values must be in the range 1 through 255. If a 
  13500.      double quotation mark is required in the text, you must include the double 
  13501.      quotation mark twice. A tilde ( ~ ) character in the text indicates that 
  13502.      the following character is used as a mnemonic character for the control. 
  13503.      When the control is displayed, the tilde is not shown, but the mnemonic 
  13504.      character is underlined. The user can choose the control by pressing the 
  13505.      key corresponding to the underlined mnemonic character. 
  13506. id 
  13507.      Specifies the control identifier. This value must be an integer in the 
  13508.      range 0 through 65 535, or a simple expression that evaluates to a value 
  13509.      in that range. 
  13510.      Specifies the x-coordinate of the lower-left corner of the control. This 
  13511.      value must be an integer in the range 0 through 65 535 or an expression 
  13512.      consisting of integers and the addition (+) or subtraction (-) operator. 
  13513.      The coordinate is assumed to be in dialog units and is relative to the 
  13514.      origin of the dialog box, window, or control containing the specified 
  13515.      control. 
  13516.      Specifies the y-coordinate of the lower-left corner of the control. This 
  13517.      value must be an integer in the range 0 through 65 535 or an expression 
  13518.      consisting of integers and the addition (+) or subtraction (-) operator. 
  13519.      The coordinate is assumed to be in dialog units and is relative to the 
  13520.      origin of the dialog box, window, or control containing the specified 
  13521.      control. 
  13522. width 
  13523.      Specifies the width of the control. This value must be an integer in the 
  13524.      range 1 through 65 535 or an expression consisting of integers and the 
  13525.      addition (+) or subtraction (-) operator. The width is in n-character 
  13526.      units. 
  13527. height 
  13528.      Specifies the height of the control. This value must be an integer in the 
  13529.      range 1 through 65 535 or an expression consisting of integers and the 
  13530.      addition (+) or subtraction (-) operator. The height is in 1/8-character 
  13531.      units. 
  13532. style 
  13533.      Specifies the control styles. This value can be a combination of the 
  13534.      styles specified for WC_BUTTON. You can use the bitwise OR (|) operator to 
  13535.      combine styles. 
  13536.  
  13537. Example 
  13538.  
  13539. This example creates a pushbutton control that is labeled "OK." 
  13540.  
  13541. PUSHBUTTON "OK", 101, 10, 10, 100, 100
  13542.  
  13543. Related Topics 
  13544.  
  13545. AUTOCHECKBOX 
  13546. AUTORADIOBUTTON 
  13547. CHECKBOX 
  13548. CONTROL 
  13549. DEFPUSHBUTTON Statement 
  13550. DIALOG Statement 
  13551. GROUPBOX Statement 
  13552. RADIOBUTTON Statement 
  13553. WINDOW Statement 
  13554.  
  13555.  
  13556. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - RADIOBUTTON Statement ΓòÉΓòÉΓòÉ
  13557.  
  13558. Syntax: 
  13559.  
  13560. RADIOBUTTON text, id, x, y, width, height, style
  13561.  
  13562. Description 
  13563.  
  13564. The RADIOBUTTON statement creates a radio-button control.  The control is a 
  13565. small circle that has the given text displayed to its right.  The control 
  13566. highlights the circle and sends a message to its parent window when the user 
  13567. selects the button.  The control removes the highlight and sends a message when 
  13568. the button is next selected.  The RADIOBUTTON statement, which you can use only 
  13569. in a DIALOG or WINDOW statement, defines the text, identifier, dimensions, and 
  13570. attributes of a control window.  The predefined class for this control is 
  13571. WC_BUTTON.  If you do not specify a style, the default style is BS_RADIOBUTTON. 
  13572.  
  13573. text 
  13574.      Specifies text that is displayed to the right of the control. This field 
  13575.      must contain zero or more characters enclosed in double quotation marks. 
  13576.      Character values must be in the range 1 through 255. If a double quotation 
  13577.      mark is required in the text, you must include the double quotation mark 
  13578.      twice. A tilde ( ~ ) character in the text indicates that the following 
  13579.      character is used as a mnemonic character for the control. When the 
  13580.      control is displayed, the tilde is not shown, but the mnemonic character 
  13581.      is underlined. The user can choose the control by pressing the key 
  13582.      corresponding to the underlined mnemonic character. 
  13583. id 
  13584.      Specifies the control identifier. This value must be an integer in the 
  13585.      range 0 through 65 535, or a simple expression that evaluates to a value 
  13586.      in that range. 
  13587.      Specifies the x-coordinate of the lower-left corner of the control. This 
  13588.      value must be an integer in the range 0 through 65 535 or an expression 
  13589.      consisting of integers and the addition (+) or subtraction (-) operator. 
  13590.      The coordinate is assumed to be in dialog units and is relative to the 
  13591.      origin of the dialog box, window, or control containing the specified 
  13592.      control. 
  13593.      Specifies the y-coordinate of the lower-left corner of the control. This 
  13594.      value must be an integer in the range 0 through 65 535 or an expression 
  13595.      consisting of integers and the addition (+) or subtraction (-) operator. 
  13596.      The coordinate is assumed to be in dialog units and is relative to the 
  13597.      origin of the dialog box, window, or control containing the specified 
  13598.      control. 
  13599. width 
  13600.      Specifies the width of the control.  This value must be an integer in the 
  13601.      range 1 through 65 535 or an expression consisting of integers and the 
  13602.      addition (+) or subtraction (-) operator.  The width is in n-character 
  13603.      units. 
  13604. height 
  13605.      Specifies the height of the control. This value must be an integer in the 
  13606.      range 1 through 65 535 or an expression consisting of integers and the 
  13607.      addition (+) or subtraction (-) operator. The height is in 1/8-character 
  13608.      units. 
  13609. style 
  13610.      Specifies the control styles. This value can be a combination of the 
  13611.      styles specified for WC_BUTTON. You can use the bitwise OR (|) operator to 
  13612.      combine styles. 
  13613.  
  13614. Example 
  13615.  
  13616. This example creates a radio-button control that is labeled "Italic." 
  13617.  
  13618. RADIOBUTTON "Italic", 101, 10, 10, 24, 50
  13619.  
  13620. Related Topics 
  13621.  
  13622. AUTOCHECKBOX 
  13623. AUTORADIOBUTTON 
  13624. CHECKBOX 
  13625. CONTROL 
  13626. DEFPUSHBUTTON Statement 
  13627. DIALOG Statement 
  13628. GROUPBOX Statement 
  13629. PUSHBUTTON Statement 
  13630. WINDOW Statement 
  13631.  
  13632.  
  13633. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - RCDATA Statement ΓòÉΓòÉΓòÉ
  13634.  
  13635. Syntax: 
  13636.  
  13637. RCDATA resource-id
  13638. BEGIN
  13639. data-definition  , data-definition   ...
  13640.     .
  13641.     .
  13642.     .
  13643. END
  13644.  
  13645. Description 
  13646.  
  13647. The RCDATA statement defines a custom-data resource for an application.  The 
  13648. custom data can be in whatever format the application requires.  You can 
  13649. provide any number of RCDATA statements in a resource script file, but each 
  13650. statement must specify a unique resource-id value.  A custom-data resource can 
  13651. be loaded from the executable file when needed by using the DosGetResource or 
  13652. DosGetResource2 functions with the RT_RCDATA resource type. 
  13653.  
  13654. resource-id 
  13655.      Specifies the custom-data identifier. This value must be an integer in the 
  13656.      range 0 through 65 535, or a simple expression that evaluates to a value 
  13657.      in that range. 
  13658. data-definition 
  13659.      Specifies the custom data. The data may be simple expressions or strings. 
  13660.  
  13661. Example 
  13662.  
  13663. This example defines custom data that has a resource identifier of 5. 
  13664.  
  13665. RCDATA 5
  13666. BEGIN
  13667.     "E. A. Poe", 1849, -32, 3L, 0x8000000l, 3+4+5
  13668. END
  13669.  
  13670. Related Topics 
  13671.  
  13672. See "DosGetResource" in the Control Program Reference. 
  13673.  
  13674.  
  13675. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - RCINCLUDE Statement ΓòÉΓòÉΓòÉ
  13676.  
  13677. Syntax: 
  13678.  
  13679. RCINCLUDE filename
  13680.  
  13681. Description 
  13682.  
  13683. The RCINCLUDE statement causes RC to process the resource script file specified 
  13684. in the filename field along with the current resource script file.  The 
  13685. contents of both files are compiled by RC and the results are placed in one 
  13686. binary resource file and/or executable file. 
  13687.  
  13688. filename 
  13689.      Specifies the name of the resource script file to be included. If the file 
  13690.      is not in the current directory, filename must be preceded by a full path. 
  13691.  
  13692. Comments 
  13693.  
  13694. RCINCLUDE statements are processed before any other processing is done, 
  13695. including preprocessing by RCPP.EXE, which removes comments, replaces values in 
  13696. the define directives, and so on. 
  13697.  
  13698. When specifying a high performance file system (HPFS) file name on an RCINCLUDE 
  13699. statement, enclose the path and file name in double quotes; for example: 
  13700.  
  13701.    RCINCLUDE "d:\project\long dialog.dlg"
  13702.  
  13703. Double quotes enables the Resource Compiler to recognize a name containing 
  13704. embedded blank characters. 
  13705.  
  13706. Example 
  13707.  
  13708. This example includes the file DIALOGS.RC as part of the current resource 
  13709. script file. 
  13710.  
  13711. RCINCLUDE dialogs.rc
  13712.  
  13713. Related Topics 
  13714.  
  13715. include Directive 
  13716.  
  13717.  
  13718. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - RESOURCE Statement ΓòÉΓòÉΓòÉ
  13719.  
  13720. Syntax: 
  13721.  
  13722. RESOURCE type-id resource-id  load-option   mem-option  filename
  13723.  
  13724. Description 
  13725.  
  13726. The RESOURCE statement defines a custom resource for an application. A custom 
  13727. resource can be any data in any format.  The RESOURCE statement copies the 
  13728. custom resource from the specified file and adds it to the application's other 
  13729. resources.  A custom resource can be loaded from the executable file when 
  13730. needed by using the DosGetResource or DosGetResource2 function and specifying 
  13731. the resource's type and resource identifier. 
  13732.  
  13733. You can provide any number of RESOURCE statements in a resource script file, 
  13734. but each statement must specify a unique combination of type-id and resource-id 
  13735. values.  That is, RESOURCE statements having the same type-id value are 
  13736. permitted as long as the resource-id value for each is unique. 
  13737.  
  13738. type-id 
  13739.      Specifies the custom-resource type. This value must be an integer in the 
  13740.      range 256 through 65 535, or a simple expression that evaluates to a value 
  13741.      in that range. (Values 0 through 255 are reserved.) 
  13742. resource-id 
  13743.      Specifies the custom-resource identifier. This value must be an integer in 
  13744.      the range 0 through 65 535, or a simple expression that evaluates to a 
  13745.      value in that range. 
  13746. load-option 
  13747.      Specifies when the system loads the resource from the executable file into 
  13748.      memory. This value must be one of the following: 
  13749.  
  13750.    PRELOAD 
  13751.         System loads the resource when the application starts. 
  13752.    LOADONCALL 
  13753.         System loads the resource when the application calls the DosGetResource 
  13754.         or DosGetResource2 function. This is the default option. 
  13755. mem-option 
  13756.      Specifies how the system manages the resource when it is in memory. This 
  13757.      value must be one or more of the following: 
  13758.  
  13759.    FIXED 
  13760.         System keeps the resource at a fixed memory location. 
  13761.    MOVEABLE 
  13762.         System moves the resource as necessary to compact memory. 
  13763.    DISCARDABLE 
  13764.         System discards the resource if it is no longer needed. The default 
  13765.      setting is MOVEABLE and DISCARDABLE. 
  13766. filename 
  13767.      Specifies the name of the file containing the custom resource. If the file 
  13768.      is not in the current directory, filename must be preceded by a full path. 
  13769.  
  13770. Example 
  13771.  
  13772. This example defines a custom resource whose type identifier is 300 and whose 
  13773. resource identifier is 14.  The custom resource is copied from the file 
  13774. CUSTOM.RES. 
  13775.  
  13776. RESOURCE 300 14 custom.res
  13777.  
  13778. Related Topics 
  13779.  
  13780. See "DosGetResource" in the Control Program Reference. 
  13781.  
  13782.  
  13783. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - RTEXT Statement ΓòÉΓòÉΓòÉ
  13784.  
  13785. Syntax: 
  13786.  
  13787. RTEXT text, id, x, y, width, height , style
  13788.  
  13789. Description 
  13790.  
  13791. The RTEXT statement creates a right-aligned text control.  The control is a 
  13792. simple rectangle displaying the given text right-aligned in the rectangle.  The 
  13793. text is formatted before it is displayed.  Words that would extend past the end 
  13794. of a line are automatically wrapped to the beginning of the next line.  The 
  13795. RTEXT statement, which you can use only in a DIALOG or WINDOW statement, 
  13796. defines the text, identifier, dimensions, and attributes of the control.  The 
  13797. predefined class for the control is WC_STATIC.  If you do not specify a style, 
  13798. the default style is SS_TEXT, DT_RIGHT, and WS_GROUP. 
  13799.  
  13800. text 
  13801.      Specifies text that is right-aligned in the rectangular area of the 
  13802.      control. This field must contain zero or more characters enclosed in 
  13803.      double quotation marks. Character values must be in the range 1 through 
  13804.      255. If a double quotation mark is required in the text, you must include 
  13805.      the double quotation mark twice. 
  13806. id 
  13807.      Specifies the control identifier. This value must be an integer in the 
  13808.      range 0 through 65 535, or a simple expression that evaluates to a value 
  13809.      in that range. 
  13810.      Specifies the x-coordinate of the lower-left corner of the control. This 
  13811.      value must be an integer in the range 0 through 65 535 or an expression 
  13812.      consisting of integers and the addition (+) or subtraction (-) operator. 
  13813.      The coordinate is assumed to be in dialog units and is relative to the 
  13814.      origin of the dialog box, window, or control containing the specified 
  13815.      control. 
  13816.      Specifies the y-coordinate of the lower-left corner of the control. This 
  13817.      value must be an integer in the range 0 through 65 535 or an expression 
  13818.      consisting of integers and the addition (+) or subtraction (-) operator. 
  13819.      The coordinate is assumed to be in dialog units and is relative to the 
  13820.      origin of the dialog box, window, or control containing the specified 
  13821.      control. 
  13822. width 
  13823.      Specifies the width of the control.  This value must be an integer in the 
  13824.      range 1 through 65 535 or an expression consisting of integers and the 
  13825.      addition (+) or subtraction (-) operator.  The width is in n-character 
  13826.      units. 
  13827. height 
  13828.      Specifies the height of the control. This value must be an integer in the 
  13829.      range 1 through 65 535 or an expression consisting of integers and the 
  13830.      addition (+) or subtraction (-) operator. The height is in 1/8-character 
  13831.      units. 
  13832. style 
  13833.      Specifies the control styles.  This value can be a combination of the 
  13834.      styles specified for WC_STATIC. You can use the bitwise OR (|) operator to 
  13835.      combine styles. 
  13836.  
  13837. Example 
  13838.  
  13839. This example creates a right-aligned text control that is labeled "Filename." 
  13840.  
  13841. RTEXT "Filename", 101, 10, 10, 100, 100
  13842.  
  13843. Related Topics 
  13844.  
  13845. CTEXT 
  13846. CONTROL 
  13847. DIALOG Statement 
  13848. LTEXT Statement 
  13849. WINDOW Statement 
  13850.  
  13851.  
  13852. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - SLIDER Statement ΓòÉΓòÉΓòÉ
  13853.  
  13854. Syntax: 
  13855.  
  13856. SLIDER   id, x, y, width, height, style
  13857.  
  13858. Description 
  13859.  
  13860. The SLIDER statement creates a slider control within the dialog window.  This 
  13861. control lets the user set, display, or modify a value by moving a slider arm 
  13862. along a slider shaft.  The SLIDER statement defines the identifier, position, 
  13863. dimensions, and attributes of a slider control.  The predefined class for this 
  13864. control is WC_SLIDER.  If you do not specify a style, the default style is 
  13865. WS_TABSTOP and WS_VISIBLE. 
  13866.  
  13867. id        Specifies the control identifier.  The value is any integer 0 through 
  13868.           65535, or a simple expression that evaluates to a value in that 
  13869.           range. 
  13870.  
  13871. x         Specifies the x-coordinate of the lower-left corner of the control. 
  13872.           The value is any integer 0 through 65535 or an expression consisting 
  13873.           of integers and the addition [+] or subtraction [-] operator.  The 
  13874.           coordinate is assumed to be in dialog units and is relative to the 
  13875.           origin of the dialog window. 
  13876.  
  13877. y         Specifies the y-coordinate of the lower-left corner of the control. 
  13878.           The value is any integer 0 through 65535 or an expression consisting 
  13879.           of integers and the addition [+] or subtraction [-] operator.  The 
  13880.           coordinate is assumed to be in dialog units and is relative to the 
  13881.           origin of the dialog window. 
  13882.  
  13883. width     Specifies the width of the control.  The value is any integer 0 
  13884.           through 65535 or an expression consisting of integers and the 
  13885.           addition [+] or subtraction [-] operator. The width is in n-character 
  13886.           units. 
  13887.  
  13888. height    Specifies the height of the control.  The value is any integer 0 
  13889.           through 65535 or an expression consisting of integers and the 
  13890.           addition [+] or subtraction [-] operator. The height is in 
  13891.           1/8-character units. 
  13892.  
  13893. style     Specifies the control styles.  The value can be any combination of 
  13894.           the styles specified for WC_SLIDER.  You can use the bitwise OR [ | ] 
  13895.           operator to combine styles. 
  13896.  
  13897. Comments 
  13898.  
  13899. The SLIDER statement is only used in a DIALOG or WINDOW statement. 
  13900.  
  13901. Example 
  13902.  
  13903. This example creates a slider control at position (40, 30) within the dialog 
  13904. window.  The slider has a width of 120 character units and a height of 2 
  13905. character units.  Its resource ID is 101. The style specification 
  13906. SLS_BUTTONSLEFT adds buttons to the left of the slider shaft.  The default 
  13907. styles WS_TABSTOP and WS_VISIBLE are both in effect, though only the latter is 
  13908. specified. 
  13909.  
  13910. #define    IDC_SLIDER       101
  13911. #define    IDD_SLIDERDLG    502
  13912. DIALOG "Slider", IDD_SLIDERDLG, 11, 11, 200, 240, FS_NOBYTEALIGN |
  13913.         WS_VISIBLE, FCF_SYSMENU | FCF_TITLEBAR
  13914.   BEGIN
  13915.     SLIDER   IDC_SLIDER, 40, 30, 120, 16, SLS_BUTTONSLEFT | WS_VISIBLE
  13916.   END
  13917.  
  13918. Related Topics 
  13919.  
  13920. CONTROL Statement 
  13921. DIALOG Statement 
  13922. WINDOW Statement 
  13923.  
  13924.  
  13925. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - SPINBUTTON Statement ΓòÉΓòÉΓòÉ
  13926.  
  13927. Syntax: 
  13928.  
  13929. SPINBUTTON   id, x, y, width, height, style
  13930.  
  13931. Description 
  13932.  
  13933. The SPINBUTTON statement creates a spinbutton control within the dialog window. 
  13934. This control gives the user quick access to a finite set of data.  The 
  13935. SPINBUTTON statement defines the identifier, position, dimensions, and 
  13936. attributes of a spinbutton control.  The predefined class for this control is 
  13937. WC_SPINBUTTON. If you do not specify a style, the default style is WS_TABSTOP, 
  13938. WS_VISIBLE, and SPBS_MASTER. 
  13939.  
  13940. id        Specifies the control identifier.  The value is any integer 0 through 
  13941.           65535, or a simple expression that evaluates to a value in that 
  13942.           range. 
  13943.  
  13944. x         Specifies the x-coordinate of the lower-left corner of the control. 
  13945.           The value is any integer 0 through 65535 or an expression consisting 
  13946.           of integers and the addition [+] or subtraction [-] operator.  The 
  13947.           coordinate is assumed to be in dialog units and is relative to the 
  13948.           origin of the dialog window. 
  13949.  
  13950. y         Specifies the y-coordinate of the lower-left corner of the control. 
  13951.           The value is any integer 0 through 65535 or an expression consisting 
  13952.           of integers and the addition [+] or subtraction [-] operator.  The 
  13953.           coordinate is assumed to be in dialog units and is relative to the 
  13954.           origin of the dialog window. 
  13955.  
  13956. width     Specifies the width of the control.  The value is any integer 0 
  13957.           through 65535 or an expression consisting of integers and the 
  13958.           addition [+] or subtraction [-] operator. The width is in n-character 
  13959.           units. 
  13960.  
  13961. height    Specifies the height of the control.  The value is any integer 0 
  13962.           through 65535 or an expression consisting of integers and the 
  13963.           addition [+] or subtraction [-] operator. The height is in 
  13964.           1/8-character units. 
  13965.  
  13966. style     Specifies the control styles.  The value is any combination of the 
  13967.           styles specified for WC_SPINBUTTON.  You can use the bitwise OR [ | ] 
  13968.           operator to combine styles. 
  13969.  
  13970. Comments 
  13971.  
  13972. The SPINBUTTON statement is used only in a DIALOG or WINDOW statement. 
  13973.  
  13974. Example 
  13975.  
  13976. This example creates a spinbutton control at position (80, 20) within the 
  13977. dialog window.  The spinbutton has a width of 60 character units and a height 
  13978. of 3 character units.  Its resource ID is 302. The style specification 
  13979. SPBS_NUMERICONLY creates a control which accepts only the digits 0-9 and 
  13980. virtual keys.  The default styles SPBS_MASTER, WS_TABSTOP, and WS_VISIBLE are 
  13981. all in effect, though only WS_TABSTOP is specified. 
  13982.  
  13983. #define    IDC_SPINBUTTON   302
  13984. #define    IDD_SPINDLG    502
  13985. DIALOG "Spin button", IDD_SPINDLG, 11, 11, 200, 240, FS_NOBYTEALIGN |
  13986.         WS_VISIBLE, FCF_SYSMENU | FCF_TITLEBAR
  13987.   BEGIN
  13988.     SPINBUTTON  IDC_SPINBUTTON, 80, 20, 60, 24, SPBS_NUMERICONLY | WS_TABSTOP
  13989.   END
  13990.  
  13991. Related Topics 
  13992.  
  13993. CONTROL Statement 
  13994. DIALOG Statement 
  13995. WINDOW Statement 
  13996.  
  13997.  
  13998. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - STRINGTABLE Statement ΓòÉΓòÉΓòÉ
  13999.  
  14000. Syntax: 
  14001.  
  14002. STRINGTABLE  load-option   mem-option
  14003. BEGIN
  14004. string-id string-definition
  14005.     .
  14006.     .
  14007.     .
  14008. END
  14009.  
  14010. Description 
  14011.  
  14012. The STRINGTABLE statement creates one or more string resources for an 
  14013. application.  A string resource is a null-terminated character string that has 
  14014. a unique string identifier.  A string resource can be loaded from the 
  14015. executable file when needed by using the WinLoadString function. 
  14016.  
  14017. You can provide any number of STRINGTABLE statements in a resource script file. 
  14018. The compiler treats all the strings from the various STRINGTABLE statements as 
  14019. if they belonged to a single statement.  This means that no two strings in a 
  14020. resource script file can have the same string identifier. 
  14021.  
  14022. load-option 
  14023.      Specifies when the system loads the resource from the executable file into 
  14024.      memory. This value must be one of the following: 
  14025.  
  14026.    PRELOAD 
  14027.         System loads the resource when the application starts. 
  14028.    LOADONCALL 
  14029.         System loads the resource when the application calls the WinLoadString 
  14030.         function. This is the default option. 
  14031. mem-option 
  14032.      Specifies how the system manages the resource when it is in memory. This 
  14033.      value must be one or more of the following: 
  14034.  
  14035.    FIXED 
  14036.         System keeps the resource at a fixed memory location. 
  14037.    MOVEABLE 
  14038.         System moves the resource as necessary to compact memory. 
  14039.    DISCARDABLE 
  14040.         System discards the resource if it is no longer needed. The default 
  14041.      setting is MOVEABLE and DISCARDABLE. 
  14042. string-id 
  14043.      Specifies the character-string identifier. This value must be an integer 
  14044.      in the range 0 through 65 535, or a simple expression that evaluates to a 
  14045.      value in that range. The value can be specified in decimal or hexadecimal 
  14046.      notation. Each string identifier in a resource script file must be unique. 
  14047. string-definition 
  14048.      Specifies a character string.  This field must contain zero or more 
  14049.      characters enclosed in double quotation marks.  Character values must be 
  14050.      in the range 1 through 255.  If a double quotation mark is required in the 
  14051.      string, you must include the double quotation mark twice. 
  14052.  
  14053. Comments 
  14054.  
  14055. You can continue a string on multiple lines by terminating the line with a 
  14056. backslash (\) or by terminating the line with a double quotation mark (") and 
  14057. then starting the next line with a double quotation mark. 
  14058.  
  14059. Example 
  14060.  
  14061. This example creates two string resources whose string identifiers are 1 and 2. 
  14062.  
  14063. #define IDS_HELLO    1
  14064. #define IDS_GOODBYE  2
  14065.  
  14066. STRINGTABLE
  14067. BEGIN
  14068.     IDS_HELLO   "Hello"
  14069.     IDS_GOODBYE "Goodbye"
  14070. END
  14071.  
  14072. Related Topics 
  14073.  
  14074. MESSAGETABLE Statement 
  14075.  
  14076.  
  14077. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - SUBITEMSIZE Statement ΓòÉΓòÉΓòÉ
  14078.  
  14079. Syntax: 
  14080.  
  14081. SUBITEMSIZE  size
  14082.  
  14083. Description 
  14084.  
  14085. The SUBITEMSIZE statement specifies the size, in words, of each help subitem in 
  14086. a help subtable.  The minimum size is two words, and each help subitem in a 
  14087. help subtable must be the same size.  When used, the SUBITEMSIZE statement must 
  14088. appear after the HELPSUBTABLE statement and before the BEGIN keyword. 
  14089.  
  14090. You do not need to use the SUBITEMSIZE statement if the help subitems are the 
  14091. default size (2). 
  14092.  
  14093. size 
  14094.      Specifies the size of each help subitem.  This value must be an integer. 
  14095.  
  14096. Example 
  14097.  
  14098. The SUBITEMSIZE statement in this example specifies that each HELPSUBITEM 
  14099. statement contains three words. 
  14100.  
  14101. HELPSUBTABLE 1
  14102. SUBITEMSIZE 3
  14103. BEGIN
  14104.     HELPSUBITEM IDCLD_FILEMENU, IDHP_FILEMENU, 5
  14105.     HELPSUBITEM IDCLD_HELPMENU, IDHP_HELPMENU, 6
  14106. END
  14107.  
  14108. Related Topics 
  14109.  
  14110. HELPITEM Statement 
  14111. HELPSUBITEM Statement 
  14112. HELPSUBTABLE Statement 
  14113. HELPTABLE Statement 
  14114.  
  14115.  
  14116. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - SUBMENU Statement ΓòÉΓòÉΓòÉ
  14117.  
  14118. Syntax: 
  14119.  
  14120. SUBMENU text, submenu-id  , menu-style
  14121. BEGIN
  14122. menuitem-definition
  14123.     .
  14124.     .
  14125.     .
  14126. END
  14127.  
  14128. Description 
  14129.  
  14130. The SUBMENU statement creates a submenu for a given menu.  A submenu is a 
  14131. vertical list of menu items from which the user can choose a command. 
  14132.  
  14133. You can provide any number of SUBMENU statements in a MENU statement, but each 
  14134. SUBMENU statement must specify a unique submenu-id value. You can provide any 
  14135. number of menuitem-definition statements in the SUBMENU statement.  These 
  14136. define the menu items (commands) in the menu.  The order of the statements 
  14137. determines the order of the menu items. 
  14138.  
  14139. text 
  14140.      Specifies the text of the submenu.  This field must contain zero or more 
  14141.      characters enclosed in double quotation marks.  Character values must be 
  14142.      in the range 1 through 255.  If a double quotation mark is required in the 
  14143.      string, you must include the double quotation mark twice.  A tilde ( ~ ) 
  14144.      character in the item name indicates that the following character is used 
  14145.      as a mnemonic character for the item.  When the menu is displayed, the 
  14146.      tilde is not shown, but the mnemonic character is underlined.  The user 
  14147.      can choose the menu item by pressing the key corresponding to the 
  14148.      underlined mnemonic character. 
  14149. submenu-id 
  14150.      Specifies the submenu identifier. This value must be an integer in the 
  14151.      range 0 through 65 535, or a simple expression that evaluates to a value 
  14152.      in that range. 
  14153. menu-style 
  14154.      Specifies the submenu style. This value can be a combination of MIS_ 
  14155.      values. For details on the MIS_ values, see MENUITEM Statement. 
  14156. menuitem-definition 
  14157.      Specifies a PRESPARAMS or MENUITEM statement. You can use the PRESPARAMS 
  14158.      statement to control the appearance of a submenu, such as the font and the 
  14159.      foreground and background colors. If used, the PRESPARAMS statement must 
  14160.      immediately follow the BEGIN keyword. For details about the PRESPARAMS 
  14161.      statement, see PRESPARAMS Statement. 
  14162.  
  14163.      The MENUITEM statement defines an individual command in the given menu. 
  14164.      For details, see MENUITEM Statement. 
  14165.  
  14166. Example 
  14167.  
  14168. This example creates a submenu named Elements.  Its identifier is 2. The 
  14169. submenu contains three menu items, which are created by using MENUITEM 
  14170. statements. 
  14171.  
  14172. SUBMENU "Elements", 2
  14173. BEGIN
  14174.     MENUITEM "Oxygen", 200
  14175.     MENUITEM "Carbon", 201, , MIA_CHECKED
  14176.     MENUITEM "Hydrogen", 202
  14177. END
  14178.  
  14179. Related Topics 
  14180.  
  14181. MENU Statement 
  14182. MENUITEM Statement 
  14183. PRESPARAMS Statement 
  14184.  
  14185.  
  14186. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - undef Directive ΓòÉΓòÉΓòÉ
  14187.  
  14188. Syntax: undef name 
  14189.  
  14190. Description 
  14191.  
  14192. This directive removes the current definition of the specified name.  All 
  14193. subsequent occurrences of the name are processed without replacement. 
  14194.  
  14195. name 
  14196.      Specifies the name to be removed. This value is any combination of 
  14197.      letters, digits, and punctuation. 
  14198.  
  14199. Example 
  14200.  
  14201. This example removes the definitions for the names "nonzero" and "USERCLASS". 
  14202.  
  14203. #undef     nonzero
  14204. #undef     USERCLASS
  14205.  
  14206. Related Topics 
  14207.  
  14208. Directives 
  14209. define Directive 
  14210.  
  14211.  
  14212. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - VALUESET Statement ΓòÉΓòÉΓòÉ
  14213.  
  14214. Syntax: 
  14215.  
  14216. VALUESET   id, x, y, width, height, style
  14217.  
  14218. Description 
  14219.  
  14220. The VALUESET statement creates a value set control within the dialog window. 
  14221. This control lets a user select one choice from a group of mutually exclusive 
  14222. choices.  The VALUESET statement defines the identifier, position, dimensions, 
  14223. and attributes of a value set control.  The predefined class for this control 
  14224. is WC_VALUESET.  If you do not specify a style, the default style is WS_TABSTOP 
  14225. and WS_VISIBLE. 
  14226.  
  14227. id        Specifies the control identifier.  The value is any integer 0 through 
  14228.           65535, or a simple expression that evaluates to a value in that 
  14229.           range. 
  14230.  
  14231. x         Specifies the x-coordinate of the lower-left corner of the control. 
  14232.           The value is any integer 0 through 65535 or an expression consisting 
  14233.           of integers and the addition [+] or subtraction [-] operator.  The 
  14234.           coordinate is assumed to be in dialog units and is relative to the 
  14235.           origin of the dialog window. 
  14236.  
  14237. y         Specifies the y-coordinate of the lower-left corner of the control. 
  14238.           The value is any integer 0 through 65535 or an expression consisting 
  14239.           of integers and the addition [+] or subtraction [-] operator.  The 
  14240.           coordinate is assumed to be in dialog units and is relative to the 
  14241.           origin of the dialog window. 
  14242.  
  14243. width     Specifies the width of the control.  The value is any integer 0 
  14244.           through 65535 or an expression consisting of integers and the 
  14245.           addition [+] or subtraction [-] operator. The width is in n-character 
  14246.           units. 
  14247.  
  14248. height    Specifies the height of the control.  The value is any integer 0 
  14249.           through 65535 or an expression consisting of integers and the 
  14250.           addition [+] or subtraction [-] operator. The height is in 
  14251.           1/8-character units. 
  14252.  
  14253. style     Specifies the control styles.  The value is any combination of the 
  14254.           styles specified for WC_VALUESET.  You can use the bitwise OR [ | ] 
  14255.           operator to combine styles. 
  14256.  
  14257. Comments 
  14258.  
  14259. The VALUESET statement is used only in a DIALOG or WINDOW statement. 
  14260.  
  14261. Example 
  14262.  
  14263. This example creates a value set control at position (40, 40) within the dialog 
  14264. window.  The value set control has a width of 220 character and a height of 20 
  14265. character units.  Its resource ID is 302.  The style specification VS_ICON 
  14266. creates a control to show items in icon form.  The default styles WS_TABSTOP 
  14267. and WS_VISIBLE are both in effect, though only WS_TABSTOP is specified. 
  14268.  
  14269. #define    IDC_VALUESET     302
  14270. #define    IDD_VALUESETDLG  501
  14271. DIALOG "Value set", IDD_VALUESETDLG, 11, 11, 260, 240, FS_NOBYTEALIGN |
  14272.         WS_VISIBLE, FCF_SYSMENU | FCF_TITLEBAR
  14273.   BEGIN
  14274.     VALUESET  IDC_VALUESET, 40, 40, 220, 160, VS_ICON | WS_TABSTOP
  14275.   END
  14276.  
  14277. Related Topics 
  14278.  
  14279. CONTROL Statement 
  14280. DIALOG Statement 
  14281. WINDOW Statement 
  14282.  
  14283.  
  14284. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - WINDOW Statement ΓòÉΓòÉΓòÉ
  14285.  
  14286. Syntax: 
  14287.  
  14288. WINDOW text, id, x, y, width, height, class , style  , framectl
  14289.   data-definitions
  14290. [ BEGIN
  14291. control-definition
  14292.     .
  14293.     .
  14294.     .
  14295. END ]
  14296.  
  14297. Description 
  14298.  
  14299. The WINDOW statement creates a window of the specified class.  The statement 
  14300. defines the position and dimensions of the window relative to its parent 
  14301. window, as well as the window-box style.  The WINDOW statement is typically 
  14302. used in a WINDOWTEMPLATE or FRAME statement. 
  14303.  
  14304. Typically, only one WINDOW statement is used in a FRAME statement.  It defines 
  14305. the client window belonging to the corresponding frame window. The optional 
  14306. BEGIN and END keywords enclose any CONTROL statements that are given with the 
  14307. window.  CONTROL statements given in this manner represent child windows 
  14308. belonging to the window created by the WINDOW statement. 
  14309.  
  14310. text 
  14311.      Specifies the window title if the style specifies a title bar. This field 
  14312.      must contain zero or more characters enclosed in double quotation marks. 
  14313.      The character values must be in the range 1 through 255.  If a double 
  14314.      quotation mark is required in the title, you must include the double 
  14315.      quotation mark twice. 
  14316. id 
  14317.      Specifies the window identifier.  This value must be an integer in the 
  14318.      range 0 through 65 535, or a simple expression that evaluates to a value 
  14319.      in that range. 
  14320.      Specifies the x-coordinate of the lower-left corner of the window. This 
  14321.      value must be an integer in the range 0 through 65 535 or an expression 
  14322.      consisting of integers and the addition (+) or subtraction (-) operator. 
  14323.      The value is in dialog units.  The position is relative to the origin of 
  14324.      the parent window. 
  14325.      Specifies the y-coordinate of the lower-left corner of the window. This 
  14326.      value must be an integer in the range 0 through 65 535 or an expression 
  14327.      consisting of integers and the addition (+) or subtraction (-) operator. 
  14328.      The value is in dialog units.  The position is relative to the origin of 
  14329.      the parent window. 
  14330. width 
  14331.      Specifies the width of the window.  This value must be an integer in the 
  14332.      range 1 through 65 535 or an expression consisting of integers and the 
  14333.      addition (+) or subtraction (-) operator.  The value is in n-character 
  14334.      units. 
  14335. height 
  14336.      Specifies the height of the window.  This value must be an integer in the 
  14337.      range 1 through 65 535 or an expression consisting of integers and the 
  14338.      addition (+) or subtraction (-) operator.  The value is in 1/8-character 
  14339.      units. 
  14340. class 
  14341.      Specifies the window class.  This value can be one of the control classes 
  14342.      specified in the table, "Control Classes" ("Control Classes@Control 
  14343.      Classes") or the name of the window class, enclosed in double quotation 
  14344.      marks. 
  14345. style 
  14346.      Specifies the window style.  This value can be any of the window, dialog 
  14347.      box, or frame styles specified. 
  14348. framectl 
  14349.      Specifies the style of the frame controls belonging to the window.  This 
  14350.      value can be a combination of the styles specified in the table, 
  14351.      "Frame-Control Styles."  ("Frame-Control Styles@Frame-Control Styles") You 
  14352.      can use the bitwise OR (|) operator to combine styles. 
  14353. data-definitions 
  14354.      Specifies a CTLDATA and/or PRESPARAMS statement.  These statements define 
  14355.      control and presentation data for the window.  For more information, see 
  14356.      CTLDATA and PRESPARAMS Statement. 
  14357. control-definition 
  14358.      Specifies a CONTROL statement or any one of several predefined control 
  14359.      statements. These statements define the style, position, and dimensions of 
  14360.      controls in the window. 
  14361.  
  14362. Comments 
  14363.  
  14364. The WINDOW statement can actually contain any combination of CONTROL, DIALOG, 
  14365. and WINDOW statements. Typically, a WINDOW statement contains one or no such 
  14366. statements. 
  14367.  
  14368. Example 
  14369.  
  14370. This example creates a client window belonging to the frame window. The client 
  14371. window belongs to the "MyClientClass" window class and has the standard window 
  14372. identifier FID_CLIENT. 
  14373.  
  14374. WINDOWTEMPLATE 1
  14375. BEGIN
  14376.     FRAME "My Window", 1, 10, 10, 320, 130,
  14377.              0, FCF_STANDARD | FCF_VERTSCROLL
  14378.     BEGIN
  14379.         WINDOW "", FID_CLIENT, 0, 0, 0, 0, "MyClientClass"
  14380.     END
  14381. END
  14382.  
  14383. Related Topics 
  14384.  
  14385. CONTROL 
  14386. CTLDATA 
  14387. DIALOG Statement 
  14388. FRAME Statement 
  14389. PRESPARAMS Statement 
  14390. WINDOWTEMPLATE Statement 
  14391.  
  14392.  
  14393. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - WINDOWTEMPLATE Statement ΓòÉΓòÉΓòÉ
  14394.  
  14395. Syntax: 
  14396.  
  14397. WINDOWTEMPLATE window-id  load-option   mem-option
  14398. BEGIN
  14399. window-definition
  14400.     .
  14401.     .
  14402.     .
  14403. END
  14404.  
  14405. Description 
  14406.  
  14407. The WINDOWTEMPLATE statement creates a window template.  A window template 
  14408. consists of a series of statements that define the window identifier, load and 
  14409. memory options, window dimensions, and controls in the window.  The window 
  14410. template can be loaded from the executable file by using the WinLoadDlg 
  14411. function. 
  14412.  
  14413. You can provide any number of window templates in a resource script file, but 
  14414. each template must have a unique window-id value. 
  14415.  
  14416. window-id 
  14417.      Specifies the window identifier. This value must be an integer in the 
  14418.      range 0 through 65 535, or a simple expression that evaluates to a value 
  14419.      in that range. 
  14420. load-option 
  14421.      Specifies when the system loads the resource from the executable file into 
  14422.      memory. This value must be one of the following: 
  14423.  
  14424.    PRELOAD 
  14425.         System loads the resource when the application starts. 
  14426.    LOADONCALL 
  14427.         System loads the resource when the application calls the WinLoadDlg 
  14428.         function. This is the default option. 
  14429. mem-option 
  14430.      Specifies how the system manages the resource when it is in memory. This 
  14431.      value must be one or more of the following: 
  14432.  
  14433.    FIXED 
  14434.         System keeps the resource at a fixed memory location. 
  14435.    MOVEABLE 
  14436.         System moves the resource as necessary to compact memory. 
  14437.    DISCARDABLE 
  14438.         System discards the resource if it is no longer needed. The default 
  14439.      setting is MOVEABLE and DISCARDABLE. 
  14440. window-definition 
  14441.      Specifies a WINDOW statement. The statement defines the dimensions and 
  14442.      style of the given window. For details about the statement, see WINDOW 
  14443.      Statement. 
  14444.  
  14445. Comments 
  14446.  
  14447. A WINDOWTEMPLATE statement can contain DIALOG, CONTROL, and WINDOW statements. 
  14448. Typically, only one WINDOW statement is used in the WINDOWTEMPLATE statement. 
  14449.  
  14450. Related Topics 
  14451.  
  14452. CONTROL 
  14453. DIALOG Statement 
  14454. WINDOW Statement 
  14455.  
  14456.  
  14457. ΓòÉΓòÉΓòÉ <hidden> Resource Compiler - Error Messages ΓòÉΓòÉΓòÉ
  14458.  
  14459. The error messages produced by the resource compiler utility (RC) are listed 
  14460. below. In addition to these messages, you may encounter messages produced by 
  14461. the compiler you are using. 
  14462.  
  14463. Error Message Descriptions 
  14464.  
  14465. Accelerator type required (CHAR, SCANCODE, or VIRTUALKEY) 
  14466.           Explanation: An acceloption has not been specified in the accelerator 
  14467.           table to define the type of accelerator. If the accelerator character 
  14468.           code is something other than a single character or a character 
  14469.           preceded by a caret ( ^ ), an acceloption is required. 
  14470.           Action: Check accelerator table syntax. 
  14471.  
  14472. BEGIN expected in accelerator table 
  14473.           Explanation: BEGIN keyword missing from accelerator table. 
  14474.           Action: Check syntax. 
  14475.  
  14476. BEGIN expected in dialog or window template 
  14477.           Explanation: BEGIN keyword missing from dialog or window template. 
  14478.           Action: Check syntax. 
  14479.  
  14480. BEGIN expected in menu 
  14481.           Explanation: BEGIN keyword missing from menu. 
  14482.           Action: Check syntax. 
  14483.  
  14484. BEGIN expected in message table 
  14485.           Explanation: BEGIN keyword missing from message table. 
  14486.           Action: Check syntax. 
  14487.  
  14488. BEGIN expected in RCData 
  14489.           Explanation: BEGIN keyword missing from RCData table. 
  14490.           Action: Check syntax. 
  14491.  
  14492. BEGIN expected in String Table 
  14493.           Explanation: BEGIN keyword missing from string table. 
  14494.           Action: Check syntax. 
  14495.  
  14496. Cannot re-use message constants 
  14497.           Explanation: Message identifier has been used more than once in 
  14498.           message table. 
  14499.           Action: Check message table syntax. 
  14500.  
  14501. Cannot re-use string constants 
  14502.           Explanation: Message identifier has been used more than once in 
  14503.           string table. 
  14504.           Action: Check string table syntax. 
  14505.  
  14506. Comma expected after item string 
  14507.           Explanation: A comma must be used to separate the menu item 
  14508.           identifier and the menu item string. 
  14509.           Action: Check menu syntax. 
  14510.  
  14511. Control character out of range ( ^A - ^Z) 
  14512.           Explanation: Accelerator character codes that use the Ctrl key, and 
  14513.           are therefore preceded by a caret ( ^ ), must use alphabetic keys. 
  14514.           Action: Check accelerator table syntax. 
  14515.  
  14516. END expected in dialog 
  14517.           Explanation: END keyword missing from dialog template. 
  14518.           Action: Check syntax. 
  14519.  
  14520. END expected in menu 
  14521.           Explanation: END keyword missing from menu. 
  14522.           Action: Check syntax. 
  14523.  
  14524. Error creating temp file 
  14525.           Explanation: Temporary files are created by the resource compiler 
  14526.           during the compilation process. 
  14527.           Action: Check that there is sufficient disk space to run the resource 
  14528.           compiler, and restart the resource compiler. 
  14529.  
  14530. Expected comma in accelerator table 
  14531.           Explanation: Commas are used in the accelerator table to separate the 
  14532.           accelerator key, the accelerator command, and the accelerator 
  14533.           options. 
  14534.           Action: Check accelerator table syntax. 
  14535.  
  14536. Expected ID value for menuitem 
  14537.           Explanation: A selection identifier is needed for each item within a 
  14538.           menu. 
  14539.           Action: Check menu syntax. 
  14540.  
  14541. Expected menu string 
  14542.           Explanation: A character string should be specified in the menu 
  14543.           definition to describe the menu selection. 
  14544.           Action: Check menu syntax. The string should be enclosed in double 
  14545.           quotation marks. 
  14546.  
  14547. Expected numeric command value 
  14548.           Explanation: A number should be used in the accelerator table to 
  14549.           identify the message that is generated by an accelerator key. 
  14550.           Action: Check accelerator table syntax. 
  14551.  
  14552. Expected numeric constant in message table 
  14553.           Explanation: The identifier that precedes a message definition must 
  14554.           be an integer. 
  14555.           Action: Check message definition syntax. 
  14556.  
  14557. Expected numeric constant in string table 
  14558.           Explanation: The identifier that precedes a string definition must be 
  14559.           an integer. 
  14560.           Action: Check string definition syntax. 
  14561.  
  14562. Expected numerical dialog constant 
  14563.           Explanation: Integers are required in dialog and window templates to 
  14564.           specify the coordinates and dimensions of the dialog box. 
  14565.           Action: Check syntax of dialog box definition. 
  14566.  
  14567. Expected string in message table 
  14568.           Explanation: A character string was not found in the message table. 
  14569.           Action: Check syntax. The string should be enclosed in double 
  14570.           quotation marks. 
  14571.  
  14572. Expected string in string table 
  14573.           Explanation: A character string was not found in the string table. 
  14574.           Action: Check string table syntax. The string should be enclosed in 
  14575.           double quotation marks. 
  14576.  
  14577. Expected string or constant accelerator command 
  14578.           Explanation: The accelerator character code is missing. 
  14579.           Action: Check accelerator table syntax. 
  14580.  
  14581. File not found 
  14582.           Explanation: The resource compiler could not find the .RC or .RES 
  14583.           file that you requested. 
  14584.           Action: Check that the file is in the current directory and check the 
  14585.           path to the directory. 
  14586.  
  14587. Illegal empty BEGIN/END block found, resource not written 
  14588.           Explanation: A BEGIN/END block with no DIALOG, CONTROL, or WINDOW 
  14589.           statements in it was found in the dialog template. 
  14590.           Action: Delete unwanted BEGIN/END blocks. 
  14591.  
  14592. Invalid accelerator 
  14593.           Explanation: The character code specified as an accelerator key must 
  14594.           be a valid keyboard operation. 
  14595.           Action: Check accelerator key definition syntax. 
  14596.  
  14597. Invalid accelerator option 
  14598.           Explanation: The accelerator option must be a valid keyword. 
  14599.           Action: Check syntax. 
  14600.  
  14601. Invalid control character 
  14602.           Explanation: The accelerator key definition can include an caret 
  14603.           ( ^) to specify that the key should be used with the Ctrl key. 
  14604.           Action: Check accelerator key definition syntax. 
  14605.  
  14606. Invalid Type 
  14607.           Explanation: The resource type must be a valid keyword. 
  14608.           Action: Check resource definition syntax. 
  14609.  
  14610. Non-numeric template ID in dialog or window template 
  14611.           Explanation: The resource identifier must be an integer. 
  14612.           Action: Check dialog or window template syntax. 
  14613.  
  14614. Only one top level window allowed 
  14615.           Explanation: Only one DIALOG, CONTROL, or WINDOW statement is allowed 
  14616.           within the dialog or window template. 
  14617.           Action: Check dialog or window template syntax. 
  14618.  
  14619. Resource Type keyword expected 
  14620.           Explanation: The resource type must be specified in the resource 
  14621.           script file. 
  14622.           Action: Check resource definition syntax. 
  14623.  
  14624. String literal too long 
  14625.           Explanation: Strings cannot be longer than 255 characters. 
  14626.           Action: Edit the string. 
  14627.  
  14628. Text string or ordinal expected in control 
  14629.           Explanation: A text string can be specified in the DIALOG statement 
  14630.           of a dialog template to give it a title. If a title is not required, 
  14631.           double quotation marks must be used with no characters between them 
  14632.           (" "). 
  14633.           Action: Edit DIALOG statement. 
  14634.  
  14635. Unbalanced parentheses 
  14636.           Explanation: The left and right parentheses have not been matched. 
  14637.           Action: Edit the parentheses. 
  14638.  
  14639. Undefined keyword or key name 
  14640.           Explanation: An invalid keyword or key name has been used. 
  14641.           Action: Check syntax. 
  14642.  
  14643. Unexpected end of file in string literal 
  14644.           Explanation: The double quotation marks have not been closed at the 
  14645.           end of a character string. 
  14646.           Action: Edit the string. 
  14647.  
  14648. Unexpected value in RCData 
  14649.           Explanation: The variable defined in RCData must be a string or a 
  14650.           number. 
  14651.           Action: Check the RCData syntax. 
  14652.  
  14653. Unknown dialog or window token 
  14654.           Explanation: The dialog and window templates must use only the 
  14655.           DIALOG, WINDOW, or CONTROL keywords. 
  14656.           Action: Check the dialog or window template syntax. 
  14657.  
  14658. Unknown menu subtype 
  14659.           Explanation: Items within a menu can be specified only with the 
  14660.           MENUITEM and SUBMENU keywords. 
  14661.           Action: Check menu definition syntax. 
  14662.  
  14663.  
  14664. ΓòÉΓòÉΓòÉ 17. T Terminal Emulator ΓòÉΓòÉΓòÉ
  14665.  
  14666. Select One: 
  14667.  
  14668. Introduction and Help 
  14669. Command-Line Syntax 
  14670. Command-Line Options 
  14671. Terminal Setup 
  14672. Sending Files 
  14673. Pausing and Scrolling 
  14674. Receiving Files 
  14675.  
  14676.  
  14677. ΓòÉΓòÉΓòÉ <hidden> T Terminal Emulator - Introduction ΓòÉΓòÉΓòÉ
  14678.  
  14679. The Kernel Debugger uses the T Terminal Emulator to communicate with the 
  14680. machine to to be debugged, also known as the MUT (Machine Under Test). 
  14681.  
  14682. You can also use T or to send and receive ASCII files. 
  14683.  
  14684. All functions of T are listed on the Help menu. Press F1 to view the Help menu, 
  14685. pictured below. 
  14686.  
  14687.   TERMINAL - OS/2 ASCII Terminal Program
  14688.  
  14689.   Version 2.00.00
  14690.  
  14691.  F1 or ALT-H   Help
  14692.  F2            Terminal Setup
  14693.  F3            Send a file
  14694.  F4            Pause and Scroll
  14695.  F5            Toggle file capture
  14696.  F6            File capture control
  14697.  F8  or ALT-X  Exit terminal program
  14698.  
  14699. You must press Escape to exit this screen before continuing with any other 
  14700. functions. 
  14701.  
  14702.  
  14703. ΓòÉΓòÉΓòÉ <hidden> T Terminal Emulator - Command-Line Options ΓòÉΓòÉΓòÉ
  14704.  
  14705. Use command line options when invoking T to specify the sceen size and the COM 
  14706. port to be used: 
  14707.  
  14708. -L[ines]X           Where x = {25, 43, 50} 
  14709.  
  14710. -C[om]N             Where n = {1,2,3} 
  14711.  
  14712. -?                  To display these options 
  14713.  
  14714.  
  14715. ΓòÉΓòÉΓòÉ <hidden> T Terminal Emulator - Command-Line Syntax ΓòÉΓòÉΓòÉ
  14716.  
  14717. To display help for command-line syntax, type T -? at the prompt. 
  14718.  
  14719. OS/2* Terminal program
  14720. Version 2.00.00
  14721. November 1st, 1991
  14722.  
  14723. Valid command line switches:
  14724.   -L[ines]X      X={lines}
  14725.   -C[om]N        N={1..8}
  14726.   -Q[uiet]       enter quiet mode
  14727.   -V[tp]:name    name=vtp server
  14728.   -S[end]:name   name=auto-send file name
  14729.   -R[emark]:text text=status line remark (20 chars max)
  14730.  
  14731.  
  14732. ΓòÉΓòÉΓòÉ <hidden> T Terminal Emulator - Terminal Setup ΓòÉΓòÉΓòÉ
  14733.  
  14734. All terminal setup functions are listed here. Press F2 from the program's main 
  14735. screen to view the Terminal Setup menu. 
  14736.  
  14737. The Terminal Setup Options are as follows: 
  14738.  
  14739. o Help (press F1) 
  14740. o Port setup (Press F2) 
  14741. o Terminal emulation (Press F3) 
  14742. o Keyboard macros (Press F4) 
  14743. o Bells & Whistles (Press F5) 
  14744. o Exit setup mode (Press Esc or F8) 
  14745.  
  14746. You must press Esc to return to the main screen before continuing with any 
  14747. functions other than the above setup functions. 
  14748.  
  14749.  
  14750. ΓòÉΓòÉΓòÉ <hidden> T Term. Emul. - Setup Terminal Emulation ΓòÉΓòÉΓòÉ
  14751.  
  14752. To set up terminal emulation, follow these steps: 
  14753.  
  14754.  1. Press F2 at the main screen. The Terminal Setup dialog will be displayed. 
  14755.  
  14756.  2. Press F3. The Terminal Emulation Setup dialog will be displayed. 
  14757.  
  14758.  Terminal Emulation Setup
  14759.  Emulator status: None loaded.
  14760.  
  14761.  Help:                       F1
  14762.  Z19 emulator:               F2
  14763.  
  14764.  Exit emulator setup mode:   Esc, F8
  14765.  
  14766.  
  14767. ΓòÉΓòÉΓòÉ <hidden> T Term. Emul. - Setup Bells & Whistles ΓòÉΓòÉΓòÉ
  14768.  
  14769. To change bells and whistles, follow these steps: 
  14770.  
  14771.  1. Press F2 at the main screen. The Terminal Setup dialog will be displayed. 
  14772.  
  14773.  2. Press F5. The Bells & Whistles Setup dialog will be displayed. 
  14774.  
  14775.  3. Make your selections. 
  14776.  
  14777. Bells and Whistles Setup
  14778.  
  14779. Filter NULL characters: Yes
  14780. Disable beeps:          No
  14781.  
  14782.                       Background:   Foreground:
  14783. Normal screen:        Black         White
  14784. Status line:          Blue          Bright White
  14785. Scroll screen:        Blue          Red
  14786. Scroll status line:   White         Blue
  14787. Help screen:          Blue          Bright White
  14788. Menu:                 Blue          Bright White
  14789. Menu highlight:       Cyan          Black
  14790.  
  14791. Next Value:
  14792.  
  14793.  
  14794. ΓòÉΓòÉΓòÉ <hidden> T Term. Emul. - Setting Communications Parameters ΓòÉΓòÉΓòÉ
  14795.  
  14796. To change communications parameters, follow these steps: 
  14797.  
  14798.  1. Press F2 at the main screen. The Terminal Setup dialog will be displayed. 
  14799.  
  14800.  2. Press F2. The Current COM2 Port Parameters dialog will be displayed. 
  14801.  
  14802.          Current COM2 Port parameters:
  14803.  
  14804.          Baud Rate:                   9600
  14805.          Parity:                      NONE
  14806.          Data Bits:                      8
  14807.          Stop Bits:                      1
  14808.          Write Timeout (sec.):        1.00
  14809.          Read Timeout (sec.):         0.10
  14810.          Handshaking:             XON/XOFF
  14811.  
  14812.          Next Value: ->   Previous Value: <-
  14813.          Next Field: Dn   Previous Field: Up
  14814.          Don't Change:   Esc
  14815.          Accept Changes: Enter
  14816.  
  14817.  3. Use the Up Arrow and Down Arrow cursor keys to scroll backward and forward 
  14818.     through the parameter list, and the -> and <- keys to scroll through 
  14819.     allowable values for each parameter. 
  14820.  
  14821.  4. Press Escape to exit this dialog without changing values, or press Enter to 
  14822.     save these values and exit the dialog. 
  14823.  
  14824. Note:  The communications port may be changed from the command line by using 
  14825.        the -c option.
  14826.  
  14827.  
  14828. ΓòÉΓòÉΓòÉ <hidden> T Terminal Emulator - Sending Files ΓòÉΓòÉΓòÉ
  14829.  
  14830. To send a file, follow these steps: 
  14831.  
  14832.  1. Press F3. The Send File Control dialog will be displayed. 
  14833.  
  14834.          Send File Control
  14835.  
  14836.          Send file name:
  14837.          SEND.TXT
  14838.  
  14839.          Don't send file:               Esc
  14840.          Accept changes and send file:  Enter
  14841.  
  14842.  2. Enter the filename in the Send File name field. 
  14843.  
  14844.  3. Press Enter to send the file and exit the dialog, or press Escape to exit 
  14845.     this dialog without sending a file. 
  14846.  
  14847.  
  14848. ΓòÉΓòÉΓòÉ <hidden> T Terminal Emulator - Pausing and Scrolling ΓòÉΓòÉΓòÉ
  14849.  
  14850. To enter Scroll Mode and pause display of communications, follow these steps: 
  14851.  
  14852.  1. Press F4. A status line will appear at the bottom of the screen. 
  14853.  
  14854.     F1=Help  ESC=Active mode  Screen Top is 100% through the buffer. Scroll 
  14855.     Mode 
  14856.  
  14857.  2. Press F1 to display the Scroll Mode commands. 
  14858.  
  14859.          Screen Scroll Mode
  14860.  
  14861.          F1 or ALT-H       Help
  14862.          Dn                Down a line
  14863.          Up                Up a line
  14864.          PgUp              Up a page
  14865.          PgDn              Down a page
  14866.          ESC or Enter      Return to active mode
  14867.  
  14868.  3. Select a scroll mode command. 
  14869.  
  14870.  
  14871. ΓòÉΓòÉΓòÉ <hidden> T Terminal Emulator - Receiving Files ΓòÉΓòÉΓòÉ
  14872.  
  14873. To receive a file, follow these steps: 
  14874.  
  14875.  1. Press F6. The Capture File Control dialog will be displayed. 
  14876.  
  14877.          Capture File Control
  14878.  
  14879.          Capture file name:
  14880.          Capture.Txt
  14881.  
  14882.          Capture entire buffer: F3
  14883.          START Capture:         F5
  14884.          Delete file:           F9
  14885.          Don't Change:          Esc
  14886.          Accept Changes:        Enter
  14887.  
  14888.  2. Select an item from the Capture File Control menu. 
  14889.  
  14890.  
  14891. ΓòÉΓòÉΓòÉ 18. Workplace Class List ΓòÉΓòÉΓòÉ
  14892.  
  14893. Select one: 
  14894.  
  14895. Introduction 
  14896. Starting 
  14897. Create an Instance 
  14898. Replace an Object 
  14899. Unreplace an Object 
  14900. Add an Object 
  14901. Delete an Object Class 
  14902.  
  14903.  
  14904. ΓòÉΓòÉΓòÉ <hidden> WP Class List - Introduction ΓòÉΓòÉΓòÉ
  14905.  
  14906. The workplace class list is a tool that creates a workplace object class and an 
  14907. instance of a workplace object class. Workplace objects are constructed using 
  14908. the SOM protocol and are instances of one of the following workplace object 
  14909. classes: 
  14910.  
  14911. Predefined 
  14912.      These classes are defined by the system. Examples of predefined workplace 
  14913.      object classes are WPObject, WPFileSys, and WPAbstract. 
  14914.  
  14915. Subclass 
  14916.      These classes are derived from existing predefined workplace object 
  14917.      classes.  They add or remove function; however, they retain the basic 
  14918.      behavior of that class. 
  14919.  
  14920. Replaced 
  14921.      These classes replace the class being subclassed. They modify the behavior 
  14922.      of an instance of a predefined workplace object class without the instance 
  14923.      being aware of the new class. 
  14924.  
  14925.  
  14926. ΓòÉΓòÉΓòÉ <hidden> WP Class List - Starting Workplace Class List ΓòÉΓòÉΓòÉ
  14927.  
  14928. To start Workplace Class List, select the PM Development Tools folder, then 
  14929. select Workplace Class List. A window appears. The window contains a list of 
  14930. the workplace object classes currently registered in the OS/2 Workplace Shell. 
  14931. Using the window, you can: 
  14932.  
  14933. o Create an instance of a workplace object class 
  14934. o Replace a workplace object class 
  14935. o Unreplace a workplace object class 
  14936. o Add a workplace object class 
  14937. o Delete a workplace object class 
  14938.  
  14939.  
  14940. ΓòÉΓòÉΓòÉ <hidden> WP Class List - Create an Object Class Instance ΓòÉΓòÉΓòÉ
  14941.  
  14942. To create an instance of a workplace object class: 
  14943.  
  14944.  1. Select the class from the list on the workplace object class window. 
  14945.  2. Display the pop-up menu by single-clicking mouse button 2. 
  14946.  3. Select the Create Instance choice. 
  14947.  4. Fill-in the following input fields: Object Title, Class of new object, 
  14948.     Parameters, and Location. 
  14949.  
  14950. Note:  Only an instance of a physical workplace object class can be created. 
  14951.        In other words, you cannot use WPObject or WPClass because they are not 
  14952.        physical classes. 
  14953.  
  14954. Input Fields 
  14955.  
  14956. Object Title 
  14957.      is the text string you assign the object.  The text string becomes the 
  14958.      object title and appears under the object when the object is displayed on 
  14959.      the Workplace Shell.  When the object is in an opened state, the text 
  14960.      string appears in the title bar of the window. 
  14961. Class of new object 
  14962.      is the name of the class of which the object you selected is a member. 
  14963. Parameters 
  14964.      is a series of keyname=value pairs (separated by semicolons) that change 
  14965.      the behavior of the object.  Each object class defines the keynames and 
  14966.      parameters it expects to see. All parameters have safe defaults, so it is 
  14967.      never required to pass parameters to an object. 
  14968. Location 
  14969.      is a real name specified by a fully qualified file specification, such as 
  14970.      C:\OS2\DLL\MINXOBJ.DLL, or a logical name specified by a predefined 
  14971.      symbol. 
  14972.  
  14973. Examples of logical names include the following: 
  14974.  
  14975. LOCATION_NOWHERE 
  14976.      The hidden folder 
  14977. LOCATION_DESKTOP 
  14978.      The OS/2 desktop (Workplace) 
  14979. LOCATION_SYSTEM 
  14980.      The OS/2 system folder 
  14981. LOCATION_TEMPLATES 
  14982.      The template folder 
  14983. LOCATION_SYSTEMSETUP 
  14984.      The system setup folder 
  14985. LOCATION_STARTUP 
  14986.      The startup folder 
  14987. LOCATION_INFORMATION 
  14988.      The information folder 
  14989. LOCATION_INFORMATION 
  14990.      The information folder 
  14991. LOCATION_DRIVES 
  14992.      The drives folder 
  14993.  
  14994. Related Information: 
  14995.  
  14996. o Replace a workplace object class 
  14997. o Unreplace a workplace object class 
  14998. o Add a workplace object class 
  14999. o Delete a workplace object class 
  15000.  
  15001.  
  15002. ΓòÉΓòÉΓòÉ <hidden> WP Class List - Replace a Workplace Object Class ΓòÉΓòÉΓòÉ
  15003.  
  15004. To replace an existing registered class: 
  15005.  
  15006.  1. Select the class from the list on the workplace object class window. 
  15007.  2. Display the pop-up menu by single-clicking mouse button 2. 
  15008.  3. Select the Replace choice.  Note that only classes that have already been 
  15009.     registered are valid. 
  15010.  4. Fill-in the following input fields: Original class and Replacement class. 
  15011.  
  15012. Note:  The replacement class must be a descendant of the original class. 
  15013.        Replacing an object class is useful for modifying the behavior of 
  15014.        objects which are instances of the original class but are not aware of 
  15015.        the replacement class. 
  15016.  
  15017. Input Fields 
  15018.  
  15019. Original class 
  15020.      is the name of the object class being replaced in the Workplace. 
  15021.  
  15022. Replacement class 
  15023.      if the name of the object class replacing the original class. 
  15024.  
  15025. Related Information: 
  15026.  
  15027. o Create an instance of a workplace object class 
  15028. o Unreplace a workplace object class 
  15029. o Add a workplace object class 
  15030. o Delete a workplace object class 
  15031.  
  15032.  
  15033. ΓòÉΓòÉΓòÉ <hidden> WP Class List - Unreplace a Workplace Object Class ΓòÉΓòÉΓòÉ
  15034.  
  15035. To return a replaced class to its original class: 
  15036.  
  15037.  1. Select the replaced class from the list on the workplace object class 
  15038.     window. 
  15039.  2. Display the pop-up menu by single-clicking mouse button 2. 
  15040.  3. Select the Unreplace choice.  Note that only classes that have already been 
  15041.     replaced are valid. 
  15042.  4. Fill-in the following input fields: Original class and Replacement class. 
  15043.  
  15044. Input Fields 
  15045.  
  15046. Original class 
  15047.      is the name of the replaced object class being returned to its original 
  15048.      object class in the Workplace. 
  15049.  
  15050. Replacement class 
  15051.      if the name of the replaced object class being returned to its original 
  15052.      object class. 
  15053.  
  15054. Related Information: 
  15055.  
  15056. o Create an instance of a workplace object class 
  15057. o Replace a workplace object class 
  15058. o Add a workplace object class 
  15059. o Delete a workplace object class 
  15060.  
  15061.  
  15062. ΓòÉΓòÉΓòÉ <hidden> WP Class List - Add a Workplace Object Class ΓòÉΓòÉΓòÉ
  15063.  
  15064. To add a class to the Workplace Shell: 
  15065.  
  15066.  1. Display the pop-up menu by single-clicking mouse button 2. 
  15067.  2. Select the Add Class choice. 
  15068.  3. Fill-in the following input fields: New class name and Library module. 
  15069.  
  15070. Input Fields 
  15071.  
  15072. New class name 
  15073.      is the name of object class you want to add to the Workplace. Type the 
  15074.      class name exactly as it is built, case sensitive. 
  15075.  
  15076. Library module 
  15077.      is the name of the dynamic link library (DLL) that holds the object 
  15078.      definition.  Type the library name with complete file specification 
  15079.      information. 
  15080.  
  15081.      Note:  The DLL must be created by the IBM System Object Model. 
  15082.  
  15083.  
  15084. Related Information: 
  15085.  
  15086. o Create an instance of a workplace object class 
  15087. o Replace a workplace object class 
  15088. o Unreplace a workplace object class 
  15089. o Delete a workplace object class 
  15090.  
  15091.  
  15092. ΓòÉΓòÉΓòÉ <hidden> WP Class List - Delete an Object Class ΓòÉΓòÉΓòÉ
  15093.  
  15094. To delete a class from the Workplace Shell: 
  15095.  
  15096.  1. Select the class you want to delete from the list on the workplace object 
  15097.     class window. 
  15098.  2. Display the pop-up menu by single-clicking mouse button 2. 
  15099.  3. Select the Delete a Class choice. 
  15100.  4. Fill-in the name of the class you want to delete from the Workplace. 
  15101.  
  15102. Note:  You cannot delete system predefined classes.  For example, WPObject or 
  15103.        WPClass. 
  15104.  
  15105. Related Information: 
  15106.  
  15107. o Create an instance of a workplace object class 
  15108. o Replace a workplace object class 
  15109. o Unreplace a workplace object class 
  15110. o Add a workplace object class 
  15111.