home *** CD-ROM | disk | FTP | other *** search
/ Microsoft Programmer's Library 1.3 / Microsoft-Programers-Library-v1.3.iso / books / mseditor.db < prev    next >
Encoding:
Text File  |  1991-03-01  |  586.5 KB  |  9,522 lines

  1. %@1@%%@AB@%Microsoft Editor User's Guide for MS OS/2 and MS-DOS Operating Systems%@AE@%%@EH@%%@NL@%
  2. %@NL@%
  3. %@4@%MICROSOFT CORPORATION Information in this document is subject to change%@EH@%
  4. without notice and does not represent a commitment on the part of Microsoft
  5. Corporation. The software described in this document is furnished under a
  6. license agreement or nondisclosure agreement. The software may be used or
  7. copied only in accordance with the terms of the agreement. It is against the
  8. law to copy the software on any medium except as specifically allowed in the
  9. license or nondisclosure agreement. No part of this manual may be reproduced
  10. or transmitted in any form or by any means, electronic or mechanical,
  11. including photocopying and recording, for any purpose without the express
  12. written permission of Microsoft.%@NL@%
  13. %@NL@%
  14. (c)Copyright Microsoft Corporation, 1987-1989. All rights reserved.
  15. Simultaneously published in the U.S. and Canada.%@NL@%
  16. %@NL@%
  17. Printed and bound in the United States of America.%@NL@%
  18. %@NL@%
  19. Microsoft, MS, MS-DOS, CodeView, and XENIX are registered trademarks of
  20. Microsoft Corporation.%@NL@%
  21. %@NL@%
  22. BRIEF is a registered trademark of UnderWare, Inc.%@NL@%
  23. %@NL@%
  24. Epsilon is a trademark of Lugaru Software, Ltd.%@NL@%
  25. %@NL@%
  26. IBM is a registered trademark of International Business Machines
  27. Corporation.%@NL@%
  28. %@NL@%
  29. Tandy is a registered trademark of Tandy Corporation.%@NL@%
  30. %@NL@%
  31. UNIX is a registered trademark of American Telephone and Telegraph Company.%@NL@%
  32. %@NL@%
  33. WordStar is a registered trademark of MicroPro International Corporation.%@NL@%
  34. %@NL@%
  35. Document No. LN0801B-500-R00-0889%@NL@%
  36. Part No. 07823%@NL@%
  37. 10 9 8 7 6 5 4 3 2 1%@NL@%
  38. %@NL@%
  39. %@NL@%
  40. %@CR:MSETOC00@%%@1@%%@AB@%Table of Contents%@AE@%%@EH@%%@NL@%
  41. ───────────────────────────────────────────────────────────────────────────%@NL@%
  42. %@NL@%
  43. Chapter 1%@BO:    370a@%  Introduction%@NL@%
  44. Chapter 2%@BO:    7023@%  Edit Now%@NL@%
  45. Chapter 3%@BO:    d239@%  Command Syntax%@NL@%
  46. Chapter 4%@BO:   120e2@%  A Survey of the Editor's Commands%@NL@%
  47. Chapter 5%@BO:   206bc@%  Regular Expressions%@NL@%
  48. Chapter 6%@BO:   28e3a@%  Function Assignments and Macros%@NL@%
  49. Chapter 7%@BO:   3396c@%  Switches, Assignments, and the TOOLS.INI File%@NL@%
  50. Chapter 8%@BO:   3fbeb@%  Programming C Extensions%@NL@%
  51. Chapter 9%@BO:   50fea@%  C-Extension Functions%@NL@%
  52. %@NL@%
  53. %@AB@%Appendixes%@AE@%%@NL@%
  54. Appendix A%@BO:   5d119@%  Reference Tables%@NL@%
  55. Appendix B%@BO:   765d4@%  Support Programs for the Microsoft Editor%@NL@%
  56. Appendix C%@BO:   76d41@%  Microsoft Editor Messages%@NL@%
  57. %@NL@%
  58. %@AB@%Glossary%@BO:   860fe@%%@AE@%%@NL@%
  59. %@NL@%
  60. %@AB@%Index%@BO:   88e6d@%%@AE@%%@NL@%
  61. %@NL@%
  62. %@NL@%
  63. %@CR:MSETOCO0@%%@1@%%@AB@%Table of Contents Overview%@AE@%%@EH@%%@NL@%
  64. ───────────────────────────────────────────────────────────────────────────%@NL@%
  65. %@NL@%
  66. %@AB@%Chapter 1%@BO:    370a@%  Introduction%@AE@%%@NL@%
  67. 1.1%@BO:    4313@%  Editing Capabilities%@NL@%
  68. 1.2%@BO:    4be3@%  System Requirements%@NL@%
  69. 1.3%@BO:    4d45@%  Using This Manual%@NL@%
  70. 1.4%@BO:    53ee@%  Introducing the Microsoft(R) Editor%@NL@%
  71. 1.5%@BO:    5f30@%  Document Conventions%@NL@%
  72. %@NL@%
  73. %@AB@%Chapter 2%@BO:    7023@%  Edit Now%@AE@%%@NL@%
  74. 2.1%@BO:    7746@%  Starting the Editor%@NL@%
  75. 2.2%@BO:    7cc1@%  The Microsoft Editor's Screen%@NL@%
  76. 2.3%@BO:    859e@%  Sample Session%@NL@%
  77.       2.3.1%@BO:    8b05@%  Inserting Text with the Insertmode Function%@NL@%
  78.       2.3.2%@BO:    8e12@%  Removing Text with the Delete Function%@NL@%
  79.       2.3.3%@BO:    9154@%  Using the Arg Function to Specify Text%@NL@%
  80.       2.3.4%@BO:    94b9@%  Canceling and Undoing Commands%@NL@%
  81.       2.3.5%@BO:    9bb3@%  Using Delete to Move Text%@NL@%
  82.       2.3.6%@BO:    a384@%  Finding Strings with the Psearch Function%@NL@%
  83.       2.3.7%@BO:    ab38@%  Inserting Spaces and Lines%@NL@%
  84.       2.3.8%@BO:    af34@%  Exiting the Editor%@NL@%
  85. 2.4%@BO:    b16a@%  Getting Help%@NL@%
  86.       2.4.1%@BO:    b45a@%  Starting On-Line Help%@NL@%
  87.       2.4.2%@BO:    b81a@%  Moving through On-Line Help%@NL@%
  88.       2.4.3%@BO:    b9ae@%  Leaving On-Line Help%@NL@%
  89. 2.5%@BO:    bc2e@%  The Microsoft Editor's Command Line%@NL@%
  90. 2.6%@BO:    cf04@%  Hints for Using the Editor%@NL@%
  91. %@NL@%
  92. %@AB@%Chapter 3%@BO:    d239@%  Command Syntax%@AE@%%@NL@%
  93. 3.1%@BO:    d5f7@%  Entering a Command%@NL@%
  94. 3.2%@BO:    df64@%  Naming Conventions for Functions%@NL@%
  95. 3.3%@BO:    e83e@%  Argument Types%@NL@%
  96. 3.4%@BO:    ef06@%  Text Arguments (numarg, markarg, textarg)%@NL@%
  97.       3.4.1%@BO:    f671@%  The numarg Type%@NL@%
  98.       3.4.2%@BO:    fa9b@%  The markarg Type%@NL@%
  99.       3.4.3%@BO:    fec9@%  The textarg Type%@NL@%
  100. 3.5%@BO:   101fc@%  Highlighting a Text Argument%@NL@%
  101. 3.6%@BO:   10919@%  Cursor-Movement Arguments (linearg, boxarg, streamarg)%@NL@%
  102.       3.6.1%@BO:   11355@%  The linearg Type%@NL@%
  103.       3.6.2%@BO:   115ce@%  The boxarg Type%@NL@%
  104.       3.6.3%@BO:   119d6@%  The streamarg Type%@NL@%
  105. %@NL@%
  106. %@AB@%Chapter 4%@BO:   120e2@%  A Survey of the Editor's Commands%@AE@%%@NL@%
  107. 4.1%@BO:   125dc@%  Basic File Operations%@NL@%
  108.       4.1.1%@BO:   126c6@%  File Commands%@NL@%
  109.       4.1.2%@BO:   1356e@%  Special Syntax for Setfile%@NL@%
  110.       4.1.3%@BO:   13c6b@%  Pseudo Files%@NL@%
  111. 4.2%@BO:   14909@%  Moving through a File%@NL@%
  112.       4.2.1%@BO:   1503c@%  Scrolling at the Screen's Edge%@NL@%
  113.       4.2.2%@BO:   15496@%  Scrolling a Page at a Time%@NL@%
  114.       4.2.3%@BO:   15a24@%  Moving to the Top or Bottom of the File%@NL@%
  115.       4.2.4%@BO:   15c8d@%  Other File-Navigation Functions%@NL@%
  116. 4.3%@BO:   160c4@%  Inserting, Copying, and Deleting Text%@NL@%
  117.       4.3.1%@BO:   162ea@%  Inserting and Deleting Text%@NL@%
  118.       4.3.2%@BO:   16f75@%  Copying Text%@NL@%
  119.       4.3.3%@BO:   177c9@%  Other Insert Commands%@NL@%
  120.       4.3.4%@BO:   17e67@%  Reading a File into the Current File%@NL@%
  121. 4.4%@BO:   1839c@%  Using File Markers%@NL@%
  122.       4.4.1%@BO:   18cab@%  Functions That Use Markers%@NL@%
  123.       4.4.2%@BO:   193a1@%  Related Functions: Savecur and Restcur%@NL@%
  124. 4.5%@BO:   197b4@%  Searching and Replacing%@NL@%
  125.       4.5.1%@BO:   1a2e0@%  Searching for a Pattern of Text%@NL@%
  126.       4.5.2%@BO:   1a791@%  Searching the File Globally%@NL@%
  127.       4.5.3%@BO:   1ab0e@%  Searching a Series of Files%@NL@%
  128.       4.5.4%@BO:   1b1ae@%  Search-and-Replace Functions%@NL@%
  129. 4.6%@BO:   1bf47@%  Compiling%@NL@%
  130.       4.6.1%@BO:   1c335@%  Invoking Compilers and Other Utilities%@NL@%
  131.       4.6.2%@BO:   1d4d9@%  Viewing Error Output%@NL@%
  132.       4.6.3%@BO:   1e543@%  Viewing the Dynamic-Compile Log%@NL@%
  133. 4.7%@BO:   1ebfe@%  Using Editing Windows%@NL@%
  134. 4.8%@BO:   1f30c@%  Working with Multiple Files%@NL@%
  135. 4.9%@BO:   1fc90@%  Printing a File%@NL@%
  136. %@NL@%
  137. %@AB@%Chapter 5%@BO:   206bc@%  Regular Expressions%@AE@%%@NL@%
  138. 5.1%@BO:   20e9f@%  Choosing the Syntax%@NL@%
  139. 5.2%@BO:   21359@%  UNIX(R) Regular-Expression Syntax%@NL@%
  140.       5.2.1%@BO:   214d8@%  UNIX Regular Expressions as Simple Strings%@NL@%
  141.       5.2.2%@BO:   21754@%  UNIX Special Characters%@NL@%
  142.       5.2.3%@BO:   22c1f@%  Combining UNIX Special Characters%@NL@%
  143.       5.2.4%@BO:   231bc@%  Tagged Expressions in the UNIX Search String%@NL@%
  144.       5.2.5%@BO:   23b94@%  Tagged Expressions in the UNIX Replacement String%@NL@%
  145. 5.3%@BO:   2423b@%  M 1.0 Regular-Expression Syntax%@NL@%
  146.       5.3.1%@BO:   2447a@%  M 1.0 Regular Expressions as Simple Strings%@NL@%
  147.       5.3.2%@BO:   246e9@%  M 1.0 Special Characters%@NL@%
  148.       5.3.3%@BO:   26544@%  Combining M 1.0 Special Characters%@NL@%
  149.       5.3.4%@BO:   26bc3@%  M 1.0 Matching Method%@NL@%
  150.       5.3.5%@BO:   27441@%  Tagged Expressions in the M 1.0 Search String%@NL@%
  151.       5.3.6%@BO:   27df8@%  Tagged Expressions in the M 1.0 Replacement String%@NL@%
  152.       5.3.7%@BO:   2885d@%  Predefined M 1.0 Regular Expressions%@NL@%
  153. %@NL@%
  154. %@AB@%Chapter 6%@BO:   28e3a@%  Function Assignments and Macros%@AE@%%@NL@%
  155. 6.1%@BO:   292f2@%  The Four Techniques for Customizing the Editor%@NL@%
  156. 6.2%@BO:   29ab0@%  Assigning Functions to Keystrokes%@NL@%
  157.       6.2.1%@BO:   2a304@%  Making Function Assignments%@NL@%
  158.       6.2.2%@BO:   2b13c@%  Viewing and Changing Function Assignments%@NL@%
  159.       6.2.3%@BO:   2bbd2@%  Disabling a Keystroke%@NL@%
  160.       6.2.4%@BO:   2c0ab@%  Making a Keystroke Literal%@NL@%
  161. 6.3%@BO:   2cc6a@%  Creating Macros within the Editor%@NL@%
  162.       6.3.1%@BO:   2d250@%  Recording a Macro%@NL@%
  163.       6.3.2%@BO:   2def3@%  Entering a Macro Directly%@NL@%
  164.       6.3.3%@BO:   2eac6@%  Building the Macro List%@NL@%
  165.       6.3.4%@BO:   2ff89@%  Executing a Macro List Directly%@NL@%
  166.       6.3.5%@BO:   302f6@%  Building Macros from Other Macros%@NL@%
  167.       6.3.6%@BO:   30928@%  Handling Prompts within Macros%@NL@%
  168.       6.3.7%@BO:   31159@%  Macros That Take Arguments%@NL@%
  169.       6.3.8%@BO:   320fc@%  Macros That Use Conditionals%@NL@%
  170. %@NL@%
  171. %@AB@%Chapter 7%@BO:   3396c@%  Switches, Assignments, and the TOOLS.INI File%@AE@%%@NL@%
  172. 7.1%@BO:   34011@%  Syntax for Switch Settings%@NL@%
  173. 7.2%@BO:   34b62@%  Using Switches to Configure the Editor%@NL@%
  174.       7.2.1%@BO:   34f56@%  Changing Start-Up Conditions%@NL@%
  175.       7.2.2%@BO:   35678@%  Changing Scrolling Behavior%@NL@%
  176.       7.2.3%@BO:   35a6f@%  Setting Screen Colors with fgcolor%@NL@%
  177.       7.2.4%@BO:   367cb@%  Setting Colors for Other Parts of the Screen%@NL@%
  178.       7.2.5%@BO:   370ae@%  Changing the Look and Feel of Help%@NL@%
  179.       7.2.6%@BO:   37eeb@%  Controlling Use of Tabs%@NL@%
  180.       7.2.7%@BO:   39cc2@%  Changing How the Editor Handles Trailing Spaces%@NL@%
  181.       7.2.8%@BO:   3a3f0@%  Changing Screen Height%@NL@%
  182. 7.3%@BO:   3a7a5@%  Special Syntax for Text Switches%@NL@%
  183.       7.3.1%@BO:   3ab6d@%  Special Syntax for extmake and readonly%@NL@%
  184.       7.3.2%@BO:   3b101@%  Special Syntax for load, markfile, and helpfiles%@NL@%
  185. 7.4%@BO:   3b535@%  Sample TOOLS.INI File%@NL@%
  186. 7.5%@BO:   3c086@%  The Structure of the TOOLS.INI File%@NL@%
  187.       7.5.1%@BO:   3c8ac@%  Creating Sections with Tags%@NL@%
  188.       7.5.2%@BO:   3dbb2@%  Using Comments%@NL@%
  189.       7.5.3%@BO:   3dea7@%  Line Continuation%@NL@%
  190.       7.5.4%@BO:   3e36a@%  Assignments and Macros%@NL@%
  191. 7.6%@BO:   3eb8b@%  Configuring On-Line Help%@NL@%
  192.       7.6.1%@BO:   3f48a@%  Controlling Search Order%@NL@%
  193.       7.6.2%@BO:   3f896@%  Default Help File Search%@NL@%
  194. %@NL@%
  195. %@AB@%Chapter 8%@BO:   3fbeb@%  Programming C Extensions%@AE@%%@NL@%
  196. 8.1%@BO:   4042f@%  Requirements%@NL@%
  197. 8.2%@BO:   4095b@%  How C Extensions Work%@NL@%
  198. 8.3%@BO:   41570@%  Writing a C Extension%@NL@%
  199.       8.3.1%@BO:   41aca@%  Required Objects%@NL@%
  200.       8.3.2%@BO:   41eff@%  The Switch Table%@NL@%
  201.       8.3.3%@BO:   42a57@%  The Command Table%@NL@%
  202.       8.3.4%@BO:   44776@%  The WhenLoaded Function%@NL@%
  203.       8.3.5%@BO:   44a45@%  Defining the Editing Function%@NL@%
  204. 8.4%@BO:   45aeb@%  Programming Your Function%@NL@%
  205.       8.4.1%@BO:   46181@%  Getting a File Handle%@NL@%
  206.       8.4.2%@BO:   469d5@%  Interpreting the User-Defined Argument%@NL@%
  207.       8.4.3%@BO:   470c5@%  The NOARG Type%@NL@%
  208.       8.4.4%@BO:   4764d@%  The NULLARG Type%@NL@%
  209.       8.4.5%@BO:   47ceb@%  The TEXTARG Type%@NL@%
  210.       8.4.6%@BO:   48541@%  The LINEARG Type%@NL@%
  211.       8.4.7%@BO:   48c3b@%  The STREAMARG Type%@NL@%
  212.       8.4.8%@BO:   494b0@%  The BOXARG Type%@NL@%
  213.       8.4.9%@BO:   49cca@%  Modifying the Current File%@NL@%
  214. 8.5%@BO:   4a7bb@%  Compiling and Linking%@NL@%
  215.       8.5.1%@BO:   4ab20@%  Compiling and Linking for Real Mode%@NL@%
  216.       8.5.2%@BO:   4b1b6@%  Compiling and Linking for Protected Mode%@NL@%
  217.       8.5.3%@BO:   4b796@%  Loading Your Extension%@NL@%
  218. 8.6%@BO:   4d33a@%  A C-Extension Sample Program%@NL@%
  219. 8.7%@BO:   4fa83@%  Calling Library Functions%@NL@%
  220. %@NL@%
  221. %@AB@%Chapter 9%@BO:   50fea@%  C-Extension Functions%@AE@%%@NL@%
  222. AddFile%@BO:   51608@%%@NL@%
  223. BadArg%@BO:   51d7a@%%@NL@%
  224. CopyBox%@BO:   5238e@%%@NL@%
  225. CopyLine%@BO:   52d82@%%@NL@%
  226. CopyStream%@BO:   5376c@%%@NL@%
  227. DelBox%@BO:   53fde@%%@NL@%
  228. DelFile%@BO:   546d9@%%@NL@%
  229. DelLine%@BO:   54cad@%%@NL@%
  230. DelStream%@BO:   55335@%%@NL@%
  231. Display%@BO:   55abb@%%@NL@%
  232. DoMessage%@BO:   55f94@%%@NL@%
  233. fExecute%@BO:   563e5@%%@NL@%
  234. FileLength%@BO:   56b4d@%%@NL@%
  235. FileNameToHandle%@BO:   57001@%%@NL@%
  236. FileRead%@BO:   577dc@%%@NL@%
  237. FileWrite%@BO:   57f2d@%%@NL@%
  238. GetCursor%@BO:   58886@%%@NL@%
  239. GetLine%@BO:   58d95@%%@NL@%
  240. KbHook%@BO:   595af@%%@NL@%
  241. KbUnHook%@BO:   598b1@%%@NL@%
  242. MoveCur%@BO:   59ead@%%@NL@%
  243. pFileToTop%@BO:   5a4d2@%%@NL@%
  244. PutLine%@BO:   5a976@%%@NL@%
  245. ReadChar%@BO:   5b0be@%%@NL@%
  246. ReadCmd%@BO:   5ba9c@%%@NL@%
  247. RemoveFile%@BO:   5be9e@%%@NL@%
  248. Replace%@BO:   5c466@%%@NL@%
  249. SetKey%@BO:   5cc35@%%@NL@%
  250. %@NL@%
  251. %@AB@%Appendix A%@BO:   5d119@%  Reference Tables%@AE@%%@NL@%
  252. A.1%@BO:   5d1c2@%  Categories of Editing Functions%@NL@%
  253. A.2%@BO:   5ef37@%  Key Assignments for Editing Functions%@NL@%
  254. A.3%@BO:   60b28@%  Comprehensive Listing of Editing Functions%@NL@%
  255. A.4%@BO:   700be@%  Return Values of Editing Functions%@NL@%
  256. A.5%@BO:   72116@%  Editor Switches%@NL@%
  257. %@NL@%
  258. %@AB@%Appendix B%@BO:   765d4@%  Support Programs for the Microsoft Editor%@AE@%%@NL@%
  259. B.1%@BO:   76895@%  UNDEL.EXE%@NL@%
  260. B.2%@BO:   76ad7@%  EXP.EXE%@NL@%
  261. %@NL@%
  262. %@AB@%Appendix C%@BO:   76d41@%  Microsoft Editor Messages%@AE@%%@NL@%
  263. C.1%@BO:   77192@%  Messages Starting with Placeholders%@NL@%
  264. C.2%@BO:   78741@%  Other Messages%@NL@%
  265. %@NL@%
  266. %@AB@%Glossary%@BO:   860fe@%%@AE@%%@NL@%
  267. %@NL@%
  268. %@AB@%Index%@BO:   88e6d@%%@AE@%%@NL@%
  269. %@NL@%
  270. %@NL@%
  271. %@AB@%Listing of Tables%@AE@%%@NL@%
  272. %@NL@%
  273. Table 5.1%@BO:   28999@%  Predefined Expressions%@NL@%
  274. Table 6.1%@BO:   324a9@%  Macro Conditionals%@NL@%
  275. Table 7.1%@BO:   35f29@%  Colors and Numeric Values%@NL@%
  276. Table 8.1%@BO:   435cc@%  Meaning of cmdTable Flags%@NL@%
  277. Table 8.2%@BO:   505ed@%  Summary of Extension Functions by Category%@NL@%
  278. Table A.1%@BO:   5d2a3@%  Summary of Editing Functions by Category%@NL@%
  279. Table A.2%@BO:   5f038@%  Function Assignments%@NL@%
  280. Table A.3%@BO:   60c4c@%  Comprehensive List of Functions%@NL@%
  281. Table A.4%@BO:   701fe@%  Editor Functions and Return Values%@NL@%
  282. Table A.5%@BO:   7225b@%  Editor Switches%@NL@%
  283. %@NL@%
  284. %@NL@%
  285. %@CR:MSE10000@%%@1@%%@AB@%Chapter 1  Introduction%@AE@%%@EH@%%@NL@%
  286. ───────────────────────────────────────────────────────────────────────────%@NL@%
  287. %@NL@%
  288. %@CR:MSE10001@%%@4@%The Microsoft(R) Editor is the first full-screen editor to run under both%@EH@%
  289. OS/2 systems and DOS (Versions 2.1 and above). You can use the editor to
  290. write programs, modify text files, and, under OS/2, run language translators
  291. and other utilities in the background.%@NL@%
  292. %@NL@%
  293. %@CR:MSE10002@%%@4@%The Microsoft Editor was specially developed as a programmer's editor. It%@EH@%
  294. offers an unsurpassed ability to work efficiently with many different files
  295. in different directories, to interact with the environment, and to undo or
  296. redo a whole series of commands. As a programmer, you can work faster and
  297. more efficiently by using some of these features:%@NL@%
  298. %@NL@%
  299. %@CR:MSE10003@%  ■  %@AB@%Compile and link programs from within the editor%@AE@%%@NL@%
  300. %@NL@%
  301.      Improve your productivity. The Microsoft Editor is more than a text%@NL@%
  302.      editor; it is a development environment. Develop programs more quickly%@NL@%
  303.      by compiling from within the editor. If the compilation fails, view the%@NL@%
  304.      errors, rewrite the program, and recompile──all without leaving the%@NL@%
  305.      editor.%@NL@%
  306. %@NL@%
  307.   ■  %@AB@%Create new editing functions in C or assembly language%@AE@%%@NL@%
  308. %@NL@%
  309.      Extend the editor's power by writing new functions. If you know how to%@NL@%
  310.      program in C or assembly language, you can quickly learn how to write%@NL@%
  311.      new modules for the Microsoft Editor. These modules involve no%@NL@%
  312.      preprocessing; they become part of the editor itself and therefore run%@NL@%
  313.      as fast as standard editing commands.%@NL@%
  314. %@NL@%
  315.   ■  %@AB@%Customize the editor to suit your needs%@AE@%%@NL@%
  316. %@NL@%
  317.      Control how the editor behaves. The editor uses a special%@NL@%
  318.      initialization file, TOOLS.INI, in which you can easily specify your%@NL@%
  319.      own preferences for function keystrokes, screen colors, tabs, margins,%@NL@%
  320.      and many other kinds of editor behavior. You can even specify%@NL@%
  321.      preferences specific to type of file so that as you move between .C and%@NL@%
  322.      .FOR files, the editor alters its settings.%@NL@%
  323. %@NL@%
  324. %@CR:MSE10004@%%@4@%This manual is a substantial revision of the %@AI@%Microsoft%@AE@% %@AI@%Editor User's Guide%@AE@%%@EH@%
  325. for Version 1.0 of the editor. This manual has an expanded index, more
  326. examples, detailed instructions for configuring the editor, and complete
  327. documentation for writing editing functions in C.%@NL@%
  328. %@NL@%
  329. %@CR:MSE10010@%%@4@%%@AB@%A Note about Operating-System Terms%@AE@%%@EH@%%@NL@%
  330. %@NL@%
  331. %@CR:MSE10011@%%@4@%Microsoft documentation uses the term "OS/2" to refer to the OS/2%@EH@%
  332. systems──Microsoft Operating System/2 (MS(R) OS/2) and IBM(R) OS/2.
  333. Similarly, the term "DOS" refers to both the MS-DOS(R) and IBM Personal
  334. Computer DOS operating systems. The name of a specific operating system is
  335. used when it is necessary to note features unique to that system.%@NL@%
  336. %@NL@%
  337. %@NL@%
  338. %@CR:MSE11000@%%@2@%%@AB@%1.1  Editing Capabilities%@AE@%%@EH@%%@NL@%
  339. %@NL@%
  340. %@CR:MSE11001@%%@4@%Not only can the editor be customized, but it also supports many powerful%@EH@%
  341. editing features:%@NL@%
  342. %@NL@%
  343. %@CR:MSE11002@%  ■  %@AB@%Use a full range of file-editing commands%@AE@%%@NL@%
  344. %@NL@%
  345.      The editor supports a comprehensive range of file operations. You can%@NL@%
  346.      load, merge, or save files, with or without exiting. You can execute%@NL@%
  347.      the DOS or OS/2 shell, send highlighted areas to the printer, or insert%@NL@%
  348.      program output directly into a file. The editor also supports a wide%@NL@%
  349.      range of pattern-search and replacement functions.%@NL@%
  350. %@NL@%
  351.   ■  %@AB@%Save time with powerful block operations%@AE@%%@NL@%
  352. %@NL@%
  353.      You can manipulate different kinds of text blocks. For example, you can%@NL@%
  354.      insert or delete ordinary sequences of characters between two file%@NL@%
  355.      positions. You can also insert or delete rectangular areas, called%@NL@%
  356.      "boxes." Box-shaped regions are highly useful for indenting paragraphs%@NL@%
  357.      or moving columns of text.%@NL@%
  358. %@NL@%
  359.   ■  %@AB@%Save typing effort with macros%@AE@%%@NL@%
  360. %@NL@%
  361.      The Microsoft Editor includes a convenient macro language. A macro is a%@NL@%
  362.      command that performs a series of predefined actions; for example, a%@NL@%
  363.      macro can insert a given phrase or word or perform an entire series of%@NL@%
  364.      editing commands. Define a macro, then invoke it with one keystroke.%@NL@%
  365. %@NL@%
  366.   ■  %@AB@%Edit complex files with windows%@AE@%%@NL@%
  367. %@NL@%
  368.      When editing a large file, you may want to view different parts of the%@NL@%
  369.      file simultaneously. With the Microsoft Editor, you can split up your%@NL@%
  370.      screen into as many as eight windows──each displaying a different part%@NL@%
  371.      of the file (or parts of different files).%@NL@%
  372. %@NL@%
  373.   ■  %@AB@%Handle multiple source files%@AE@%%@NL@%
  374. %@NL@%
  375.      A simple command switches you among the files you are working on──you%@NL@%
  376.      never have to leave the editor and start it up again to work on a%@NL@%
  377.      different file. As the editor moves between files, it saves the last%@NL@%
  378.      cursor position and other relevant information.%@NL@%
  379. %@NL@%
  380. %@NL@%
  381. %@CR:MSE12000@%%@2@%%@AB@%1.2  System Requirements%@AE@%%@EH@%%@NL@%
  382. %@NL@%
  383. %@CR:MSE12001@%%@4@%To use the Microsoft Editor, you need OS/2 1.0 or DOS 2.1 or later and at%@EH@%
  384. least 128 kilobytes (K) of available memory. A minimum of 150K of available
  385. memory is required to use the C extensions described in Chapter 8%@BO:   3fbeb@%.%@NL@%
  386. %@NL@%
  387. %@NL@%
  388. %@CR:MSE13000@%%@2@%%@AB@%1.3  Using This Manual%@AE@%%@EH@%%@NL@%
  389. %@NL@%
  390. %@CR:MSE13001@%%@4@%The following list gives the chapter or section you should read to learn%@EH@%
  391. about a particular topic:%@NL@%
  392. %@CR:MSE13002@%%@NL@%
  393. %@TH:   32   1434  2 37 39 @%
  394. %@AB@%Topic                                Chapter or Section%@AE@%
  395.  
  396. Using the editor right away          Chapter 2%@BO:    7023@%, "Edit Now"
  397.  
  398. Starting the editor using options    Section 2.5%@BO:    bc2e@%, "The Microsoft
  399. and file names                       Editor's Command Line"
  400.  
  401. Entering arguments to editing        Chapter 3%@BO:    d239@%, "Command Syntax"
  402. functions
  403.  
  404. Using the most common editing        Chapter 4%@BO:   120e2@%, "A Survey of the
  405. commands, including file             Editor's Commands"
  406. operations, compiling, and
  407. windows
  408.  
  409. Using regular expressions with       Chapter 5%@BO:   206bc@%, "Regular Expressions"
  410. the editor
  411.  
  412. Customizing the editor by            Chapter 6%@BO:   28e3a@%, "Function Assignments
  413. changing function-to-key             and Macros," and Chapter 7%@BO:   3396c@%,
  414. assignments and basic conditions,    "Switches, Assignments, and the
  415. such as screen colors                TOOLS.INI File"
  416.  
  417. Writing new editing functions in     Chapter 8%@BO:   3fbeb@%, "Programming C
  418. C or assembly language               Extensions," and Chapter 9%@BO:   50fea@%,
  419.                                      "C-Extension Functions"
  420.  
  421. Getting quick reference to           Appendix A, "Reference Tables,"
  422. commands and switches                and the index
  423.  
  424. Using the accompanying utilities:    Appendix B, "Support Programs for
  425. UNDEL and EXP                        the Microsoft Editor"
  426. %@TE:   32   1434  2 37 39 @%
  427. %@NL@%
  428. %@NL@%
  429. %@CR:MSE14000@%%@2@%%@AB@%1.4  Introducing the Microsoft(R) Editor%@AE@%%@EH@%%@NL@%
  430. %@NL@%
  431. %@CR:MSE14001@%%@4@%You'll find the Microsoft Editor easy to use once you understand the%@EH@%
  432. function-argument model it uses for executing commands. Each command
  433. consists of a function that may or may not be given input in the form of an
  434. "argument."%@NL@%
  435. %@NL@%
  436. %@CR:MSE14002@%%@4@%The Microsoft Editor uses a "reverse Polish" command structure. That is, you%@EH@%
  437. specify the argument first, then give the command function. For example, if
  438. you want to load a file, you first specify the file name, then invoke the
  439. file loading function.%@NL@%
  440. %@NL@%
  441. %@CR:MSE14003@%%@4@%All Microsoft Editor functions work in this fashion. This arrangement is%@EH@%
  442. different from that of conventional editors where you would choose the file
  443. loading function first, then specify the desired file. This "argument first,
  444. function second" sequence gives the Microsoft Editor unique advantages:%@NL@%
  445. %@NL@%
  446. %@CR:MSE14004@%  ■  A single function can process different types of arguments, such as%@NL@%
  447.      high-lighted blocks of text, a word or number typed on the dialog line,%@NL@%
  448.      or the word at the current cursor position. Almost all functions work%@NL@%
  449.      with all data types, so there aren't too many arbitrary details to%@NL@%
  450.      memorize.%@NL@%
  451. %@NL@%
  452.   ■  It's easy to write macros because almost every action can be expressed%@NL@%
  453.      as a function name. Macros are likewise easy to understand──you won't%@NL@%
  454.      have trouble understanding another person's macro, or a macro %@AI@%you%@AE@% wrote%@NL@%
  455.      six months ago.%@NL@%
  456. %@NL@%
  457. %@CR:MSE14005@%%@4@%Function names follow a consistent pattern. For example, functions that%@EH@%
  458. involve forward movement usually start with P (for "plus"). Functions that
  459. involve backward movement usually start with M (for "minus").%@NL@%
  460. %@NL@%
  461. %@CR:MSE14006@%%@4@%Before using the Microsoft Editor, run the installation program for your%@EH@%
  462. Microsoft language product. The installation program sets up the powerful
  463. on-line Help, which provides on-line information for editing functions and
  464. the standard C library. It is recommended that you select the default
  465. keystroke configuration in order to work through the early chapters of this
  466. manual.%@NL@%
  467. %@NL@%
  468. ───────────────────────────────────────────────────────────────────────────%@NL@%
  469. %@AI@%NOTE%@AE@%%@NL@%
  470.    If you choose to customize the Microsoft Editor during installation, its%@NL@%
  471.    function-key assignments will match those of BRIEF(R), Epsilon(TM), or%@NL@%
  472.    the Microsoft "Quick" Environment. This book describes the uncustomized%@NL@%
  473.    version of the Microsoft Editor, so the commands described will not%@NL@%
  474.    always match those on your version of the editor.%@NL@%
  475. ───────────────────────────────────────────────────────────────────────────%@NL@%
  476. %@NL@%
  477. %@NL@%
  478. %@CR:MSE15000@%%@2@%%@AB@%1.5  Document Conventions%@AE@%%@EH@%%@NL@%
  479. %@NL@%
  480. %@CR:MSE15001@%%@4@%The following document conventions are used throughout this manual and apply%@EH@%
  481. in particular to syntax displays for commands and switches:%@NL@%
  482. %@CR:MSE15002@%%@NL@%
  483. %@TH:   78   4027  3 31 45 @%
  484. %@AB@%Example of%@AE@%
  485. %@AB@%Convention                     Description%@AE@%
  486.  
  487. %@AB@%AddFile%@AE@%                        Boldface type always marks
  488.                                standard features of programming
  489.                                languages (keywords, operators,
  490.                                and functions) and editor
  491.                                switches.
  492.  
  493. %@AS@%$INIT: tools.ini%@AE@%               This font is used to indicate all
  494.                                example programs, user input, and
  495.                                screen output.
  496.  
  497. %@AI@%placeholders%@AE@%                   Words in italics indicate a
  498.                                Microsoft Editor function, a
  499.                                field, or a general kind of
  500.                                information; you must supply the
  501.                                particular value. For example, %@AI@%%@AE@%
  502.                                %@AI@%numarg%@AE@% represents a numerical
  503.                                argument that you type in from
  504.                                the keyboard. You could type in a
  505.                                number, such as %@AS@%15%@AE@%, but you would
  506.                                not type in the word%@AB@%%@AE@%"%@AI@%numarg%@AE@%"
  507.                                itself.
  508.  
  509. Repeating elements...          Three dots following an item
  510.                                indicate more items having the
  511.                                same form may appear.
  512.  
  513. %@AS@%Program %@AE@%                       A column of three dots tells you
  514. %@AS@%    . %@AE@%                         part of a program has been
  515. %@AS@%    . %@AE@%                         intentionally omitted.
  516. %@AS@%    .%@AE@%
  517. %@AS@%Fragment%@AE@%
  518.  
  519. SHIFT                          Names of keys on the keyboard
  520.                                appear in small capital letters.
  521.                                Notice that a plus (+) indicates
  522.                                a combination of keys. For
  523.                                example, CTRL+E means to hold
  524.                                down the CTRL key while pressing
  525.                                the E key.
  526.  
  527.                                The names of the keys in this
  528.                                manual correspond to the key
  529.                                names printed on the IBM Personal
  530.                                Computer keyboard. If you are
  531.                                using a different machine, these
  532.                                keys may have slightly different
  533.                                names.
  534.  
  535.                                The cursor-movement keys
  536.                                (sometimes called "arrow" keys)
  537.                                located on the numeric keypad to
  538.                                the right of the main keypad are
  539.                                called the DIRECTION keys.
  540.                                Individual DIRECTION keys are
  541.                                called either by the direction of
  542.                                the arrow on the key top (LEFT,
  543.                                RIGHT, UP, DOWN) or the name on
  544.                                the key top (PGUP, PGDN).
  545.  
  546.                                Some of the Microsoft Editor's
  547.                                functions use the +, -, or number
  548.                                keys on the numeric keypad rather
  549.                                than the ones on the top row of
  550.                                the main keyboard. At each
  551.                                instance, the text notes the use
  552.                                of keys from the numeric keypad.
  553.  
  554.                                The carriage-return key,
  555.                                sometimes unnamed but marked with
  556.                                a bent arrow, is called the ENTER
  557.                                key.
  558.  
  559. "Commands"                     The first time a new term is
  560.                                defined, it is enclosed in
  561.                                quotation marks.
  562. %@TE:   78   4027  3 31 45 @%
  563. %@NL@%
  564. %@NL@%
  565. %@CR:MSE20000@%%@1@%%@AB@%Chapter 2  Edit Now%@AE@%%@EH@%%@NL@%
  566. ───────────────────────────────────────────────────────────────────────────%@NL@%
  567. %@NL@%
  568. %@CR:MSE20001@%%@4@%This chapter shows you how to use the Microsoft Editor right away by%@EH@%
  569. focusing on the functions you need to create a simple text file. "Functions"
  570. are built-in editing capabilities you invoke to perform actions. Most of the
  571. chapter consists of a tutorial that uses a specific example and features the
  572. following functions:%@NL@%
  573. %@NL@%
  574. %@CR:MSE20002@%%@AB@%Function                              Default Keystroke%@AE@%%@NL@%
  575. %@NL@%
  576. Cursor movement                       DIRECTION keys, HOME, END%@NL@%
  577. %@NL@%
  578. %@AI@%Insertmode%@AE@%                            INS%@NL@%
  579. %@AI@%Delete%@AE@%                                DEL%@NL@%
  580. %@AI@%Arg%@AE@% (introduce argument)              ALT+A%@NL@%
  581. %@AI@%Cancel%@AE@%                                ESC%@NL@%
  582. %@AI@%Undo%@AE@%                                  ALT+BKSP%@NL@%
  583. %@AI@%Paste%@AE@%                                 SHIFT+INS%@NL@%
  584. %@AI@%Psearch%@AE@% (forward search)              F3%@NL@%
  585. %@AI@%Linsert%@AE@% (insert new line)             CTRL+N%@NL@%
  586. %@AI@%Exit%@AE@%                                  F8%@NL@%
  587. %@AI@%Help%@AE@%                                  F1%@NL@%
  588. %@NL@%
  589. %@CR:MSE20003@%%@4@%You can use this tutorial either by starting the editor and typing in each%@EH@%
  590. command as shown, or you can simply read along. Because the results are
  591. explained at each stage, you can get a good understanding of the editor just
  592. by reading.%@NL@%
  593. %@NL@%
  594. %@CR:MSE20004@%%@4@%The chapter ends by presenting the complete command line for the editor with%@EH@%
  595. all the possible options you may use, a complete list of items on the status
  596. line, and some hints for learning the editor.%@NL@%
  597. %@NL@%
  598. %@NL@%
  599. %@CR:MSE21000@%%@2@%%@AB@%2.1  Starting the Editor%@AE@%%@EH@%%@NL@%
  600. %@NL@%
  601. %@CR:MSE21001@%%@4@%Copy the file M.EXE into your current directory or a directory listed in the%@EH@%
  602. PATH environment variable. To run the editor in OS/2 protected mode, copy
  603. the file MEP.EXE. (You may want to rename the file as M.EXE.) Then start the
  604. editor with this command:%@NL@%
  605. %@NL@%
  606.      %@AS@%M NEW.TXT%@AE@%%@NL@%
  607. %@NL@%
  608. %@CR:MSE21002@%%@4@%The Microsoft Editor responds by asking if you want to create a new file%@EH@%
  609. with this name. Press %@AS@%Y%@AE@% to indicate yes. The editor creates the file and
  610. places it in the current directory. You are now ready to enter text.%@NL@%
  611. %@NL@%
  612. ───────────────────────────────────────────────────────────────────────────%@NL@%
  613. %@AI@%NOTE%@AE@%%@NL@%
  614.    If the editor cannot start correctly, it reports an error message. If you%@NL@%
  615.    receive an error message on start-up, consult the list of error messages%@NL@%
  616.    in Appendix C%@BO:   76d41@%. This list of error messages provides explanations,%@NL@%
  617.    along with suggestions for solving the problem.%@NL@%
  618. ───────────────────────────────────────────────────────────────────────────%@NL@%
  619. %@NL@%
  620. %@CR:MSE21003@%%@4@%When you want to exit, press %@AS@%F8%@AE@%. Whenever you want to save your work without%@EH@%
  621. exiting, type the following keystrokes:%@NL@%
  622. %@NL@%
  623.      %@AS@%ALT+A  ALT+A  F2%@AE@%%@NL@%
  624. %@NL@%
  625. %@NL@%
  626. %@CR:MSE22000@%%@2@%%@AB@%2.2  The Microsoft Editor's Screen%@AE@%%@EH@%%@NL@%
  627. %@NL@%
  628. %@CR:MSE22001@%%@4@%When starting the editor with a new file, you see a blank screen, as shown%@EH@%
  629. in Figure 2.1%@FN@%
  630. Figure 2.1 is found on page 9 in the printed version of this guide.%@EF@% below.%@NL@%
  631. %@NL@%
  632. %@CR:MSE22002@%%@4@%The cursor first appears at the upper-left corner of the screen. Even though%@EH@%
  633. the file is empty, you can use the DIRECTION keys──denoted as UP, DOWN,
  634. LEFT, and RIGHT──to move the cursor anywhere on the screen. (The DIRECTION
  635. keys are the arrow keys on the numeric keypad. Newer keyboards may have an
  636. additional set of arrow keys to the left of the numeric keypad.) Try
  637. experimenting with cursor movement.%@NL@%
  638. %@NL@%
  639. ───────────────────────────────────────────────────────────────────────────%@NL@%
  640. %@AI@%NOTE%@AE@%%@NL@%
  641.    The DIRECTION keys on the numeric keypad do not respond unless NUMLOCK is%@NL@%
  642.    off. Press the NUMLOCK key to toggle the numeric keypad lock on and off.%@NL@%
  643. ───────────────────────────────────────────────────────────────────────────%@NL@%
  644. %@NL@%
  645. %@CR:MSE22003@%%@4@%The next-to-bottom line is called the "dialog line," which is reserved for%@EH@%
  646. displaying messages from the editor and letting you enter text arguments.
  647. The bottom line is called the "status line." It always displays the
  648. following fields:%@NL@%
  649. %@NL@%
  650. %@CR:MSE22004@%%@AB@%Field                       Description%@AE@%%@NL@%
  651. %@NL@%
  652. %@AS@%c:\m\new.txt%@AE@%                File name, with complete path%@NL@%
  653. %@NL@%
  654. %@AS@%(text)%@AE@%                      Type of file%@NL@%
  655. %@NL@%
  656. %@AS@%Length=1%@AE@%                    Length of file, in number of lines (minimum%@NL@%
  657.                             value is 1)%@NL@%
  658. %@NL@%
  659. %@AS@%Window=(1,1)%@AE@%                Window or cursor position%@NL@%
  660. %@NL@%
  661. %@NL@%
  662. %@CR:MSE22005@%%@4@%The field %@AS@%Window=(1,1)%@AE@% indicates that the upper-left corner of the screen%@EH@%
  663. corresponds to the first row and column of the file. As you scroll through
  664. files larger then one screen, the numbers in this field change. See Section
  665. 7.2.1%@BO:   34f56@%, "Changing Start-Up Conditions," to learn how to alter this field
  666. so that it displays cursor position instead of window position.%@NL@%
  667. %@NL@%
  668. %@NL@%
  669. %@CR:MSE23000@%%@2@%%@AB@%2.3  Sample Session%@AE@%%@EH@%%@NL@%
  670. %@NL@%
  671. %@CR:MSE23001@%%@4@%Once the Microsoft Editor is started, you can enter text immediately. Simply%@EH@%
  672. start typing and press ENTER when you want to begin a new line. By default,
  673. the editor starts in "overtype" mode, which means that anything you type
  674. replaces the text at the cursor position.The editor also has an "insert"
  675. mode for adding new material without replacing the current text. Insert mode
  676. is explained in the next section.%@NL@%
  677. %@NL@%
  678. %@CR:MSE23002@%%@4@%To begin, type in the following text. There are some intentional errors%@EH@%
  679. you'll correct in a few moments.%@NL@%
  680. %@NL@%
  681.      It's mind over matter.%@NL@%
  682.      What is mind?%@NL@%
  683.      No mat matter.%@NL@%
  684.      Wh is matter?%@NL@%
  685.      Mever mind.%@AH@% %@AE@%%@NL@%
  686. %@NL@%
  687. %@CR:MSE23003@%%@4@%The third, fourth, and fifth lines have errors near the beginning of each%@EH@%
  688. line. To get to the beginning of the fifth line, you can press the LEFT key
  689. until you move to the beginning of the line. However, you can get there
  690. faster by pressing the HOME key. This key moves the cursor to the first
  691. nonblank character in the line.%@NL@%
  692. %@NL@%
  693. %@CR:MSE23004@%%@4@%Now move the cursor to the beginning of the fifth line and correct the error%@EH@%
  694. by typing the letter %@AS@%N%@AE@%:%@NL@%
  695. %@NL@%
  696.      N%@AH@%e%@AE@%ver mind.%@NL@%
  697. %@NL@%
  698. %@NL@%
  699. %@CR:MSE23100@%%@3@%%@AB@%2.3.1  Inserting Text with the Insertmode Function%@AE@%%@EH@%%@NL@%
  700. %@NL@%
  701. %@CR:MSE23101@%%@4@%To insert text in this example, move the cursor to the third position in the%@EH@%
  702. fourth line:%@NL@%
  703. %@NL@%
  704.      Wh%@AH@% %@AE@%is matter?%@NL@%
  705. %@NL@%
  706. %@CR:MSE23102@%%@4@%The letters %@AS@%at%@AE@% need to be inserted at the end of the first word. Press the%@EH@%
  707. INS key to invoke the %@AI@%Insertmode%@AE@% function, which toggles between overtype
  708. and insert mode. You'll see the word %@AS@%insert%@AE@% appear at the end of the status
  709. line. Type the letters %@AS@%at%@AE@% to produce the following line:%@NL@%
  710. %@NL@%
  711.      What%@AH@% %@AE@%is matter?%@NL@%
  712. %@NL@%
  713. %@CR:MSE23103@%%@4@%To return to overtype mode, press INS again.%@EH@%%@NL@%
  714. %@NL@%
  715. %@NL@%
  716. %@CR:MSE23200@%%@3@%%@AB@%2.3.2  Removing Text with the Delete Function%@AE@%%@EH@%%@NL@%
  717. %@NL@%
  718. %@CR:MSE23201@%%@4@%So far, you've used editing functions to replace old text and insert new%@EH@%
  719. text. The third line requires text deletion, so move the cursor to the
  720. beginning of the second word in the third line:%@NL@%
  721. %@NL@%
  722.      No %@AH@%m%@AE@%at matter.%@NL@%
  723. %@NL@%
  724. %@CR:MSE23202@%%@4@%Invoke the %@AI@%Delete%@AE@% function by pressing the DEL key. Each time you press the%@EH@%
  725. DEL key, the character at the cursor position is erased.%@NL@%
  726. %@NL@%
  727. %@CR:MSE23203@%%@4@%It is inconvenient to delete a large amount of text one character at a time.%@EH@%
  728. The %@AI@%Delete%@AE@% function can also remove blocks of text that are specified as
  729. arguments. The next section explains deleting a large block of text.%@NL@%
  730. %@NL@%
  731. %@NL@%
  732. %@CR:MSE23300@%%@3@%%@AB@%2.3.3  Using the Arg Function to Specify Text%@AE@%%@EH@%%@NL@%
  733. %@NL@%
  734. %@CR:MSE23301@%%@4@%The %@AI@%Arg%@AE@% function is assigned to ALT+A; hold down the ALT key and press A to%@EH@%
  735. invoke it. The %@AI@%Arg%@AE@% function does nothing by itself. Rather, it tells the
  736. editor that you are about to introduce an argument that another function
  737. will operate on. (An "argument" is input, such as text or highlighted
  738. characters.)%@NL@%
  739. %@NL@%
  740. %@CR:MSE23302@%%@4@%In this example you'll use the %@AI@%Arg%@AE@% function to highlight the group of%@EH@%
  741. characters you wish to delete. After pressing ALT+A, move the cursor to the
  742. beginning of the third word, as shown in Figure 2.2%@FN@%
  743. Figure 2.2 is found on page 11 in the printed version of this guide.%@EF@% below. Now press DEL,
  744. and the high-lighted characters are removed.%@NL@%
  745. %@NL@%
  746. %@NL@%
  747. %@CR:MSE23400@%%@3@%%@AB@%2.3.4  Canceling and Undoing Commands%@AE@%%@EH@%%@NL@%
  748. %@NL@%
  749. %@CR:MSE23401@%%@4@%If you pressed ALT+A at the wrong time but did not complete the command you%@EH@%
  750. were typing, you can cancel the argument by pressing the ESC key. This
  751. key-stroke invokes the %@AI@%Cancel%@AE@% function. The %@AI@%Cancel%@AE@% function lets you start a
  752. command sequence over again.%@NL@%
  753. %@NL@%
  754. %@CR:MSE23402@%%@4@%If you complete an incorrect command, reverse it by pressing ALT+BKSP (hold%@EH@%
  755. down the ALT key and then press the backspace key). This keystroke invokes
  756. the %@AI@%Undo%@AE@% function. If you invoke %@AI@%Undo%@AE@% again, it reverses the next-to-last
  757. editing command. Invoke %@AI@%Undo%@AE@% a third time, and it reverses the
  758. second-to-last editing command, and so on. The number of commands that the
  759. editor remembers is controlled by the %@AB@%undocount%@AE@% switch. The default number
  760. of commands remembered is 10. See Chapter 7%@BO:   3396c@%, "Switches, Assignments, and
  761. the TOOLS.INI File," for information on how to set switches.%@NL@%
  762. %@NL@%
  763. %@CR:MSE23403@%%@4@%The %@AI@%Meta%@AE@% function (F9) is a prefix, similar to %@AI@%r%@AE@%%@AI@% Arg%@AE@%, which reverses or%@EH@%
  764. alters the effect of a function. You can cancel the effect of the %@AI@%Undo%@AE@%
  765. function with the command sequence %@AI@%Meta%@AE@%%@AI@%Undo%@AE@%:%@NL@%
  766. %@NL@%
  767.      %@AS@%F9 ALT+BKSP%@AE@%%@NL@%
  768. %@NL@%
  769. %@CR:MSE23404@%%@4@%This variation on the %@AI@%Undo%@AE@% function is often called "Redo." If you undo a%@EH@%
  770. series of commands, you can recall each of these commands by using %@AI@%Meta Undo%@AE@%
  771. repeatedly. %@AI@%Undo%@AE@% walks backward through the history of the file (it restores
  772. an earlier state); %@AI@%Meta Undo%@AE@% walks forward.%@NL@%
  773. %@NL@%
  774. %@NL@%
  775. %@CR:MSE23500@%%@3@%%@AB@%2.3.5  Using Delete to Move Text%@AE@%%@EH@%%@NL@%
  776. %@NL@%
  777. %@CR:MSE23501@%%@4@%The %@AI@%Delete%@AE@% function can be used to move text as well as delete it. The last%@EH@%
  778. text deleted is placed on the "Clipboard." The Clipboard holds text selected
  779. by either the %@AI@%Copy%@AE@% or %@AI@%Delete%@AE@% function. Pressing SHIFT+INS invokes the %@AI@%Paste%@AE@%
  780. function, which inserts the contents of the Clipboard into the file at the
  781. present cursor position.%@NL@%
  782. %@NL@%
  783. %@CR:MSE23502@%%@4@%In this section, %@AI@%Delete%@AE@% will be used to move two complete lines of text.%@EH@%
  784. Consider the current text:%@NL@%
  785. %@NL@%
  786.      It's mind over matter.%@NL@%
  787.      What is mind?%@NL@%
  788.      No matter.%@NL@%
  789.      What is matter?%@NL@%
  790.      Never mind.%@NL@%
  791. %@NL@%
  792. %@CR:MSE23503@%%@4@%Move the cursor to the beginning of the fourth line. Select the bottom two%@EH@%
  793. lines by pressing ALT+A and then pressing the DOWN key twice. You should see
  794. the bottom two lines highlighted, as shown in Figure 2.3%@FN@%
  795. Figure 2.3 is found on page 13 in the printed version of this guide.%@EF@% below.%@NL@%
  796. %@NL@%
  797. %@CR:MSE23504@%%@4@%Now invoke the %@AI@%Delete%@AE@% function by pressing DEL. The two lines disappear. The%@EH@%
  798. %@AI@%Delete%@AE@% function deletes the characters you highlight.%@NL@%
  799. %@NL@%
  800. %@CR:MSE23505@%%@4@%Having deleted a block of characters, you are ready to use the %@AI@%Paste%@AE@%%@EH@%
  801. function (SHIFT+INS) to insert the deleted text at a new location. Move the
  802. cursor to the beginning of the top line and press SHIFT+INS. You should see
  803. the following text:%@NL@%
  804. %@NL@%
  805.      What is matter?%@NL@%
  806.      Never mind.%@NL@%
  807.      It's mind over matter.%@NL@%
  808.      What is mind?%@NL@%
  809.      No matter.%@NL@%
  810. %@NL@%
  811. %@CR:MSE23506@%%@4@%You can change the shape of the highlighted region by using the %@AI@%Boxstream%@AE@%%@EH@%
  812. function (CTRL+B), which changes the region into a rectangular area. See
  813. Chapter 3%@BO:    d239@% for more information.%@NL@%
  814. %@NL@%
  815. %@NL@%
  816. %@CR:MSE23600@%%@3@%%@AB@%2.3.6  Finding Strings with the Psearch Function%@AE@%%@EH@%%@NL@%
  817. %@NL@%
  818. %@CR:MSE23601@%%@4@%The %@AI@%Psearch%@AE@% function takes different kinds of arguments but performs the%@EH@%
  819. same general operation with each──searching for a string of text. The term
  820. %@AI@%Psearch%@AE@% stands for "plus search," and means the same thing as "forward
  821. search." This function, which is assigned to the F3 key, takes both text
  822. arguments and cursor-movement arguments. You can ask the editor to locate
  823. the next occurrence of the word %@AS@%mind%@AE@% by typing the word in as a text
  824. argument. Move the cursor to the beginning of the file, then try the
  825. following sequence of keystrokes:%@NL@%
  826. %@NL@%
  827. %@CR:MSE23602@%  1. Press ALT+A%@NL@%
  828.   2. Type the following text: %@AS@%mind%@AE@%%@NL@%
  829.   3. Press F3%@NL@%
  830. %@NL@%
  831. %@CR:MSE23603@%%@4@%As you type the word, it appears on the dialog line──the line just above the%@EH@%
  832. status line at the bottom of the screen. As soon as you press ALT+A and type
  833. the first character, the prompt %@AS@%Arg:%@AE@% appears on the dialog line. You can
  834. retype  characters on the dialog line by pressing BKSP (the backspace key).%@NL@%
  835. %@NL@%
  836. %@CR:MSE23604@%%@4@%You can achieve the same result by moving the cursor to the beginning of the%@EH@%
  837. word %@AS@%mind%@AE@% on the screen, then highlighting the word with the following
  838. sequence of keystrokes:%@NL@%
  839. %@NL@%
  840.      %@AS@%ALT+A RIGHT RIGHT RIGHT RIGHT F3%@AE@%%@NL@%
  841. %@NL@%
  842. %@CR:MSE23606@%%@4@%An even easier way of selecting the word is to give the keystroke sequence%@EH@%
  843. ALT+A F3, which selects the word at the current cursor location. This word
  844. (all characters up to the first blank or new-line character) becomes the
  845. search string.%@NL@%
  846. %@NL@%
  847. %@CR:MSE23607@%%@4@%Often when you use the %@AI@%Psearch%@AE@% function, you want to look repeatedly for%@EH@%
  848. some text string. To search for the text string most recently specified,
  849. press F3 by itself.%@NL@%
  850. %@NL@%
  851. %@NL@%
  852. %@CR:MSE23700@%%@3@%%@AB@%2.3.7  Inserting Spaces and Lines%@AE@%%@EH@%%@NL@%
  853. %@NL@%
  854. %@CR:MSE23701@%%@4@%You'll sometimes need to insert blank lines. There are two ways to do this:%@EH@%%@NL@%
  855. %@NL@%
  856. %@CR:MSE23702@%  1. Press ENTER. When insert mode is on, pressing ENTER inserts a new-line%@NL@%
  857.      character. (Recall that you turn insert mode on and off by pressing%@NL@%
  858.      INS.) Any text to the right of the cursor moves down into the newly%@NL@%
  859.      created line.%@NL@%
  860. %@NL@%
  861.   2. Invoke %@AI@%Linsert%@AE@% (line insert) by pressing CTRL+N. Regardless of cursor%@NL@%
  862.      position, the %@AI@%Linsert%@AE@% function inserts a blank line directly above the%@NL@%
  863.      current line.%@NL@%
  864. %@NL@%
  865. %@CR:MSE23703@%%@4@%%@AI@%Linsert%@AE@% also accepts an argument. Invoke %@AI@%Arg%@AE@% (ALT+A), move the cursor, and%@EH@%
  866. then invoke %@AI@%Linsert%@AE@% (CTRL+N). %@AI@%Linsert%@AE@% inserts as many blank spaces in front
  867. of the highlighted area as the number of characters you highlighted.%@NL@%
  868. %@NL@%
  869. %@NL@%
  870. %@CR:MSE23800@%%@3@%%@AB@%2.3.8  Exiting the Editor%@AE@%%@EH@%%@NL@%
  871. %@NL@%
  872. %@CR:MSE23801@%%@4@%Press F8 to leave the editor. The F8 key sequence invokes the %@AI@%Exit%@AE@% function,%@EH@%
  873. which automatically saves any changes you have made to the file and exits.
  874. The sequence F9 F8 exits without saving, and the sequence ALT+A ALT+A F2
  875. saves your most recent changes to the file without exiting.%@NL@%
  876. %@NL@%
  877. %@CR:MSE23802@%%@4@%See Section 4.1%@BO:   125dc@%, "Basic File Operations," for more information on%@EH@%
  878. loading and saving files.%@NL@%
  879. %@NL@%
  880. %@NL@%
  881. %@CR:MSE24000@%%@2@%%@AB@%2.4  Getting Help%@AE@%%@EH@%%@NL@%
  882. %@NL@%
  883. %@CR:MSE24001@%%@4@%One of the outstanding features of the editor is on-line Help. On-line Help%@EH@%
  884. displays the information you need directly on the screen without your having
  885. to exit the editor. You can quickly get information about any editing
  886. function.%@NL@%
  887. %@NL@%
  888. %@CR:MSE24002@%%@4@%To use the basic on-line Help, you must first run the installation procedure%@EH@%
  889. for the editor and follow all directions. The setup program for this
  890. Microsoft language product should install the editor for you. Installing the
  891. editor is important because it copies the Help files to your directories and
  892. properly configures the editor's initialization file, TOOLS.INI.%@NL@%
  893. %@NL@%
  894. %@NL@%
  895. %@CR:MSE24100@%%@3@%%@AB@%2.4.1  Starting On-Line Help%@AE@%%@EH@%%@NL@%
  896. %@NL@%
  897. %@CR:MSE24101@%%@4@%Press SHIFT+F1 to bring up the first Help screen. On-line Help is largely%@EH@%
  898. self-explanatory. The first screen gives a list of the basic Help commands
  899. and provides access to other parts of the Help system.%@NL@%
  900. %@NL@%
  901. %@CR:MSE24102@%%@4@%Press F1 for context-sensitive Help. "Context-sensitive Help" displays a%@EH@%
  902. Help screen for the word at the current cursor position. The entire word is
  903. used──even if the cursor is in the middle of the word. If the cursor is on a
  904. space, the Help system uses the word immediately preceding the space. Thus
  905. you can type a word, press F1, and get Help for that word.%@NL@%
  906. %@NL@%
  907. %@CR:MSE24103@%%@4@%The editor searches through its list of Help files for a screen%@EH@%
  908. corresponding to the word at the cursor position. If no screen exists for
  909. the topic, the editor displays the first Help screen.%@NL@%
  910. %@NL@%
  911. %@NL@%
  912. %@CR:MSE24200@%%@3@%%@AB@%2.4.2  Moving through On-Line Help%@AE@%%@EH@%%@NL@%
  913. %@NL@%
  914. %@CR:MSE24201@%%@4@%The first Help screen explains how to move between Help screens on different%@EH@%
  915. topics. To move around within a Help topic, use the same keys (DIRECTION
  916. keys, HOME, END, F3) that you use to move through a file. You can use PGUP
  917. and PGDN  to move up or down a page at a time.%@NL@%
  918. %@NL@%
  919. %@NL@%
  920. %@CR:MSE24300@%%@3@%%@AB@%2.4.3  Leaving On-Line Help%@AE@%%@EH@%%@NL@%
  921. %@NL@%
  922. %@CR:MSE24301@%%@4@%By default, the editor splits the screen into two windows when you bring up%@EH@%
  923. a Help screen. You can move between windows by pressing F6. Moving from the
  924. Help window to the editing window lets you continue editing while still
  925. viewing Help information. To close the Help window, press ESC.%@NL@%
  926. %@NL@%
  927. %@CR:MSE24302@%%@4@%Section 7.2.5%@BO:   370ae@%, "Changing the Look and Feel of Help," explains how to%@EH@%
  928. use Help without splitting the screen. If you use this technique, you leave
  929. Help by press-ing F2 or ESC.%@NL@%
  930. %@NL@%
  931. %@NL@%
  932. %@CR:MSE25000@%%@2@%%@AB@%2.5  The Microsoft Editor's Command Line%@AE@%%@EH@%%@NL@%
  933. %@NL@%
  934. %@CR:MSE25001@%%@4@%Use the following command line to start up the editor (the options are case%@EH@%
  935. sensitive):%@NL@%
  936. %@NL@%
  937.      M «/D» «/e %@AI@%command%@AE@%» «/t» «%@AI@%files%@AE@%»%@NL@%
  938. %@NL@%
  939. %@CR:MSE25002@%%@4@%Begin the command line with the base of the editor's actual file name. For%@EH@%
  940. example, if you are using the protected-mode version, the editor's file name
  941. is MEP.EXE. (However, you can rename this file to M.EXE.)%@NL@%
  942. %@NL@%
  943. %@CR:MSE25003@%%@4@%The /D option prevents the editor from examining TOOLS.INI for%@EH@%
  944. initialization settings (see Chapter 7%@BO:   3396c@%, "Switches, Assignments, and the
  945. TOOLS.INI File," for more information).%@NL@%
  946. %@NL@%
  947. %@CR:MSE25004@%%@4@%The /e option enables you to specify a command upon start-up. The %@AI@%command%@AE@%%@EH@%
  948. argument is a string that follows the same syntax rules as those given for
  949. macros in Chapter 6%@BO:   28e3a@%, "Function Assignments and Macros." If %@AI@%command%@AE@% contains
  950. a space, the entire string should be enclosed in quotation marks. To
  951. represent embedded quotation marks, precede each quotation mark by a
  952. backslash (\"). To represent a literal backslash, use two backslashes (\\).
  953. For example, the system-level command%@NL@%
  954. %@NL@%
  955.      M /e "arg \"search \\\" string\" psearch" FILE.TXT%@NL@%
  956. %@NL@%
  957. %@CR:MSE25005@%%@4@%causes the editor to start up and execute the following command:%@EH@%%@NL@%
  958. %@NL@%
  959.      arg "search \" string" psearch%@NL@%
  960. %@NL@%
  961. %@CR:MSE25006@%%@4@%The /t option specifies that the names of any files following this option%@EH@%
  962. are not retained in the editor's information file when the session
  963. terminates. When you use the %@AI@%Information%@AE@% command at the next editing session
  964. to list the most recently edited files, these names will not appear.%@NL@%
  965. %@NL@%
  966. %@CR:MSE25007@%%@4@%If a single %@AI@%file%@AE@% is specified, the editor attempts to load the file. If the%@EH@%
  967. file does not yet exist, the editor asks you if you want to create the file.
  968. If you type Y (yes), the editor creates the file. If you type another
  969. character, the editor does not create the file, but loads the most recently
  970. edited file or (if no files have been previously edited) exits.%@NL@%
  971. %@NL@%
  972. %@CR:MSE25008@%%@4@%If multiple %@AI@%files%@AE@% are specified, the first file is loaded; then, when you%@EH@%
  973. invoke the %@AI@%Exit%@AE@% function, the editor saves the current file and loads the
  974. next file in the list. If no %@AI@%files%@AE@% are specified, the editor attempts to
  975. load the file you were editing when you last exited the editor.%@NL@%
  976. %@NL@%
  977. %@CR:MSE25009@%%@4@%You can specify multiple %@AI@%files%@AE@% by either typing in different file names%@EH@%
  978. explicitly or by using the DOS wildcard characters, ? and *. For example,
  979. the following command line causes the editor to load every file in the
  980. current directory with a .TXT extension:%@NL@%
  981. %@NL@%
  982.      M *.txt%@NL@%
  983. %@NL@%
  984. %@CR:MSE2500A@%%@4@%On start-up, the status line displays at least four fields. The status line%@EH@%
  985. can display up to thirteen fields. The first four fields listed below are
  986. always displayed:%@NL@%
  987. %@NL@%
  988. %@CR:MSE2500B@%  1. Name of the file being edited.%@NL@%
  989. %@NL@%
  990.   2. Type of file (based on extension).%@NL@%
  991. %@NL@%
  992.   3. The length of the file in lines.%@NL@%
  993. %@NL@%
  994.   4. Cursor position or window position of upper-left corner.%@NL@%
  995. %@NL@%
  996.   5. The word %@AS@%modified%@AE@% if the file has been changed.%@NL@%
  997. %@NL@%
  998.   6. The letters %@AS@%NL%@AE@% if no carriage returns were found when the file was%@NL@%
  999.      loaded (that is, if the file did not contain carriage returns to denote%@NL@%
  1000.      the end of each line, but used only line feeds).%@NL@%
  1001. %@NL@%
  1002.   7. The word %@AS@%insert%@AE@% if you are in insert mode.%@NL@%
  1003. %@NL@%
  1004.   8. The word %@AS@%meta%@AE@% if you have invoked the %@AI@%Meta%@AE@% function.%@NL@%
  1005. %@NL@%
  1006.   9. The word %@AS@%No-Edit%@AE@% if the file cannot be changed at any time during the%@NL@%
  1007.      editing session. Some of the internal files created by the editor, such%@NL@%
  1008.      as <information> and <assign>, fall into this category.%@NL@%
  1009. %@NL@%
  1010.  1    . The word %@AS@%RO-File%@AE@% if the file has the read-only attribute. (This%@NL@%
  1011.      attribute is set outside of the editor.) The file can be modified, but%@NL@%
  1012.      after being modified, it can be saved only under a different file name.%@NL@%
  1013. %@NL@%
  1014.  11. The word %@AS@%cancel%@AE@% if you recently invoked the %@AI@%Cancel%@AE@% function.%@NL@%
  1015. %@NL@%
  1016.  12. The letters %@AS@%BC%@AE@% if a background compilation is in progress under OS/2%@NL@%
  1017.      protected mode (or %@AS@%XX%@AE@% if the background compilation failed to begin).%@NL@%
  1018. %@NL@%
  1019.  13. The letters %@AS@%REC%@AE@% while a macro is being recorded.%@NL@%
  1020. %@NL@%
  1021. %@NL@%
  1022. %@CR:MSE26000@%%@2@%%@AB@%2.6  Hints for Using the Editor%@AE@%%@EH@%%@NL@%
  1023. %@NL@%
  1024. %@CR:MSE26001@%%@CR:MSE26002@%%@4@%Here are two hints to keep in mind as you learn to use the editor:%@EH@%%@NL@%
  1025. %@NL@%
  1026. %@CR:MSE26003@%  1. The Microsoft Editor names functions in a consistent way. Section 3.2%@BO:    df64@%,%@NL@%
  1027.      "Naming Conventions for Functions," explains the conventions. Table A.1%@NL@%
  1028.      lists editing functions by category.%@NL@%
  1029. %@NL@%
  1030.   2. If you forget which keystroke is associated with a function, use%@NL@%
  1031.      on-line Help for quick reference. If Help is installed, you can get%@NL@%
  1032.      function assignments by pressing SHIFT+F1 and then choosing the Current%@NL@%
  1033.      Assignments screen. If Help is not installed, pressing F1 takes you%@NL@%
  1034.      directly to this screen.%@NL@%
  1035. %@NL@%
  1036. %@NL@%
  1037. %@CR:MSE30000@%%@1@%%@AB@%Chapter 3  Command Syntax%@AE@%%@EH@%%@NL@%
  1038. ───────────────────────────────────────────────────────────────────────────%@NL@%
  1039. %@NL@%
  1040. %@CR:MSE30001@%%@4@%If you've worked through Chapter 2%@BO:    7023@%, you have seen the flexibility of%@EH@%
  1041. Microsoft Editor commands. Many of the functions accept a variety of
  1042. arguments──text arguments, cursor-movement arguments──or no argument at all.
  1043. This chapter describes each argument type in detail. The chapter also
  1044. presents the syntax and naming conventions used throughout the manual.%@NL@%
  1045. %@NL@%
  1046. %@CR:MSE30002@%%@4@%Topics are covered in the following order:%@EH@%%@NL@%
  1047. %@NL@%
  1048. %@CR:MSE30003@%  ■  Entering a command%@NL@%
  1049.   ■  Function naming conventions%@NL@%
  1050.   ■  Argument types%@NL@%
  1051.   ■  Text arguments (%@AI@%numarg, markarg, textarg%@AE@%)%@NL@%
  1052.   ■  Highlighting a text argument%@NL@%
  1053.   ■  Cursor-movement arguments (%@AI@%streamarg, linearg, boxarg%@AE@%)%@NL@%
  1054. %@NL@%
  1055. %@NL@%
  1056. %@CR:MSE31000@%%@2@%%@AB@%3.1  Entering a Command%@AE@%%@EH@%%@NL@%
  1057. %@NL@%
  1058. %@CR:MSE31001@%%@4@%Commands take two basic forms. You can invoke a function by itself, or you%@EH@%
  1059. can introduce an argument and then invoke a function.%@NL@%
  1060. %@NL@%
  1061. %@CR:MSE31002@%%@4@%Use the %@AI@%Arg%@AE@% prefix to introduce an argument. By default, %@AI@%Arg%@AE@% is assigned to%@EH@%
  1062. ALT+A (hold down the ALT key and press A). You can then type characters or
  1063. move the cursor to highlight part of the screen.%@NL@%
  1064. %@NL@%
  1065. %@CR:MSE31003@%%@4@%Finally, invoke the function you want by pressing the corresponding%@EH@%
  1066. keystroke. If you forget the keystroke, you can look it up in on-line Help.%@NL@%
  1067. %@NL@%
  1068. %@CR:MSE31004@%%@4@%The two basic forms of a command are summarized below:%@EH@%%@NL@%
  1069. %@NL@%
  1070.      %@AI@%Function%@AE@%
  1071.      %@AI@%Arg argument Function%@AE@%%@NL@%
  1072. %@NL@%
  1073. %@CR:MSE31006@%%@4@%Some functions also let you form a command in one or more of the following%@EH@%
  1074. three ways:%@NL@%
  1075. %@NL@%
  1076. %@CR:MSE31007@%  1. Some functions accept %@AI@%Arg%@AE@% with no argument: %@AI@%Arg%@AE@%%@AI@%Function%@AE@%.%@NL@%
  1077. %@NL@%
  1078.   2. Some functions accept %@AI@%Arg Arg%@AE@% (press ALT+A twice). The sequence %@AI@%Arg Arg%@AE@%%@NL@%
  1079.      can introduce a function just as %@AI@%Arg%@AE@% does.%@NL@%
  1080. %@NL@%
  1081.   3. Some functions work differently when given the %@AI@%Meta%@AE@% prefix. You can%@NL@%
  1082.      toggle %@AI@%Meta%@AE@% on and off by pressing F9. When %@AI@%Meta%@AE@% is on, the word %@AS@%meta%@AE@%%@NL@%
  1083.      appears on the status line.%@NL@%
  1084. %@NL@%
  1085. %@CR:MSE31008@%%@4@%See Chapter 4%@BO:   120e2@%, "A Survey of the Editor's Commands," and Table A.3 for%@EH@%
  1086. information on what syntax is accepted by each function.%@NL@%
  1087. %@NL@%
  1088. %@CR:MSE31009@%%@4@%Once you begin entering a command, you can cancel %@AI@%Arg%@AE@% and any argument by%@EH@%
  1089. invoking the %@AI@%Cancel%@AE@% function (ESC). The Cancel function is also useful for
  1090. clearing the dialog line.%@NL@%
  1091. %@NL@%
  1092. ───────────────────────────────────────────────────────────────────────────%@NL@%
  1093. %@AI@%NOTE%@AE@%%@NL@%
  1094.    Throughout this manual, function names are given in italics and are%@NL@%
  1095.    initial capped (for example: %@AI@%Paste%@AE@%). %@AI@%Argument%@AE@% types are given in italics%@NL@%
  1096.    and are lowercase (for example: %@AI@%textarg%@AE@%).%@NL@%
  1097. ───────────────────────────────────────────────────────────────────────────%@NL@%
  1098. %@NL@%
  1099. %@NL@%
  1100. %@CR:MSE32000@%%@2@%%@AB@%3.2  Naming Conventions for Functions%@AE@%%@EH@%%@NL@%
  1101. %@NL@%
  1102. %@CR:MSE32001@%%@4@%The Microsoft Editor follows a consistent pattern of function names.%@EH@%
  1103. Function names often begin with the letters P, M, S, L, or Cur, which can
  1104. have the following meanings:%@NL@%
  1105. %@NL@%
  1106. %@CR:MSE32002@%%@AB@%Initial Letter(s)           Usage%@AE@%%@NL@%
  1107. %@NL@%
  1108. %@NL@%
  1109. P                           Plus. Indicates forward movement of some kind.%@NL@%
  1110.                             For example, %@AI@%Psearch%@AE@% is the forward-search%@NL@%
  1111.                             command, and %@AI@%Pword%@AE@% moves the cursor forward one%@NL@%
  1112.                             word.%@NL@%
  1113. %@NL@%
  1114. M                           Minus. Indicates backward movement of some kind.%@NL@%
  1115.                             For example, %@AI@%Msearch%@AE@% is the backward-search%@NL@%
  1116.                             command, and %@AI@%Mword%@AE@% moves the cursor backward one%@NL@%
  1117.                             word.%@NL@%
  1118. %@NL@%
  1119. S                           Stream. Indicates a stream-oriented,%@NL@%
  1120.                             block-of-text function. This category includes%@NL@%
  1121.                             %@AI@%Sinsert%@AE@%, which inserts spaces in the stream of%@NL@%
  1122.                             text between two cursor positions, and %@AI@%Sdelete%@AE@%,%@NL@%
  1123.                             which deletes the stream. Without an argument,%@NL@%
  1124.                             these functions insert or delete a single space.%@NL@%
  1125. %@NL@%
  1126. L                           Line. Indicates a line-and-box-oriented%@NL@%
  1127.                             function. This category includes %@AI@%Linsert%@AE@%, which%@NL@%
  1128.                             inserts spaces in the exact area highlighted on%@NL@%
  1129.                             screen, and %@AI@%Ldelete%@AE@%, which deletes it. Without%@NL@%
  1130.                             an argument, these functions insert or delete a%@NL@%
  1131.                             line.%@NL@%
  1132. %@NL@%
  1133. Cur                         Current. Indicates one of the special insertion%@NL@%
  1134.                             functions, such as %@AI@%Curdate%@AE@% (insert current date)%@NL@%
  1135.                             and %@AI@%Curfile%@AE@% (insert current file name).%@NL@%
  1136. %@NL@%
  1137. %@NL@%
  1138. %@CR:MSE33000@%%@2@%%@AB@%3.3  Argument Types%@AE@%%@EH@%%@NL@%
  1139. %@NL@%
  1140. %@CR:MSE33001@%%@4@%There are two basic ways to enter arguments: you can enter text directly as%@EH@%
  1141. part of the command (text argument), or you can use cursor movement to
  1142. highlight characters on the screen (cursor-movement argument). Each of these
  1143. two methods has several variations, as shown in the following list:%@NL@%
  1144. %@NL@%
  1145. %@CR:MSE33002@%  1. Text argument. After you invoke %@AI@%Arg%@AE@% (ALT+A), continue to type%@NL@%
  1146.      characters. These characters appear on the dialog line (the line next%@NL@%
  1147.      to the bottom of the screen). You can give three different kinds of%@NL@%
  1148.      text arguments:%@NL@%
  1149. %@NL@%
  1150.      a.   A %@AI@%numarg%@AE@%, which consists of a string of digits.%@NL@%
  1151. %@NL@%
  1152.      b.   A %@AI@%markarg%@AE@%, which is a string containing the name of a previously%@NL@%
  1153.           defined file marker.%@NL@%
  1154. %@NL@%
  1155.      c.   A %@AI@%textarg%@AE@%, which is any text argument not recognized as a %@AI@%numarg%@AE@%%@NL@%
  1156.           or %@AI@%markarg%@AE@%.%@NL@%
  1157. %@NL@%
  1158.   2. Cursor-movement argument. After you invoke %@AI@%Arg%@AE@% (ALT+A), the current%@NL@%
  1159.      cursor position is highlighted. Highlight more characters by moving the%@NL@%
  1160.      cursor to a new position. You can give three different kinds of%@NL@%
  1161.      cursor-movement arguments:%@NL@%
  1162. %@NL@%
  1163.      a.   A %@AI@%linearg%@AE@%, in which the old and new cursor positions are in%@NL@%
  1164.           different lines but the same column.%@NL@%
  1165. %@NL@%
  1166.      b.   A %@AI@%boxarg%@AE@%, in which the old and new cursor positions are in%@NL@%
  1167.           different columns.%@NL@%
  1168. %@NL@%
  1169.      c.   A %@AI@%streamarg%@AE@%, which can consist of any cursor movement.%@NL@%
  1170. %@NL@%
  1171. %@NL@%
  1172. %@CR:MSE34000@%%@2@%%@AB@%3.4  Text Arguments (numarg, markarg, textarg)%@AE@%%@EH@%%@NL@%
  1173. %@NL@%
  1174. %@CR:MSE34001@%%@4@%After you invoke %@AI@%Arg%@AE@% (ALT+A), you can enter a text argument by typing any%@EH@%
  1175. printable characters, including blank spaces. The first time you invoke %@AI@%Arg%@AE@%,
  1176. the following characters appear on the dialog line (the line next to the
  1177. bottom of the screen):%@NL@%
  1178. %@NL@%
  1179.      %@AS@%Arg [1]%@AE@%%@NL@%
  1180. %@NL@%
  1181. %@CR:MSE34002@%%@4@%If you press ALT+A again, the number in the brackets changes. Any characters%@EH@%
  1182. you type appear on the dialog line after %@AS@%Arg [1]%@AE@%.%@NL@%
  1183. %@NL@%
  1184. %@CR:MSE34003@%%@4@%When entering a text argument, you can edit, move through, or modify the%@EH@%
  1185. text argument in the following ways:%@NL@%
  1186. %@NL@%
  1187. %@CR:MSE34004@%  1. Erase a character by pressing BKSP.%@NL@%
  1188. %@NL@%
  1189.   2. Erase the character at the current cursor position with the %@AI@%Sdelete%@AE@%%@NL@%
  1190.      function (DEL).%@NL@%
  1191. %@NL@%
  1192.   3. Move back and forth nondestructively with LEFT and RIGHT. If you use%@NL@%
  1193.      RIGHT to move past the end of current input, the editor inserts the%@NL@%
  1194.      character from the corresponding position in the previous text%@NL@%
  1195.      argument.%@NL@%
  1196. %@NL@%
  1197.   4. Insert a space at the cursor position with the %@AI@%Sinsert%@AE@% function%@NL@%
  1198.      (CTRL+J).%@NL@%
  1199. %@NL@%
  1200.   5. Move to the beginning of the text with %@AI@%Begline%@AE@% (HOME) and to the end of%@NL@%
  1201.      the text with %@AI@%Endline%@AE@% (END).%@NL@%
  1202. %@NL@%
  1203.   6. Clear characters from the current cursor position to the end of the%@NL@%
  1204.      line with the %@AI@%Arg%@AE@% function (ALT+A).%@NL@%
  1205. %@NL@%
  1206. %@CR:MSE34005@%%@4@%To repeat the most recently entered text argument, invoke the %@AI@%Lasttext%@AE@%%@EH@%
  1207. function, which by default is assigned to CTRL+O. When you use %@AI@%Lasttext%@AE@%, the
  1208. %@AI@%Arg%@AE@% prefix is unnecessary.%@NL@%
  1209. %@NL@%
  1210. %@NL@%
  1211. %@CR:MSE34100@%%@3@%%@AB@%3.4.1  The numarg Type%@AE@%%@EH@%%@NL@%
  1212. %@NL@%
  1213. %@CR:MSE34101@%%@4@%A %@AI@%numarg%@AE@% is a string of digits that you enter as a text argument. Each of%@EH@%
  1214. the three following examples is a %@AI@%numarg%@AE@%:%@NL@%
  1215. %@NL@%
  1216.      %@AS@%3%@AE@%%@NL@%
  1217.      %@AS@%11%@AE@%%@NL@%
  1218.      %@AS@%45%@AE@%%@NL@%
  1219. %@NL@%
  1220. %@CR:MSE34102@%%@4@%The number must be a valid decimal integer. A %@AI@%numarg%@AE@% is evaluated as a%@EH@%
  1221. number and not as literal text. Typically, it is used to indicate a range of
  1222. lines starting with the cursor position. For example, the following command
  1223. sequence deletes 10 lines starting with the cursor position:%@NL@%
  1224. %@NL@%
  1225. %@CR:MSE34103@%  1. Invoke %@AI@%Arg%@AE@% (press ALT+A)%@NL@%
  1226. %@NL@%
  1227.   2. Type the following text: %@AS@%10%@AE@%%@NL@%
  1228. %@NL@%
  1229.   3. Invoke %@AI@%Ldelete%@AE@% (press CTRL+Y)%@NL@%
  1230. %@NL@%
  1231. %@CR:MSE34104@%%@4@%Some functions accept text arguments but do not recognize a %@AI@%numarg%@AE@%. These%@EH@%
  1232. functions treat a %@AI@%numarg%@AE@% as an ordinary %@AI@%textarg%@AE@%.%@NL@%
  1233. %@NL@%
  1234. %@NL@%
  1235. %@CR:MSE34200@%%@3@%%@AB@%3.4.2  The markarg Type%@AE@%%@EH@%%@NL@%
  1236. %@NL@%
  1237. %@CR:MSE34201@%%@4@%A %@AI@%markarg%@AE@% is a file-marker name you have previously defined with the %@AI@%Mark%@AE@%%@EH@%
  1238. function (CTRL+M). See Section 4.4%@BO:   1839c@%, "Using File Markers," for information
  1239. about %@AI@%Mark%@AE@%.%@NL@%
  1240. %@NL@%
  1241. %@CR:MSE34202@%%@4@%Once defined, you can enter the marker name as a %@AI@%markarg%@AE@%. The name is not%@EH@%
  1242. treated as literal text, but is interpreted as an actual file position. For
  1243. example, the following command sequence copies all text between the cursor
  1244. position and the file position previously marked as %@AS@%P1%@AE@%:%@NL@%
  1245. %@NL@%
  1246. %@CR:MSE34203@%  1. Invoke %@AI@%Arg%@AE@% (press ALT+A)%@NL@%
  1247. %@NL@%
  1248.   2. Enter the following text: %@AS@%P1%@AE@%%@NL@%
  1249. %@NL@%
  1250.   3. Invoke %@AI@%Copy%@AE@%(press CTRL+INS)%@NL@%
  1251. %@NL@%
  1252. %@CR:MSE34204@%%@4@%Many functions accept text arguments but do not recognize a %@AI@%markarg%@AE@%. In%@EH@%
  1253. these cases, the %@AI@%markarg%@AE@% is treated as an ordinary %@AI@%textarg%@AE@%.%@NL@%
  1254. %@NL@%
  1255. %@NL@%
  1256. %@CR:MSE34300@%%@3@%%@AB@%3.4.3  The textarg Type%@AE@%%@EH@%%@NL@%
  1257. %@NL@%
  1258. %@CR:MSE34301@%%@4@%A %@AI@%textarg%@AE@% is similar to a %@AI@%numarg%@AE@% or %@AI@%markarg%@AE@%. The only difference is that the%@EH@%
  1259. %@AI@%textarg%@AE@% has no special meaning; it is interpreted by the function as literal
  1260. text. For example, the following sequence finds the next occurrence of the
  1261. string %@AS@%Happy%@AE@%%@AS@%New Year%@AE@%:%@NL@%
  1262. %@NL@%
  1263. %@CR:MSE34302@%  1. Invoke %@AI@%Arg%@AE@% (press ALT+A)%@NL@%
  1264. %@NL@%
  1265.   2. Type the following: %@AS@%Happy New Year%@AE@%%@NL@%
  1266. %@NL@%
  1267.   3. Invoke %@AI@%Psearch%@AE@% (press F3)%@NL@%
  1268. %@NL@%
  1269. %@CR:MSE34303@%%@4@%A %@AI@%textarg%@AE@% can either be typed in directly or highlighted on the screen. The%@EH@%
  1270. next section describes how to highlight a text argument.%@NL@%
  1271. %@NL@%
  1272. %@NL@%
  1273. %@CR:MSE35000@%%@2@%%@AB@%3.5  Highlighting a Text Argument%@AE@%%@EH@%%@NL@%
  1274. %@NL@%
  1275. %@CR:MSE35001@%%@4@%If the text argument already appears in the editing screen, you can save%@EH@%
  1276. typing by highlighting the text. You can highlight all or part of one line;
  1277. a text argument cannot consist of multiple lines.%@NL@%
  1278. %@NL@%
  1279. %@CR:MSE35002@%%@4@%To highlight a text argument:%@EH@%%@NL@%
  1280. %@NL@%
  1281. %@CR:MSE35003@%  1. Move the cursor to the first character in the text argument.%@NL@%
  1282. %@NL@%
  1283.   2. Invoke %@AI@%Arg%@AE@% (press ALT+A).%@NL@%
  1284. %@NL@%
  1285.      The current cursor position defines the "initial cursor position." As%@NL@%
  1286.      you move the cursor, characters between the initial cursor position and%@NL@%
  1287.      the new cursor position are highlighted.%@NL@%
  1288. %@NL@%
  1289.   3. Move the cursor to the right until all the desired text is highlighted.%@NL@%
  1290. %@NL@%
  1291.   4. Invoke the desired function. The editor passes the highlighted%@NL@%
  1292.      characters to this function, just as if you had directly typed in the%@NL@%
  1293.      highlighted characters.%@NL@%
  1294. %@NL@%
  1295. %@CR:MSE35004@%%@4@%For example, the highlighted area in Figure 3.1%@EH@%%@FN@%
  1296. Figure 3.1 is found on page 25 in the printed version of this guide.%@EF@% defines the text argument
  1297. %@AS@%pascal MoveCur%@AE@%.%@NL@%
  1298. %@NL@%
  1299. %@CR:MSE35005@%%@4@%Even if the highlighted text represents a legitimate %@AI@%numarg%@AE@% or %@AI@%markarg%@AE@%, it%@EH@%
  1300. will be interpreted by the function as a straight %@AI@%textarg%@AE@%. That is, a %@AI@%numarg%@AE@%
  1301. or %@AI@%markarg%@AE@% must be typed in on the status line; it cannot be selected from
  1302. the body of text.%@NL@%
  1303. %@NL@%
  1304. %@CR:MSE35006@%%@4@%Highlighting a %@AI@%textarg%@AE@% is a special case of a cursor-movement argument. The%@EH@%
  1305. next section discusses the other kinds of cursor-movement arguments.%@NL@%
  1306. %@NL@%
  1307. %@NL@%
  1308. %@CR:MSE36000@%%@2@%%@AB@%3.6  Cursor-Movement Arguments (linearg, boxarg, streamarg)%@AE@%%@EH@%%@NL@%
  1309. %@NL@%
  1310. %@CR:MSE36001@%%@4@%You enter a cursor-movement argument by invoking %@AI@%Arg%@AE@% (ALT+A) and moving the%@EH@%
  1311. cursor. When you invoke %@AI@%Arg%@AE@%, the current cursor position is marked with a
  1312. reverse-video highlight. This position is called the "initial cursor
  1313. position." As you move the cursor, characters between the initial cursor
  1314. position and the new cursor position are highlighted.%@NL@%
  1315. %@NL@%
  1316. %@CR:MSE36002@%%@4@%When the initial and new cursor positions are on different lines, you can%@EH@%
  1317. high-light regions by one of two different modes:%@NL@%
  1318. %@NL@%
  1319. %@CR:MSE36003@%  ■  In "box mode," the editor highlights either complete lines (if the new%@NL@%
  1320.      and initial cursor position are in the same column) or rectangular%@NL@%
  1321.      areas. In box mode, you can select complete lines, or highlight,%@NL@%
  1322.      delete, and insert columns without affecting the surrounding text. In%@NL@%
  1323.      box mode, a cursor-movement argument is either a %@AI@%linearg%@AE@% or %@AI@%boxarg%@AE@%, as%@NL@%
  1324.      explained in Sections 3.6.1%@BO:   11355@% and 3.6.2%@BO:   115ce@%.%@NL@%
  1325. %@NL@%
  1326.   ■  In "stream mode," the editor highlights text the way most text editors%@NL@%
  1327.      do. The highlighted region includes all text between the two positions,%@NL@%
  1328.      according to their sequence in the file. This region is usually not%@NL@%
  1329.      rectangular. In stream mode, a cursor-movement argument is always a%@NL@%
  1330.      %@AI@%streamarg%@AE@%, as explained in Section 3.6.3%@BO:   119d6@%, "The streamarg Type."%@NL@%
  1331. %@NL@%
  1332. %@CR:MSE36004@%%@4@%By default, the editor uses stream mode. You can toggle back and forth%@EH@%
  1333. between the two modes by invoking the %@AI@%Boxstream%@AE@% function (CTRL+B). You can
  1334. even invoke %@AI@%Boxstream%@AE@% while in the middle of creating a cursor-movement
  1335. argument──doing so changes the highlighting instantly.%@NL@%
  1336. %@NL@%
  1337. %@CR:MSE36005@%%@4@%To repeat the most recently entered cursor-movement argument, invoke the %@EH@%
  1338. %@AI@%Lastselect%@AE@% function, which by default is assigned to CTRL+U. When you use
  1339. %@AI@%Lastselect%@AE@%, the %@AI@%Arg%@AE@% prefix is unnecessary.%@NL@%
  1340. %@NL@%
  1341. %@CR:MSE36006@%%@4@%If you create a cursor-movement argument and then type a character, the%@EH@%
  1342. editor removes the highlighted area and replaces it with the character
  1343. typed. A similar result occurs when you create a cursor-movement argument
  1344. and then invoke the %@AI@%Paste%@AE@% function──the highlighted area is replaced by the
  1345. contents of the Clipboard.%@NL@%
  1346. %@NL@%
  1347. %@NL@%
  1348. %@CR:MSE36100@%%@3@%%@AB@%3.6.1  The linearg Type%@AE@%%@EH@%%@NL@%
  1349. %@NL@%
  1350. %@CR:MSE36101@%%@4@%A %@AI@%linearg%@AE@% is defined when the new cursor position is in the same column but%@EH@%
  1351. on a different line from the initial cursor position. The editor must be in
  1352. box mode. The editor responds by highlighting all lines between the two
  1353. cursor positions, including the lines that the cursor positions are on. For
  1354. example, the display in Figure 3.2%@FN@%
  1355. Figure 3.2 is found on page 26 in the printed version of this guide.%@EF@% is produced by invoking %@AI@%Arg%@AE@% (ALT+A) and
  1356. then pressing DOWN three times.%@NL@%
  1357. %@NL@%
  1358. %@NL@%
  1359. %@CR:MSE36200@%%@3@%%@AB@%3.6.2  The boxarg Type%@AE@%%@EH@%%@NL@%
  1360. %@NL@%
  1361. %@CR:MSE36201@%%@4@%A %@AI@%boxarg%@AE@% is a rectangular area on the screen. The two corners of the area%@EH@%
  1362. are determined by the initial and new cursor positions. A %@AI@%boxarg%@AE@% is defined
  1363. when the two positions are in different columns (and possibly different
  1364. lines). The editor must be in box mode.%@NL@%
  1365. %@NL@%
  1366. %@CR:MSE36202@%%@4@%After invoking %@AI@%Arg%@AE@% (ALT+A), you can move the cursor left or right. The left%@EH@%
  1367. edge of the box includes the leftmost of the two cursor positions. The right
  1368. edge of the box includes the column just to the left of other cursor
  1369. positions. The box contains parts of all lines, inclusive, between the two
  1370. positions.%@NL@%
  1371. %@NL@%
  1372. %@CR:MSE36203@%%@4@%For example, the display shown in Figure 3.3%@EH@%%@FN@%
  1373. Figure 3.3 is found on page 27 in the printed version of this manual.%@EF@% is produced by invoking %@AI@%Arg%@AE@%
  1374. and then moving the cursor 3 lines down and 16 columns over.%@NL@%
  1375. %@NL@%
  1376. %@NL@%
  1377. %@CR:MSE36300@%%@3@%%@AB@%3.6.3  The streamarg Type%@AE@%%@EH@%%@NL@%
  1378. %@NL@%
  1379. %@CR:MSE36301@%%@4@%A %@AI@%streamarg%@AE@% consists of text between the initial cursor and the new cursor%@EH@%
  1380. positions. When the editor is in stream mode, every cursor-movement argument
  1381. is a %@AI@%streamarg%@AE@%. You toggle between box and stream mode by invoking %@AI@%Boxstream%@AE@%
  1382. (CTRL+B).%@NL@%
  1383. %@NL@%
  1384. %@CR:MSE36302@%%@4@%After pressing ALT+A, you can move the cursor in any direction to create a %@EH@%
  1385. %@AI@%streamarg%@AE@%. The %@AI@%streamarg%@AE@% is shown as highlighted characters.%@NL@%
  1386. %@NL@%
  1387. %@CR:MSE36303@%%@4@%If you move the cursor forward (that is, to the right or down), the%@EH@%
  1388. %@AI@%streamarg%@AE@% includes the character at the initial cursor position. If you move
  1389. the cursor backward (that is, to the left or up), the %@AI@%streamarg%@AE@% does %@AI@%not%@AE@%
  1390. include the character at the initial cursor position; the %@AI@%streamarg%@AE@% starts
  1391. at the preceding character.%@NL@%
  1392. %@NL@%
  1393. %@CR:MSE36304@%%@4@%When a %@AI@%streamarg%@AE@% spans multiple lines, it includes some characters that a %@EH@%
  1394. %@AI@%boxarg%@AE@% does not. Specifically, a multiline %@AI@%streamarg%@AE@% includes the following:%@NL@%
  1395. %@NL@%
  1396. %@CR:MSE36305@%  1. All characters from the first cursor position to the end of the line%@NL@%
  1397. %@NL@%
  1398.   2. All characters on the lines between the two cursor positions%@NL@%
  1399. %@NL@%
  1400.   3. All characters on the line of the second cursor position, up to but not%@NL@%
  1401.      including the cursor position itself%@NL@%
  1402. %@NL@%
  1403. %@CR:MSE36306@%%@4@%For example, the display shown in Figure 3.4%@EH@%%@FN@%
  1404. Figure 3.4 is found on page 27 in the printed version of this guide.%@EF@% is produced with the same
  1405. cursor movement used in Figure 3.3, but with stream mode on.%@NL@%
  1406. %@NL@%
  1407. %@NL@%
  1408. %@CR:MSE40000@%%@1@%%@AB@%Chapter 4  A Survey of the Editor's Commands%@AE@%%@EH@%%@NL@%
  1409. ───────────────────────────────────────────────────────────────────────────%@NL@%
  1410. %@NL@%
  1411. %@CR:MSE40001@%%@4@%The Microsoft Editor has all the standard features of a programmer's editor.%@EH@%
  1412. It lets you move quickly through a file, move blocks of text, search for
  1413. strings, and handle multiple files. In addition, the Microsoft Editor allows
  1414. you to use different windows for viewing more than one file or more than one
  1415. part of the same file. The Microsoft Editor can also invoke compilers and
  1416. assemblers, then display each compilation error.%@NL@%
  1417. %@NL@%
  1418. %@CR:MSE40002@%%@4@%This chapter expands on the editing topics introduced in Chapter 2%@BO:    7023@%. For a%@EH@%
  1419. complete list of the command syntax for every function, see Appendix A%@BO:   5d119@%,
  1420. "Reference Tables." This chapter covers topics in the following order:%@NL@%
  1421. %@NL@%
  1422. %@CR:MSE40003@%  ■  Basic file operations%@NL@%
  1423.   ■  Moving through a file%@NL@%
  1424.   ■  Inserting, copying, and deleting text%@NL@%
  1425.   ■  Using file markers%@NL@%
  1426.   ■  Searching and replacing%@NL@%
  1427.   ■  Compiling%@NL@%
  1428.   ■  Using editing windows%@NL@%
  1429.   ■  Working with multiple files%@NL@%
  1430.   ■  Printing all or part of a file%@NL@%
  1431. %@NL@%
  1432. %@NL@%
  1433. %@CR:MSE41000@%%@2@%%@AB@%4.1  Basic File Operations%@AE@%%@EH@%%@NL@%
  1434. %@NL@%
  1435. %@CR:MSE41001@%%@4@%This section discusses how to work with files in general and how to use%@EH@%
  1436. internal files called "pseudo files."%@NL@%
  1437. %@NL@%
  1438. %@NL@%
  1439. %@CR:MSE41100@%%@3@%%@AB@%4.1.1  File Commands%@AE@%%@EH@%%@NL@%
  1440. %@NL@%
  1441. %@CR:MSE41101@%%@4@%File operations are basic to all work with the editor. You use file%@EH@%
  1442. operations to save your work, load in a new text file, or completely exit
  1443. from the editor.%@NL@%
  1444. %@NL@%
  1445. %@CR:MSE41102@%%@4@%Chapter 2%@BO:    7023@% described how to save the current file and exit from the editor.%@EH@%
  1446. However, the Microsoft Editor supports a number of other file operations.
  1447. The list below shows how to use some of the most common file operations:%@NL@%
  1448. %@CR:MSE41103@%%@NL@%
  1449. %@TH:   24   1333  2 42 34 @%
  1450. %@AB@%Command     %@AE@%
  1451. %@AB@%(and Default Keystrokes)                  Description%@AE@%
  1452.  
  1453. %@AI@%Exit%@AE@% (F8)                                 Exits editor after saving current
  1454.                                           file
  1455.  
  1456. %@AI@%Meta Exit%@AE@% (F9  F8)                        Exits editor without saving
  1457.  
  1458. %@AI@%Arg Arg Setfile%@AE@% (ALT+A ALT+A F2)          Saves current file without exiting
  1459.  
  1460. %@AI@%Arg Arg textarg Setfile%@AE@%                   Saves current file under the file
  1461. (ALT+A ALT+A %@AI@%textarg%@AE@% F2)                  name (%@AI@%textarg%@AE@%) without exiting
  1462.  
  1463. %@AI@%Arg textarg Setfile%@AE@% (ALT+A %@AI@%textarg%@AE@% F2)    Loads another file (entered as
  1464.                                           %@AI@%textarg%@AE@%) into the editing window
  1465.  
  1466. %@AI@%Arg Arg textarg Paste%@AE@%                     Merges (copies) another file
  1467. (ALT+A ALT+A %@AI@%textarg%@AE@% SHIFT+INS)           (entered as%@AI@%textarg%@AE@%) into current
  1468.                                           file──the new file is inserted at
  1469.                                           the cursor position
  1470.  
  1471. %@AI@%Refresh%@AE@% (SHIFT+F7)                        Discards most recent changes to
  1472.                                           current file and rereads file from
  1473.                                           disk
  1474. %@TE:   24   1333  2 42 34 @%
  1475. %@NL@%
  1476. %@NL@%
  1477. %@CR:MSE41104@%%@4@%%@AB@%Example%@AE@%%@EH@%%@NL@%
  1478. %@NL@%
  1479. %@CR:MSE41105@%%@4@%As explained in Chapter 3%@BO:    d239@%, a %@AI@%textarg%@AE@% is simply an argument you type in%@EH@%
  1480. directly. For example, to load the file SAMPLE.TXT, you would follow these
  1481. steps:%@NL@%
  1482. %@NL@%
  1483. %@CR:MSE41106@%  1. Invoke the %@AI@%Arg%@AE@% function (press ALT+A)%@NL@%
  1484.   2. Type the following file name: %@AS@%SAMPLE.TXT%@AE@%%@NL@%
  1485.   3. Invoke the %@AI@%Setfile%@AE@% function (press F2)%@NL@%
  1486. %@NL@%
  1487. %@CR:MSE41107@%%@4@%Each of the operations listed above is frequently useful, yet some should be%@EH@%
  1488. used with caution. For example, you should only exit without saving when you
  1489. have accidentally altered a file you do not want to change, or when you have
  1490. made many mistakes during the editing session. When you exit without saving,
  1491. all the work you did since the last save operation is discarded.%@NL@%
  1492. %@NL@%
  1493. %@CR:MSE41108@%%@4@%Conversely, you may wish to save without leaving the editor. This operation%@EH@%
  1494. is usually safe, unless the current file is one that should not be changed.
  1495. Saving a file writes all the changes you made out to the disk. If your
  1496. system is vulnerable to power failures or other kinds of system failure, it
  1497. is a good idea to save your work often.%@NL@%
  1498. %@NL@%
  1499. %@CR:MSE41109@%%@4@%Merging and loading a file are not the same. Merging a file copies the%@EH@%
  1500. contents of another file and inserts it into the current file. Loading a
  1501. file first saves the current file (assuming the %@AB@%autosave%@AE@% switch is on), then
  1502. restarts the editing session with a new file.%@NL@%
  1503. %@NL@%
  1504. %@CR:MSE4110A@%%@4@%The editor supports other variations of these operations described above.%@EH@%
  1505. See Table A.3, under the %@AI@%Exit%@AE@% and %@AI@%Setfile%@AE@% functions, for more information.%@NL@%
  1506. %@NL@%
  1507. %@NL@%
  1508. %@CR:MSE41200@%%@3@%%@AB@%4.1.2  Special Syntax for Setfile%@AE@%%@EH@%%@NL@%
  1509. %@NL@%
  1510. %@CR:MSE41201@%%@4@%A text argument passed to %@AI@%Setfile%@AE@% can take a number of different forms: a%@EH@%
  1511. file name, a file name with a DOS  wildcard character (* or ?), the name of
  1512. a directory, or the name of a disk drive. If the text argument is a
  1513. directory name, the editor changes the current directory. If the argument is
  1514. a drive name, the editor changes the current drive.%@NL@%
  1515. %@NL@%
  1516. %@CR:MSE41202@%%@4@%File names can be complete path names and can include environment variables%@EH@%
  1517. defined with the system-level SET command. The %@AI@%Setfile%@AE@% function interprets
  1518. an environment variables as a list of directories to search for a file. You
  1519. enter an environment variable using the syntax%@NL@%
  1520. %@NL@%
  1521.      %@AB@%$%@AE@%%@AI@%environ%@AE@%%@AB@%:%@AE@%%@AI@%filename%@AE@%%@NL@%
  1522. %@NL@%
  1523. %@CR:MSE41204@%%@4@%in which %@AI@%environ%@AE@% is the name of an environment variable. For example, the%@EH@%
  1524. following actions cause the editor to search the INIT environment variable
  1525. to find the TOOLS.INI file and load it:%@NL@%
  1526. %@NL@%
  1527. %@CR:MSE41205@%  1. Invoke the %@AI@%Arg%@AE@% function (press ALT+A)%@NL@%
  1528.   2. Type the following file name: %@AS@%$INIT:tools.ini%@AE@%%@NL@%
  1529.   3. Invoke the %@AI@%Setfile%@AE@% function (press F2)%@NL@%
  1530. %@NL@%
  1531. %@CR:MSE41206@%%@4@%You can also use the environment-variable syntax with the %@AI@%Paste%@AE@% function%@EH@%
  1532. when you use this function to merge a file.%@NL@%
  1533. %@NL@%
  1534. %@CR:MSE41207@%%@4@%Finally, you can switch to a recently edited file by using a short name. A%@EH@%
  1535. "short name" is a file name with no path or extension . The editor searches
  1536. its list of recently edited files to find a name that matches the short
  1537. name.%@NL@%
  1538. %@NL@%
  1539. %@NL@%
  1540. %@CR:MSE41300@%%@3@%%@AB@%4.1.3  Pseudo Files%@AE@%%@EH@%%@NL@%
  1541. %@NL@%
  1542. %@CR:MSE41301@%%@4@%A "pseudo file" is an internal editing file. It exists only in the%@EH@%
  1543. computer's memory and does not correspond to any disk file. The editor
  1544. treats a pseudo file just like any other file except for two important
  1545. differences:%@NL@%
  1546. %@NL@%
  1547. %@CR:MSE41302@%  1. The name of a pseudo file always appears in angle brackets (<>).%@NL@%
  1548.   2. A pseudo file may not be saved to disk under its own name.%@NL@%
  1549. %@NL@%
  1550. %@CR:MSE41303@%%@4@%Why use pseudo files? Pseudo files are useful for temporary storage. Pseudo%@EH@%
  1551. files are updated almost instantaneously because writing to RAM is much
  1552. faster than writing to disk. You can also insert the contents of a pseudo
  1553. file into the current file with the %@AI@%Paste%@AE@% command.%@NL@%
  1554. %@NL@%
  1555. %@CR:MSE41304@%%@4@%The editor creates several pseudo files of its own and gives them special%@EH@%
  1556. meaning. You can open these files just like any other with the %@AI@%Setfile%@AE@%
  1557. function.%@NL@%
  1558. %@CR:MSE41305@%%@NL@%
  1559. %@TH:   37   2148  1 28 48 @%
  1560. %@AB@%Pseudo File                 Description%@AE@%
  1561.  
  1562. <clipboard>                 Stores text selected by a copy or deletion. This
  1563.                             file can be modified; the modified file is then
  1564.                             inserted when you invoke %@AI@%Paste%@AE@%.
  1565.  
  1566.                             However, if you copy or delete text while
  1567.                             editing this file, the selected text is not
  1568.                             saved to the Clipboard but simply discarded.
  1569.  
  1570. <assign>                    Shows an updated list of function and switch
  1571.                             assignments. You can create new function and
  1572.                             switch assignments by directly modifying this
  1573.                             file; however, the assignments you make must
  1574.                             follow the syntax described in Chapter 6%@BO:   28e3a@%,
  1575.                             "Function Assignments and Macros."
  1576.  
  1577. <information-file>          Shows a list of files that have been previously
  1578.                             edited. This file cannot be modified. Each file
  1579.                             currently open for editing is listed along with
  1580.                             its length in lines.
  1581.  
  1582. <compile>                   Shows error messages from the last compilation
  1583.                             executed from within the editor. If the editor
  1584.                             is running under protected mode, the error
  1585.                             messages are dynamically updated while the
  1586.                             compilation is running.
  1587.  
  1588. <file-list>                 Shows a list of each file specified on the
  1589.                             editor's command line that has not yet been
  1590.                             opened. This file cannot be modified.
  1591.  
  1592. <record>                    Records each editing command when you record a
  1593.                             macro. The file is dynamic; it changes while you
  1594.                             view it. You cannot directly modify this file.
  1595.                             See Chapter 6%@BO:   28e3a@%, "Function Assignments and
  1596.                             Macros."
  1597. %@TE:   37   2148  1 28 48 @%
  1598. %@NL@%
  1599. %@CR:MSE42000@%%@2@%%@AB@%4.2  Moving through a File%@AE@%%@EH@%%@NL@%
  1600. %@NL@%
  1601. %@CR:MSE42001@%%@4@%Chapter 2%@BO:    7023@%, "Edit Now," described how to the use DIRECTION keys to move%@EH@%
  1602. through a file one space at a time. The DIRECTION keys correspond to the
  1603. functions %@AI@%Up%@AE@%, %@AI@%Down%@AE@%, %@AI@%Right%@AE@%, and %@AI@%Left%@AE@%, to which you can assign different keys
  1604. if you wish. Chapter 2%@BO:    7023@% also presented the %@AI@%Begline%@AE@% function (HOME), which
  1605. moves the cursor to the first printable character in the current line.
  1606. Similar to the %@AI@%Begline%@AE@% function is the %@AI@%Endline%@AE@% function (END), which moves
  1607. the cursor just to the right of the last  printable character in the current
  1608. line.%@NL@%
  1609. %@NL@%
  1610. %@CR:MSE42002@%%@4@%Each of the four direction functions in the following list has a variation%@EH@%
  1611. that uses the %@AI@%Meta%@AE@% function as a prefix. Each function, when used in a
  1612. command with the %@AI@%Meta%@AE@% prefix, moves the cursor as far as possible within the
  1613. displayed screen (or window) without changing column position or causing the
  1614. screen to scroll.%@NL@%
  1615. %@NL@%
  1616. %@CR:MSE42003@%%@NL@%
  1617. %@AB@%Command     %@AE@%%@NL@%
  1618. %@AB@%(and Default Keystrokes)     Description%@AE@%%@NL@%
  1619. %@NL@%
  1620. %@AI@%Meta Up%@AE@% (F9  UP)             Moves the cursor to the top of the screen%@NL@%
  1621. %@NL@%
  1622. %@AI@%Meta Down%@AE@% (F9  DOWN)         Moves the cursor to the bottom of the screen%@NL@%
  1623. %@NL@%
  1624. %@AI@%Meta Left%@AE@% (F9  LEFT)         Moves the cursor to the left-most position on%@NL@%
  1625.                              the current line%@NL@%
  1626. %@NL@%
  1627. %@AI@%Meta Right%@AE@% (F9  RIGHT)       Moves the cursor to the right-most position on%@NL@%
  1628.                              the current line%@NL@%
  1629. %@NL@%
  1630. %@AI@%Meta Begline%@AE@% (F9  HOME)      Moves the cursor to column 1%@NL@%
  1631. %@NL@%
  1632. %@NL@%
  1633. %@CR:MSE42100@%%@3@%%@AB@%4.2.1  Scrolling at the Screen's Edge%@AE@%%@EH@%%@NL@%
  1634. %@NL@%
  1635. %@CR:MSE42101@%%@4@%You can use the four direction functions (%@AI@%Up%@AE@%,  %@AI@%Down%@AE@%, %@AI@%Right%@AE@% , %@AI@%Left%@AE@%) to cause%@EH@%
  1636. scrolling. The screen (or current window) can scroll in all four
  1637. directions. Although the editor does not wrap lines that are wider than the
  1638. screen, you can have lines of text that are up to 250 characters wide. Use
  1639. the DIRECTION keys to scroll right and left when your text lines are wider
  1640. than the screen or current window.%@NL@%
  1641. %@NL@%
  1642. %@CR:MSE42102@%%@4@%Unlike some editors, the Microsoft Editor does not automatically scroll by%@EH@%
  1643. only one column or one line. Instead, the internal switches %@AB@%hscroll%@AE@%
  1644. (horizontal-scroll) and %@AB@%vscroll%@AE@% (vertical-scroll) control how fast the
  1645. editor scrolls. For example, if %@AB@%vscroll%@AE@% is set to 7, the editor advances the
  1646. screen position seven lines when you attempt to move the cursor off the
  1647. bottom of the screen. See Chapter 7%@BO:   3396c@% for more information on these switches.%@NL@%
  1648. %@NL@%
  1649. %@NL@%
  1650. %@CR:MSE42200@%%@3@%%@AB@%4.2.2  Scrolling a Page at a Time%@AE@%%@EH@%%@NL@%
  1651. %@NL@%
  1652. %@CR:MSE42201@%%@4@%The editor provides the %@AI@%Ppage%@AE@% (PGDN) and %@AI@%Mpage%@AE@% (PGUP) functions to move%@EH@%
  1653. through a file more quickly than you can by using the DIRECTION keys to move
  1654. one line or one column at a time.%@NL@%
  1655. %@NL@%
  1656. %@CR:MSE42202@%%@4@%The term "page" is defined as the amount of text that can be displayed in%@EH@%
  1657. the current window or screen. To advance one page forward through a file,
  1658. invoke the function %@AI@%Ppage%@AE@% (PGDN), which stands for "plus page."%@NL@%
  1659. %@NL@%
  1660. %@CR:MSE42203@%%@4@%The function %@AI@%Mpage%@AE@% (PGUP), which stands for "minus page," is the inverse of%@EH@%
  1661. %@AI@%Ppage%@AE@%, and it moves back through the file one page at a time.%@NL@%
  1662. %@NL@%
  1663. ───────────────────────────────────────────────────────────────────────────%@NL@%
  1664. %@AI@%NOTE%@AE@%%@NL@%
  1665.    In Version 1.0 of the editor, the %@AI@%Ppage%@AE@% and %@AI@%Mpage%@AE@% functions took%@NL@%
  1666.    arguments. You can use them to help build a cursor-movement argument;%@NL@%
  1667.    they do not cancel the current argument. The editor also provides two new%@NL@%
  1668.    functions──%@AI@%Begfile%@AE@% and %@AI@%Endfile%@AE@%──that move to the beginning and end of the%@NL@%
  1669.    file. The next section describes these functions.%@NL@%
  1670. ───────────────────────────────────────────────────────────────────────────%@NL@%
  1671. %@NL@%
  1672. %@NL@%
  1673. %@CR:MSE42300@%%@3@%%@AB@%4.2.3  Moving to the Top or Bottom of the File%@AE@%%@EH@%%@NL@%
  1674. %@NL@%
  1675. %@CR:MSE42301@%%@4@%The %@AI@%Begfile%@AE@% and %@AI@%Endfile%@AE@% functions provide the fastest cursor movement.%@EH@%%@NL@%
  1676. %@NL@%
  1677. %@CR:MSE42302@%%@4@%To move the cursor to the beginning of the file, invoke the %@AI@%Begfile%@AE@% function%@EH@%
  1678. by pressing CTRL+UP (the up-arrow key on the numeric keypad).%@NL@%
  1679. %@NL@%
  1680. %@CR:MSE42303@%%@4@%To move the cursor to the end of the file, invoke the %@AI@%Endfile%@AE@% function by%@EH@%
  1681. pressing CTRL+DOWN (the down-arrow key on the numeric keypad).%@NL@%
  1682. %@NL@%
  1683. %@NL@%
  1684. %@CR:MSE42400@%%@3@%%@AB@%4.2.4  Other File-Navigation Functions%@AE@%%@EH@%%@NL@%
  1685. %@NL@%
  1686. %@CR:MSE42401@%%@4@%The following functions are useful for moving through a file:%@EH@%%@NL@%
  1687. %@NL@%
  1688. %@CR:MSE42402@%%@AB@%Function     %@AE@%%@NL@%
  1689. %@AB@%(and Default Keystrokes)    Description%@AE@%%@NL@%
  1690. %@NL@%
  1691. %@AI@%Pword%@AE@%  (CTRL+RIGHT)         Moves the cursor forward (plus) one word%@NL@%
  1692. %@NL@%
  1693. %@AI@%Mword%@AE@% (CTRL+LEFT)           Moves the cursor backward (minus) one word%@NL@%
  1694. %@NL@%
  1695. %@AI@%Ppara%@AE@%                       Moves the cursor forward (plus) one paragraph%@NL@%
  1696. %@NL@%
  1697. %@AI@%Mpara%@AE@%                       Moves the cursor backward (minus) one paragraph%@NL@%
  1698. %@NL@%
  1699. %@AI@%Mark%@AE@% (CTRL+M)               Defines or moves to a marker, or moves to a%@NL@%
  1700.                             specified line number%@NL@%
  1701. %@NL@%
  1702. %@CR:MSE42403@%%@4@%With the %@AI@%Mark%@AE@% function, you can define a marker or move to a marker. Markers%@EH@%
  1703. constitute a special topic that is discussed in Section 4.4%@BO:   1839c@%, "Using File
  1704. Markers."%@NL@%
  1705. %@NL@%
  1706. %@NL@%
  1707. %@CR:MSE43000@%%@2@%%@AB@%4.3  Inserting, Copying, and Deleting Text%@AE@%%@EH@%%@NL@%
  1708. %@NL@%
  1709. %@CR:MSE43001@%%@4@%You may often need to move, copy, or delete blocks of text. The Microsoft%@EH@%
  1710. Editor is particularly powerful because it provides a variety of ways to
  1711. define a block of characters.%@NL@%
  1712. %@NL@%
  1713. %@CR:MSE43002@%%@4@%For example, you can delete a highlighted box, a range of lines, or a stream%@EH@%
  1714. of text between any two file positions. Sections 4.3.1%@BO:   162ea@%-4.3.4 discuss how to
  1715. work with blocks of text.%@NL@%
  1716. %@NL@%
  1717. %@NL@%
  1718. %@CR:MSE43100@%%@3@%%@AB@%4.3.1  Inserting and Deleting Text%@AE@%%@EH@%%@NL@%
  1719. %@NL@%
  1720. %@CR:MSE43101@%%@4@%Chapter 2%@BO:    7023@%, "Edit Now," described how to use the %@AI@%Paste%@AE@%, %@AI@%Insertmode%@AE@%, and%@EH@%
  1721. %@AI@%Delete%@AE@% functions to insert, move, and delete text.%@NL@%
  1722. %@NL@%
  1723. %@CR:MSE43102@%%@4@%The following list presents some of the most common commands that use the %@EH@%
  1724. %@AI@%Delete%@AE@% function:%@NL@%
  1725. %@NL@%
  1726. %@CR:MSE43103@%%@AB@%Command%@AE@%%@NL@%
  1727. %@AB@%(and Default Keystrokes)     Description%@AE@%%@NL@%
  1728. %@NL@%
  1729. %@AI@%Delete%@AE@% (DEL)                Deletes the character at the cursor position.%@NL@%
  1730.                             (This command does not join two lines of text,%@NL@%
  1731.                             even if the cursor is at the end of the line.)%@NL@%
  1732. %@NL@%
  1733. %@AI@%Arg Delete%@AE@% (ALT+A DEL)      Deletes all text from the cursor position to the%@NL@%
  1734.                             end of the line and joins the current line of%@NL@%
  1735.                             text with the next line.%@NL@%
  1736. %@NL@%
  1737. %@AI@%Arg cursor-movement%@AE@%         Deletes the highlighted area, whether it is a%@NL@%
  1738. %@AI@%Delete%@AE@% (ALT+A               %@AI@%linearg%@AE@%, %@AI@%streamarg%@AE@%, or %@AI@%boxarg%@AE@%. You can toggle%@NL@%
  1739. %@AI@%cursor-movement%@AE@% DEL)        between stream and box selection with the%@NL@%
  1740.                             %@AI@%Boxstream%@AE@% function (CTRL+B).%@NL@%
  1741. %@NL@%
  1742. %@CR:MSE43104@%%@4@%The %@AI@%Delete%@AE@% function copies all deleted text (except single-character%@EH@%
  1743. deletions) to the Clipboard. For any argument, the %@AI@%Meta Delete%@AE@% function
  1744. discards the text without copying it to the Clipboard.%@NL@%
  1745. %@NL@%
  1746. %@CR:MSE43105@%%@4@%To deal with whole lines of text, the Microsoft Editor provides the%@EH@%
  1747. following functions:%@NL@%
  1748. %@NL@%
  1749. %@CR:MSE43106@%%@AB@%Function%@AE@%%@NL@%
  1750. %@AB@%(and Default Keystrokes)    Description%@AE@%%@NL@%
  1751. %@NL@%
  1752. %@AI@%Ldelete%@AE@% (CTRL+Y)            Deletes a line of text or a %@AI@%boxarg%@AE@%%@NL@%
  1753. %@NL@%
  1754. %@AI@%Linsert%@AE@% (CTRL+N)            Inserts a line of text or a %@AI@%boxarg%@AE@%%@NL@%
  1755. %@NL@%
  1756. %@CR:MSE43107@%%@4@%You can use these functions in commands without an argument or prefix. These%@EH@%
  1757. functions also take cursor-movement arguments. They produce the same results
  1758. that %@AI@%Delete%@AE@% and %@AI@%Insert%@AE@% do, but they always act as if the editor were in box
  1759. mode.%@NL@%
  1760. %@NL@%
  1761. ───────────────────────────────────────────────────────────────────────────%@NL@%
  1762. %@AI@%NOTE%@AE@%%@NL@%
  1763.    When you want to delete or copy large areas of text, you may find the%@NL@%
  1764.    DIRECTION keys move too slowly. However, you can define a highlighted%@NL@%
  1765.    area with any cursor-movement function that does not take an argument.%@NL@%
  1766.    Mpage (PGUP) and Ppage (PGDN) can be used this way. The Ppara and Mpara%@NL@%
  1767.    functions can also be used this way, but they do not have default key%@NL@%
  1768.    assignments.%@NL@%
  1769. %@NL@%
  1770.    To delete large amounts of text, you can also use a markarg or a numarg%@NL@%
  1771.    with a delete function. See Table A.3 for more information.%@NL@%
  1772. ───────────────────────────────────────────────────────────────────────────%@NL@%
  1773. %@NL@%
  1774. %@NL@%
  1775. %@CR:MSE43200@%%@3@%%@AB@%4.3.2  Copying Text%@AE@%%@EH@%%@NL@%
  1776. %@NL@%
  1777. %@CR:MSE43201@%%@4@%To copy text without first deleting it, use the %@AI@%Copy%@AE@% function (CTRL+INS),%@EH@%
  1778. which copies a range of text into the <clipboard> pseudo file. Text in the
  1779. Clipboard is then inserted into the file when you invoke the %@AI@%Paste%@AE@% function.
  1780. The following list presents different commands that use the %@AI@%Copy%@AE@% function:%@NL@%
  1781. %@NL@%
  1782. %@CR:MSE43202@%%@AB@%Command     %@AE@%%@NL@%
  1783. %@AB@%(and Default Keystrokes)             Description%@AE@%%@NL@%
  1784. %@NL@%
  1785. %@AI@%Arg cursor-movementCopy%@AE@%              Copies the highlighted area into the%@NL@%
  1786. (ALT+A %@AI@%cursor-movement%@AE@% CTRL+INS)     Clipboard.%@NL@%
  1787. %@NL@%
  1788. %@AI@%Arg numarg Copy%@AE@%                      Copies the specified number of lines%@NL@%
  1789. (ALT+A %@AI@%numarg%@AE@% CTRL+INS)              into the Clipboard, beginning with the%@NL@%
  1790.                                      line that the cursor is on.%@NL@%
  1791. %@NL@%
  1792. %@AI@%Arg markarg Copy%@AE@%                     Copies the text between the specified%@NL@%
  1793. (ALT+A %@AI@%markarg%@AE@% CTRL+INS)             marker and the cursor into the%@NL@%
  1794.                                      Clipboard. The shape of this region%@NL@%
  1795.                                      changes depending on whether the editor%@NL@%
  1796.                                      is in box or stream mode.%@NL@%
  1797. %@NL@%
  1798. %@CR:MSE43203@%%@4@%The %@AI@%Paste%@AE@% function (SHIFT+INS) is useful both for moving and copying text.%@EH@%
  1799. To move text, first delete it and then invoke %@AI@%Paste%@AE@% after moving the cursor
  1800. to the destination.%@NL@%
  1801. %@NL@%
  1802. ───────────────────────────────────────────────────────────────────────────%@NL@%
  1803. %@AI@%NOTE%@AE@%%@NL@%
  1804.    If you highlight an area on the screen and then invoke Paste, the editor%@NL@%
  1805.    deletes the highlighted area and replaces it with the contents of the%@NL@%
  1806.    Clipboard.%@NL@%
  1807. ───────────────────────────────────────────────────────────────────────────%@NL@%
  1808. %@NL@%
  1809. %@CR:MSE43204@%%@4@%See Section 4.4%@BO:   1839c@% for more information on markers.%@EH@%%@NL@%
  1810. %@NL@%
  1811. %@NL@%
  1812. %@CR:MSE43300@%%@3@%%@AB@%4.3.3  Other Insert Commands%@AE@%%@EH@%%@NL@%
  1813. %@NL@%
  1814. %@CR:MSE43301@%%@4@%The following functions insert specific items at the current cursor position%@EH@%
  1815. (each function is a complete command). These functions do not have
  1816. preassigned keys; see Chapter 6%@BO:   28e3a@%, "Function Assignments and Macros," for
  1817. information on how to assign keys to functions.%@NL@%
  1818. %@NL@%
  1819. %@CR:MSE43302@%%@AB@%Function                     Description%@AE@%%@NL@%
  1820. %@NL@%
  1821. %@AI@%Curdate%@AE@%                     Inserts current date%@NL@%
  1822. %@NL@%
  1823. %@AI@%Curday%@AE@%                      Inserts current day of the week%@NL@%
  1824. %@NL@%
  1825. %@AI@%Curfile%@AE@%                     Inserts current file name%@NL@%
  1826. %@NL@%
  1827. %@AI@%Curfileext%@AE@%                  Inserts current file extension%@NL@%
  1828. %@NL@%
  1829. %@AI@%Curfilenam%@AE@%                  Inserts base name of current file%@NL@%
  1830. %@NL@%
  1831. %@AI@%Curtime%@AE@%                     Inserts current time%@NL@%
  1832. %@NL@%
  1833. %@CR:MSE43303@%%@4@%These functions all use time of execution, rather than time of editor%@EH@%
  1834. start-up, as the current time.%@NL@%
  1835. %@NL@%
  1836. %@CR:MSE43304@%%@4@%Although the functions above are not preassigned to any keystrokes, you can%@EH@%
  1837. assign them to keystrokes by using the technique described in Chapter 6%@BO:   28e3a@%.
  1838. You can also execute a function by giving its name as input to %@AI@%Execute%@AE@% (F7).%@NL@%
  1839. %@NL@%
  1840. %@CR:MSE43305@%%@4@%For example, the following sequence inserts the date at the cursor position:%@EH@%%@NL@%
  1841. %@NL@%
  1842. %@CR:MSE43306@%  1. Invoke %@AI@%Arg%@AE@% (press ALT+A)%@NL@%
  1843.   2. Type the following string: %@AS@%curdate%@AE@%%@NL@%
  1844.   3. Invoke %@AI@%Execute%@AE@% (press F7)%@NL@%
  1845. %@NL@%
  1846. %@NL@%
  1847. %@CR:MSE43400@%%@3@%%@AB@%4.3.4  Reading a File into the Current File%@AE@%%@EH@%%@NL@%
  1848. %@NL@%
  1849. %@CR:MSE43401@%%@4@%The %@AI@%Paste%@AE@% function can be used in commands that read a file into the current%@EH@%
  1850. file, as shown below:%@NL@%
  1851. %@NL@%
  1852. %@CR:MSE43402@%
  1853. %@AB@%Command%@AE@%%@NL@%
  1854. %@AB@%(and Default Keystrokes)             Description%@AE@%%@NL@%
  1855. %@NL@%
  1856. %@AI@%Arg Arg textarg Paste%@AE@%                Reads the contents of the file%@NL@%
  1857. (ALT+A ALT+A %@AI@%textarg%@AE@% SHIFT+INS)      specified by the %@AI@%textarg%@AE@% and inserts%@NL@%
  1858.                                      these contents into the current file.%@NL@%
  1859.                                      The insertion occurs at the cursor%@NL@%
  1860.                                      position.%@NL@%
  1861. %@NL@%
  1862. %@AI@%Arg Arg %@AE@%%@AB@%!%@AE@%%@AI@%textarg Paste%@AE@%               Reads the output of the system-level%@NL@%
  1863. (ALT+A ALT+A %@AB@%!%@AE@%%@AI@%textarg%@AE@% SHIFT+INS)     command line given as the %@AI@%textarg%@AE@%. The%@NL@%
  1864.                                      output is inserted at the cursor%@NL@%
  1865.                                      position. For example, if the %@AI@%textarg%@AE@%%@NL@%
  1866.                                      is DIR, then a directory listing is%@NL@%
  1867.                                      inserted into the file.%@NL@%
  1868. %@NL@%
  1869. %@NL@%
  1870. %@CR:MSE44000@%%@2@%%@AB@%4.4  Using File Markers%@AE@%%@EH@%%@NL@%
  1871. %@NL@%
  1872. %@CR:MSE44001@%%@4@%File markers help you move back and forth through large files. Once you have%@EH@%
  1873. defined a file marker, you can move quickly to the location marked. You can
  1874. also use a file marker as input to certain commands. For example, instead of
  1875. moving the cursor to a marked location, you simply give the name of the
  1876. marker.%@NL@%
  1877. %@NL@%
  1878. %@CR:MSE44002@%%@4@%The Microsoft Editor allows you to create any number of file markers. You%@EH@%
  1879. identify each with a name consisting of alphanumeric characters.%@NL@%
  1880. %@NL@%
  1881. %@CR:MSE44003@%%@4@%Use the %@AI@%Mark%@AE@% function (CTRL+M) to create or go to a marker. The command %@AI@%Mark%@AE@%%@EH@%
  1882. (CTRL+M with no argument) takes you back to the beginning of the file, just
  1883. as %@AI@%Arg Mpage%@AE@% does. The command %@AI@%Arg Mark%@AE@% (ALT+A CTRL+M) moves you back to the
  1884. previous cursor position. This last use of %@AI@%Mark%@AE@% is useful for switching back
  1885. and forth quickly between two locations.%@NL@%
  1886. %@NL@%
  1887. %@CR:MSE44004@%%@4@%Some of the most powerful uses of the %@AI@%Mark%@AE@% function involve commands with%@EH@%
  1888. arguments, as shown below:%@NL@%
  1889. %@NL@%
  1890. %@CR:MSE44005@%%@AB@%Command     %@AE@%%@NL@%
  1891. %@AB@%(and Default Keystrokes)       Description%@AE@%%@NL@%
  1892. %@NL@%
  1893. %@AI@%Arg numarg Mark%@AE@%                Moves the cursor to the line that you%@NL@%
  1894. (ALT+A %@AI@%numarg%@AE@% CTRL+M)          specify. The Microsoft Editor numbers lines%@NL@%
  1895.                                beginning with the number 1, so the first%@NL@%
  1896.                                line of the file is line 1, the second is%@NL@%
  1897.                                line 2, and so forth.%@NL@%
  1898. %@NL@%
  1899. %@AI@%Arg Arg textarg Mark%@AE@%           Defines a marker at the current location.%@NL@%
  1900. (ALT+A ALT+A %@AI@%textarg%@AE@% CTRL+M)   This command sets a marker which in turn can%@NL@%
  1901.                                be used as input to other functions.%@NL@%
  1902. %@NL@%
  1903. %@AI@%Arg textarg Mark%@AE@%               Moves the cursor directly to a marker you%@NL@%
  1904. (ALT+A %@AI@%textarg%@AE@% CTRL+M)         have already defined as a %@AI@%textarg%@AE@%.%@NL@%
  1905. %@NL@%
  1906. %@CR:MSE44006@%%@4@%The marker name may include digits, but must include at least one nondigit%@EH@%
  1907. character as well.%@NL@%
  1908. %@NL@%
  1909. %@NL@%
  1910. %@CR:MSE44100@%%@3@%%@AB@%4.4.1  Functions That Use Markers%@AE@%%@EH@%%@NL@%
  1911. %@NL@%
  1912. %@CR:MSE44101@%%@4@%The following functions also make use of markers by accepting a previously%@EH@%
  1913. defined marker name (a %@AI@%markarg%@AE@%) as an argument. These functions all use the
  1914. area in the file defined by the cursor position and the marker. This area,
  1915. in turn, is interpreted as a stream argument, or %@AI@%linearg%@AE@% or %@AI@%boxarg%@AE@%,
  1916. depending on whether the editor is in stream mode or box mode. Recall that
  1917. the %@AI@%Boxstream%@AE@% function (CTRL+B) toggles between these two modes.%@NL@%
  1918. %@NL@%
  1919. %@CR:MSE44102@%%@AB@%Function     %@AE@%%@NL@%
  1920. %@AB@%(and Default Keystrokes)    Description%@AE@%%@NL@%
  1921. %@NL@%
  1922. %@AI@%Assign%@AE@% (ALT+=)              Executes all assignment statements in the%@NL@%
  1923.                             defined area (see Chapters 6%@BO:   28e3a@% and 7%@BO:   3396c@% for more%@NL@%
  1924.                             information)%@NL@%
  1925. %@NL@%
  1926. %@AI@%Copy%@AE@% (CTRL+INS)             Copies the defined area into the Clipboard%@NL@%
  1927. %@NL@%
  1928. %@AI@%Ldelete%@AE@% (CTRL+Y)            Deletes the defined area%@NL@%
  1929. %@NL@%
  1930. %@AI@%Linsert%@AE@% (CTRL+N)            Fills the defined area with spaces%@NL@%
  1931. %@NL@%
  1932. %@AI@%Qreplace%@AE@% (CTRL+\)           Executes search and replace over the defined%@NL@%
  1933.                             area, with query for confirmation%@NL@%
  1934. %@NL@%
  1935. %@AI@%Replace%@AE@% (CTRL+L)            Executes search and replace over the defined%@NL@%
  1936.                             area%@NL@%
  1937. %@NL@%
  1938. %@CR:MSE44103@%%@4@%If you specify a marker the editor cannot find, the editor automatically%@EH@%
  1939. checks the file listed in the %@AB@%markfile%@AE@% switch. See Table A.5 for more
  1940. information on the %@AB@%markfile%@AE@% switch.%@NL@%
  1941. %@NL@%
  1942. %@NL@%
  1943. %@CR:MSE44200@%%@3@%%@AB@%4.4.2  Related Functions: Savecur and Restcur%@AE@%%@EH@%%@NL@%
  1944. %@NL@%
  1945. %@CR:MSE44201@%%@4@%The %@AI@%Savecur%@AE@% and %@AI@%Restcur%@AE@%  functions are similar to %@AI@%Mark%@AE@% but do not take%@EH@%
  1946. arguments. Use %@AI@%Savecur%@AE@% to save the current cursor position and %@AI@%Restcur%@AE@% to
  1947. return to that position later. With these two functions, you can save only
  1948. one position at a time.%@NL@%
  1949. %@NL@%
  1950. %@CR:MSE44202@%%@4@%No keys are preassigned to %@AI@%Savecur%@AE@% or %@AI@%Restcur%@AE@%. See Chapter 6%@BO:   28e3a@%, "Function%@EH@%
  1951. Assignments and Macros," for information on how to assign keys. You can also
  1952. use %@AI@%Savecur%@AE@% and %@AI@%Restcur%@AE@% by giving them as input to the %@AI@%Arg textarg Execute%@AE@%
  1953. command, in which %@AI@%textarg%@AE@% is the name of the function to execute:%@NL@%
  1954. %@NL@%
  1955. %@CR:MSE44203@%  1. Invoke %@AI@%arg%@AE@% (press ALT + A)%@NL@%
  1956.   2. Type %@AI@%Savecur%@AE@% or %@AI@%Restcur%@AE@%%@NL@%
  1957.   3. Invoke %@AI@%Execute%@AE@% (press F7)%@NL@%
  1958. %@NL@%
  1959. %@NL@%
  1960. %@CR:MSE45000@%%@2@%%@AB@%4.5  Searching and Replacing%@AE@%%@EH@%%@NL@%
  1961. %@NL@%
  1962. %@CR:MSE45001@%%@4@%The %@AI@%Psearch%@AE@% function (F3) directs the editor to conduct a forward search (a%@EH@%
  1963. "plus search") for the next occurrence of the specified string. All searches
  1964. take place from the current cursor position to the end of the file.%@NL@%
  1965. %@NL@%
  1966. %@CR:MSE45002@%%@4@%The most common uses of %@AI@%Psearch%@AE@% consist of the following commands:%@EH@%%@NL@%
  1967. %@NL@%
  1968. %@CR:MSE45003@%%@AB@%Command%@AE@%%@NL@%
  1969. %@AB@%(and Default Keystrokes)     Description%@AE@%%@NL@%
  1970. %@NL@%
  1971. %@AI@%Arg textarg Psearch%@AE@%         Directs the editor to look for the string given%@NL@%
  1972. (ALT+A %@AI@%textarg%@AE@% F3)          as %@AI@%textarg%@AE@%. The editor scrolls the screen, if%@NL@%
  1973.                             necessary, and moves the cursor to the next%@NL@%
  1974.                             occurrence of %@AI@%textarg%@AE@% in the file.%@NL@%
  1975. %@NL@%
  1976. %@AI@%Psearch%@AE@% (F3)                Directs the editor to look for the most recently%@NL@%
  1977.                             specified search string.%@NL@%
  1978. %@NL@%
  1979. %@AI@%Arg Psearch%@AE@% (ALT+A F3)      Directs the editor to take the word at the%@NL@%
  1980.                             current cursor position as the search string.%@NL@%
  1981.                             (In other words, the search string consists of%@NL@%
  1982.                             all charac-ters from the cursor to the first%@NL@%
  1983.                             blank or new line.)%@NL@%
  1984. %@NL@%
  1985. %@CR:MSE45004@%%@4@%You can search backward with %@AI@%Msearch%@AE@%  (a "minus search"). The %@AI@%Msearch%@AE@%%@EH@%
  1986. function (F4) uses syntax identical to %@AI@%Psearch%@AE@%. Backward searches take place
  1987. from the current cursor position to the beginning of the file. In addition,
  1988. %@AI@%Msearch%@AE@% with no argument assumes the same search string that was specified
  1989. with %@AI@%Psearch%@AE@%. Therefore, after searching forward for a string, you can
  1990. search backward for the same string just by pressing F4.%@NL@%
  1991. %@NL@%
  1992. %@CR:MSE45005@%%@4@%All versions of the %@AI@%Psearch%@AE@% and %@AI@%Msearch%@AE@% commands are affected by case%@EH@%
  1993. sensitivity. By default, case sensitivity is off, so the editor carries out
  1994. searches for strings without distinguishing between uppercase and lowercase
  1995. letters. How-ever, you can change this behavior by turning the %@AB@%case%@AE@% switch
  1996. on, using the syntax for switch settings explained in Chapter 7%@BO:   3396c@%, "Switches,
  1997. Assignments, and the TOOLS.INI File."%@NL@%
  1998. %@NL@%
  1999. %@CR:MSE45006@%%@4@%You can also temporarily reverse the setting of the %@AB@%case%@AE@% switch by turning%@EH@%
  2000. on the %@AI@%Meta%@AE@% prefix. Therefore, if case sensitivity is off, you can conduct a
  2001. case-sensitive search with the %@AI@%Meta%@AE@%%@AI@%Psearch%@AE@% (F9 F3) or %@AI@%Meta Msearch%@AE@% (F9 F4)
  2002. command.%@NL@%
  2003. %@NL@%
  2004. %@NL@%
  2005. %@CR:MSE45100@%%@3@%%@AB@%4.5.1  Searching for a Pattern of Text%@AE@%%@EH@%%@NL@%
  2006. %@NL@%
  2007. %@CR:MSE45101@%%@4@%The commands described above search for an exact match of the string you%@EH@%
  2008. specify. However, sometimes you may want to search for a set of different
  2009. strings: for example, any word that begins with "B" and ends with "ing."%@NL@%
  2010. %@NL@%
  2011. %@CR:MSE45102@%%@4@%You can search for a pattern of text by specifying a "regular expression." A%@EH@%
  2012. regular expression is a string that specifies a pattern of text by using
  2013. certain special characters. Chapter 5%@BO:   206bc@% describes how to specify regular
  2014. expressions.%@NL@%
  2015. %@NL@%
  2016. %@CR:MSE45103@%%@4@%The command %@AI@%Arg Arg textarg Psearch%@AE@% (ALT+A ALT+A %@AI@%textarg%@AE@% F3) searches%@EH@%
  2017. forward for a string that matches the regular expression specified as the
  2018. %@AI@%textarg%@AE@%. The command %@AI@%Arg Arg textarg Msearch%@AE@% (ALT+A ALT+A %@AI@%textarg%@AE@% F4)
  2019. searches backward for a string that matches the regular expression specified
  2020. as the %@AI@%textarg%@AE@%.%@NL@%
  2021. %@NL@%
  2022. %@CR:MSE45104@%%@4@%Regular-expression searches are affected by case sensitivity, as explained%@EH@%
  2023. in the previous section.%@NL@%
  2024. %@NL@%
  2025. %@NL@%
  2026. %@CR:MSE45200@%%@3@%%@AB@%4.5.2  Searching the File Globally%@AE@%%@EH@%%@NL@%
  2027. %@NL@%
  2028. %@CR:MSE45201@%%@4@%The %@AI@%Searchall%@AE@% function (SHIFT+F6) takes the same syntax that %@AI@%Psearch%@AE@% does,%@EH@%
  2029. but instead of finding the next occurrence of a string, the %@AI@%Searchall%@AE@%
  2030. function high-lights every string in the file that matches the search
  2031. string. For example, to highlight every occurrence of the word %@AS@%float%@AE@% in a
  2032. file, follow these steps:%@NL@%
  2033. %@NL@%
  2034. %@CR:MSE45202@%  1. Invoke %@AI@%Arg%@AE@% (press ALT+A)%@NL@%
  2035.   2. Type the following search string: %@AS@%float%@AE@%%@NL@%
  2036.   3. Invoke %@AI@%Searchall%@AE@% by pressing SHIFT+F6%@NL@%
  2037. %@NL@%
  2038. %@CR:MSE45203@%%@4@%Any action other than cursor movement removes the highlight. The color of%@EH@%
  2039. the highlight is normally different from the highlight color in
  2040. cursor-movement arguments.%@NL@%
  2041. %@NL@%
  2042. %@NL@%
  2043. %@CR:MSE45300@%%@3@%%@AB@%4.5.3  Searching a Series of Files%@AE@%%@EH@%%@NL@%
  2044. %@NL@%
  2045. %@CR:MSE45301@%%@4@%You can search a series of files without leaving the editor. The %@AI@%Mgrep%@AE@%%@EH@%
  2046. command takes the same syntax that %@AI@%Psearch%@AE@% and %@AI@%Msearch%@AE@% do. For example, the
  2047. command %@AI@%Arg Arg textarg Mgrep%@AE@% searches for a regular expression. The editor
  2048. responds to %@AI@%Mgrep%@AE@% by placing all strings found in the <compile> pseudo file.
  2049. You can look at the file by using %@AI@%Setfile%@AE@% or invoking the %@AI@%Nextmsg%@AE@% function.%@NL@%
  2050. %@NL@%
  2051. %@CR:MSE45302@%%@4@%Before using %@AI@%Mgrep%@AE@%, place the list of files to search in a macro named%@EH@%
  2052. %@AS@%mgreplist%@AE@%. This list can contain DOS wildcards and environment variables.
  2053. For example, the following steps direct %@AI@%Mgrep%@AE@% to search the following files:
  2054. the file JUNK.TXT; files that have a .C extension and are in the current
  2055. directory; and files that have a .H extension and are in any directory
  2056. listed in the INCLUDE environment varible:%@NL@%
  2057. %@NL@%
  2058. %@CR:MSE45303@%  1. Invoke %@AI@%Arg%@AE@% (press ALT+A)%@NL@%
  2059. %@NL@%
  2060.   2. Define the value of %@AS@%mgreplist%@AE@% by typing the following:%@NL@%
  2061. %@NL@%
  2062.        %@AS@%mgreplist:="JUNK.TXT *.C $INCLUDE:*.H"%@AE@%%@NL@%
  2063. %@NL@%
  2064.   3. Invoke %@AI@%Assign%@AE@% by pressing ALT+= (hold down the ALT key and press the%@NL@%
  2065.      equals sign)%@NL@%
  2066. %@NL@%
  2067. %@CR:MSE45304@%%@4@%You refer to an environment variable with the following syntax, in which%@EH@%
  2068. %@AI@%ENVAR%@AE@% is the name of the variable. The name must be entered in uppercase
  2069. characters:%@NL@%
  2070. %@NL@%
  2071.      %@AB@%$%@AE@%%@AI@%ENVAR%@AE@%%@AB@%:%@AE@%%@NL@%
  2072. %@NL@%
  2073. %@NL@%
  2074. %@CR:MSE45400@%%@3@%%@AB@%4.5.4  Search-and-Replace Functions%@AE@%%@EH@%%@NL@%
  2075. %@NL@%
  2076. %@CR:MSE45401@%%@4@%To replace repeated occurrences of one text string by another, use the%@EH@%
  2077. search-and-replace function %@AI@%Replace%@AE@% (CTRL+L). By default, the replacement
  2078. happens from the cursor position to the end of the file. However, as
  2079. described below, you can restrict the range over which the replacement
  2080. happens.%@NL@%
  2081. %@NL@%
  2082. %@CR:MSE45402@%%@4@%No matter what command syntax you use with %@AI@%Replace%@AE@%, the editor reacts by%@EH@%
  2083. prompting you for a search string and a replacement string, and then
  2084. executing the search and replace. If you have used %@AI@%Replace%@AE@% or %@AI@%Qreplace%@AE@%
  2085. ("query replace") before, the previous value of the search or replace string
  2086. appears on the dialog line. To use the string displayed, press ENTER.%@NL@%
  2087. %@NL@%
  2088. %@CR:MSE45403@%%@4@%The identical commands %@AI@%Replace%@AE@% and %@AI@%Arg Replace%@AE@% execute replacement from the%@EH@%
  2089. current cursor position to the end of the file. You can also specify a range
  2090. for the replacement by using one of the following commands:%@NL@%
  2091. %@NL@%
  2092. %@CR:MSE45404@%%@AB@%Command                     Default Keystrokes%@AE@%%@NL@%
  2093. %@NL@%
  2094. %@AI@%Arg linearg Replace%@AE@%         ALT+A %@AI@%linearg%@AE@% CTRL+L%@NL@%
  2095. %@NL@%
  2096. %@AI@%Arg numarg Replace%@AE@%          ALT+A %@AI@%numarg%@AE@% CTRL+L%@NL@%
  2097. %@NL@%
  2098. %@AI@%Arg boxarg Replace%@AE@%          ALT+A %@AI@%boxarg%@AE@% CTRL+L%@NL@%
  2099. %@NL@%
  2100. %@AI@%Arg streamarg Replace%@AE@%       ALT+A %@AI@%streamarg%@AE@% CTRL+L%@NL@%
  2101. %@NL@%
  2102. %@AI@%Arg markarg Replace%@AE@%         ALT+A %@AI@%markarg%@AE@% CTRL+L%@NL@%
  2103. %@NL@%
  2104. %@CR:MSE45405@%%@4@%If you specify a %@AI@%numarg%@AE@%, the replacement operation is limited to the%@EH@%
  2105. specified number of lines, beginning with the current line. If you specify a
  2106. %@AI@%linearg%@AE@%, %@AI@%streamarg%@AE@%, or %@AI@%boxarg%@AE@%, the replacement occurs only within the
  2107. highlighted area. If you specify a %@AI@%markarg%@AE@%, the replacement occurs in the
  2108. region of text between the cursor position and the marker. The shape of the
  2109. region changes depending on whether the editor is in box mode or stream
  2110. mode.%@NL@%
  2111. %@NL@%
  2112. %@CR:MSE45406@%%@4@%The %@AI@%Replace%@AE@% function is most efficient when you are sure you want the%@EH@%
  2113. replacement to be executed in every case. If you want to regulate how often
  2114. the replacement occurs, use %@AI@%Qreplace%@AE@% (CTRL+\). This function takes the same
  2115. syntax as %@AI@%Replace%@AE@%, but prompts you for confirmation before each replacement.
  2116. %@AI@%Qreplace%@AE@% asks you to press Y for yes, N for no, or A for all, which causes
  2117. replacement to proceed without further confirmation. Pressing Q (quit)
  2118. terminates replacement.%@NL@%
  2119. %@NL@%
  2120. %@CR:MSE45407@%%@4@%The %@AI@%Replace%@AE@% and %@AI@%Qreplace%@AE@% functions both take regular expressions as search%@EH@%
  2121. strings when you introduce the argument with %@AI@%Arg Arg%@AE@% instead of %@AI@%Arg%@AE@%. (See
  2122. Chapter 5%@BO:   206bc@% for information on regular expressions.) Otherwise, syntax is
  2123. identical, and the functions accept the same arguments.%@NL@%
  2124. %@NL@%
  2125. %@CR:MSE45408@%%@4@%Search and replacing is affected by case sensitivity, as explained in%@EH@%
  2126. Section 4.5.1.%@BO:   1a2e0@%%@NL@%
  2127. %@NL@%
  2128. %@CR:MSE45409@%%@4@%You can use the %@AI@%Mreplace%@AE@% function to execute replacements throughout a%@EH@%
  2129. series of files. See Appendix A, "Reference Tables," for more information.%@NL@%
  2130. %@NL@%
  2131. %@NL@%
  2132. %@CR:MSE46000@%%@2@%%@AB@%4.6  Compiling%@AE@%%@EH@%%@NL@%
  2133. %@NL@%
  2134. %@CR:MSE46001@%%@4@%One of the strengths of the Microsoft Editor is its capability as a%@EH@%
  2135. development environment. You can write a program and compile (or assemble)
  2136. from within the editor. If the compilation fails, you can make corrections
  2137. to the source file when you view the errors and then compile again.%@NL@%
  2138. %@NL@%
  2139. %@CR:MSE46002@%%@4@%Ordinarily, a compiler sends error messages directly to the screen while you%@EH@%
  2140. are outside the editor. When you compile from within the Microsoft Editor,
  2141. however, the error messages are displayed on the dialog line. The %@AI@%Nextmsg%@AE@%
  2142. function (SHIFT+F3) displays the error messages in sequence and positions
  2143. the cursor at the beginning of the line with the next error. You can make
  2144. corrections immediately.%@NL@%
  2145. %@NL@%
  2146. %@CR:MSE46003@%%@4@%The %@AI@%Compile%@AE@% function (CTRL+F3) appears in a variety of commands, as shown in%@EH@%
  2147. Section 4.6.1.%@BO:   1c335@%%@NL@%
  2148. %@NL@%
  2149. %@NL@%
  2150. %@CR:MSE46100@%%@3@%%@AB@%4.6.1  Invoking Compilers and Other Utilities%@AE@%%@EH@%%@NL@%
  2151. %@NL@%
  2152. %@CR:MSE46101@%%@4@%When you run the protected-mode version of the editor under OS/2,%@EH@%
  2153. compilations run in the background and the editor beeps when the compilation
  2154. is completed. (While a background compilation is running, the letters %@AS@%BP%@AE@%
  2155. appear on the status line.) When running the real-mode version of the editor
  2156. (under DOS or the OS/2 3.%@AI@%x%@AE@% compatibility box), you cannot edit again until
  2157. the compilation has completed.%@NL@%
  2158. %@NL@%
  2159. %@CR:MSE46102@%%@4@%With the Microsoft Editor's compilation capability, you can invoke any%@EH@%
  2160. program or utility and specify any command-line options. To invoke a program
  2161. directly, use one of the following commands:%@NL@%
  2162. %@NL@%
  2163. %@CR:MSE46103@%%@AB@%Command     %@AE@%%@NL@%
  2164. %@AB@%(and Default Keystrokes)             Description%@AE@%%@NL@%
  2165. %@NL@%
  2166. %@AI@%Arg Arg textarg Compile%@AE@%              Runs the system-level command described%@NL@%
  2167. (ALT+A ALT+A %@AI@%textarg%@AE@% CTRL+F3)        by %@AI@%textarg%@AE@%. Typically, this command%@NL@%
  2168.                                      runs the compiler.%@NL@%
  2169. %@NL@%
  2170. %@AI@%Arg Compile%@AE@%                          Runs a compilation according to the%@NL@%
  2171. (ALT+A CTRL+F3)                      %@AB@%extmake%@AE@% switch.%@NL@%
  2172. %@NL@%
  2173. %@AI@%Arg textarg Compile%@AE@%                  Runs a compilation according to the%@NL@%
  2174. (ALT+A CTRL+F3)                      "text" setting of the %@AB@%extmake%@AE@% switch.%@NL@%
  2175.                                      This version of the command is%@NL@%
  2176.                                      typically used with the NMAKE utility.%@NL@%
  2177. %@NL@%
  2178. %@AI@%Arg Meta Compile%@AE@%                     Kills any compilation running in the%@NL@%
  2179. (ALT+A F9 CTRL+F3)                   background after prompting for%@NL@%
  2180.                                      confirmation (OS/2 only).%@NL@%
  2181. %@NL@%
  2182. %@CR:MSE46104@%%@4@%Usually, it is more convenient to set your compile command once by setting%@EH@%
  2183. the %@AB@%extmake%@AE@% switch and giving the %@AI@%Arg Compile%@AE@% command each time you compile.%@NL@%
  2184. %@NL@%
  2185. %@CR:MSE46105@%%@4@%A "switch" is a variable that you can set to control the editor's behavior.%@EH@%
  2186. See Chapter 7%@BO:   3396c@%, "Switches, Assignments, and the TOOLS.INI File," for more
  2187. information on switches and how to set them.%@NL@%
  2188. %@NL@%
  2189. %@CR:MSE46106@%%@4@%The %@AI@%Arg Compile%@AE@% command examines the file extension of the current file and%@EH@%
  2190. executes the corresponding %@AB@%extmake%@AE@% setting. The %@AB@%extmake%@AE@% switch can have a
  2191. different setting for each file extension. The general form of an %@AB@%extmake%@AE@%
  2192. assignment is%@NL@%
  2193. %@NL@%
  2194.      %@AB@%extmake:%@AE@%%@AI@%ext command-line%@AE@%%@NL@%
  2195. %@NL@%
  2196. %@CR:MSE46108@%%@4@%in which %@AI@%ext%@AE@% is a file extension and %@AI@%command-line%@AE@% is the compile command to%@EH@%
  2197. invoke for files with this extension. For example, suppose you want to
  2198. invoke the following compile command for use with .C files:%@NL@%
  2199. %@NL@%
  2200.      cl /AL /Zi /Ox %s%@NL@%
  2201. %@NL@%
  2202. %@CR:MSE46109@%%@4@%The characters %@AS@%%s%@AE@% represent the name of the current file. To automatically%@EH@%
  2203. invoke this compile command with %@AI@%Arg Compile%@AE@%, you would first follow these
  2204. steps to set the %@AB@%extmake%@AE@% switch:%@NL@%
  2205. %@NL@%
  2206. %@CR:MSE4610A@%  1. Invoke %@AI@%Arg%@AE@% (press ALT+A)%@NL@%
  2207. %@NL@%
  2208.   2. Type the following text: %@AS@%extmake:c cl /AL /Zi /Ox %s%@AE@%%@NL@%
  2209. %@NL@%
  2210.   3. Press ALT+= to invoke %@AI@%Assign%@AE@% (hold down the ALT key and press the%@NL@%
  2211.      equals sign)%@NL@%
  2212. %@NL@%
  2213. %@CR:MSE4610B@%%@4@%The editor then invokes the desired command line whenever you give the %@AI@%Arg%@AE@%%@EH@%
  2214. %@AI@%Compile%@AE@% command and are editing a .C file.%@NL@%
  2215. %@NL@%
  2216. %@CR:MSE4610C@%%@4@%To use the %@AI@%Arg textarg Compile%@AE@% command, first set %@AB@%extmake%@AE@% with a %@AB@%text%@AE@%%@EH@%
  2217. extension:%@NL@%
  2218. %@NL@%
  2219.      %@AB@%extmake:text%@AE@% %@AI@%command-line%@AE@%%@NL@%
  2220. %@NL@%
  2221. %@CR:MSE4610E@%%@4@%If the symbol %@AS@%%s%@AE@% appears in %@AI@%command-line%@AE@%, it is replaced with the text%@EH@%
  2222. argument to %@AI@%Compile%@AE@%. For example, if %@AB@%extmake%@AE@% has the setting%@NL@%
  2223. %@NL@%
  2224.      extmake:text nmake %s%@NL@%
  2225. %@NL@%
  2226. %@CR:MSE4610F@%%@4@%and you pass the text argument %@AS@%projectx%@AE@% to the %@AI@%Compile%@AE@% function, the editor%@EH@%
  2227. executes the following system-level command:%@NL@%
  2228. %@NL@%
  2229.      nmake projectx%@NL@%
  2230. %@NL@%
  2231. %@NL@%
  2232. %@CR:MSE46200@%%@3@%%@AB@%4.6.2  Viewing Error Output%@AE@%%@EH@%%@NL@%
  2233. %@NL@%
  2234. %@CR:MSE46201@%%@4@%To generate error output that you can view from within the editor, the%@EH@%
  2235. compiler or assembler must output errors in one of the following formats:%@NL@%
  2236. %@NL@%
  2237.      %@AI@%filename row column%@AE@%%@AB@%:%@AE@%%@AI@% message%@AE@%%@NL@%
  2238.      %@AI@%filename%@AE@% %@AB@%(%@AE@%%@AI@%row%@AE@%%@AB@%,%@AE@% %@AI@%column%@AE@%%@AB@%):%@AE@% %@AI@%message%@AE@%%@NL@%
  2239.      %@AI@%filename%@AE@% %@AB@%(%@AE@%%@AI@%row%@AE@%%@AB@%):%@AE@%%@AI@%message%@AE@%%@NL@%
  2240.      %@AI@%filename%@AE@%%@AB@%:%@AE@% %@AI@%row%@AE@%%@AB@%:%@AE@% %@AI@%message%@AE@%%@NL@%
  2241.      %@AB@%"%@AE@%%@AI@%filename%@AE@%%@AB@%",%@AE@% %@AI@%row%@AE@% %@AI@%column%@AE@%%@AB@%:%@AE@% %@AI@%message%@AE@%%@NL@%
  2242. %@NL@%
  2243. %@CR:MSE46203@%%@4@%The Microsoft Editor, in turn, reads the error output directly and responds%@EH@%
  2244. by moving the cursor to each location where an error was reported while
  2245. displaying the %@AI@%message%@AE@% on the dialog line. (The method for moving between
  2246. error locations is described below.) The following programs output error
  2247. messages in a format readable by the Microsoft Editor:%@NL@%
  2248. %@NL@%
  2249. %@CR:MSE46204@%  ■  Microsoft C Optimizing Compiler%@NL@%
  2250.   ■  Microsoft Macro Assembler%@NL@%
  2251.   ■  Microsoft Pascal Compiler 4.0%@NL@%
  2252.   ■  Microsoft BASIC Compiler 6.0%@NL@%
  2253.   ■  Microsoft FORTRAN Optimizing Compiler 4.1%@NL@%
  2254. %@NL@%
  2255. ───────────────────────────────────────────────────────────────────────────%@NL@%
  2256. %@AI@%NOTE%@AE@%%@NL@%
  2257.    With the Pascal and BASIC compilers, you must use the /Z command-line%@NL@%
  2258.    option with either the PL or BC driver to generate error output that the%@NL@%
  2259.    Microsoft Editor can read. (The %@AI@%extmake%@AE@% switch, discussed in Chapter 7%@BO:   3396c@%,%@NL@%
  2260.    uses the /Z option by default.)%@NL@%
  2261. ───────────────────────────────────────────────────────────────────────────%@NL@%
  2262. %@NL@%
  2263. %@CR:MSE46205@%%@4@%When a compilation fails in real mode, the editor displays the first error%@EH@%
  2264. message and positions the cursor at the line with the error. The %@AI@%Nextmsg%@AE@%
  2265. function (SHIFT+F3) displays the next error message and repositions the
  2266. cursor at the appropriate line.  %@AI@%;Nextmsg%@AE@%%@NL@%
  2267. %@NL@%
  2268. %@CR:MSE46206@%%@4@%When a compilation fails in protected mode, the editor beeps rather than%@EH@%
  2269. interrupts your current activity. If you had previously viewed the results
  2270. of an earlier compilation, give the %@AI@%Arg Meta Nextmsg%@AE@% command (ALT+A  F9
  2271. SHIFT+F3) to advance to the current set of error messages. Then, regardless
  2272. of how many compilations you are running, press SHIFT+F3 to display the
  2273. first error message and move the cursor to the line with that error.%@NL@%
  2274. %@NL@%
  2275. %@CR:MSE46207@%%@4@%Some common ways to use the %@AI@%Nextmsg%@AE@% function are shown below:%@EH@%%@NL@%
  2276. %@NL@%
  2277. %@CR:MSE46208@%%@AB@%Command%@AE@%%@NL@%
  2278. %@AB@%(and Default Keystrokes)    Description%@AE@%%@NL@%
  2279. %@NL@%
  2280. %@AI@%Nextmsg%@AE@% (SHIFT+F3)          Moves cursor to location of next error message%@NL@%
  2281.                             and displays text of error message on the dialog%@NL@%
  2282.                             line.%@NL@%
  2283. %@NL@%
  2284. %@AI@%Arg numarg Nextmsg%@AE@%          Moves forward or backward by %@AI@% %@AE@%%@AI@%numarg%@AE@% error%@NL@%
  2285. (ALT+A %@AI@%numarg%@AE@% SHIFT+F3)     messages. For example, if %@AI@%numarg%@AE@% is %@AS@%-1%@AE@%, moves%@NL@%
  2286.                             the cursor to the previous error message.%@NL@%
  2287. %@NL@%
  2288. %@AI@%Arg Meta Nextmsg%@AE@%            OS/2 only. Advances to next set of error%@NL@%
  2289. (ALT+A A SHIFT+F3)          messages. Under OS/2, the editor maintains error%@NL@%
  2290.                             messages for all compilations. This command%@NL@%
  2291.                             directs the editor to advance to the error%@NL@%
  2292.                             messages for the subsequent compilation.%@NL@%
  2293. %@NL@%
  2294.                             This feature supports simultaneous background%@NL@%
  2295.                             compilations. No matter how many compilations%@NL@%
  2296.                             you exe-cuted, you can view every set of error%@NL@%
  2297.                             messages.%@NL@%
  2298. %@NL@%
  2299. %@NL@%
  2300. %@CR:MSE46300@%%@3@%%@AB@%4.6.3  Viewing the Dynamic-Compile Log%@AE@%%@EH@%%@NL@%
  2301. %@NL@%
  2302. %@CR:MSE46301@%%@4@%Reviewing error messages as described in the previous section is useful when%@EH@%
  2303. each error message corresponds to a location in your source file. However,
  2304. some messages (such as linker errors) do not correspond to specific lines of
  2305. code. To review these errors, as well as general compilation errors, you may
  2306. want to view the actual error-message text.%@NL@%
  2307. %@NL@%
  2308. %@CR:MSE46302@%%@4@%The editor keeps the complete error output of each compilation──including%@EH@%
  2309. output from any utilities that were invoked──in the <compile> pseudo file.
  2310. If the editor is running in real mode, you can view the <compile> pseudo
  2311. file after a compilation is complete by following these steps:%@NL@%
  2312. %@NL@%
  2313. %@CR:MSE46303@%  1. Invoke %@AI@%Arg%@AE@% (press ALT+A)%@NL@%
  2314.   2. Type the following text: %@AS@%<compile>%@AE@%%@NL@%
  2315.   3. Invoke %@AI@%Setfile%@AE@% (press F2)%@NL@%
  2316. %@NL@%
  2317. %@CR:MSE46304@%%@4@%If the editor is running in OS/2 protected mode, you can view the  error%@EH@%
  2318. output in the same manner described above. You can also view the <compile>
  2319. pseudo file as the compilation is running. Under protected mode, the
  2320. <compile> pseudo file is updated dynamically; as each error message is
  2321. produced by the compiler or utility, the editor adds the message to the end
  2322. of this file.%@NL@%
  2323. %@NL@%
  2324. %@CR:MSE46305@%%@4@%Using the techniques described in the next section, you can open <compile>%@EH@%
  2325. as a separate window. This lets you continue to edit your source file while
  2326. watching error messages appear the instant an error is detected. The command
  2327. %@AI@%Arg Meta Compile%@AE@% kills the compilation.%@NL@%
  2328. %@NL@%
  2329. %@NL@%
  2330. %@CR:MSE47000@%%@2@%%@AB@%4.7  Using Editing Windows%@AE@%%@EH@%%@NL@%
  2331. %@NL@%
  2332. %@CR:MSE47001@%%@4@%An "editing window" is a division of the screen that functions independently%@EH@%
  2333. from other portions of the screen. When you have two or more windows
  2334. present, each functions as a miniature screen. For example, one window can
  2335. view lines 5-15 while another window views lines 90-97. You can even use
  2336. windows to view two or more files simultaneously.%@NL@%
  2337. %@NL@%
  2338. %@CR:MSE47002@%%@4@%Although windows are tiled, they can view overlapping areas of text. Changes%@EH@%
  2339. and highlighting are reflected simultaneously in all windows that view the
  2340. area of altered text.%@NL@%
  2341. %@NL@%
  2342. %@CR:MSE47003@%%@4@%You can have up to eight windows on the screen and create either horizontal%@EH@%
  2343. or vertical divisions between windows. The command %@AI@%Window%@AE@% (F6 with no
  2344. arguments) moves the cursor between windows.To create or merge a window,
  2345. move the cursor to the row or column at which you want to create a new
  2346. division, and give one of the following commands:%@NL@%
  2347. %@NL@%
  2348. %@CR:MSE47004@%%@AB@%Command%@AE@%%@NL@%
  2349. %@AB@%(and Default Keystrokes)      Description%@AE@%%@NL@%
  2350. %@NL@%
  2351. %@AI@%Arg Window%@AE@%                    Creates a horizontal window (split at the%@NL@%
  2352. (ALT+A F6)                    cursor row)%@NL@%
  2353. %@NL@%
  2354. %@AI@%Arg Arg Window%@AE@%                Creates a vertical window (split at the%@NL@%
  2355. (ALT+A ALT+A F6)              cursor column)%@NL@%
  2356. %@NL@%
  2357. %@AI@%Meta Window%@AE@%                   Closes the current window by merging it with%@NL@%
  2358. (F9 F6)                       the window to the right or below%@NL@%
  2359. %@NL@%
  2360. %@CR:MSE47005@%%@4@%Each window must have a minimum of 5 lines and 10 columns. If you try to%@EH@%
  2361. create a window of a smaller size, the command fails.%@NL@%
  2362. %@NL@%
  2363. %@NL@%
  2364. %@CR:MSE48000@%%@2@%%@AB@%4.8  Working with Multiple Files%@AE@%%@EH@%%@NL@%
  2365. %@NL@%
  2366. %@CR:MSE48001@%%@4@%You can load a new file in the screen or current window with the %@AI@%Setfile%@AE@%%@EH@%
  2367. function.%@NL@%
  2368. %@NL@%
  2369. %@CR:MSE48002@%%@AB@%Command     %@AE@%%@NL@%
  2370. %@AB@%(and Default Keystrokes)     Description%@AE@%%@NL@%
  2371. %@NL@%
  2372. %@AI@%Arg textarg Setfile%@AE@%         Loads the file specified in the %@AI@%textarg%@AE@%.%@NL@%
  2373. (ALT+A %@AI@%textarg%@AE@% F2)%@NL@%
  2374. %@NL@%
  2375. %@AI@%Setfile%@AE@% (F2)                Loads the previous file. You can use %@AI@%Setfile%@AE@% to%@NL@%
  2376.                             move back and forth between two files.%@NL@%
  2377. %@NL@%
  2378. %@CR:MSE48003@%%@4@%You can also use %@AI@%Setfile%@AE@% by following these steps:%@EH@%%@NL@%
  2379. %@NL@%
  2380. %@CR:MSE48004@%  1. Bring up the information file with the %@AI@%Information%@AE@% function  (press%@NL@%
  2381.      F10).%@NL@%
  2382. %@NL@%
  2383.   2. Move the cursor to the beginning of the name of a file.%@NL@%
  2384. %@NL@%
  2385.   3. Select the file that the cursor is on by giving the command %@AI@%Arg Setfile%@AE@%%@NL@%
  2386.      (press ALT+A F2).%@NL@%
  2387. %@NL@%
  2388. %@CR:MSE48005@%%@4@%The information file contains the names of all files that you have edited%@EH@%
  2389. before, up to the limit specified by the %@AB@%tmpsav%@AE@% switch. (See Table A.5 for
  2390. more information on switches.) Active files──files that have been edited
  2391. during this session──are listed with their current lengths. This file also
  2392. tells whether the text in the Clipboard was copied in line (box) or stream
  2393. mode.%@NL@%
  2394. %@NL@%
  2395. %@CR:MSE48006@%%@4@%When an old file is reloaded, the editor remembers cursor and window%@EH@%
  2396. information from the last time you edited the file. The editor stores this
  2397. information in the file M.TMP (or MEP.TMP, if the editor is named MEP).%@NL@%
  2398. %@NL@%
  2399. %@CR:MSE48007@%%@4@%The %@AI@%Arg textarg Setfile%@AE@% command accepts wild-card characters (%@AB@%?%@AE@% matches any%@EH@%
  2400. character and %@AB@%*%@AE@% matches any string) in the %@AI@%textarg%@AE@%. The command responds by
  2401. displaying a list of files that match the %@AI@%textarg%@AE@%. You can then select a
  2402. file by using the steps outlined above. For example, the following sequence
  2403. causes the editor to list all files with a .C extension:%@NL@%
  2404. %@NL@%
  2405. %@CR:MSE48008@%  1. Invoke the %@AI@%Arg%@AE@% function (press ALT+A)%@NL@%
  2406.   2. Type the following: %@AS@%*.c%@AE@%%@NL@%
  2407.   3. Invoke the %@AI@%Setfile%@AE@% function (press F2)%@NL@%
  2408. %@NL@%
  2409. %@NL@%
  2410. %@CR:MSE49000@%%@2@%%@AB@%4.9  Printing a File%@AE@%%@EH@%%@NL@%
  2411. %@NL@%
  2412. %@CR:MSE49001@%%@4@%You can print a file without leaving the Microsoft Editor. You can also%@EH@%
  2413. print a highlighted area or a series of files. Use the %@AI@%Print%@AE@% function
  2414. (CTRL+F8) to perform each of these actions:%@NL@%
  2415. %@NL@%
  2416. %@CR:MSE49002@%%@AB@%Command%@AE@%%@NL@%
  2417. %@AB@%(and Default Keystrokes)          Description%@AE@%%@NL@%
  2418. %@NL@%
  2419. %@AI@%Print%@AE@% (CTRL+F8)                   Prints all of the current file.%@NL@%
  2420. %@NL@%
  2421. %@AI@%Arg cursor-movement Print%@AE@%         Prints the highlighted area.%@NL@%
  2422. (ALT+A %@AI@%cursor-movement%@AE@% CTRL+F8)%@NL@%
  2423. %@NL@%
  2424. %@AI@%Arg textarg Print%@AE@%                 Prints the file or files specified in%@NL@%
  2425. (ALT+A %@AI@%textarg%@AE@% CTRL+F8)           %@AI@%textarg%@AE@%. If there is more than one file,%@NL@%
  2426.                                   separate them with a space.%@NL@%
  2427. %@NL@%
  2428. %@CR:MSE49003@%%@4@%By default, the %@AI@%Print%@AE@% function responds by sending the specified output to%@EH@%
  2429. the LPT1 device. However, you can specify a different print command by
  2430. setting the %@AB@%printcmd%@AE@% switch.%@NL@%
  2431. %@NL@%
  2432. %@CR:MSE49004@%%@4@%For example, suppose you want to print a file by using the following%@EH@%
  2433. command:%@NL@%
  2434. %@NL@%
  2435.      COPY %s LPT2%@NL@%
  2436. %@NL@%
  2437. %@CR:MSE49005@%%@4@%The characters %@AS@%%s%@AE@% represent the file name (in the case of highlighted%@EH@%
  2438. regions, the editor creates a temporary file). To invoke this command each
  2439. time you use the %@AI@%Print%@AE@% function, you first follow these steps to set the
  2440. %@AB@%printcmd%@AE@% switch:%@NL@%
  2441. %@NL@%
  2442. %@CR:MSE49006@%  1. Invoke %@AI@%Arg%@AE@% (press ALT+A)%@NL@%
  2443. %@NL@%
  2444.   2. Type the following text: %@AS@%printcmd:COPY %s LPT2%@AE@%%@NL@%
  2445. %@NL@%
  2446.   3. Press ALT+= to invoke %@AI@%Assign%@AE@% (hold down the ALT key and type the equals%@NL@%
  2447.      sign)%@NL@%
  2448. %@NL@%
  2449. %@CR:MSE49007@%%@4@%When printing from within the protected-mode editor under OS/2, the printing%@EH@%
  2450. occurs as a background operation and %@AS@%BP%@AE@% is displayed at the lower-right-hand
  2451. corner of the screen. The <print> pseudo file maintains a log of the printed
  2452. output.%@NL@%
  2453. %@NL@%
  2454. ───────────────────────────────────────────────────────────────────────────%@NL@%
  2455. %@AI@%NOTE%@AE@%%@NL@%
  2456.    A "switch" is a variable you can set to control the editor's behavior.%@NL@%
  2457.    See Chapter 7%@BO:   3396c@%, "Switches, Assignments, and the TOOLS.INI File," for more%@NL@%
  2458.    information on switches and how to set them.%@NL@%
  2459. ───────────────────────────────────────────────────────────────────────────%@NL@%
  2460. %@NL@%
  2461. %@NL@%
  2462. %@CR:MSE50000@%%@1@%%@AB@%Chapter 5  Regular Expressions%@AE@%%@EH@%%@NL@%
  2463. ───────────────────────────────────────────────────────────────────────────%@NL@%
  2464. %@NL@%
  2465. %@CR:MSE50001@%%@4@%A "regular expression" is a special search string that matches a %@AI@%pattern%@AE@% of%@EH@%
  2466. text rather than a specific sequence of characters. With regular
  2467. expressions, you can search for such targets as every five-digit number, or
  2468. every string in quotes, without having to specify the exact text to search
  2469. for.%@NL@%
  2470. %@NL@%
  2471. %@CR:MSE50002@%%@4@%In a regular expression, certain characters lose their literal meaning,%@EH@%
  2472. becoming symbols or placeholders that specify the text pattern you want to
  2473. match. In a regular expression such as %@AS@%a[123]%@AE@%, the %@AS@%a%@AE@% is still the literal
  2474. character "a". The brackets, however, are not search targets. Rather, they
  2475. enclose a set of characters, any one of which is a match. Therefore, the
  2476. regular expression %@AS@%a[123]%@AE@% matches any of these strings:%@NL@%
  2477. %@NL@%
  2478.      %@AS@%a1%@AE@%%@NL@%
  2479.      %@AS@%a2%@AE@%%@NL@%
  2480.      %@AS@%a3%@AE@%%@NL@%
  2481. %@NL@%
  2482. %@CR:MSE50004@%%@4@%The Microsoft Editor supports two versions of regular-expression syntax:%@EH@%
  2483. UNIX(R) and M 1.0. The UNIX syntax provides compatibility with the syntax
  2484. used by programming utilities for the UNIX and XENIX(R) operating systems
  2485. and CodeView(R). M 1.0 syntax does not provide this compatibility; however,
  2486. it offers more power.%@NL@%
  2487. %@NL@%
  2488. %@CR:MSE50005@%%@4@%This chapter examines three aspects of regular-expression syntax:%@EH@%%@NL@%
  2489. %@NL@%
  2490. %@CR:MSE50006@%  ■  Choosing the syntax%@NL@%
  2491.   ■  Using UNIX syntax%@NL@%
  2492.   ■  Using M 1.0 syntax%@NL@%
  2493. %@NL@%
  2494. %@CR:MSE50007@%%@4@%You can use regular expressions with the search functions (%@AI@%Psearch%@AE@%, %@AI@%Msearch%@AE@%,%@EH@%
  2495. %@AI@%Replace%@AE@%, and %@AI@%Qreplace%@AE@%). Each of these functions recognizes a regular
  2496. expression (rather than an ordinary text string) when you use %@AI@%Arg Arg%@AE@% to
  2497. introduce the string.%@NL@%
  2498. %@NL@%
  2499. %@NL@%
  2500. %@CR:MSE51000@%%@2@%%@AB@%5.1  Choosing the Syntax%@AE@%%@EH@%%@NL@%
  2501. %@NL@%
  2502. %@CR:MSE51001@%%@4@%The Microsoft Editor supports two forms of regular-expression syntax: the%@EH@%
  2503. M 1.0 form and the UNIX standard. If you know the UNIX standard, you can use
  2504. it immediately. However, the slightly different M 1.0 syntax of the
  2505. Microsoft Editor is more powerful.%@NL@%
  2506. %@NL@%
  2507. %@CR:MSE51002@%%@4@%By default, the editor recognizes the UNIX syntax for regular expressions.%@EH@%
  2508. To use the M 1.0 syntax instead, follow these steps:%@NL@%
  2509. %@NL@%
  2510. %@CR:MSE51003@%  1. Invoke %@AI@%Arg%@AE@% (press ALT+A)%@NL@%
  2511.   2. Type the following: %@AS@%unixre:no%@AE@%%@NL@%
  2512.   3. Invoke %@AI@%Assign%@AE@% (press ALT+=)%@NL@%
  2513. %@NL@%
  2514. %@CR:MSE51004@%%@4@%To enable the standard UNIX syntax, follow the same steps but type %@AS@%unixre:%@AE@%%@EH@%
  2515. instead of %@AS@%unixre:no%@AE@%.%@NL@%
  2516. %@NL@%
  2517. %@CR:MSE51005@%%@4@%If you would like the editor to run automatically in M 1.0 mode, rather than%@EH@%
  2518. having to manually invoke the %@AI@%Assign%@AE@% function, add a %@AS@%unixre:no%@AE@% entry to the
  2519. TOOLS.INI file. See Chapter 7%@BO:   3396c@%, "Switches, Assignments, and the TOOLS.INI
  2520. File," for more information.%@NL@%
  2521. %@NL@%
  2522. %@NL@%
  2523. %@CR:MSE52000@%%@2@%%@AB@%5.2  UNIX(R) Regular-Expression Syntax%@AE@%%@EH@%%@NL@%
  2524. %@NL@%
  2525. %@CR:MSE52001@%%@4@%The UNIX regular-expression syntax is compatibile with UNIX utilities and%@EH@%
  2526. CodeView. By default, the editor uses UNIX syntax for regular expressions.
  2527. The M 1.0 syntax offers the same capabilities as the UNIX syntax, plus a few
  2528. additional features.%@NL@%
  2529. %@NL@%
  2530. %@NL@%
  2531. %@CR:MSE52100@%%@3@%%@AB@%5.2.1  UNIX Regular Expressions as Simple Strings%@AE@%%@EH@%%@NL@%
  2532. %@NL@%
  2533. %@CR:MSE52101@%%@4@%The power of regular expressions comes from the use of the special%@EH@%
  2534. characters and character sequences listed below. A regular expression that
  2535. does not contain these special characters or character sequences acts as a
  2536. literal text string:%@NL@%
  2537. %@NL@%
  2538.      %@AB@%\(  \)  [  ]  !  .  ^  $  *%@AE@%%@NL@%
  2539. %@NL@%
  2540. %@CR:MSE52103@%%@4@%For example, the regular expression %@AS@%match me precisely%@AE@% matches only a%@EH@%
  2541. literal occurrence of itself because it contains no special characters.%@NL@%
  2542. %@NL@%
  2543. %@NL@%
  2544. %@CR:MSE52200@%%@3@%%@AB@%5.2.2  UNIX Special Characters%@AE@%%@EH@%%@NL@%
  2545. %@NL@%
  2546. %@CR:MSE52201@%%@4@%The UNIX operators offer the standard pattern-matching capabilities found in%@EH@%
  2547. many other editors and utilities that use regular expressions.%@NL@%
  2548. %@NL@%
  2549. %@CR:MSE52202@%%@4@%The list below describes the special characters that have a simple usage.%@EH@%
  2550. The term %@AI@%class%@AE@% has a special meaning defined below. All other characters
  2551. should be interpreted literally.%@NL@%
  2552. %@NL@%
  2553. %@CR:MSE52203@%%@AB@%Expression                  Description%@AE@%%@NL@%
  2554. %@NL@%
  2555. %@AB@%\%@AE@%                           Escape. Causes the editor to ignore the special%@NL@%
  2556.                             meaning of the next character. For example, the%@NL@%
  2557.                             expression %@AS@%\.%@AE@% matches %@AS@%.%@AE@% in the text file; the%@NL@%
  2558.                             expression %@AS@%\^%@AE@% matches %@AS@% %@AE@%%@AS@%^%@AE@%; and the expression %@AS@%\\%@AE@%%@NL@%
  2559.                             matches %@AS@%\%@AE@%.%@NL@%
  2560. %@NL@%
  2561. %@AB@%.%@AE@%                           Wildcard. Matches any single character. For%@NL@%
  2562.                             example, the expression %@AS@%a.a%@AE@% matches %@AS@%aaa%@AE@%, %@AS@%aBa%@AE@%,%@NL@%
  2563.                             and %@AS@%a1a%@AE@%, but not %@AS@%aBBBa%@AE@%.%@NL@%
  2564. %@NL@%
  2565. %@AB@%^%@AE@%                           Beginning of line. For example, %@AS@%^The%@AE@% matches the%@NL@%
  2566.                             word %@AS@%The%@AE@% only when it occurs at the beginning of%@NL@%
  2567.                             a line.%@NL@%
  2568. %@NL@%
  2569. %@AB@%$%@AE@%                           End of line. For example, %@AS@%end$%@AE@% matches the word %@AS@%%@AE@%%@NL@%
  2570.                             %@AS@%end%@AE@% only when it occurs at the end of a line.%@NL@%
  2571. %@NL@%
  2572. %@AB@%[%@AE@%%@AI@%class%@AE@%%@AB@%]%@AE@%                     Character class. Matches any one character in%@NL@%
  2573.                             the class. Use a dash (%@AB@%-%@AE@%) to specify a%@NL@%
  2574.                             contiguous range of ASCII values. For example,%@NL@%
  2575.                             %@AS@%[a-zA-Z0-9]%@AE@% matches any letter or digit, and%@NL@%
  2576.                             %@AS@%[abc] %@AE@%%@AS@%%@AE@% matches %@AS@%a%@AE@%, %@AS@%b%@AE@%, or %@AS@%c%@AE@%.%@NL@%
  2577. %@NL@%
  2578. %@AB@%[^%@AE@%%@AI@%class%@AE@%%@AB@%]%@AE@%                    Inverse of character class. Matches any%@NL@%
  2579.                             character not specified in the class.%@NL@%
  2580. %@NL@%
  2581. %@CR:MSE52204@%%@4@%The special characters with more complex usage are described in the%@EH@%
  2582. following list. The expression %@AI@%X%@AE@% is a placeholder representing a regular
  2583. expression that is either a single character, a group of characters enclosed
  2584. in brackets (%@AB@%[]%@AE@%), or the regular-expression delimiters %@AB@%\(%@AE@% and %@AB@%\)%@AE@%. The letter
  2585. %@AI@%n%@AE@% represents a one-digit number.%@NL@%
  2586. %@NL@%
  2587. %@CR:MSE52205@%%@AB@%Expression                  Description%@AE@%%@NL@%
  2588. %@NL@%
  2589. %@AI@%X%@AE@%%@AB@%*%@AE@%                          Repeat operator. Matches zero or more%@NL@%
  2590.                             occurrences of %@AI@%X%@AE@%. For example, the regular%@NL@%
  2591.                             expression %@AS@%ba*b%@AE@% matches %@AS@%baaab%@AE@%, %@AS@%bab%@AE@%, and %@AS@%bb%@AE@%. This%@NL@%
  2592.                             operator always matches as many characters as%@NL@%
  2593.                             possible.%@NL@%
  2594. %@NL@%
  2595. %@AB@%\(%@AE@% ... %@AB@%\)%@AE@%                   Tagged expression. A marked substring which you%@NL@%
  2596.                             can refer to elsewhere in the search string, or%@NL@%
  2597.                             in a replacement string, as %@AB@%\%@AE@%%@AI@%n%@AE@%. When a tagged%@NL@%
  2598.                             expression is referred to in a search string,%@NL@%
  2599.                             the editor finds text with the tagged expression%@NL@%
  2600.                             repeated. When a tagged expression is referred%@NL@%
  2601.                             to in a replacement string, the editor reuses%@NL@%
  2602.                             part of the text it is replacing.%@NL@%
  2603. %@NL@%
  2604.                             The exact use of tags is explained in Sections%@NL@%
  2605.                             5.2.4%@BO:   231bc@% and 5.2.5%@BO:   23b94@%. Characters falling between %@NL@%
  2606.                             %@AB@%\(%@AE@% and %@AB@%\)%@AE@% are treated as a group.%@NL@%
  2607. %@NL@%
  2608. %@AB@%\%@AE@%%@AI@%n%@AE@%                          Reference to the characters matched by a tagged%@NL@%
  2609.                             expression. The number %@AI@%n%@AE@% indicates which%@NL@%
  2610.                             expression. The first tagged expression is%@NL@%
  2611.                             represented as %@AB@%\%@AE@%1, the second as %@AB@%\%@AE@%2, and so%@NL@%
  2612.                             on.%@NL@%
  2613. %@NL@%
  2614. %@CR:MSE52206@%%@4@%The procedure below uses some of the special characters presented in this%@EH@%
  2615. section. To find the next occurrence of a number (that is, a string of
  2616. digits) beginning with a digit 1 or 2, perform the following sequence of
  2617. keystrokes:%@NL@%
  2618. %@NL@%
  2619. %@CR:MSE52207@%  1. Invoke %@AI@%Arg%@AE@% twice (press ALT+A twice)%@NL@%
  2620.   2. Type the following characters: %@AS@%[12][0-9]*%@AE@%%@NL@%
  2621.   3. Invoke %@AI@%Psearch%@AE@% (press F3)%@NL@%
  2622. %@NL@%
  2623. %@NL@%
  2624. %@CR:MSE52300@%%@3@%%@AB@%5.2.3  Combining UNIX Special Characters%@AE@%%@EH@%%@NL@%
  2625. %@NL@%
  2626. %@CR:MSE52301@%%@4@%Special characters are most powerful when used in combination. For example,%@EH@%
  2627. the wildcard (%@AS@%.%@AE@%) and repeat (%@AS@%*%@AE@%) characters are often used together:%@NL@%
  2628. %@NL@%
  2629.      %@AS@%.*%@AE@%%@NL@%
  2630. %@NL@%
  2631. %@CR:MSE52302@%%@4@%The expression above means "match any string of characters." Although this%@EH@%
  2632. expression is not useful by itself, it is quite useful when part of a larger
  2633. expression. For example,%@NL@%
  2634. %@NL@%
  2635.      %@AS@%B.*ing%@AE@%%@NL@%
  2636. %@NL@%
  2637. %@CR:MSE52303@%%@4@%means "match any string beginning with %@AS@%B%@AE@% and ending with %@AS@%ing%@AE@%".%@EH@%%@NL@%
  2638. %@NL@%
  2639. %@CR:MSE52304@%%@4@%In cases where a single character is surrounded by two operators, regular%@EH@%
  2640. expressions are interpreted from left to right. For example, suppose the
  2641. following is part of a regular expression:%@NL@%
  2642. %@NL@%
  2643.      %@AS@%\1*%@AE@%%@NL@%
  2644. %@NL@%
  2645. %@CR:MSE52305@%%@4@%In the expression above, the repeat operator (%@AS@%*%@AE@%) applies to the characters%@EH@%
  2646. %@AS@%\1%@AE@% as a single unit.%@NL@%
  2647. %@NL@%
  2648. %@CR:MSE52306@%%@4@%If you want the repeat operator to apply to a group, enclose the group%@EH@%
  2649. inside the symbols %@AB@%\%@AE@%( and %@AB@%\%@AE@%). These characters tag an expression (as
  2650. explained in the next section) and are useful for treating a series of
  2651. characters as a group.%@NL@%
  2652. %@NL@%
  2653. %@NL@%
  2654. %@CR:MSE52400@%%@3@%%@AB@%5.2.4  Tagged Expressions in the UNIX Search String%@AE@%%@EH@%%@NL@%
  2655. %@NL@%
  2656. %@CR:MSE52401@%%@4@%A "tagged expression" is a substring delimited by the symbols %@AB@%\%@AE@% (and %@AB@%\%@AE@%). You%@EH@%
  2657. can enter any regular-expression characters between these delimiters. Tagged
  2658. expressions are used to specify text patterns that contain repeated elements
  2659. and to mark a string for reuse.%@NL@%
  2660. %@NL@%
  2661. %@CR:MSE52402@%%@4@%The editor first searches for a character string that matches the entire%@EH@%
  2662. regular expression. It then tags each substring specified in a tagged
  2663. expression. Up to nine substrings at a time may be tagged.%@NL@%
  2664. %@NL@%
  2665. %@CR:MSE52403@%%@4@%Once a tagged expression has been matched, you can refer to the specific%@EH@%
  2666. string of characters that matched that expression. Use the syntax%@NL@%
  2667. %@NL@%
  2668.      %@AS@%\%@AE@%%@AI@%n%@AE@%%@NL@%
  2669. %@NL@%
  2670. %@CR:MSE52405@%%@4@%in which %@AI@%n%@AE@% is a number that selects the expression. The symbol %@AS@%\1%@AE@%%@EH@%
  2671. represents the first tagged expression, the symbol %@AB@%\%@AE@%2 represents the second
  2672. tagged expression, and so on. The use of %@AB@%\%@AE@%%@AI@%n%@AE@% does not search for a new match
  2673. for the tagged expression. Rather, it matches only an occurrence of the same
  2674. characters that the tagged expression itself matched.%@NL@%
  2675. %@NL@%
  2676. %@CR:MSE52406@%%@4@%For example, consider the following expression:%@EH@%%@NL@%
  2677. %@NL@%
  2678.      %@AS@%\(.\)\1\1%@AE@%%@NL@%
  2679. %@NL@%
  2680. %@CR:MSE52407@%%@4@%The expression above means, "match any character, then see if it's followed%@EH@%
  2681. by two occurrences of the same character." The following strings all satisfy
  2682. this requirement:%@NL@%
  2683. %@NL@%
  2684.      %@AS@%aaa%@AE@%%@NL@%
  2685.      %@AS@%XXX%@AE@%%@NL@%
  2686.      %@AS@%111%@AE@%%@NL@%
  2687. %@NL@%
  2688. %@CR:MSE52409@%%@4@%Note that this regular expression is not equivalent to %@AS@%...%@AE@% (three wild%@EH@%
  2689. cards).  The expression %@AS@%...%@AE@% matches any three characters; the characters do
  2690. not need to be the same.%@NL@%
  2691. %@NL@%
  2692. %@CR:MSE5240A@%%@4@%The next expression is more complex:%@EH@%%@NL@%
  2693. %@NL@%
  2694.      %@AS@%\([A-Za-z]*\)==\1%@AE@%%@NL@%
  2695. %@NL@%
  2696. %@CR:MSE5240B@%%@4@%This expression means "match any number of letters, then see if the letters%@EH@%
  2697. are followed by two equals signs (%@AB@%==%@AE@%) and a repetition of the original
  2698. group." This expression matches the first two strings below but not the
  2699. third:%@NL@%
  2700. %@NL@%
  2701.      %@AS@%ABCxyz==ABCxyz%@AE@%%@NL@%
  2702.      %@AS@%i==i%@AE@%%@NL@%
  2703.      %@AS@%ABCxyz==KBCxjj%@AE@%%@NL@%
  2704. %@NL@%
  2705. %@NL@%
  2706. %@CR:MSE52500@%%@3@%%@AB@%5.2.5  Tagged Expressions in the UNIX Replacement String%@AE@%%@EH@%%@NL@%
  2707. %@NL@%
  2708. %@CR:MSE52501@%%@4@%You can refer to tagged expressions in replacement strings as well as in%@EH@%
  2709. search strings. Parts of the string to be replaced may be reused by
  2710. referring to the tagged expressions that originally matched those parts. Use
  2711. the syntax described in the previous section.%@NL@%
  2712. %@NL@%
  2713. %@CR:MSE52502@%%@4@%For example, suppose you want to find all occurrences of %@AI@%hexdigits%@AE@%%@AB@%H%@AE@% and%@EH@%
  2714. replace them with strings of the form %@AB@%16#%@AE@%%@AI@%hexdigits%@AE@%. You can search for
  2715. strings of the form %@AI@%hexdigits%@AE@%%@AB@%H%@AE@% by specifying the regular expression%@NL@%
  2716. %@NL@%
  2717.      %@AS@%\([0-9a-fA-F]*\)H%@AE@%%@NL@%
  2718. %@NL@%
  2719. %@CR:MSE52503@%%@4@%and then specifying the following replacement string:%@EH@%%@NL@%
  2720. %@NL@%
  2721.      %@AS@%16#\1%@AE@%%@NL@%
  2722. %@NL@%
  2723. %@CR:MSE52504@%%@4@%The result is that the Microsoft Editor searches for any occurrence of one%@EH@%
  2724. or more hexadecimal digits (digits 0-9 and the letters a-f) followed by the
  2725. letter %@AB@%H%@AE@%. Each matching string is replaced by a new string that consists of
  2726. the original digits (which were tagged so they could be reused) and the
  2727. prefix %@AB@%16#%@AE@%. For example, the string %@AS@%1a000H%@AE@% is replaced with the string
  2728. %@AS@%16#1a000%@AE@%.%@NL@%
  2729. %@NL@%
  2730. %@CR:MSE52505@%%@4@%Use two backslashes (%@AB@%\\%@AE@%) to represent a literal backslash (%@AB@%\%@AE@%). Within%@EH@%
  2731. replacement strings, all characters except the backslashes are literals. The
  2732. backslash is considered to be the first character of a regular-expression
  2733. reference, such as %@AS@%\4%@AE@%.%@NL@%
  2734. %@NL@%
  2735. %@NL@%
  2736. %@CR:MSE53000@%%@2@%%@AB@%5.3  M 1.0 Regular-Expression Syntax%@AE@%%@EH@%%@NL@%
  2737. %@NL@%
  2738. %@CR:MSE53001@%%@4@%The M 1.0 syntax is fully compatible with the regular-expression syntax used%@EH@%
  2739. by Version 1.0 of the Microsoft Editor. This syntax offers all the features
  2740. of UNIX regular-expression syntax (though sometimes using different
  2741. characters), plus additional features.%@NL@%
  2742. %@NL@%
  2743. %@CR:MSE53002@%%@4@%To choose M 1.0 syntax, you must set the %@AB@%unixre%@AE@% switch to off, as described%@EH@%
  2744. in Section 5.1%@BO:   20e9f@%, "Choosing the Syntax."%@NL@%
  2745. %@NL@%
  2746. %@NL@%
  2747. %@CR:MSE53100@%%@3@%%@AB@%5.3.1  M 1.0 Regular Expressions as Simple Strings%@AE@%%@EH@%%@NL@%
  2748. %@NL@%
  2749. %@CR:MSE53101@%%@4@%The power of regular expressions comes from the use of the special%@EH@%
  2750. characters listed below. A regular expression that does not contain these
  2751. special characters acts as if it were a literal text string:%@NL@%
  2752. %@NL@%
  2753.      %@AB@%\  {  }  (  )  [  ]  !  ~  :  ?  ^  $  +  *  @  #%@AE@%%@NL@%
  2754. %@NL@%
  2755. %@CR:MSE53103@%%@4@%For example, the regular expression %@AS@%match me precisely%@AE@% matches only a%@EH@%
  2756. literal occurrence of itself because it contains no special characters.%@NL@%
  2757. %@NL@%
  2758. %@NL@%
  2759. %@CR:MSE53200@%%@3@%%@AB@%5.3.2  M 1.0 Special Characters%@AE@%%@EH@%%@NL@%
  2760. %@NL@%
  2761. %@CR:MSE53201@%%@4@%The M 1.0 syntax offers a rich set of pattern-matching capabilities. Most of%@EH@%
  2762. the special characters described below have analogs in other editors and
  2763. utilities that use regular expressions.%@NL@%
  2764. %@NL@%
  2765. %@CR:MSE53202@%%@4@%The list below describes the special characters that have a simple usage.%@EH@%
  2766. The term %@AI@%class%@AE@% has a special meaning defined below. All other characters
  2767. should be interpreted literally.%@NL@%
  2768. %@NL@%
  2769. %@CR:MSE53203@%%@AB@%Expression                  Description%@AE@%%@NL@%
  2770. %@NL@%
  2771. %@AB@%\%@AE@%                           Escape. Causes the editor to ignore the special%@NL@%
  2772.                             meaning of the next character. For example, the%@NL@%
  2773.                             expression %@AS@%\?%@AE@% matches %@AS@%?%@AE@% in the text file; the%@NL@%
  2774.                             expression %@AS@%\^%@AE@% matches %@AS@% %@AE@%%@AS@%^%@AE@%; and the expression %@AS@%\\%@AE@%%@NL@%
  2775.                             matches %@AS@%\%@AE@%.%@NL@%
  2776. %@NL@%
  2777. %@AB@%?%@AE@%                           Wildcard. Matches any single character. For%@NL@%
  2778.                             example, the expression %@AS@%a?a%@AE@% matches %@AS@%aaa%@AE@%, %@AS@%aBa%@AE@%,%@NL@%
  2779.                             and %@AS@%a1a%@AE@%, but not %@AS@%aBBBa%@AE@%.%@NL@%
  2780. %@NL@%
  2781. %@AB@%^%@AE@%                           Beginning of line. For example, %@AS@%^The%@AE@% matches the%@NL@%
  2782.                             word %@AS@%The%@AE@% only when it occurs at the beginning of%@NL@%
  2783.                             a line.%@NL@%
  2784. %@NL@%
  2785. %@AB@%$%@AE@%                           End of line. For example, %@AS@%end$%@AE@% matches the word %@AS@%%@AE@%%@NL@%
  2786.                             %@AS@%end%@AE@% only when it occurs at the end of a line.%@NL@%
  2787. %@NL@%
  2788. %@AB@%[%@AE@%%@AI@%class%@AE@%%@AB@%]%@AE@%                     Character class. Matches any one character in%@NL@%
  2789.                             the class. Use a dash (%@AB@%-%@AE@%) to specify ranges. For%@NL@%
  2790.                             example, %@AS@%[a-zA-Z0-9]%@AE@% matches any character or%@NL@%
  2791.                             digit, and %@AS@%[abc]%@AE@% matches %@AS@%a%@AE@%, %@AS@%b%@AE@%, or %@AS@%c%@AE@%.%@NL@%
  2792. %@NL@%
  2793. %@AB@%[~%@AE@%%@AI@%class%@AE@%%@AB@%]%@AE@%                    Noncharacter class. Matches any character not%@NL@%
  2794.                             specified in the class.%@NL@%
  2795. %@NL@%
  2796. %@CR:MSE53204@%%@4@%The special characters with more complex usage are described in the%@EH@%
  2797. following list. The expression %@AI@%X%@AE@% is a placeholder representing a regular
  2798. expression that is either a single character or a group of characters
  2799. enclosed in parentheses (%@AB@%()%@AE@%), brackets (%@AB@%[]%@AE@%), or braces (%@AB@%{}%@AE@%). The
  2800. placeholders %@AI@%X1%@AE@%, %@AI@%X2%@AE@%, and so on, represent any regular expression.%@NL@%
  2801. %@NL@%
  2802. %@CR:MSE53205@%%@AU@%Expression                  Description%@AE@%%@NL@%
  2803. %@NL@%
  2804. %@AI@%X%@AE@%%@AB@%*%@AE@%                          Minimal matching. Matches zero or more%@NL@%
  2805.                             occurrences of %@AI@%X%@AE@%. For example: the regular%@NL@%
  2806.                             expression %@AS@%ba*b%@AE@% matches %@AS@%baaab%@AE@%, %@AS@%bab%@AE@%, and %@AS@%bb%@AE@%.%@NL@%
  2807. %@NL@%
  2808. %@AI@%X%@AE@%%@AB@%+%@AE@%                          Minimal matching plus (shorthand for %@AI@%XX%@AE@%%@AB@%*%@AE@%).%@NL@%
  2809.                             Matches one or more occurrences of %@AI@%X%@AE@%. The%@NL@%
  2810.                             regular expression %@AS@%ba+b%@AE@% matches %@AS@%baab%@AE@% and %@AS@%bab%@AE@%%@NL@%
  2811.                             but not %@AS@%bb%@AE@%.%@NL@%
  2812. %@NL@%
  2813. %@AI@%X%@AE@%%@AB@%@%@AE@%                          Maximal matching. Identical to %@AI@%X%@AE@%%@AB@%*%@AE@%, except for%@NL@%
  2814.                             differences in matching method explained in%@NL@%
  2815.                             Section 5.3.4.%@BO:   26bc3@%%@NL@%
  2816. %@NL@%
  2817. %@AI@%X%@AE@%%@AB@%#%@AE@%                          Maximal matching plus. Identical to %@AI@%X%@AE@%%@AB@%+%@AE@%, except%@NL@%
  2818.                             for differences in matching method explained in%@NL@%
  2819.                             Section 5.3.4.%@BO:   26bc3@%%@NL@%
  2820. %@NL@%
  2821. %@AB@%(%@AE@%%@AI@%X1%@AE@%%@AB@%!%@AE@%%@AI@%X2%@AE@%%@AB@%!%@AE@%...%@AB@%!%@AE@%%@AI@%Xn%@AE@%%@AB@%)%@AE@%              Alternation. Matches either %@AI@%X1%@AE@%, %@AI@%X2%@AE@%, and so%@NL@%
  2822.                             forth. It tries to match them in that order and%@NL@%
  2823.                             switches from %@AI@%Xi%@AE@% to %@AI@%Xi+1%@AE@% only if the rest of the%@NL@%
  2824.                             expression fails to match. For example, the%@NL@%
  2825.                             regular expression %@AS@%(ww!xx!xxyy)zz%@AE@% matches %@AS@%xxzz%@AE@%%@NL@%
  2826.                             on the second alternative and %@AS@%xxyyzz%@AE@% on the%@NL@%
  2827.                             third.%@NL@%
  2828. %@NL@%
  2829. %@AB@%~%@AE@%%@AI@%X%@AE@%                          Not function. Matches nothing, but checks to see%@NL@%
  2830.                             if the string matches %@AI@%X%@AE@% at this point and fails%@NL@%
  2831.                             if it does. For example, %@AS@%^~(if!while)?*$%@AE@% matches%@NL@%
  2832.                             all lines that do not begin with %@AS@%if%@AE@% or %@AS@%while%@AE@%.%@NL@%
  2833. %@NL@%
  2834. %@AI@%X%@AE@%%@AB@%^%@AE@%%@AI@%n%@AE@%                         Power function. Matches exactly %@AI@%n%@AE@% copies of %@AI@%X%@AE@%.%@NL@%
  2835.                             For example, %@AS@%w^4%@AE@% matches %@AS@%wwww%@AE@% and %@AS@%(a?)^3%@AE@% matches%@NL@%
  2836.                             %@AS@%a#aba5%@AE@%.%@NL@%
  2837. %@NL@%
  2838. %@AB@%{%@AE@%...%@AB@%}%@AE@%                       Tagged expression, which is a string of%@NL@%
  2839.                             characters you identify so that you can refer to%@NL@%
  2840.                             them elsewhere, as %@AB@%$%@AE@%%@AI@%n%@AE@%. By referring to a tagged%@NL@%
  2841.                             expression in a search string, you cause the%@NL@%
  2842.                             editor to look for patterns involving%@NL@%
  2843.                             duplication. By referring to a tagged expression%@NL@%
  2844.                             in a replacement string, you cause the editor to%@NL@%
  2845.                             reuse part of the text that it is replacing.%@NL@%
  2846. %@NL@%
  2847.                             The exact use of tags is explained in Sections%@NL@%
  2848.                             5.3.5%@BO:   27441@% and 5.3.6%@BO:   27df8@%. Characters within braces are%@NL@%
  2849.                             treated as a group.%@NL@%
  2850. %@NL@%
  2851. %@AB@%$%@AE@%%@AI@%n%@AE@%                          Reference to a previously tagged substring. The%@NL@%
  2852.                             number %@AI@%n%@AE@% indicates which substring. The first%@NL@%
  2853.                             tagged substring is represented as %@AB@%$%@AE@% 1, the%@NL@%
  2854.                             second as %@AB@%$%@AE@% 2, and so on. %@AB@%$%@AE@% 0 represents the%@NL@%
  2855.                             entire matched string.%@NL@%
  2856. %@NL@%
  2857. %@AB@%:%@AE@%%@AI@%letter%@AE@%                     Predefined string. The list of predefined%@NL@%
  2858.                             strings is given in Section 5.3.7.%@BO:   2885d@%%@NL@%
  2859. %@NL@%
  2860. %@CR:MSE53206@%%@4@%The procedure below uses some of the special characters presented in this%@EH@%
  2861. section. To find the next occurrence of a number (that is, a string of
  2862. digits) beginning with a digit 1 or 2, perform the following sequence of
  2863. keystrokes:%@NL@%
  2864. %@NL@%
  2865. %@CR:MSE53207@%  1. Invoke %@AI@%Arg%@AE@% twice(press ALT + A twice)%@NL@%
  2866.   2. Type the following characters: %@AS@%[12][0-9]*%@AE@%%@NL@%
  2867.   3. Invoke %@AI@%Psearch%@AE@% (press F3)%@NL@%
  2868. %@NL@%
  2869. %@NL@%
  2870. %@CR:MSE53300@%%@3@%%@AB@%5.3.3  Combining M 1.0 Special Characters%@AE@%%@EH@%%@NL@%
  2871. %@NL@%
  2872. %@CR:MSE53301@%%@4@%Special characters are most powerful when used in combination. For example,%@EH@%
  2873. the %@AS@%?%@AE@% and %@AS@%*%@AE@% characters are often used together:%@NL@%
  2874. %@NL@%
  2875.      %@AS@%?*%@AE@%%@NL@%
  2876. %@NL@%
  2877. %@CR:MSE53302@%%@4@%The expression above means "match any string of characters." Although this%@EH@%
  2878. expression is not useful by itself, it is quite useful when part of a larger
  2879. expression. For example,%@NL@%
  2880. %@NL@%
  2881.      %@AS@%B?*ing%@AE@%%@NL@%
  2882. %@NL@%
  2883. %@CR:MSE53303@%%@4@%means "match any characters beginning with %@AS@%B%@AE@% and ending with %@AS@%ing%@AE@%".%@EH@%%@NL@%
  2884. %@NL@%
  2885. %@CR:MSE53304@%%@4@%Many of the special characters in the previous section (such as + and *) are%@EH@%
  2886. %@AI@%operators%@AE@%; they work with other characters to form expressions. These
  2887. operators usually apply to the previous character or an expression enclosed
  2888. in braces, brackets, or parentheses. However, it is possible to find
  2889. exceptions to this rule. For example, the following expression is
  2890. meaningful:%@NL@%
  2891. %@NL@%
  2892.      %@AS@%S^2+%@AE@%%@NL@%
  2893. %@NL@%
  2894. %@CR:MSE53305@%%@4@%The plus sign (%@AS@%+%@AE@%) applies to the entire expression %@AS@%S^2%@AE@%. In effect, this%@EH@%
  2895. expression means, "match any even number of occurrences of the letter S."
  2896. Therefore, this expression means the same as this:%@NL@%
  2897. %@NL@%
  2898.      %@AS@%(S^2)+%@AE@%%@NL@%
  2899. %@NL@%
  2900. %@CR:MSE53306@%%@4@%Precedence is left to right in cases where a single character is surrounded%@EH@%
  2901. by two operators. If there is any doubt about the precedence of operators,
  2902. use parentheses.%@NL@%
  2903. %@NL@%
  2904. %@NL@%
  2905. %@CR:MSE53400@%%@3@%%@AB@%5.3.4  M 1.0 Matching Method%@AE@%%@EH@%%@NL@%
  2906. %@NL@%
  2907. %@CR:MSE53401@%%@4@%The matching method you use is significant only when you use a%@EH@%
  2908. search-and-replace function. The term "matching method" refers to the
  2909. technique used to match repeated expressions. For example, does %@AS@%a*%@AE@% match as
  2910. few or as many characters as it can? The answer depends on the matching
  2911. method. There are two matching methods:%@NL@%
  2912. %@NL@%
  2913. %@CR:MSE53402@%%@AB@%Method                      Description%@AE@%%@NL@%
  2914. %@NL@%
  2915. Minimal                     The minimal method matches as few characters as%@NL@%
  2916.                             possible in order to find a match. For example,%@NL@%
  2917.                             %@AS@%a+%@AE@% matches only the first character in %@AS@%aaaaaa%@AE@%.%@NL@%
  2918.                             However, %@AS@%ba+b%@AE@% matches the entire string%@NL@%
  2919.                             %@AS@%baaaaaab%@AE@%, since it is necessary to match every%@NL@%
  2920.                             occurrence of %@AS@%a%@AE@% in order to match both%@NL@%
  2921.                             occurrences of %@AS@%b%@AE@%.%@NL@%
  2922. %@NL@%
  2923. Maximal                     The maximal method always matches as many%@NL@%
  2924.                             characters as it can. For example, %@AS@%a#%@AE@% matches%@NL@%
  2925.                             the entire string %@AS@%aaaaaa%@AE@%.%@NL@%
  2926. %@NL@%
  2927. %@CR:MSE53403@%%@4@%The significance of these two methods may not be apparent until you use%@EH@%
  2928. search and replace. For example, if %@AS@%a+%@AE@% (minimal matching plus) is the search
  2929. string and %@AS@%EE%@AE@% is the replacement string,%@NL@%
  2930. %@NL@%
  2931.      %@AS@%aaaaa%@AE@%%@NL@%
  2932. %@NL@%
  2933. %@CR:MSE53404@%%@4@%is replaced with%@EH@%%@NL@%
  2934. %@NL@%
  2935.      %@AS@%EEEEEEEEEE%@AE@%%@NL@%
  2936. %@NL@%
  2937. %@CR:MSE53405@%%@4@%because each occurrence of %@AS@%a%@AE@% is immediately replaced by %@AS@%EE%@AE@%. However, if %@AS@%a#%@AE@%%@EH@%
  2938. (maximal matching plus) is the search string, the same string is replaced
  2939. with%@NL@%
  2940. %@NL@%
  2941.      %@AS@%EE%@AE@%%@NL@%
  2942. %@NL@%
  2943. %@CR:MSE53406@%%@4@%because the entire string %@AS@%aaaaa%@AE@% is matched at once and replaced with %@AS@%EE%@AE@%.%@EH@%%@NL@%
  2944. %@NL@%
  2945. %@NL@%
  2946. %@CR:MSE53500@%%@3@%%@AB@%5.3.5  Tagged Expressions in the M 1.0 Search String%@AE@%%@EH@%%@NL@%
  2947. %@NL@%
  2948. %@CR:MSE53501@%%@4@%A "tagged expression" is a substring delimited by curly braces (%@AB@%{ }%@AE@%). You%@EH@%
  2949. can enter any regular-expression characters between these delimiters. Tagged
  2950. expressions are used to specify text patterns that contain repeated elements
  2951. and to mark a string for reuse.%@NL@%
  2952. %@NL@%
  2953. %@CR:MSE53502@%%@4@%The editor first searches for a character string that matches the entire%@EH@%
  2954. regular expression. It then tags each substring specified in a tagged
  2955. expression. Up to nine substrings at a time may be tagged.%@NL@%
  2956. %@NL@%
  2957. %@CR:MSE53503@%%@4@%Once an expression is tagged, you can refer to the specific string of%@EH@%
  2958. characters that matched the expression. Use the syntax%@NL@%
  2959. %@NL@%
  2960.      %@AB@%$%@AE@%%@AI@%n%@AE@%%@NL@%
  2961. %@NL@%
  2962. %@CR:MSE53505@%%@4@%in which %@AI@%n%@AE@% is a number that selects the expression. The symbol %@AB@%$1%@AE@%%@EH@%
  2963. represents the first tagged expression, the symbol %@AB@%$2%@AE@% represents the second
  2964. tagged expression, and so on. The use of %@AB@%$%@AE@%%@AI@%n%@AE@% does not search for a new match
  2965. for the tagged expression. Rather, it matches only an occurrence of the same
  2966. characters that the tagged expression itself matched.%@NL@%
  2967. %@NL@%
  2968. %@CR:MSE53506@%%@4@%For example, consider the following expression:%@EH@%%@NL@%
  2969. %@NL@%
  2970.      %@AS@%{?}$1$1%@AE@%%@NL@%
  2971. %@NL@%
  2972. %@CR:MSE53507@%%@4@%The expression above means, "match any character, then see if it's followed%@EH@%
  2973. by two occurrences of the same character." The following strings all satisfy
  2974. this requirement:%@NL@%
  2975. %@NL@%
  2976.      %@AS@%aaa%@AE@%%@NL@%
  2977.      %@AS@%XXX%@AE@%%@NL@%
  2978.      %@AS@%111%@AE@%%@NL@%
  2979. %@NL@%
  2980. %@CR:MSE53509@%%@4@%Note that this regular expression is not equivalent to %@AS@%???%@AE@% (three wild%@EH@%
  2981. cards). The expression %@AS@%???%@AE@% matches any three characters; the characters do
  2982. not need to be the same.%@NL@%
  2983. %@NL@%
  2984. %@CR:MSE5350A@%%@4@%The next expression is more complex:%@EH@%%@NL@%
  2985. %@NL@%
  2986.      %@AS@%{[A-Za-z]*}==$1%@AE@%%@NL@%
  2987. %@NL@%
  2988. %@CR:MSE5350B@%%@4@%This expression means "match any number of letters, then see if the letters%@EH@%
  2989. are followed by two equals signs (%@AS@%==%@AE@%) and a repetition of the original
  2990. group." This expression matches the first two strings below but not the
  2991. third:%@NL@%
  2992. %@NL@%
  2993.      %@AS@%ABCxyz==ABCxyz%@AE@%%@NL@%
  2994.      %@AS@%i==i%@AE@%%@NL@%
  2995.      %@AS@%ABCxyz==KBCxjj%@AE@%%@NL@%
  2996. %@NL@%
  2997. %@NL@%
  2998. %@CR:MSE53600@%%@3@%%@AB@%5.3.6  Tagged Expressions in the M 1.0 Replacement String%@AE@%%@EH@%%@NL@%
  2999. %@NL@%
  3000. %@CR:MSE53601@%%@4@%You can refer to tagged expressions in replacement strings as well as in%@EH@%
  3001. search strings. Parts of the string to be replaced may be reused by
  3002. referring to the tagged expressions that originally matched those parts. Use
  3003. the syntax described in the previous section.%@NL@%
  3004. %@NL@%
  3005. %@CR:MSE53602@%%@4@%For example, suppose you want to find all occurrences of %@AI@%hexdigits%@AE@%%@AB@%H%@AE@% and%@EH@%
  3006. replace them with strings of the form %@AB@%16#%@AE@%%@AI@%hexdigits%@AE@%. You can search for
  3007. strings of the form %@AI@%hexdigits%@AE@%%@AB@%H%@AE@% by specifying the regular expression%@NL@%
  3008. %@NL@%
  3009.      %@AS@%{[0-9a-fA-F]+}H%@AE@%%@NL@%
  3010. %@NL@%
  3011. %@CR:MSE53603@%%@4@%and then specifying the following replacement string:%@EH@%%@NL@%
  3012. %@NL@%
  3013.      %@AS@%16#$1%@AE@%%@NL@%
  3014. %@NL@%
  3015. %@CR:MSE53604@%%@4@%The result is that the Microsoft Editor searches for any occurrence of one%@EH@%
  3016. or more hexadecimal digits (digits 0-9 and the letters a-f) followed by the
  3017. letter %@AB@%H%@AE@%. Each matching string is replaced by a new string that consists of
  3018. the original digits (which were tagged so they could be reused) and the
  3019. prefix %@AB@%16#%@AE@%. For example, the string %@AS@%1a000H%@AE@% is replaced with the string
  3020. %@AS@%16#1a000%@AE@%.%@NL@%
  3021. %@NL@%
  3022. %@CR:MSE53605@%%@4@%The editor recognizes six special characters──%@AB@%$  (  ,  )  -%@AE@%%@AB@%\%@AE@%──within%@EH@%
  3023. replacement strings. Each of these characters should be preceded by a
  3024. backslash (%@AB@%\%@AE@%) if you want to use a literal occurrence of one of them in a
  3025. replacement string. The %@AS@%#%@AE@% sign in the replacement string shown above is not
  3026. treated as a regular-expression character.%@NL@%
  3027. %@NL@%
  3028. %@CR:MSE53606@%%@4@%You can also use the expression%@EH@%%@NL@%
  3029. %@NL@%
  3030.      %@AB@%$(%@AE@%%@AI@%w%@AE@%%@AB@%,%@AE@%%@AI@%n%@AE@%%@AB@%)%@AE@%%@NL@%
  3031. %@NL@%
  3032. %@CR:MSE53608@%%@4@%in which %@AI@%w%@AE@% is a field length. This number can be positive or negative. A%@EH@%
  3033. negative number indicates left justification.%@NL@%
  3034. %@NL@%
  3035. %@CR:MSE53609@%%@4@%If %@AI@%w%@AE@% is greater than the length of the tagged expression, the editor right%@EH@%
  3036. justifies the tagged expression within the field and pads the field with
  3037. leading spaces. If %@AI@%w%@AE@% is greater than the length of the expression but is
  3038. preceded by a negative sign, the editor left justifies the expression and
  3039. pads the field with trailing spaces. If %@AI@%w%@AE@% is equal or less than the length
  3040. of the expression, the editor prints the whole expression but does not pad
  3041. with spaces.%@NL@%
  3042. %@NL@%
  3043. %@NL@%
  3044. %@CR:MSE53700@%%@3@%%@AB@%5.3.7  Predefined M 1.0 Regular Expressions%@AE@%%@EH@%%@NL@%
  3045. %@NL@%
  3046. %@CR:MSE53701@%%@4@%Several M 1.0 regular expressions are defined in Table 5.1%@BO:   28999@% for your%@EH@%
  3047. convenience. You can use them by entering %@AB@%:%@AE@%%@AI@%letter%@AE@% in a regular expression.%@NL@%
  3048. %@NL@%
  3049. %@CR:MSE5T100@%%@4@%%@AU@%Table 5.1  Predefined Expressions%@AE@%%@EH@%%@NL@%
  3050. %@TH:   25   1060  1 12 42 22 @%
  3051. %@AB@%Letter      Meaning                                   Description%@AE@%
  3052.  
  3053. %@AB@%:a%@AE@%          [a-zA-Z0-9]                               Alphanumeric
  3054.  
  3055. %@AB@%:b%@AE@%          ([\t]#)                                   White space
  3056.  
  3057. %@AB@%:c%@AE@%          [a-zA-Z]                                  Alphabetic
  3058.  
  3059. %@AB@%:d%@AE@%          [0-9]                                     Digit
  3060.  
  3061. %@AB@%:f%@AE@%          ([~"\[\]\:<|>+=;,.\\/]#)                  Portion of a file name
  3062.  
  3063. %@AB@%:h%@AE@%          ([0-9a-fA-F]#)                            Hexadecimal number
  3064.  
  3065. %@AB@%:i%@AE@%          ([a-zA-Z_$][a-zA-Z0-9_$]@)                C-language identifier
  3066.  
  3067. %@AB@%:n%@AE@%          ([0-9]#[0-9]@![0-9]@.[0-9]#![0-9]#)       Number
  3068.  
  3069. %@AB@%:p%@AE@%          (([a-z]\:!)(\\!)(:f(:f!)\\)@:f(.:f!))     Path
  3070.  
  3071. %@AB@%:q%@AE@%          ("[~"]@"!'[~']@')                         Quoted string
  3072.  
  3073. %@AB@%:w%@AE@%          ([a-zA-Z]#)                               Word
  3074.  
  3075. %@AB@%:z%@AE@%          ([0-9]#)                                  Integer
  3076. %@TE:   25   1060  1 12 42 22 @%
  3077. %@NL@%
  3078. %@NL@%
  3079. %@CR:MSE60000@%%@1@%%@AB@%Chapter 6  Function Assignments and Macros%@AE@%%@EH@%%@NL@%
  3080. ───────────────────────────────────────────────────────────────────────────%@NL@%
  3081. %@NL@%
  3082. %@CR:MSE60001@%%@4@%One of the strengths of the Microsoft Editor is you can customize it to your%@EH@%
  3083. own needs. You can change screen characteristics, select default behavior,
  3084. and specify which functions are connected to which keystrokes. You can also
  3085. create new editing functions. The editor supports four techniques for
  3086. customization, described in Section 6.1.%@BO:   292f2@%%@NL@%
  3087. %@NL@%
  3088. %@CR:MSE60002@%%@4@%This chapter discusses two of those techniques: function assignments and%@EH@%
  3089. macros. Function assignments alter the action of keystrokes. Macros are
  3090. editing commands that you create using a simple syntax. The other two
  3091. methods for customizing the editor, switch settings and C extensions, are
  3092. described in Chapters 7%@BO:   3396c@%, 8%@BO:   3fbeb@%, and 9%@BO:   50fea@%.%@NL@%
  3093. %@NL@%
  3094. %@CR:MSE60003@%%@4@%This chapter covers the following topics:%@EH@%%@NL@%
  3095. %@NL@%
  3096. %@CR:MSE60004@%  ■  Techniques for customizing the editor%@NL@%
  3097.   ■  Assigning functions to keystrokes%@NL@%
  3098.   ■  Creating macros%@NL@%
  3099. %@NL@%
  3100. %@NL@%
  3101. %@CR:MSE61000@%%@2@%%@AB@%6.1  The Four Techniques for Customizing the Editor%@AE@%%@EH@%%@NL@%
  3102. %@NL@%
  3103. %@CR:MSE61001@%%@4@%Each of the four techniques for customizing the editor has a distinct%@EH@%
  3104. purpose. Yet you can use these techniques in combination. For example, an
  3105. extension can execute a macro, and a macro can make an assignment. Each
  3106. technique is described below:%@NL@%
  3107. %@NL@%
  3108. %@CR:MSE61002@%%@AB@%Technique                   Description%@AE@%%@NL@%
  3109. %@NL@%
  3110. Function assignment         Assigns a function to a particular keystroke.%@NL@%
  3111.                             This capability lets you control the meaning of%@NL@%
  3112.                             all recognized keystrokes.%@NL@%
  3113. %@NL@%
  3114. Macro assignment            Creates a new editing command out of strings of%@NL@%
  3115.                             text and existing editing functions. Macros use%@NL@%
  3116.                             a simple syntax and can be created very fast.%@NL@%
  3117.                             Use macros when you need to quickly define a new%@NL@%
  3118.                             command or repetitive activity.%@NL@%
  3119. %@NL@%
  3120. Switch assignment           Alters a specific editor condition, for example,%@NL@%
  3121.                             screen colors, screen height, scrolling%@NL@%
  3122.                             behavior, tab behavior, and many other%@NL@%
  3123.                             conditions. These conditions are adjusted by%@NL@%
  3124.                             setting various editing "switches," as explained%@NL@%
  3125.                             in Chapter 7%@BO:   3396c@%.%@NL@%
  3126. %@NL@%
  3127. C extension                 Generates a new editing function compiled with%@NL@%
  3128.                             Microsoft C or assembled with the Macro%@NL@%
  3129.                             Assembler. Extensions take longer to create than%@NL@%
  3130.                             macros, but they run faster and are more%@NL@%
  3131.                             flexible. See Chapter 8%@BO:   3fbeb@% for more information.%@NL@%
  3132. %@NL@%
  3133. %@NL@%
  3134. %@CR:MSE62000@%%@2@%%@AB@%6.2  Assigning Functions to Keystrokes%@AE@%%@EH@%%@NL@%
  3135. %@NL@%
  3136. %@CR:MSE62001@%%@4@%A function assignment lets you alter the meaning of any keystroke. In this%@EH@%
  3137. context, a "keystroke" is any recognized function key, special key, or ALT+,
  3138. SHIFT+, or CTRL+key combination. You can also alter the meaning of
  3139. alphanumeric keys, but doing so can interfere with your ability to type
  3140. characters.%@NL@%
  3141. %@NL@%
  3142. ───────────────────────────────────────────────────────────────────────────%@NL@%
  3143. %@AI@%NOTE%@AE@%%@NL@%
  3144.    Any editing function, macro, or extension function can be assigned to a%@NL@%
  3145.    keystroke as described in this chapter.%@NL@%
  3146. ───────────────────────────────────────────────────────────────────────────%@NL@%
  3147. %@NL@%
  3148. %@CR:MSE62002@%%@4@%When a new assignment has been made, you can use that keystroke to invoke%@EH@%
  3149. the function at any time during the editing session. Take into account the
  3150. following points when assigning functions to keystrokes:%@NL@%
  3151. %@NL@%
  3152. %@CR:MSE62003@%  1. The function assignments you make during the editing session are lost%@NL@%
  3153.      when you exit the editor. See Chapter 7%@BO:   3396c@%, "Switches, Assignments, and%@NL@%
  3154.      the TOOLS.INI File," for information on making assignments that are%@NL@%
  3155.      automatically recognized in each editing session.%@NL@%
  3156. %@NL@%
  3157.      When using the assignments screen to view and alter assignments, you%@NL@%
  3158.      have the option of automatically saving your changes. See Section%@NL@%
  3159.      6.2.2%@BO:   2b13c@%, "Viewing and Changing Function Assignments," for more%@NL@%
  3160.      information.%@NL@%
  3161. %@NL@%
  3162.   2. A function can be assigned to more than one keystroke at the same time.%@NL@%
  3163. %@NL@%
  3164.   3. Each keystroke can have only one function assigned to it at any one%@NL@%
  3165.      time. Therefore, a new function assignment to a given keystroke cancels%@NL@%
  3166.      any previous meaning the keystroke may have had. Assigning the%@NL@%
  3167.      %@AI@%Unassigned%@AE@% function, as explained in Section 6.2.3%@BO:   2bbd2@%, cancels the%@NL@%
  3168.      keystroke's previous meaning without substituting a new meaning.%@NL@%
  3169. %@NL@%
  3170. %@NL@%
  3171. %@CR:MSE62100@%%@3@%%@AB@%6.2.1  Making Function Assignments%@AE@%%@EH@%%@NL@%
  3172. %@NL@%
  3173. %@CR:MSE62101@%%@4@%There are two ways to make a function assignment. You can use the %@AI@%Assign%@AE@%%@EH@%
  3174. function, or edit the assignments screen as described in the next section.%@NL@%
  3175. %@NL@%
  3176. %@CR:MSE62102@%%@4@%To assign a function to a keystroke with the %@AI@%Assign%@AE@% command, issue the %@AI@%Arg%@AE@%%@EH@%
  3177. %@AI@%textarg Assign%@AE@% command (ALT+A %@AI@%textarg%@AE@% ALT+=), where %@AI@%textarg%@AE@% uses the
  3178. following syntax:%@NL@%
  3179. %@NL@%
  3180.      %@AI@%functionname%@AE@%%@AB@%:%@AE@%%@AI@%keystroke%@AE@%%@NL@%
  3181. %@NL@%
  3182. %@CR:MSE62104@%%@4@%Here, %@AI@%keystroke%@AE@% may be any of the following:%@EH@%%@NL@%
  3183. %@NL@%
  3184. %@CR:MSE62105@%  1. Numeric keys: 0 through 9%@NL@%
  3185. %@NL@%
  3186.   2. Lowercase letter keys: a through z%@NL@%
  3187. %@NL@%
  3188.   3. Uppercase letter keys: A through Z%@NL@%
  3189. %@NL@%
  3190.   4. Function keys: F1 through F10 (F11 and F12 recognized for enhanced%@NL@%
  3191.      keyboards)%@NL@%
  3192. %@NL@%
  3193.   5. Lowercase punctuation: ` - = [ ] \ ; ' , . /%@NL@%
  3194. %@NL@%
  3195.   6. Uppercase punctuation: ~ ! @ # $ % ^ & * ( ) _ + { } | : " ?%@NL@%
  3196. %@NL@%
  3197.   7. Numeric-keypad white keys when NUMLOCK is turned off: HOME, END, LEFT,%@NL@%
  3198.      RIGHT, UP, DOWN, PGUP, PGDN, INS, and GOTO, which corresponds to the%@NL@%
  3199.      numeric-keypad 5 key.%@NL@%
  3200. %@NL@%
  3201.   8. Numeric-keypad white keys when NUMLOCK is turned on: 0 through 9. To%@NL@%
  3202.      assign a function to the 4 key on the numeric keypad, enter the%@NL@%
  3203.      following as the %@AI@%keystroke%@AE@%:%@NL@%
  3204. %@NL@%
  3205.          %@AS@%NUM4%@AE@%%@NL@%
  3206. %@NL@%
  3207.   9. Numeric-keypad gray keys: NUM-, NUM+, and NUM*%@NL@%
  3208. %@NL@%
  3209.  10. Other named keys: BKSP, TAB, ESC, SPACEBAR, and ENTER%@NL@%
  3210. %@NL@%
  3211.  11. Combinations:%@NL@%
  3212. %@NL@%
  3213.      a.   ALT+ followed by items 1, 2, 4, 5, 9, or 10%@NL@%
  3214.      b.   CTRL+ followed by items 2, 4, 7, 8, 9, or 10%@NL@%
  3215.      c.   SHIFT+ followed by items 4, 7, 8, 9, or 10%@NL@%
  3216. %@NL@%
  3217. %@CR:MSE62106@%%@4@%If you have a Tandy(R) 1000, the following additional keystrokes are%@EH@%
  3218. recognized:%@NL@%
  3219. %@NL@%
  3220. %@CR:MSE62107@%  1. Function keys: F11 and F12%@NL@%
  3221. %@NL@%
  3222.   2. CTRL+ followed by UP and DOWN%@NL@%
  3223. %@NL@%
  3224.   3. ALT+ followed by UP, DOWN, LEFT, and RIGHT%@NL@%
  3225. %@NL@%
  3226.   4. SHIFT+ followed by UP, DOWN, LEFT, and RIGHT%@NL@%
  3227. %@NL@%
  3228. %@CR:MSE62108@%%@4@%If you have a 101-key enhanced keyboard, all the keystrokes recognized for%@EH@%
  3229. the Tandy 1000 are supported, as well as the following: NUMENTER, NUM\, and
  3230. all CTRL, ALT, and SHIFT combinations of these two keys. In addition, the
  3231. enhanced keyboard has a duplicate set of item 7 above, which is not affected
  3232. by the state of NUMLOCK. All CTRL, ALT, and SHIFT combinations of these keys
  3233. are recognized.%@NL@%
  3234. %@NL@%
  3235. %@CR:MSE62109@%%@4@%%@AB@%Example%@AE@%%@EH@%%@NL@%
  3236. %@NL@%
  3237. %@CR:MSE6210A@%%@4@%For example, the function %@AI@%Savecur%@AE@% is assigned to the keystroke CTRL+B in%@EH@%
  3238. this manner:%@NL@%
  3239. %@NL@%
  3240. %@CR:MSE6210B@%  1. Invoke the %@AI@%Arg%@AE@% function (press ALT+A)%@NL@%
  3241. %@NL@%
  3242.   2. Enter the function and keystroke as the %@AI@%textarg%@AE@% by typing the%@NL@%
  3243.      following:%@NL@%
  3244. %@NL@%
  3245.          %@AS@%savecur:CTRL+W%@AE@%%@NL@%
  3246. %@NL@%
  3247.   3. Invoke the %@AI@%Assign%@AE@% function (press ALT+=)%@NL@%
  3248. %@NL@%
  3249.      Note that function names are not case-sensitive, so you can enter them%@NL@%
  3250.      as all lowercase.%@NL@%
  3251. %@NL@%
  3252. %@CR:MSE6210C@%%@4@%From this point on, pressing CTRL+W invokes the %@AI@%Savecur%@AE@% function and saves%@EH@%
  3253. the current cursor position. You can make this assignment automatic by
  3254. placing it in the TOOLS.INI file, as explained in Chapter 7%@BO:   3396c@%.%@NL@%
  3255. %@NL@%
  3256. %@NL@%
  3257. %@CR:MSE62200@%%@3@%%@AB@%6.2.2  Viewing and Changing Function Assignments%@AE@%%@EH@%%@NL@%
  3258. %@NL@%
  3259. %@CR:MSE62201@%%@4@%The <assign> pseudo file shows you what function assignments and switch%@EH@%
  3260. values are in effect at any time during the editing session. This file lists
  3261. all functions in alphabetical order along with the keys to which they are
  3262. assigned. Use any of the following methods to get to this screen:%@NL@%
  3263. %@NL@%
  3264. %@CR:MSE62202@%  ■  Press SHIFT+F1 to get the initial Help screen. Then select Current%@NL@%
  3265.      Assignments.%@NL@%
  3266. %@NL@%
  3267.   ■  Use the %@AI@%Setfile%@AE@% function (F2), giving %@AS@%<assign>%@AE@% as a text argument.%@NL@%
  3268. %@NL@%
  3269.   ■  Give the %@AI@%Assign%@AE@% command (ALT+A), entering a question mark (%@AS@%?%@AE@%) as a text%@NL@%
  3270.      argument.%@NL@%
  3271. %@NL@%
  3272. %@CR:MSE62203@%%@4@%Once you get to the assignments screen, you can scroll through the%@EH@%
  3273. information as you would through any file.  Use the %@AI@%Setfile%@AE@% function (F2) to
  3274. return to your original file.%@NL@%
  3275. %@NL@%
  3276. %@CR:MSE62204@%%@4@%You can also change assignments from within this file by following these%@EH@%
  3277. steps:%@NL@%
  3278. %@NL@%
  3279. %@CR:MSE62205@%  1. Move the cursor to the line that contains the function assignment you%@NL@%
  3280.      wish to change.%@NL@%
  3281. %@NL@%
  3282.   2. Edit the line so that it contains a new function assignment.%@NL@%
  3283. %@NL@%
  3284.   3. Move the cursor to a different line. If the assignment you entered is%@NL@%
  3285.      syntactically correct, the editor highlights the line to show that the%@NL@%
  3286.      new assignment was accepted. If the assignment was incorrect, the%@NL@%
  3287.      editor restores the line to its previous state and reports an error%@NL@%
  3288.      message.%@NL@%
  3289. %@NL@%
  3290. %@CR:MSE62206@%%@4@%You can execute a save operation while in the <assign> pseudo file by giving%@EH@%
  3291. the %@AI@%Arg Arg Setfile%@AE@% command. This command (which normally saves a file to
  3292. disk under its own name) directs the editor to write any new assignments you
  3293. have made to the TOOLS.INI file. Each time it starts, the editor
  3294. automatically recognizes function assignments placed in this file. See
  3295. Chapter 7%@BO:   3396c@%, "Switches, Assignments, and the TOOLS.INI File," for more
  3296. information about TOOLS.INI.%@NL@%
  3297. %@NL@%
  3298. %@CR:MSE62207@%%@4@%The %@AI@%Tell%@AE@% function (CTRL+T) gives you an alternative way of seeing what%@EH@%
  3299. function is assigned to any given keystroke. Give the command %@AI@%Arg Tell%@AE@%
  3300. (ALT+A CTRL+T), then enter a keystroke. The editor prints the name of the
  3301. function assigned to this keystroke on the dialog line.%@NL@%
  3302. %@NL@%
  3303. %@CR:MSE62208@%%@4@%For more information on the %@AI@%Tell%@AE@% function, see Appendix A%@BO:   5d119@%, "Reference%@EH@%
  3304. Tables."%@NL@%
  3305. %@NL@%
  3306. %@NL@%
  3307. %@CR:MSE62300@%%@3@%%@AB@%6.2.3  Disabling a Keystroke%@AE@%%@EH@%%@NL@%
  3308. %@NL@%
  3309. %@CR:MSE62301@%%@4@%To disable a keystroke so it invokes no function at all, assign the function%@EH@%
  3310. %@AI@%Unassigned%@AE@% to the keystroke. As with other function assignments, use the
  3311. %@AI@%Arg textarg Assign%@AE@% command. The argument %@AI@%textarg%@AE@% uses the following syntax:%@NL@%
  3312. %@NL@%
  3313.      %@AI@%unassigned%@AE@%%@AB@%:%@AE@%%@AI@%key%@AE@%%@NL@%
  3314. %@NL@%
  3315. %@CR:MSE62303@%%@4@%Here, %@AI@%key%@AE@% is the keystroke you want to remove.%@EH@%%@NL@%
  3316. %@NL@%
  3317. %@CR:MSE62304@%%@4@%For example, to disable the keystroke CTRL+A, perform the following steps:%@EH@%%@NL@%
  3318. %@NL@%
  3319. %@CR:MSE62305@%  1. Invoke the %@AI@%Arg%@AE@% function (press ALT+A)%@NL@%
  3320. %@NL@%
  3321.   2. Enter the function name as %@AI@%Unassigned%@AE@% and the keystroke by typing the%@NL@%
  3322.      following:%@AS@% unassigned:CTRL+A%@AE@%%@NL@%
  3323. %@NL@%
  3324.   3. Invoke the %@AI@%Assign%@AE@% function (press ALT+=)%@NL@%
  3325. %@NL@%
  3326. %@CR:MSE62306@%%@4@%After these steps are carried out, pressing CTRL+A does not invoke any%@EH@%
  3327. functions. (Disabling a keystroke is temporary if you have set the key
  3328. assignment in the TOOLS.INI file. For permanent results, change the
  3329. TOOLS.INI file.)%@NL@%
  3330. %@NL@%
  3331. %@NL@%
  3332. %@CR:MSE62400@%%@3@%%@AB@%6.2.4  Making a Keystroke Literal%@AE@%%@EH@%%@NL@%
  3333. %@NL@%
  3334. %@CR:MSE62401@%%@4@%Many text editors allow you to enter only alphanumeric characters and%@EH@%
  3335. punctuation into a file. However, the Microsoft Editor makes it easy for you
  3336. to insert special characters.%@NL@%
  3337. %@NL@%
  3338. %@CR:MSE62402@%%@4@%Each keystroke corresponds to an ASCII value. When a keystroke is considered%@EH@%
  3339. a "literal" or "graphic," pressing the key causes the editor to place the
  3340. corresponding value into the file.  For example, if you make the keystroke
  3341. CTRL+D a literal key, the editor places a character with the decimal value 4
  3342. into the file each time you press CTRL+D.%@NL@%
  3343. %@NL@%
  3344. ───────────────────────────────────────────────────────────────────────────%@NL@%
  3345. %@AI@%NOTE%@AE@%%@NL@%
  3346.    When you use a special keystroke (such as %@AI@%F1%@AE@% or %@AI@%ALT+A%@AE@%) as a literal, it%@NL@%
  3347.    loses any special meaning it would otherwise have and will not invoke a%@NL@%
  3348.    function. If the special value is one that can be printed (for example,%@NL@%
  3349.    if it is a printable extended-ASCII character), the editor displays the%@NL@%
  3350.    corresponding character on the screen.%@NL@%
  3351. ───────────────────────────────────────────────────────────────────────────%@NL@%
  3352. %@NL@%
  3353. %@CR:MSE62403@%%@4@%The Microsoft Editor provides two methods for converting a keystroke to a%@EH@%
  3354. literal character. The first method is to use the %@AI@%Quote%@AE@% function. When you
  3355. invoke the %@AI@%Quote%@AE@% function (CTRL+P),  the next key that you press──regardless
  3356. of what-ever special meaning it may otherwise have──is regarded as a literal
  3357. character.%@NL@%
  3358. %@NL@%
  3359. %@CR:MSE62404@%%@4@%The second method is to assign the %@AI@%Graphic%@AE@% function to the keystroke.  This%@EH@%
  3360. uses the same syntax as any other function assignment: %@AI@%Arg textarg Assign%@AE@%.
  3361. Assigning %@AI@%Graphic%@AE@% cancels any previous assignment to the keystroke, and
  3362. causes the editor to consider the keystroke a literal character. For
  3363. example, to insert a form-feed character in the file whenever CTRL+L is
  3364. pressed, first follow these steps:%@NL@%
  3365. %@NL@%
  3366. %@CR:MSE62405@%  1. Invoke the %@AI@%Arg%@AE@% function (press ALT+A)%@NL@%
  3367. %@NL@%
  3368.   2. Enter the function %@AI@%Graphic%@AE@% and the keystroke as the %@AI@%textarg%@AE@% by typing%@NL@%
  3369.      the following: %@AS@%graphic:CTRL+L%@AE@%%@NL@%
  3370. %@NL@%
  3371.   3. Invoke the %@AI@%Assign%@AE@% function (press ALT+=)%@NL@%
  3372. %@NL@%
  3373. %@CR:MSE62406@%%@4@%The choice between assigning the %@AI@%Graphic%@AE@% function or invoking the %@AI@%Quote%@AE@%%@EH@%
  3374. function depends on the situation. If you want to enter a special value into
  3375. the file repeatedly, it is often easier to assign the %@AI@%Graphic%@AE@% function to
  3376. the keystroke──since you only need to do it once. However, use of the %@AI@%Quote%@AE@%
  3377. function provides you with more control.%@NL@%
  3378. %@NL@%
  3379. %@CR:MSE62407@%%@4@%By default, the %@AI@%Graphic%@AE@% function is assigned to all alphanumeric characters.%@EH@%%@NL@%
  3380. %@NL@%
  3381. %@NL@%
  3382. %@CR:MSE63000@%%@2@%%@AB@%6.3  Creating Macros within the Editor%@AE@%%@EH@%%@NL@%
  3383. %@NL@%
  3384. %@CR:MSE63001@%%@4@%The fastest way to create a new editing function for the Microsoft Editor is%@EH@%
  3385. to create a macro. This editing function can be as simple as inserting a
  3386. long word or phrase, or it can involve complex operations.%@NL@%
  3387. %@NL@%
  3388. %@CR:MSE63002@%%@4@%There are two ways to create a macro. The easiest is to use the %@AI@%Record%@AE@%%@EH@%
  3389. function to automatically record a series of actions. You can also enter a
  3390. macro directly. The second method requires more knowledge of syntax, but
  3391. allows you to use sophisticated features, such as conditionals.%@NL@%
  3392. %@NL@%
  3393. %@CR:MSE63003@%%@4@%After you have used the editor for awhile, you may want to use both methods.%@EH@%
  3394. You can create a simple function by recording a macro, then increase the
  3395. macro's power by editing it directly, using the techniques described in
  3396. Sections 6.3.2%@BO:   2def3@%-6.3.8.%@NL@%
  3397. %@NL@%
  3398. %@CR:MSE63004@%%@4@%Once a macro is defined and assigned to a keystroke, you can see how the%@EH@%
  3399. macro is defined by using the %@AI@%Tell%@AE@% function. Give the %@AI@%Arg%@AE@%%@AI@%textarg Tell%@AE@%
  3400. command (ALT+A %@AI@%textarg%@AE@% CTRL+T), in which %@AI@%textarg%@AE@% is the name of the macro.
  3401. For more information on the %@AI@%Tell%@AE@% function, see Appendix A%@BO:   5d119@%, "Reference
  3402. Tables."%@NL@%
  3403. %@NL@%
  3404. %@CR:MSE63005@%%@4@%The maximum number of macros that can be defined at one time is 1,024.%@EH@%%@NL@%
  3405. %@NL@%
  3406. %@NL@%
  3407. %@CR:MSE63100@%%@3@%%@AB@%6.3.1  Recording a Macro%@AE@%%@EH@%%@NL@%
  3408. %@NL@%
  3409. %@CR:MSE63101@%%@4@%Much like a tape recorder, the %@AI@%Record%@AE@% (ALT+R) function tells the editor,%@EH@%
  3410. "make a record of all editing commands until I tell you to stop." After you
  3411. stop the recording, the editor creates a macro function consisting of all
  3412. the editing commands you just gave. When you invoke this macro, the editor
  3413. plays back these commands in the order you gave them.%@NL@%
  3414. %@NL@%
  3415. %@CR:MSE63102@%%@4@%While the editor is recording commands, the letters %@AS@%REC%@AE@% appear at the end of%@EH@%
  3416. the status line.%@NL@%
  3417. %@NL@%
  3418. %@CR:MSE63103@%%@4@%The %@AI@%Record%@AE@% function starts a recording and gives the macro the default name %@EH@%
  3419. %@AB@%recordvalue%@AE@% when the recording is done. Invoking %@AI@%Record%@AE@% again turns the
  3420. recording off.%@NL@%
  3421. %@NL@%
  3422. %@CR:MSE63104@%%@4@%The following steps are the quickest way to create a macro:%@EH@%%@NL@%
  3423. %@NL@%
  3424. %@CR:MSE63105@%  1. Invoke the %@AI@%Record%@AE@% function (ALT+R) to start the recording.%@NL@%
  3425. %@NL@%
  3426.   2. Execute the series of actions you wish to record.%@NL@%
  3427. %@NL@%
  3428.   3. Turn off the recording by invoking %@AI@%Record%@AE@% (ALT+R) again.%@NL@%
  3429. %@NL@%
  3430.   4. If %@AB@%recordvalue%@AE@% is not already assigned, assign it to a keystroke as%@NL@%
  3431.      described in Section 6.2%@BO:   29ab0@%, "Assigning Functions to Keystrokes."%@NL@%
  3432. %@NL@%
  3433. %@CR:MSE63106@%%@4@%After you complete these steps, the editor associates the new macro with the%@EH@%
  3434. keystroke that %@AB@%recordvalue%@AE@% is assigned to. Whenever you press this key, the
  3435. editor plays back the editing commands you gave in Step 2 above.%@NL@%
  3436. %@NL@%
  3437. %@CR:MSE63107@%%@4@%Other variations of the %@AI@%Record%@AE@% function are shown below:%@EH@%%@NL@%
  3438. %@NL@%
  3439. %@CR:MSE63108@%%@AB@%Command     %@AE@%%@NL@%
  3440. %@AB@%(and Default Keystrokes)    Description%@AE@%%@NL@%
  3441. %@NL@%
  3442. %@AI@%Arg textarg Record%@AE@%          Turns on a recording. When the recording is%@NL@%
  3443. (ALT+A %@AI@%textarg%@AE@% ALT+R)       finished, the macro is given the name specified%@NL@%
  3444.                             in the text argument.%@NL@%
  3445. %@NL@%
  3446. %@AI@%Meta Record%@AE@% (F9 ALT+R)      Turns on a recording in which commands you give%@NL@%
  3447.                             are recorded but not executed. This is in effect%@NL@%
  3448.                             a silent recording.%@NL@%
  3449. %@NL@%
  3450. %@AI@%Arg Arg textarg Record%@AE@%      Turns on a recording, but if the specified macro%@NL@%
  3451. (ALT+A ALT+A %@AI@%textarg%@AE@%        already exists, the editor appends editing%@NL@%
  3452. ALT+R)                      commands to the macro instead of replacing it.%@NL@%
  3453. %@NL@%
  3454. %@CR:MSE63109@%%@4@%By using the window and file commands described in Chapter 4%@BO:   120e2@%, you can open%@EH@%
  3455. a second window and load the <record> pseudo file. This file dynamically
  3456. displays the value of the current recording.%@NL@%
  3457. %@NL@%
  3458. %@CR:MSE6310A@%%@4@%By opening the <record> pseudo file in a separate window, you can watch the%@EH@%
  3459. editor record the macro as you create it. The macro writes out the actual
  3460. name of each editing command you give. As a result, the editor displays a
  3461. macro definition using the syntax described in the next section.%@NL@%
  3462. %@NL@%
  3463. %@NL@%
  3464. %@CR:MSE63200@%%@3@%%@AB@%6.3.2  Entering a Macro Directly%@AE@%%@EH@%%@NL@%
  3465. %@NL@%
  3466. %@CR:MSE63201@%%@4@%A macro is nothing more than a predefined series of functions and/or literal%@EH@%
  3467. text. This fact makes the syntax of most macros almost self-evident: you
  3468. build a macro by using the same syntax used throughout this manual. The most
  3469. advanced macros, however, use the return value of functions to alter control
  3470. flow. This special feature is presented in Section 6.3.8%@BO:   320fc@%, "Macros That Use
  3471. Conditionals."%@NL@%
  3472. %@NL@%
  3473. %@CR:MSE63202@%%@4@%To define a macro directly, follow these steps:%@EH@%%@NL@%
  3474. %@NL@%
  3475. %@CR:MSE63203@%  1. Choose a name. The name should not be a macro or function name already%@NL@%
  3476.      in use.%@NL@%
  3477. %@NL@%
  3478.   2. Enter the macro definition by using the %@AI@%Arg textarg Assign%@AE@% command%@NL@%
  3479.      (ALT+A %@AI@%textarg%@AE@% ALT+=), in which %@AI@%textarg%@AE@% has the following syntax:%@NL@%
  3480. %@NL@%
  3481.      %@AI@%macroname%@AE@%%@AB@%:=%@AE@%%@AI@%list%@AE@%%@NL@%
  3482. %@NL@%
  3483.      No spaces should separate %@AI@%macroname%@AE@% from the definition symbol (%@AB@%:=%@AE@%).%@NL@%
  3484.      The %@AI@%list%@AE@% contains function names and text strings enclosed in double%@NL@%
  3485.      quotes, as explained in the next section.%@NL@%
  3486. %@NL@%
  3487.   3. Assign the macro with the command %@AI@%Arg textarg Assign%@AE@%, in which the%@NL@%
  3488.      %@AI@%textarg%@AE@% has the following form:%@NL@%
  3489. %@NL@%
  3490.      %@AI@%macroname%@AE@%%@AB@%:%@AE@%%@AI@%keystroke%@AE@%%@NL@%
  3491. %@NL@%
  3492. %@CR:MSE63204@%%@4@%The last step is optional. If you want to build a nested macro as described%@EH@%
  3493. in Section 6.3.5%@BO:   302f6@%, only the last macro defined needs to be assigned to a
  3494. keystroke.%@NL@%
  3495. %@NL@%
  3496. %@CR:MSE63205@%%@4@%Instead of assigning a macro to a keystroke, you can execute the macro by%@EH@%
  3497. giving its name as input to the %@AI@%Execute%@AE@% function, as explained in Section
  3498. 6.3.4%@BO:   2ff89@%.%@NL@%
  3499. %@NL@%
  3500. %@CR:MSE63206@%%@4@%%@AB@%Example%@AE@%%@EH@%%@NL@%
  3501. %@NL@%
  3502. %@CR:MSE63207@%%@4@%The following sequence of actions defines a macro called %@AS@%InsPhrase%@AE@%, which%@EH@%
  3503. inserts a certain sentence. The simplest macros insert a fixed string of
  3504. text──these macros are useful because they can save you a lot of typing.
  3505. This macro is then assigned to the key CTRL+F10. After you do the following
  3506. action, the editor inserts the words "This is a sentence." at the current
  3507. cursor position, every time you press CTRL+F10.%@NL@%
  3508. %@NL@%
  3509. %@CR:MSE63208@%  1. Invoke the %@AI@%Arg%@AE@% function (press ALT+A)%@NL@%
  3510. %@NL@%
  3511.   2. Enter the macro name and definition by typing the following:%@NL@%
  3512. %@NL@%
  3513.         %@AS@%InsPhrase:="This is a sentence."%@AE@%%@NL@%
  3514. %@NL@%
  3515.   3. Invoke the %@AI@%Assign%@AE@% function (press ALT+=)%@NL@%
  3516. %@NL@%
  3517.   4. Invoke the %@AI@%Arg%@AE@% function (press ALT+A)%@NL@%
  3518. %@NL@%
  3519.   5. Assign this macro to a keystroke by typing the following:%@NL@%
  3520. %@NL@%
  3521.         %@AS@%InsPhrase:CTRL+F10%@AE@%%@NL@%
  3522. %@NL@%
  3523.   6. Invoke the %@AI@%Assign%@AE@% function (press ALT+=)%@NL@%
  3524. %@NL@%
  3525. %@NL@%
  3526. %@CR:MSE63300@%%@3@%%@AB@%6.3.3  Building the Macro List%@AE@%%@EH@%%@NL@%
  3527. %@NL@%
  3528. %@CR:MSE63301@%%@4@%Each item in a macro-definition list is either a function name or a string%@EH@%
  3529. of text. The function names are the same as used throughout this manual but
  3530. are not case sensitive. You can enter them all lowercase, all uppercase, or
  3531. any combination.%@NL@%
  3532. %@NL@%
  3533. %@CR:MSE63302@%%@4@%Each string of text must be enclosed in quotes. Embedded quote marks are%@EH@%
  3534. represented as \", and embedded backslashes are represented as \\.%@NL@%
  3535. %@NL@%
  3536. %@CR:MSE63303@%%@4@%%@AB@%Example%@AE@%%@EH@%%@NL@%
  3537. %@NL@%
  3538. %@CR:MSE63304@%%@4@%The following text arguments are all valid macro definitions:%@EH@%%@NL@%
  3539. %@NL@%
  3540.      Callfun:="x = QuadCalc(a, b, c);"%@NL@%
  3541.      Callfun2:=linsert begline "x = QuadCalc(a, b, c);"%@NL@%
  3542.      Movedown:=arg "15" plines%@NL@%
  3543.      Putcomm:=begline "/*  " endline " */"%@NL@%
  3544.      Join:=endline right arg sdelete%@NL@%
  3545.      Del3:=arg right right right ldelete%@NL@%
  3546.      Join2:=savecur endline right arg sdelete restcur%@NL@%
  3547.      endword:=arg arg "( !.!$!\\:!;!\\)!\\(!,)" psearch%@NL@%
  3548. %@NL@%
  3549. %@CR:MSE63305@%%@4@%The rest of this section examines each of these macro definitions.%@EH@%%@NL@%
  3550. %@NL@%
  3551.      Callfun:="x = QuadCalc(a, b, c);"%@NL@%
  3552. %@NL@%
  3553. %@CR:MSE63306@%%@4@%The example above defines a macro that inserts the text "x = QuadCalc(a, b,%@EH@%
  3554. c);" whenever invoked. This macro is simple, yet useful. It replaces the
  3555. typing of a phrase with a single editing function.%@NL@%
  3556. %@NL@%
  3557. %@CR:MSE63307@%%@4@%Executing this macro has the same effect as typing the phrase. The precise%@EH@%
  3558. effect of this macro therefore depends on whether insert mode is on or off.%@NL@%
  3559. %@NL@%
  3560.      Callfun2:=linsert begline "x = QuadCalc(a, b, c);"%@NL@%
  3561. %@NL@%
  3562. %@CR:MSE63308@%%@4@%The example above uses both function names and text to define a new editing%@EH@%
  3563. function. The effect of invoking this macro is precisely the same as the
  3564. effect of invoking %@AI@%Linsert%@AE@%, invoking %@AI@%Begline%@AE@%, and then typing the text
  3565. inside the quotes. The macro inserts a new line and places the text at the
  3566. beginning of this line.%@NL@%
  3567. %@NL@%
  3568.      Movedown:=arg "15" plines%@NL@%
  3569. %@NL@%
  3570. %@CR:MSE63309@%%@4@%Like the example before it, the example above uses a combination of%@EH@%
  3571. functions and a string of text. However, because the %@AI@%Arg%@AE@% function precedes
  3572. the text, the text does not appear on screen. Instead, the text becomes an
  3573. argument to the %@AI@%Plines%@AE@% function. This macro moves the window down 15 lines.%@NL@%
  3574. %@NL@%
  3575.      Putcomm:=begline "/*  " endline " */"%@NL@%
  3576. %@NL@%
  3577. %@CR:MSE6330A@%%@4@%The example above uses a combination of functions and text to insert%@EH@%
  3578. C-language comment marks at the beginning and end of a line.%@NL@%
  3579. %@NL@%
  3580.      Join:=endline right arg sdelete%@NL@%
  3581. %@NL@%
  3582. %@CR:MSE6330B@%%@4@%The example above defines a macro that joins the current line to the next%@EH@%
  3583. line. Recall that the sequence %@AI@%Arg Sdelete%@AE@% deletes all text to the right of
  3584. the cursor, then joins lines.  This macro does not delete any text. First,
  3585. it moves the cursor to the end of the line. Next, it moves one space to the
  3586. right to leave a space before the next line. It then executes %@AI@%Arg Sdelete%@AE@%.%@NL@%
  3587. %@NL@%
  3588. %@CR:MSE6330C@%%@4@%You can use the cursor-movement functions (%@AI@%Up%@AE@%, %@AI@%Down%@AE@%, %@AI@%Right%@AE@%, %@AI@%Left%@AE@%) within%@EH@%
  3589. macros.  The next macro uses these functions to build an on-screen argument.%@NL@%
  3590. %@NL@%
  3591.      Del3:=arg right right right ldelete%@NL@%
  3592. %@NL@%
  3593. %@CR:MSE6330D@%%@4@%The example above deletes three characters. The middle three arguments%@EH@%
  3594. create a cursor-movement argument that is passed to the %@AI@%Ldelete%@AE@% function.%@NL@%
  3595. %@NL@%
  3596.      Join2:=savecur endline right arg sdelete restcur%@NL@%
  3597. %@NL@%
  3598. %@CR:MSE6330E@%%@4@%The example above performs almost the same activity as the %@AS@%Join%@AE@% macro%@EH@%
  3599. presented earlier. However, this macro begins by saving the cursor position
  3600. with %@AI@%Savecur%@AE@%. After the lines are joined, the macro restores the original
  3601. cursor position by executing %@AI@%Restcur%@AE@%. This macro works even if %@AI@%Savecur%@AE@% and
  3602. %@AI@%Restcur%@AE@% have not been assigned to keystrokes.%@NL@%
  3603. %@NL@%
  3604.      endword:=arg arg "( !.!$!\\:!;!\\)!\\(!,)" psearch%@NL@%
  3605. %@NL@%
  3606. %@CR:MSE6330F@%%@4@%This last example uses the regular-expression syntax described in Chapter%@EH@%
  3607. 5%@BO:   206bc@%. The %@AI@%Arg Arg%@AE@% syntax directs the %@AI@%Psearch%@AE@% function to treat the text
  3608. argument as a regular-expression pattern. This pattern, in turn, causes the
  3609. editor to find the next space, period (.), end of line ($), colon (:),
  3610. semicolon (;), right parenthesis ()), left parenthesis ((), or comma (,).
  3611. Some characters must be preceded by a backslash (\) in order to be
  3612. interpreted literally. Furthermore, when you give a text argument inside a
  3613. macro list, you must use two backslashes in a row (\\) to indicate a single
  3614. backslash.%@NL@%
  3615. %@NL@%
  3616. %@CR:MSE6330G@%%@4@%The effect of this macro is to go to the end of the current word. By%@EH@%
  3617. rewriting the regular expression, you control what constitutes the end of a
  3618. word. This macro can be especially useful when nested inside other macros,
  3619. as described in Section 6.3.5.%@BO:   302f6@%%@NL@%
  3620. %@NL@%
  3621. %@NL@%
  3622. %@CR:MSE63400@%%@3@%%@AB@%6.3.4  Executing a Macro List Directly%@AE@%%@EH@%%@NL@%
  3623. %@NL@%
  3624. %@CR:MSE63401@%%@4@%Instead of defining a macro and then assigning it to a keystroke, you can%@EH@%
  3625. execute a macro-definition list directly, by using the %@AI@%Execute%@AE@% function.
  3626. This function, which by default is assigned to F7, takes a function name,
  3627. macro name, or macro-definition command list as a text argument.%@NL@%
  3628. %@NL@%
  3629. %@CR:MSE63402@%%@4@%For example, the following sequence finds the next occurrence of the word%@EH@%
  3630. %@AS@%fluke%@AE@%:%@NL@%
  3631. %@NL@%
  3632. %@CR:MSE63403@%  1. Invoke %@AI@%Arg%@AE@% (press ALT+A)%@NL@%
  3633.   2. Type the following string: %@AS@%arg "fluke" psearch%@AE@%%@NL@%
  3634.   3. Invoke %@AI@%Execute%@AE@% (press F7)%@NL@%
  3635. %@NL@%
  3636. %@CR:MSE63404@%%@4@%You can also give the name of a macro as input to the %@AI@%Execute%@AE@% command.%@EH@%%@NL@%
  3637. %@NL@%
  3638. %@NL@%
  3639. %@CR:MSE63500@%%@3@%%@AB@%6.3.5  Building Macros from Other Macros%@AE@%%@EH@%%@NL@%
  3640. %@NL@%
  3641. %@CR:MSE63501@%%@4@%Macros can contain references to previously defined macros.  Since a macro%@EH@%
  3642. definition must be contained on one line (except in the TOOLS.INI file,
  3643. where you can use a line-continuation character), you may need to break up a
  3644. macro definition into several smaller macros as shown in the example below.
  3645. Only the final macro definition need be assigned to a keystroke. Each of the
  3646. following lines is entered one at a time using the %@AI@%Arg textarg Assign%@AE@%
  3647. command:%@NL@%
  3648. %@NL@%
  3649.      head1:=arg "3" linsert "/************************"%@NL@%
  3650.      head2:=newline "** Routine:"%@NL@%
  3651.      head3:=newline "*************************/"%@NL@%
  3652.      header:=head1 head2 head3%@NL@%
  3653.      header:alt+h%@NL@%
  3654. %@NL@%
  3655. %@CR:MSE63502@%%@4@%The example above inserts three blank lines (by passing the argument 3 to%@EH@%
  3656. the %@AI@%Linsert%@AE@% function), and then inserts the given strings of text. The macro
  3657. is then assigned to ALT+H. This macro is an example of one that automates
  3658. the creation of comment blocks for C programs.%@NL@%
  3659. %@NL@%
  3660. ───────────────────────────────────────────────────────────────────────────%@NL@%
  3661. %@AI@%NOTE%@AE@%%@NL@%
  3662.    Nested macros are cumbersome to enter while running the editor. Usually,%@NL@%
  3663.    you'll want to enter them once in your TOOLS.INI file so that they are%@NL@%
  3664.    available automatically, as explained in Chapter 7%@BO:   3396c@%.%@NL@%
  3665. ───────────────────────────────────────────────────────────────────────────%@NL@%
  3666. %@NL@%
  3667. %@NL@%
  3668. %@CR:MSE63600@%%@3@%%@AB@%6.3.6  Handling Prompts within Macros%@AE@%%@EH@%%@NL@%
  3669. %@NL@%
  3670. %@CR:MSE63601@%%@4@%Some commands prompt the user for confirmation. For example, the %@AI@%Meta%@AE@%%@AI@%Exit%@AE@%%@EH@%
  3671. command (exit without saving) asks the user if he really wants to exit.
  3672. These questions take the answer yes (Y) or no (N).%@NL@%
  3673. %@NL@%
  3674. %@CR:MSE63602@%%@4@%By default, macros assume an answer of yes. For example, if you assigned%@EH@%
  3675. %@AI@%Meta Exit%@AE@% to a macro and then executed the macro, the editor would not
  3676. prompt for confirmation. Instead, the editor would assume an answer of yes
  3677. and proceed to exit without saving.%@NL@%
  3678. %@NL@%
  3679. %@CR:MSE63603@%%@4@%You can control the answers to prompts within macros by using the following%@EH@%
  3680. operators, each of which applies to the immediately preceding function:%@NL@%
  3681. %@NL@%
  3682. %@CR:MSE63604@%%@AB@%Operator                    Description%@AE@%%@NL@%
  3683. %@NL@%
  3684. %@AB@%<%@AE@%                           Asks the user for confirmation. (If not followed%@NL@%
  3685.                             by another %@AB@%<%@AE@% character, prompts user for all%@NL@%
  3686.                             further questions.)%@NL@%
  3687. %@NL@%
  3688. %@AB@%<Y%@AE@%                          Assumes an answer of yes.%@NL@%
  3689. %@NL@%
  3690. %@AB@%<N%@AE@%                          Assumes an answer of no.%@NL@%
  3691. %@NL@%
  3692. %@CR:MSE63605@%%@4@%You can use a series of operators. For example, consider the following%@EH@%
  3693. macro:%@NL@%
  3694. %@NL@%
  3695.      newfile:=arg "newfile.txt" setfile <y <n%@NL@%
  3696. %@NL@%
  3697. %@CR:MSE63606@%%@4@%The macro %@AS@%newfile%@AE@% assumes an answer of yes for the first prompt, and no for%@EH@%
  3698. the second. If %@AS@%newfile%@AE@% requires only one prompt, it ignores the second
  3699. operator, %@AS@%<n%@AE@%.%@NL@%
  3700. %@NL@%
  3701. %@CR:MSE63607@%%@4@%If the last prompt character that appears is %@AS@%<%@AE@%, the editor prompts the user%@EH@%
  3702. directly for all remaining yes/no questions.%@NL@%
  3703. %@NL@%
  3704. %@CR:MSE63608@%%@4@%You can use the prompt characters throughout your macro. For example:%@EH@%%@NL@%
  3705. %@NL@%
  3706.      newfile:=refresh < arg "newfile.txt" setfile <y <n <%@NL@%
  3707. %@NL@%
  3708. %@NL@%
  3709. %@CR:MSE63700@%%@3@%%@AB@%6.3.7  Macros That Take Arguments%@AE@%%@EH@%%@NL@%
  3710. %@NL@%
  3711. %@CR:MSE63701@%%@4@%Macros have no explicit syntax for accepting user-defined arguments.%@EH@%
  3712. However, if you enter an argument and then invoke a macro, the argument is
  3713. passed to the first function that accepts an argument:%@NL@%
  3714. %@NL@%
  3715.      tripleit:=copy paste paste%@NL@%
  3716. %@NL@%
  3717. %@CR:MSE63702@%%@4@%In the example above, you can invoke %@AI@%Arg%@AE@% and use cursor movement to%@EH@%
  3718. highlight an argument. Then invoke %@AS@%tripleit%@AE@%. Your highlighted argument is
  3719. passed to the %@AI@%Copy%@AE@% function, which copies the argument to the Clipboard. The
  3720. macro then executes the %@AI@%Paste%@AE@% function two times. As a result, two
  3721. additional copies of the argument are added to the file.%@NL@%
  3722. %@NL@%
  3723. %@CR:MSE63703@%%@4@%If you do not highlight an argument before invoking %@AS@%tripleit%@AE@%, the macro%@EH@%
  3724. responds by printing two more copies of the current line. By default,
  3725. %@AS@%tripleit%@AE@% works on the current line because %@AI@%Copy%@AE@% selects the current line
  3726. when no argument is given.%@NL@%
  3727. %@NL@%
  3728. %@CR:MSE63704@%%@4@%When you execute the %@AI@%Copy%@AE@% or %@AI@%Delete%@AE@% function at the beginning of a macro,%@EH@%
  3729. the highlighted argument is stored in the Clipboard. You can then load the
  3730. <clipboard> pseudo file and manipulate the argument itself, as in the
  3731. following macro:%@NL@%
  3732. %@NL@%
  3733.      addto1:=copy arg "<clipboard>" setfile%@NL@%
  3734.      addto2:=arg arg "TMP.TXT" setfile%@NL@%
  3735.      addto3:=arg "type TMP.TXT >>> BIG.TXT" shell%@NL@%
  3736.      addto4:=arg "del TMP.TXT" shell setfile%@NL@%
  3737.      addto:=addto1 addto2 addto3 addto4%@NL@%
  3738. %@NL@%
  3739. %@CR:MSE63705@%%@4@%The %@AS@%addto%@AE@% macro appends the highlighted argument to the file BIG.TXT. If you%@EH@%
  3740. do not give an argument, the macro appends the current line. The %@AS@%addto%@AE@% macro
  3741. works by executing %@AS@%addto1%@AE@%, %@AS@%addto2%@AE@%, %@AS@%addto3%@AE@%, and %@AS@%addto4%@AE@%, each of which does
  3742. some of the work of adding to the highlighted area. The following list
  3743. describes the steps of the %@AS@%addto%@AE@% macro:%@NL@%
  3744. %@NL@%
  3745. %@CR:MSE63706@%  1. Copy argument to the Clipboard, then load the <clipboard> pseudo file.%@NL@%
  3746. %@NL@%
  3747.   2. Save the contents of the current file (which is now <clipboard>) to the%@NL@%
  3748.      file TMP.TXT.%@NL@%
  3749. %@NL@%
  3750.   3. Execute a DOS shell that appends TMP.TXT to BIG.TXT.%@NL@%
  3751. %@NL@%
  3752.   4. Execute a DOS shell that deletes TMP.TXT, then use %@AI@%Setfile%@AE@% to return to%@NL@%
  3753.      the original file.%@NL@%
  3754. %@NL@%
  3755. %@CR:MSE63707@%%@4@%Another way to respond to an argument is to put the %@AI@%Replace%@AE@% function at the%@EH@%
  3756. beginning of your macro. Replacements then take place throughout the
  3757. highlighted area. For example, the following macro replaces each occurrence
  3758. of the period (.) with a blank space:%@NL@%
  3759. %@NL@%
  3760.      blankout:=replace "." newline " " newline%@NL@%
  3761. %@NL@%
  3762. %@CR:MSE63708@%%@4@%The %@AI@%Newline%@AE@% function is necessary because the %@AI@%Replace%@AE@% function prompts for%@EH@%
  3763. search-and-replace strings.%@NL@%
  3764. %@NL@%
  3765. %@CR:MSE63709@%%@4@%To use the macro above in a practical way, invoke %@AI@%Arg%@AE@% twice to enable%@EH@%
  3766. regular expressions, highlight an area of text, and then execute %@AS@%blankout%@AE@%.
  3767. Assuming that the editor is using Unix regular-expression syntax, the effect
  3768. is that each character in the highlighted area is replaced by a blank space.
  3769. The effect is different from %@AI@%Delete%@AE@% because the space occupied by the text
  3770. is not removed, simply replaced with blanks.%@NL@%
  3771. %@NL@%
  3772. ───────────────────────────────────────────────────────────────────────────%@NL@%
  3773. %@AI@%WARNING%@AE@%%@NL@%
  3774.    Using %@AI@%Arg%@AE@% twice and then executing %@AS@%blankout%@AE@% without a highlighted region%@NL@%
  3775.    replaces the rest of your file with blank spaces. Make sure you use a%@NL@%
  3776.    highlighted argument.%@NL@%
  3777. ───────────────────────────────────────────────────────────────────────────%@NL@%
  3778. %@NL@%
  3779. %@NL@%
  3780. %@CR:MSE63800@%%@3@%%@AB@%6.3.8  Macros That Use Conditionals%@AE@%%@EH@%%@NL@%
  3781. %@NL@%
  3782. %@CR:MSE63801@%%@4@%You can write macros that execute different actions depending on certain%@EH@%
  3783. conditions. These macros take advantage of function return values. A "return
  3784. value" is simply a piece of information that a function passes back after it
  3785. is executed. Editing functions always return the value TRUE (nonzero) or
  3786. FALSE (zero).%@NL@%
  3787. %@NL@%
  3788. %@CR:MSE63802@%%@4@%Each editing function has different criteria for determining what to return,%@EH@%
  3789. but usually an editing function returns TRUE if the function is successful,
  3790. or FALSE if it fails. For example, a cursor-movement function fails if the
  3791. cursor does not move.%@NL@%
  3792. %@NL@%
  3793. %@CR:MSE63803@%%@4@%Table A.4%@BO:   701fe@%, in Appendix A, gives a complete list of function return values.%@EH@%
  3794. You use these return values with the syntax described in Table 6.1%@BO:   324a9@%.%@NL@%
  3795. %@NL@%
  3796. %@CR:MSE6T100@%%@4@%%@AU@%Table 6.1  Macro Conditionals%@AE@%%@EH@%%@NL@%
  3797. %@TH:   15    844  1 18 68 @%
  3798. %@AB@%Conditional       Description%@AE@%
  3799.  
  3800. %@AB@%:>%@AE@%%@AI@%label%@AE@%           Defines a label that can be referenced by other macro
  3801.                   conditionals.
  3802.  
  3803. %@AB@%=>%@AE@%%@AI@%label%@AE@%           Causes a direct transfer to %@AI@%label%@AE@%. If %@AI@%label%@AE@% is omitted,
  3804.                   then the current macro exits.
  3805.  
  3806. %@AB@%->%@AE@%%@AI@%label%@AE@%           Causes a direct transfer to %@AI@%label%@AE@% if the previous function
  3807.                   returns FALSE. If %@AI@%label%@AE@% is omitted, then the current macro
  3808.                   exits on FALSE.
  3809.  
  3810. %@AB@%+>%@AE@%%@AI@%label%@AE@%           Causes a direct transfer to %@AI@%label%@AE@% if the previous function
  3811.                   returns TRUE. If %@AI@%label%@AE@% is omitted, then the current macro
  3812.                   exits on TRUE.
  3813. %@TE:   15    844  1 18 68 @%
  3814. %@NL@%
  3815. %@CR:MSE63804@%%@4@%The table above refers to a macro exiting. In this context, exiting a macro%@EH@%
  3816. only affects the current macro. If macro %@AS@%doall%@AE@% executes macro %@AS@%submacro%@AE@%, when
  3817. %@AS@%submacro%@AE@% exits, control returns to %@AS@%doall%@AE@%, which continues execution.%@NL@%
  3818. %@NL@%
  3819. %@CR:MSE63805@%%@4@%%@AB@%Examples%@AE@%%@EH@%%@NL@%
  3820. %@NL@%
  3821. %@CR:MSE63806@%%@4@%The first example turns insert mode on. The only function that turns insert%@EH@%
  3822. mode on or off is the %@AI@%Insertmode%@AE@% function. This function toggles between the
  3823. on and off condition, and returns the new state of insert mode:%@NL@%
  3824. %@NL@%
  3825. %@AB@%Initial state               Effect of Insertmode%@AE@%%@NL@%
  3826. %@NL@%
  3827. Off                         Turn insert mode on; return TRUE.%@NL@%
  3828. %@NL@%
  3829. On                          Turn insert mode off; return FALSE.%@NL@%
  3830. %@NL@%
  3831. %@CR:MSE63808@%%@4@%Unfortunately, testing the state of insert mode may turn insert mode off,%@EH@%
  3832. even though the goal is to leave it on. Fortunately, a conditional macro can
  3833. turn insert mode back on again as appropriate:%@NL@%
  3834. %@NL@%
  3835.      turnon:=insertmode +> insertmode%@NL@%
  3836. %@NL@%
  3837. %@CR:MSE63809@%%@4@%This macro consists of three simple steps:%@EH@%%@NL@%
  3838. %@NL@%
  3839. %@CR:MSE6380A@%  1. %@AS@%insertmode%@AE@% toggles the state of insert mode. This function returns TRUE%@NL@%
  3840.      if insert mode is now on.%@NL@%
  3841. %@NL@%
  3842.   2. The %@AS@%+>%@AE@% operator exits the macro if the last function executed returned%@NL@%
  3843.      TRUE. In this case, a return value of TRUE indicates that insert mode%@NL@%
  3844.      is now on, so the macro exits on TRUE.%@NL@%
  3845. %@NL@%
  3846.   3. If the last function returned FALSE, the macro continues to the last%@NL@%
  3847.      step, which executes %@AS@%insertmode%@AE@% again. If the macro reaches this step,%@NL@%
  3848.      insert mode was initially on but the first step turned it off. This%@NL@%
  3849.      step turns insert mode back on again.%@NL@%
  3850. %@NL@%
  3851. %@CR:MSE6380B@%%@4@%The macro defined above, %@AS@%turnon%@AE@%, is highly useful when used within nested%@EH@%
  3852. macros. Define %@AS@%turnon%@AE@% first. Then place %@AS@%turnon%@AE@% at the beginning of a macro
  3853. definition whenever the macro needs to assume that insert mode is on.%@NL@%
  3854. %@NL@%
  3855. ───────────────────────────────────────────────────────────────────────────%@NL@%
  3856. %@AI@%NOTE%@AE@%%@NL@%
  3857.    In the next chapter, you'll learn how to use the %@AI@%enterinsmode%@AE@% switch to%@NL@%
  3858.    achieve the same result as the macro defined above.%@NL@%
  3859. ───────────────────────────────────────────────────────────────────────────%@NL@%
  3860. %@NL@%
  3861. %@CR:MSE6380C@%%@4@%The next example turns insert mode on temporarily, executes the predefined%@EH@%
  3862. macro %@AS@%cmd%@AE@%, and then leaves the editor in the same state that it was in
  3863. before the macro was executed.%@NL@%
  3864. %@NL@%
  3865.      icmd:=insertmode +>on insertmode cmd => :>on cmd insertmode%@NL@%
  3866. %@NL@%
  3867. %@CR:MSE6380D@%%@4@%The macro executes the commands in the following order:%@EH@%%@NL@%
  3868. %@NL@%
  3869. %@CR:MSE6380E@%  1. %@AS@%insertmode%@AE@% toggles the state of insert mode, so if insert mode was off,%@NL@%
  3870.      it is now on, and vice versa. This function returns TRUE if insert mode%@NL@%
  3871.      is on after the function is executed, and FALSE otherwise.%@NL@%
  3872. %@NL@%
  3873.   2. %@AS@%+>on%@AE@% transfers control to the label %@AS@%on%@AE@% if the previous function%@NL@%
  3874.      returned TRUE──in other words, if insert mode is now on.%@NL@%
  3875. %@NL@%
  3876.   3. %@AS@%insertmode%@AE@% turns insert on. If the macro reaches this point, insert%@NL@%
  3877.      mode was originally on but the first step turned it off and returned%@NL@%
  3878.      FALSE. This step turns insert mode back on.%@NL@%
  3879. %@NL@%
  3880.   4. %@AS@%cmd%@AE@% executes the predefined macro.%@NL@%
  3881. %@NL@%
  3882.   5. %@AS@%=>%@AE@% exits the macro. Insert mode was on when the macro started, it is%@NL@%
  3883.      now back on, and %@AS@%cmd%@AE@% has been executed. Therefore the macro is done.%@NL@%
  3884. %@NL@%
  3885.   6. %@AS@%:>on%@AE@% defines a label. Execution transfers here directly from the item%@NL@%
  3886.      %@AS@%+>on%@AE@% if insert mode was turned on.%@NL@%
  3887. %@NL@%
  3888.   7. %@AS@%cmd%@AE@% executes the predefined macro.%@NL@%
  3889. %@NL@%
  3890.   8. %@AS@%insertmode%@AE@% turns insert mode back off. Since execution flowed through%@NL@%
  3891.      to this point, insert mode must have been off when the macro%@NL@%
  3892.      began──insert mode is turned back off now.%@NL@%
  3893. %@NL@%
  3894. %@NL@%
  3895. %@CR:MSE70000@%%@1@%%@AB@%Chapter 7  Switches, Assignments, and the TOOLS.INI File%@AE@%%@EH@%%@NL@%
  3896. ───────────────────────────────────────────────────────────────────────────%@NL@%
  3897. %@NL@%
  3898. %@CR:MSE70001@%%@4@%A "switch" is a variable that controls some condition of the editor. For%@EH@%
  3899. example, changing the %@AB@%fgcolor%@AE@% switch alters the foreground color of the
  3900. editor, and changing the %@AB@%height%@AE@% switch alters the number of lines on the
  3901. screen. Although switches come in three varieties (numeric, text, and
  3902. Boolean), all three kinds of switches can be controlled with the %@AI@%Assign%@AE@%
  3903. function.%@NL@%
  3904. %@NL@%
  3905. %@CR:MSE70002@%%@4@%Usually, the most convenient way to work with switches is to set them in the%@EH@%
  3906. initialization file, named TOOLS.INI. This file contains switch values,
  3907. function assignments, and macros for the Microsoft Editor to automatically
  3908. assume at the beginning of each session. This file can be used to initialize
  3909. settings for other products. Therefore, all the settings for the editor have
  3910. to be put under a special heading called a "tag."%@NL@%
  3911. %@NL@%
  3912. %@CR:MSE70003@%%@4@%If you are interested in using TOOLS.INI right away to make the editor%@EH@%
  3913. automatically start up with your own function assignments and macros, turn
  3914. to Section 7.4%@BO:   3b535@%, "Sample TOOLS.INI File."%@NL@%
  3915. %@NL@%
  3916. %@CR:MSE70004@%%@4@%This chapter covers the following topics:%@EH@%%@NL@%
  3917. %@NL@%
  3918. %@CR:MSE70005@%  ■  Syntax for switch settings%@NL@%
  3919.   ■  Using switches to configure the editor%@NL@%
  3920.   ■  Special syntax for text switches%@NL@%
  3921.   ■  Sample TOOLS.INI file%@NL@%
  3922.   ■  The structure of the TOOLS.INI file%@NL@%
  3923.   ■  Configuring on-line Help%@NL@%
  3924. %@NL@%
  3925. %@NL@%
  3926. %@CR:MSE71000@%%@2@%%@AB@%7.1  Syntax for Switch Settings%@AE@%%@EH@%%@NL@%
  3927. %@NL@%
  3928. %@CR:MSE71001@%%@4@%To change the behavior of the editor, set a switch with the %@AI@%Assign%@AE@% function%@EH@%
  3929. or in the TOOLS.INI file. You set a switch differently depending on the type
  3930. of the switch. Each switch is one of three types: numeric, text, or Boolean.%@NL@%
  3931. %@NL@%
  3932. %@CR:MSE71002@%%@4@%To set a numeric or text switch, give the assignment%@EH@%%@NL@%
  3933. %@NL@%
  3934.      %@AI@%switch%@AE@%%@AB@%:%@AE@%%@AI@%value%@AE@%%@NL@%
  3935. %@NL@%
  3936. %@CR:MSE71004@%%@4@%in which %@AI@%switch%@AE@% is the name of the switch and %@AI@%value%@AE@% is either a string of%@EH@%
  3937. digits (in the case of a numeric switch), or any string of text (in the case
  3938. of a text switch). Most numeric switches use decimal digits. However, the
  3939. color switches use hexadecimal digits, as described in Section 7.2.3%@BO:   35a6f@%.%@NL@%
  3940. %@NL@%
  3941. %@CR:MSE71005@%%@4@%Boolean switches can be off or on. To turn a Boolean switch on, give either%@EH@%
  3942. of the following assignments:%@NL@%
  3943. %@NL@%
  3944.      %@AI@%switch%@AE@%%@AB@%:%@AE@%%@NL@%
  3945.      %@AI@%switch%@AE@%%@AB@%:yes%@AE@%%@NL@%
  3946. %@NL@%
  3947. %@CR:MSE71007@%%@4@%To turn a Boolean switch off, prefix the letters %@AB@%no%@AE@% to the assignment or%@EH@%
  3948. type %@AB@%no%@AE@% after the colon:%@NL@%
  3949. %@NL@%
  3950.      %@AB@%no%@AE@%%@AI@%switch%@AE@%%@AB@%:%@AE@%%@NL@%
  3951.      %@AI@%switch%@AE@%%@AB@%:no%@AE@%%@NL@%
  3952. %@NL@%
  3953. %@CR:MSE71009@%%@4@%A switch assignment looks similar to a function assignment.  However, a%@EH@%
  3954. switch assignment has a different effect. A function assignment changes the
  3955. meaning of a keystroke, whereas a switch assignment alters a basic
  3956. condition, such as screen color.%@NL@%
  3957. %@NL@%
  3958. %@CR:MSE7100A@%%@4@%%@AB@%Examples%@AE@%%@EH@%%@NL@%
  3959. %@NL@%
  3960. %@CR:MSE7100B@%%@4@%The following examples show a numeric, text, and four Boolean assignments,%@EH@%
  3961. respectively:%@NL@%
  3962. %@NL@%
  3963.      tabstops:8%@NL@%
  3964.      backup:none%@NL@%
  3965.      case:%@NL@%
  3966.      nocase:%@NL@%
  3967.      case:yes%@NL@%
  3968.      case:no%@NL@%
  3969. %@NL@%
  3970. %@CR:MSE7100C@%%@4@%You could make any of these assignments by placing them in the TOOLS.INI%@EH@%
  3971. file, or by using the %@AI@%Arg textarg Assign%@AE@% command. For example, to set
  3972. %@AB@%tabstops%@AE@% to 8, follow these steps:%@NL@%
  3973. %@NL@%
  3974. %@CR:MSE7100D@%  1. Invoke the %@AI@%Arg%@AE@% function (press ALT+A)%@NL@%
  3975.   2. Type the following switch assignment: %@AS@%tabstops:8%@AE@%%@NL@%
  3976.   3. Invoke the %@AI@%Assign%@AE@% function (press ALT+= )%@NL@%
  3977. %@NL@%
  3978. ───────────────────────────────────────────────────────────────────────────%@NL@%
  3979. %@AI@%NOTE%@AE@%%@NL@%
  3980.    Some text switches recognize special characters. These characters are%@NL@%
  3981.    never required, but can be convenient. See Section 7.3%@BO:   3a7a5@%, "Special Syntax%@NL@%
  3982.    for Text Switches," for more information.%@NL@%
  3983. ───────────────────────────────────────────────────────────────────────────%@NL@%
  3984. %@NL@%
  3985. %@NL@%
  3986. %@CR:MSE72000@%%@2@%%@AB@%7.2  Using Switches to Configure the Editor%@AE@%%@EH@%%@NL@%
  3987. %@NL@%
  3988. %@CR:MSE72001@%%@4@%This section explains how to use some of the more common switches. You can%@EH@%
  3989. follow the instructions to get a feel for how to adjust conditions within
  3990. the editor. For example, you may want to change screen colors, screen
  3991. height, or tab behavior. Sections 7.4%@BO:   3b535@% and 7.5%@BO:   3c086@% explain how to make these
  3992. settings automatic by placing them in the TOOLS.INI file.%@NL@%
  3993. %@NL@%
  3994. %@CR:MSE72002@%%@4@%Sections 7.2.1%@BO:   34f56@%-7.2.8 cover the following topics:%@EH@%%@NL@%
  3995. %@NL@%
  3996. %@CR:MSE72003@%  ■  Changing start-up conditions%@NL@%
  3997.   ■  Changing scrolling behavior%@NL@%
  3998.   ■  Setting screen colors with %@AB@%fgcolor%@AE@%%@NL@%
  3999.   ■  Setting colors for other parts of the screen%@NL@%
  4000.   ■  Changing the look and feel of Help%@NL@%
  4001.   ■  Controlling use of tabs%@NL@%
  4002.   ■  Changing how the editor handles trailing spaces%@NL@%
  4003.   ■  Changing screen height%@NL@%
  4004. %@NL@%
  4005. %@NL@%
  4006. %@CR:MSE72100@%%@3@%%@AB@%7.2.1  Changing Start-Up Conditions%@AE@%%@EH@%%@NL@%
  4007. %@NL@%
  4008. %@CR:MSE72101@%%@4@%By default, the editor starts with insert mode off and status line%@EH@%
  4009. displaying window position (rather than cursor position). To start with
  4010. insert mode on, place the following statement in the [M] section of your
  4011. TOOLS.INI file:%@NL@%
  4012. %@NL@%
  4013.      enterinsmode:%@NL@%
  4014. %@NL@%
  4015. %@CR:MSE72102@%%@4@%You can also set this switch by executing these steps:%@EH@%%@NL@%
  4016. %@NL@%
  4017. %@CR:MSE72103@%  1. Invoke the %@AI@%Arg%@AE@% function (press ALT+A)%@NL@%
  4018.   2. Type the following switch assignment: %@AS@%enterinsmode:%@AE@%%@NL@%
  4019.   3. Invoke the %@AI@%Assign%@AE@% function (press ALT+=)%@NL@%
  4020. %@NL@%
  4021. %@CR:MSE72104@%%@4@%Setting this switch while in an editing session turns insert mode on%@EH@%
  4022. regardless of the current state of insert mode.%@NL@%
  4023. %@NL@%
  4024. %@CR:MSE72105@%%@4@%The status line at the bottom of the screen displays window position by%@EH@%
  4025. default. The window position gives the file coordinates (by line and column)
  4026. of the top left corner. To change this field so that it displays cursor
  4027. position instead, follow these steps:%@NL@%
  4028. %@NL@%
  4029. %@CR:MSE72106@%  1. Invoke the %@AI@%Arg%@AE@% function (press ALT+A)%@NL@%
  4030.   2. Type the following switch assignment: %@AS@%displaycursor:%@AE@%%@NL@%
  4031.   3. Invoke the %@AI@%Assign%@AE@% function (press ALT+=)%@NL@%
  4032. %@NL@%
  4033. %@CR:MSE72107@%%@4@%The editor numbers rows and columns beginning with the number one. Cursor%@EH@%
  4034. position is (1,1) when the cursor is at the very beginning of the file.%@NL@%
  4035. %@NL@%
  4036. %@CR:MSE72108@%%@4@%The %@AB@%enterinsmode%@AE@% and %@AB@%displaycursor%@AE@% switches are both examples of Boolean%@EH@%
  4037. switches. To turn these switches off, follow the directions above but
  4038. precede the switch with the word %@AB@%no%@AE@%.%@NL@%
  4039. %@NL@%
  4040. %@NL@%
  4041. %@CR:MSE72200@%%@3@%%@AB@%7.2.2  Changing Scrolling Behavior%@AE@%%@EH@%%@NL@%
  4042. %@NL@%
  4043. %@CR:MSE72201@%%@4@%Two switches control scrolling behavior in the Microsoft Editor: %@AB@%vscroll%@AE@% and%@EH@%
  4044. %@AB@%hscroll%@AE@%. Each time you attempt to move the cursor off the top or bottom of
  4045. the screen, the editor moves the editing window up or down a certain
  4046. distance. This distance is set by the value of %@AB@%vscroll%@AE@%.%@NL@%
  4047. %@NL@%
  4048. %@CR:MSE72202@%%@4@%For smooth vertical scrolling, set %@AB@%vscroll%@AE@% to 1:%@EH@%%@NL@%
  4049. %@NL@%
  4050. %@CR:MSE72203@%  1. Invoke the %@AI@%Arg%@AE@% function (press ALT+A)%@NL@%
  4051.   2. Type the following switch assignment: %@AS@%vscroll:1%@AE@%%@NL@%
  4052.   3. Invoke the %@AI@%Assign%@AE@% function (press ALT+=)%@NL@%
  4053. %@NL@%
  4054. %@CR:MSE72204@%%@4@%For smooth horizontal scrolling, set %@AB@%hscroll%@AE@% to 1. Give the %@AI@%Arg textarg%@AE@%%@EH@%
  4055. %@AI@%Assign%@AE@% command (ALT+A %@AI@%textarg%@AE@% ALT+=), in which %@AI@%textarg%@AE@% is %@AS@%hscroll:1%@AE@%.%@NL@%
  4056. %@NL@%
  4057. %@NL@%
  4058. %@CR:MSE72300@%%@3@%%@AB@%7.2.3  Setting Screen Colors with fgcolor%@AE@%%@EH@%%@NL@%
  4059. %@NL@%
  4060. %@CR:MSE72301@%%@4@%The %@AB@%fgcolor%@AE@% switch controls the most important screen colors: background%@EH@%
  4061. and foreground colors of editing windows. The background color is the
  4062. primary color of a region of the screen. The foreground color is the color
  4063. of characters that appear in this region.%@NL@%
  4064. %@NL@%
  4065. %@CR:MSE72302@%%@4@%The %@AB@%fgcolor%@AE@% switch uses one numeric value to control both background and%@EH@%
  4066. foreground colors. The other color switches (%@AB@%errcolor%@AE@%, %@AB@%hgcolor%@AE@%, %@AB@%infcolor%@AE@%,
  4067. and %@AB@%stacolor%@AE@%) all work in the same way: each sets a background and
  4068. foreground color according to a single numeric value.%@NL@%
  4069. %@NL@%
  4070. %@CR:MSE72303@%%@4@%The editor reads a color switch as a two-digit hexadecimal number. The first%@EH@%
  4071. digit sets the background color; the second sets the foreground color. Table
  4072. 7.1%@BO:   35f29@% states the digits that correspond to each color.%@NL@%
  4073. %@NL@%
  4074. %@CR:MSE72304@%%@4@%In the case of background colors, the digits 8-F correspond to the digits%@EH@%
  4075. 0-7, except that they make the foreground text blink on and off.%@NL@%
  4076. %@NL@%
  4077. %@CR:MSE7T100@%%@4@%%@AU@%Table 7.1  Colors and Numeric Values%@AE@%%@EH@%%@NL@%
  4078. %@TH:   33    504  1 24 52 @%
  4079. %@AB@%Color                   Value%@AE@%
  4080.  
  4081. Black                   0
  4082.  
  4083. Blue                    1
  4084.  
  4085. Green                   2
  4086.  
  4087. Cyan                    3
  4088.  
  4089. Red                     4
  4090.  
  4091. Magenta                 5
  4092.  
  4093. Brown                   6
  4094.  
  4095. Light Gray              7
  4096.  
  4097. Dark Gray               8
  4098.  
  4099. Light Blue              9
  4100.  
  4101. Light Green             A
  4102.  
  4103. Light Cyan              B
  4104.  
  4105. Light Red               C
  4106.  
  4107. Light Magenta           D
  4108.  
  4109. Light Yellow            E
  4110.  
  4111. White                   F
  4112. %@TE:   33    504  1 24 52 @%
  4113. %@NL@%
  4114. %@CR:MSE72305@%%@4@%Each two-digit number describes some combination of background and%@EH@%
  4115. foreground colors. The list below gives a few examples:%@NL@%
  4116. %@NL@%
  4117. %@CR:MSE72306@%%@AB@%Number                      Meaning%@AE@%%@NL@%
  4118. %@NL@%
  4119. 17                          Blue (1) background, light gray (7) foreground%@NL@%
  4120. %@NL@%
  4121. 07                          Black (0) background, light gray (7) foreground%@NL@%
  4122. %@NL@%
  4123. 2F                          Green (2) background, white (F) foreground%@NL@%
  4124. %@NL@%
  4125. 24                          Green (2) background, red (4) foreground%@NL@%
  4126. %@NL@%
  4127. ───────────────────────────────────────────────────────────────────────────%@NL@%
  4128. %@AI@%NOTE%@AE@%%@NL@%
  4129.    Only color adapter cards support all the colors listed above. If you have%@NL@%
  4130.    a monochrome adapter or monochrome monitor, the only colors available are%@NL@%
  4131.    white (F), black (0), and light gray (7). All other colors are treated as%@NL@%
  4132.    white.%@NL@%
  4133. ───────────────────────────────────────────────────────────────────────────%@NL@%
  4134. %@NL@%
  4135. %@CR:MSE72307@%%@4@%%@AB@%Example%@AE@%%@EH@%%@NL@%
  4136. %@NL@%
  4137. %@CR:MSE72308@%%@4@%At any time during the editing session, you can set new screen colors%@EH@%
  4138. (although to set these colors permanently, you should use TOOLS.INI). To set
  4139. a blue background with a light gray foreground, execute the following steps:%@NL@%
  4140. %@NL@%
  4141. %@CR:MSE72309@%  1. Invoke the %@AI@%Arg%@AE@% function (press ALT+A)%@NL@%
  4142.   2. Type the following switch assignment: %@AS@%fgcolor:17%@AE@%%@NL@%
  4143.   3. Invoke the %@AI@%Assign%@AE@% function (press ALT+=)%@NL@%
  4144. %@NL@%
  4145. %@NL@%
  4146. %@CR:MSE72400@%%@3@%%@AB@%7.2.4  Setting Colors for Other Parts of the Screen%@AE@%%@EH@%%@NL@%
  4147. %@NL@%
  4148. %@CR:MSE72401@%%@4@%All color switches interpret digits in the same way. However, each color%@EH@%
  4149. switch controls a different region of the screen, as described in the list
  4150. below:%@NL@%
  4151. %@CR:MSE72402@%%@NL@%
  4152. %@TH:   26   1482  2 28 48 @%
  4153. %@AB@%Switch                      Description%@AE@%
  4154.  
  4155. %@AB@%errcolor%@AE@%                    Controls the colors used to display error
  4156.                             messages on the dialog line.
  4157.  
  4158. %@AB@%hgcolor%@AE@%                     Controls the colors in a region of text
  4159.                             highlighted by a search command.
  4160.  
  4161. %@AB@%infcolor%@AE@%                    Controls the colors used for informative text:
  4162.                             messages (other than error messages) that the
  4163.                             editor displays on the dialog line, as well as
  4164.                             strings to be replaced that are located by
  4165.                             %@AI@%Qreplace%@AE@%. The editor displays messages after
  4166.                             executing an operation, such as saving a file or
  4167.                             loading a new file. These colors provide the
  4168.                             default background for the dialog line, and also
  4169.                             control the color of "insert" and "meta" when
  4170.                             they appear on the status line.
  4171.  
  4172. %@AB@%selcolor%@AE@%                    Controls the color of text that the user
  4173.                             highlights as a cursor-movement argument.
  4174.  
  4175. %@AB@%stacolor%@AE@%                    Controls the colors of most items on the status
  4176.                             line.
  4177.  
  4178. %@AB@%wdcolor%@AE@%                     Controls the color used to draw window borders.
  4179. %@TE:   26   1482  2 28 48 @%
  4180. %@NL@%
  4181. %@CR:MSE72403@%%@4@%The following procedure sets a black (0) background for error messages,%@EH@%
  4182. combined with a red (4) foreground. Error messages will appear in red
  4183. letters against a black background:%@NL@%
  4184. %@NL@%
  4185. %@CR:MSE72404@%  1. Invoke the %@AI@%Arg%@AE@% function (press ALT+A)%@NL@%
  4186.   2. Type the following switch assignment: %@AS@%errcolor:04%@AE@%%@NL@%
  4187.   3. Invoke the %@AI@%Assign%@AE@% function (press ALT+=)%@NL@%
  4188. %@NL@%
  4189. %@NL@%
  4190. %@CR:MSE72500@%%@3@%%@AB@%7.2.5  Changing the Look and Feel of Help%@AE@%%@EH@%%@NL@%
  4191. %@NL@%
  4192. %@CR:MSE72501@%%@4@%The information in this section applies only to systems configured to use%@EH@%
  4193. the powerful Microsoft Help engine. If Help is not installed when you press
  4194. SHIFT+F1, a message appears saying that you have not installed Help yet. Run
  4195. the installation program for your Microsoft language, or follow the
  4196. directions in Section 7.6%@BO:   3eb8b@%, "Configuring On-Line Help."%@NL@%
  4197. %@NL@%
  4198. %@CR:MSE72502@%%@4@%By default, Help splits the screen and displays Help information in a%@EH@%
  4199. separate window. This behavior has the advantage of letting you view both
  4200. the current file and Help information at the same time. You can move the
  4201. cursor between windows by pressing F6. You can also copy examples from the
  4202. Help window and paste them into an editing window.%@NL@%
  4203. %@NL@%
  4204. %@CR:MSE72503@%%@4@%You can change the behavior of Help so that it does not split the screen.%@EH@%
  4205. Instead, Help will save the current file (if the %@AB@%autosave%@AE@% switch is on) and
  4206. load Help information into the current editing window. This behavior has the
  4207. advantage of using more room to display Help information.%@NL@%
  4208. %@NL@%
  4209. %@CR:MSE72504@%%@4@%The split-screen behavior is controlled by the %@AB@%helpwindow%@AE@% switch. This%@EH@%
  4210. switch is a Boolean switch; it can be either on or off. Turning the switch
  4211. off prevents the editor from splitting the screen to display Help
  4212. information:%@NL@%
  4213. %@NL@%
  4214. %@CR:MSE72505@%  1. Invoke %@AI@%Arg%@AE@% (press ALT+A)%@NL@%
  4215. %@NL@%
  4216.   2. Type the following switch assignment: %@AS@%nohelpwindow:%@AE@%%@NL@%
  4217. %@NL@%
  4218.   3. Invoke the %@AI@%Assign%@AE@% function (press ALT+=)%@NL@%
  4219. %@NL@%
  4220. %@CR:MSE72506@%%@4@%Conversely, to turn the split-screen behavior back on, give the %@AI@%Arg textarg%@AE@%%@EH@%
  4221. %@AI@%Assign%@AE@% command, in which %@AI@%textarg%@AE@% is %@AS@%helpwindow:%@AE@%.%@NL@%
  4222. %@NL@%
  4223. ───────────────────────────────────────────────────────────────────────────%@NL@%
  4224. %@AI@%NOTE%@AE@%%@NL@%
  4225.    When %@AI@%helpwindow%@AE@% is on, use the %@AI@%Cancel%@AE@% function (ESC) to close the Help%@NL@%
  4226.    window. When %@AI@%helpwindow%@AE@% is off, use the %@AI@%Cancel%@AE@% function (ESC) to return%@NL@%
  4227.    to the previous file.%@NL@%
  4228. ───────────────────────────────────────────────────────────────────────────%@NL@%
  4229. %@NL@%
  4230. %@CR:MSE72507@%%@4@%You can also control the colors used in the Help window. The writer of a%@EH@%
  4231. help file can designate text as foreground, bold, italicized, underlined, or
  4232. as warning text. You cannot change these designations. However, you can
  4233. easily change the choice of colors used to illustrate each kind of text:%@NL@%
  4234. %@NL@%
  4235. %@CR:MSE72508@%%@AB@%Switch                      Meaning%@AE@%%@NL@%
  4236. %@NL@%
  4237. %@AB@%fgcolor%@AE@%                     Foreground color, which controls the color of%@NL@%
  4238.                             normal text. This switch also controls the%@NL@%
  4239.                             foreground color of editing windows.%@NL@%
  4240. %@NL@%
  4241. %@AB@%helpboldcolor%@AE@%               Color of text designated as bold.%@NL@%
  4242. %@NL@%
  4243. %@AB@%helpitalcolor%@AE@%               Color of text designated as italicized.%@NL@%
  4244. %@NL@%
  4245. %@AB@%helpundcolor%@AE@%                Color of text designated as underlined.%@NL@%
  4246. %@NL@%
  4247. %@AB@%helpwarncolor%@AE@%               Color of text used for a "warning" note. Also%@NL@%
  4248.                             controls color of highlighted cross-references.%@NL@%
  4249. %@NL@%
  4250. %@CR:MSE72509@%%@4@%All of the switches above are set the same way the %@AB@%fgcolor%@AE@% switch is, as%@EH@%
  4251. explained in Section 7.2.3.%@BO:   35a6f@%%@NL@%
  4252. %@NL@%
  4253. %@NL@%
  4254. %@CR:MSE72600@%%@3@%%@AB@%7.2.6  Controlling Use of Tabs%@AE@%%@EH@%%@NL@%
  4255. %@NL@%
  4256. %@CR:MSE72601@%%@4@%The Microsoft Editor provides two basic ways of working with tab characters:%@EH@%
  4257. you can either treat tabs as real characters, or you can have the editor
  4258. convert each tab into a series of spaces. This behavior is controlled by the
  4259. %@AB@%realtabs%@AE@% switch.%@NL@%
  4260. %@NL@%
  4261. %@CR:MSE72602@%%@4@%The %@AB@%realtabs%@AE@% switch is a Boolean switch that by default is on, causing the%@EH@%
  4262. editor to treat each tab (ASCII 9) as an independent character. Unlike other
  4263. characters, a tab may correspond to several positions on the screen. If you
  4264. place the cursor on a tab character and press RIGHT, the cursor jumps to the
  4265. next tab column. Tab columns occur at regular intervals, as determined by
  4266. the %@AB@%filetab%@AE@% switch.%@NL@%
  4267. %@NL@%
  4268. %@CR:MSE72603@%%@4@%As you add and delete characters, the editor maintains the tab-column%@EH@%
  4269. alignment of the text.%@NL@%
  4270. %@NL@%
  4271. %@CR:MSE72604@%%@4@%Whether or not %@AB@%realtabs%@AE@% is on, the %@AI@%Tab%@AE@% function is simply a movement%@EH@%
  4272. function, and it does not insert tabs into a file. To use the TAB key to
  4273. directly insert tabs, put the following assignment in your TOOLS.INI file,
  4274. or give it as input to the %@AI@%Assign%@AE@% command:%@NL@%
  4275. %@NL@%
  4276.      graphic:tab%@NL@%
  4277. %@NL@%
  4278. %@CR:MSE72605@%%@4@%This assignment makes the TAB key a graphic character. Each time you press%@EH@%
  4279. TAB, you directly place an actual tab character into the file.%@NL@%
  4280. %@NL@%
  4281. %@CR:MSE72606@%%@4@%If you turn the %@AB@%realtabs%@AE@% switch off, the Microsoft Editor translates tab%@EH@%
  4282. characters into spaces. This behavior only affects the individual lines that
  4283. you modify. If you read a file but make no changes, the tab-to-space
  4284. conversion does not alter the file on disk, even if you execute a save
  4285. operation.%@NL@%
  4286. %@NL@%
  4287. %@CR:MSE72607@%%@4@%The editor may also convert spaces to tabs, according to the setting of the%@EH@%
  4288. %@AB@%entab%@AE@% switch, described below. This behavior also only affects the
  4289. individual lines that you modify.%@NL@%
  4290. %@NL@%
  4291. %@CR:MSE72608@%%@4@%The %@AB@%tabdisp%@AE@% switch is useful for viewing the effect of writing to a disk%@EH@%
  4292. file. If you set %@AB@%tabdisp%@AE@% to a number other than 0 or 32, the editor shows
  4293. you which spaces will be compressed into a tab character at the next write
  4294. to the disk file. All such spaces are displayed as the ASCII equivalent of
  4295. the value of %@AB@%tabdisp%@AE@%.%@NL@%
  4296. %@NL@%
  4297. %@CR:MSE72609@%%@4@%If %@AB@%realtabs%@AE@% is on, each position in a tab field displays this same%@EH@%
  4298. character.%@NL@%
  4299. %@NL@%
  4300. %@CR:MSE7260A@%%@4@%For example, the following steps set %@AB@%tabdisp%@AE@% to 249:%@EH@%%@NL@%
  4301. %@NL@%
  4302. %@CR:MSE7260B@%  1. Invoke %@AI@%Arg%@AE@% (press ALT+A)%@NL@%
  4303.   2. Type the following switch assignment: %@AS@%tabdisp:249%@AE@%%@NL@%
  4304.   3. Invoke the %@AI@%Assign%@AE@% function (press ALT+=)%@NL@%
  4305. %@NL@%
  4306. %@CR:MSE7260C@%%@4@%After you carry out these steps, the editor displays the ASCII equivalent of%@EH@%
  4307. 249 in place of each position in a tab field.%@NL@%
  4308. %@NL@%
  4309. %@CR:MSE7260D@%%@4@%The following list describes the meaning of the four tab-handling switches:%@EH@%%@NL@%
  4310. %@CR:MSE7260E@%%@NL@%
  4311. %@TH:   67   4383 02 28 48 @%
  4312. %@AB@%Switch                      Description%@AE@%
  4313.  
  4314. %@AB@%realtabs%@AE@%                    Controls whether or not tabs are treated as real
  4315.                             characters, as described above. If on, tab
  4316.                             columns are aligned according to the %@AB@%filetab%@AE@%
  4317.                             switch. If %@AB@%realtabs%@AE@% is off, every tab read is
  4318.                             treated as a series of spaces, according to the
  4319.                             %@AB@%filetab%@AE@% switch.
  4320.  
  4321. %@AB@%entab%@AE@%                       Controls the extent to which the editor converts
  4322.                             a series of tabs and spaces to tabs when saving
  4323.                             a file. Only the lines you modify during the
  4324.                             editing session are affected by space-to-tab
  4325.                             conversion.
  4326.  
  4327.                             A value of 0 means the editor does not replace
  4328.                             spaces by tabs. A value of 1 (the default) means
  4329.                             the editor can replace a series of tabs and
  4330.                             spaces by tabs when the spaces fall outside of
  4331.                             quoted strings. A value of 2 means all series of
  4332.                             tabs and spaces can be replaced by tabs.
  4333.  
  4334.                             The %@AB@%entab%@AE@% switch determines what kind of
  4335.                             space-to-tab replacements are possible. Whether
  4336.                             a replacement is made in any given case depends
  4337.                             on the position of the spaces, and on the
  4338.                             %@AB@%filetab%@AE@% switch, described next.
  4339.  
  4340. %@AB@%filetab%@AE@%                     Controls the physical (disk-file) meaning of tab
  4341.                             characters. If %@AB@%realtabs%@AE@% is on, the %@AB@%filetab%@AE@%
  4342.                             switch determines tab alignment. If%@AB@%realtabs%@AE@% is
  4343.                             off, the %@AB@%filetab%@AE@% switch determines how the
  4344.                             editor translates tab characters to spaces when
  4345.                             a line of text is modified. If %@AB@%entab%@AE@% is set to 1
  4346.                             or 2, %@AB@%filetab%@AE@% also determines how the editor
  4347.                             translates spaces to tabs when you save the file
  4348.                             to disk. (Only modified lines are affected.)
  4349.  
  4350.                             The value of the switch gives the number of
  4351.                             spaces associated with each tab column. For
  4352.                             example, the setting "filetab:4" assumes a tab
  4353.                             column every 4 positions on each line. Every
  4354.                             time the editor finds a tab character (ASCII 9),
  4355.                             it loads the buffer with the number of spaces
  4356.                             necessary to get to the next tab column. The
  4357.                             default value of %@AB@%filetab%@AE@% is 8.
  4358.  
  4359. %@AB@%tabalign%@AE@%                    If %@AB@%realtabs%@AE@% and %@AB@%tabalign%@AE@% are both set, the
  4360.                             cursor automatically moves to the first column
  4361.                             position of a tab character when it is placed
  4362.                             anywhere within a tab character. Cursor movement
  4363.                             corresponds to the actual characters in the
  4364.                             file.
  4365.  
  4366.                             When not set (the default), the cursor may be
  4367.                             placed anywhere in any column of a tab
  4368.                             character. If a character is typed at this
  4369.                             position, sufficient leading blanks will be
  4370.                             inserted to assure that the character actually
  4371.                             appears in this column position. Cursor movement
  4372.                             is independent of the actual characters in the
  4373.                             file.
  4374.  
  4375. %@AB@%tabstops%@AE@%                    Determines the size of columns associated with
  4376.                             the %@AI@%Tab%@AE@% and %@AI@%Backtab%@AE@% cursor-movement functions.
  4377.                             It has no affect on actual tab characters. The
  4378.                             default value of %@AB@%tabstops%@AE@% is 4.
  4379. %@TE:   67   4383 02 28 48 @%
  4380. %@NL@%
  4381. %@CR:MSE72700@%%@3@%%@AB@%7.2.7  Changing How the Editor Handles Trailing Spaces%@AE@%%@EH@%%@NL@%
  4382. %@NL@%
  4383. %@CR:MSE72701@%%@4@%A "trailing space" is a space character located to the right of the last%@EH@%
  4384. printable character on a line. A trailing space is normally invisible. By
  4385. default, the editor deletes all trailing spaces on each line you modify.%@NL@%
  4386. %@NL@%
  4387. %@CR:MSE72702@%%@4@%However, you can change this behavior by resetting the value of the%@EH@%
  4388. %@AB@%trailspace%@AE@% switch. This switch is Boolean switch; it can be either on or
  4389. off. To turn this switch on, give the %@AI@%Arg textarg Assign%@AE@% command (ALT+A
  4390. %@AI@%textarg%@AE@% ALT+=), in which %@AS@%trailspace:%@AE@% is the %@AI@%textarg%@AE@%. When you wish to turn
  4391. this switch off, give the %@AI@%Arg textarg Assign%@AE@% command, in which %@AS@%notrailspace:%@AE@%
  4392. is the %@AI@%textarg%@AE@%.%@NL@%
  4393. %@NL@%
  4394. %@CR:MSE72703@%%@4@%When this switch is on, any space you type at the end of a line remains in%@EH@%
  4395. the file as a trailing space. You can verify the existence of trailing
  4396. spaces by invoking the %@AI@%Endline%@AE@% function (press END). If the cursor moves
  4397. past the last printable character when you invoke %@AI@%Endline%@AE@%, the line contains
  4398. trailing spaces.%@NL@%
  4399. %@NL@%
  4400. %@CR:MSE72704@%%@4@%To display trailing spaces, set the %@AB@%traildisp%@AE@% switch to a number greater%@EH@%
  4401. than 0. The editor displays the ASCII-character equivalent of the number you
  4402. choose, in place of each trailing space. For example, invoke the %@AI@%Arg textarg%@AE@%
  4403. %@AI@%Assign%@AE@% command in which %@AI@%textarg%@AE@% is %@AS@%traildisp:1%@AE@%.%@NL@%
  4404. %@NL@%
  4405. %@CR:MSE72705@%%@4@%The example above displays the ASCII equivalent of the number 1 in place of%@EH@%
  4406. each trailing space. To restore normal display, set %@AB@%traildisp%@AE@% back to 0.%@NL@%
  4407. %@NL@%
  4408. %@NL@%
  4409. %@CR:MSE72800@%%@3@%%@AB@%7.2.8  Changing Screen Height%@AE@%%@EH@%%@NL@%
  4410. %@NL@%
  4411. %@CR:MSE72801@%%@4@%Change the screen height by setting the %@AB@%height%@AE@% switch. This switch takes%@EH@%
  4412. only a few values that are limited by the kind of graphics adapter card you
  4413. are using:%@NL@%
  4414. %@NL@%
  4415. %@CR:MSE72802@%%@AB@%Graphics Card               Legal Values%@AE@%%@NL@%
  4416. %@NL@%
  4417. CGA or monochrome           23  (25-line mode)%@NL@%
  4418. %@NL@%
  4419. EGA                         23  (25-line mode) 41  (43-line mode)%@NL@%
  4420. %@NL@%
  4421. VGA                         23  (25-line mode) 41  (43-line mode) 48%@NL@%
  4422.                             (50-line mode)%@NL@%
  4423. %@NL@%
  4424. %@CR:MSE72803@%%@4@%Note that you assign to %@AB@%height%@AE@% a number two less than the desired mode. That%@EH@%
  4425. is because %@AB@%height%@AE@% refers to the height of the editing window, not the full
  4426. screen. (Two lines at the bottom of the screen are reserved for dialog and
  4427. status.)%@NL@%
  4428. %@NL@%
  4429. %@NL@%
  4430. %@CR:MSE73000@%%@2@%%@AB@%7.3  Special Syntax for Text Switches%@AE@%%@EH@%%@NL@%
  4431. %@NL@%
  4432. %@CR:MSE73001@%%@4@%The following text switches recognize special characters for referring to%@EH@%
  4433. file names or directories:%@NL@%
  4434. %@NL@%
  4435. %@CR:MSE73002@%  ■  %@AB@%extmake%@AE@%, which can be repeatedly assigned to different compilation%@NL@%
  4436.      commands%@NL@%
  4437. %@NL@%
  4438.   ■  %@AB@%readonly%@AE@%, which gives a system-level command, executed whenever you%@NL@%
  4439.      attempt to overwrite a read-only file%@NL@%
  4440. %@NL@%
  4441.   ■  %@AB@%load%@AE@%, which loads a C extension as described in Chapter 8%@BO:   3fbeb@%%@NL@%
  4442. %@NL@%
  4443.   ■  %@AB@%markfile%@AE@%, which loads file markers from a specially prepared file%@NL@%
  4444. %@NL@%
  4445.   ■  %@AB@%helpfiles%@AE@%, which specifies which .HLP files should be used by on-line%@NL@%
  4446.      Help%@NL@%
  4447. %@NL@%
  4448. %@CR:MSE73003@%%@4@%This syntax presented in the next two sections is never required, but is%@EH@%
  4449. provided for convenience.%@NL@%
  4450. %@NL@%
  4451. %@NL@%
  4452. %@CR:MSE73100@%%@3@%%@AB@%7.3.1  Special Syntax for extmake and readonly%@AE@%%@EH@%%@NL@%
  4453. %@NL@%
  4454. %@CR:MSE73101@%%@4@%The text switches %@AB@%extmake%@AE@% and %@AB@%readonly%@AE@% each interpret the following%@EH@%
  4455. characters as the name of the current file:%@NL@%
  4456. %@NL@%
  4457.      %@AB@%%s%@AE@%%@NL@%
  4458. %@NL@%
  4459. %@CR:MSE73103@%%@4@%You can also use a more comprehensive syntax that lets you specify drive,%@EH@%
  4460. file name, base name, or file extension. The syntax consists of the
  4461. characters%@NL@%
  4462. %@NL@%
  4463.      %@AB@%%|%@AE@%%@AI@%letters%@AE@%%@AB@%F%@AE@%%@NL@%
  4464. %@NL@%
  4465. %@CR:MSE73105@%%@4@%where %@AI@%letters%@AE@% consists of any of the following: p for path, d for drive, f%@EH@%
  4466. for file base name, or e for file extension. For example, if you are editing
  4467. the file c:\dir1\sample.c, and you make the switch assignment%@NL@%
  4468. %@NL@%
  4469.      extmake:c cl /Fod:%|pfF %|dfeF%@NL@%
  4470. %@NL@%
  4471. %@CR:MSE73106@%%@4@%then each time you give the command %@AI@%Arg Compilation%@AE@%, the editor performs the%@EH@%
  4472. following system-level command:%@NL@%
  4473. %@NL@%
  4474.      cl /Fod:\dir1\sample c:sample.c%@NL@%
  4475. %@NL@%
  4476. %@CR:MSE73107@%%@4@%The expression %@AS@%%s%@AE@% is equivalent to %@AS@%%|feF%@AE@% except that the former is only%@EH@%
  4477. accepted once in each assignment, whereas the latter can appear any number
  4478. of times in the %@AB@%extmake%@AE@% switch assignment. The expression %@AS@%%|F%@AE@% is equivalent
  4479. to %@AS@%%|dpfeF%@AE@%.%@NL@%
  4480. %@NL@%
  4481. %@NL@%
  4482. %@CR:MSE73200@%%@3@%%@AB@%7.3.2  Special Syntax for load, markfile, and helpfiles%@AE@%%@EH@%%@NL@%
  4483. %@NL@%
  4484. %@CR:MSE73201@%%@4@%The %@AB@%load%@AE@%, %@AB@%markfile%@AE@%, and %@AB@%helpfiles%@AE@% switches each search for a file. These%@EH@%
  4485. switches can also take the syntax%@NL@%
  4486. %@NL@%
  4487.      %@AB@%$%@AE@%%@AI@%environ%@AE@%%@AB@%:%@AE@%%@NL@%
  4488. %@NL@%
  4489. %@CR:MSE73203@%%@4@%in which %@AI@%environ%@AE@% is the name of an environment variable recognized by the%@EH@%
  4490. operating system. The editor will search directories listed in the
  4491. environment variable to find the file. Environment variables are created
  4492. with the system-level SET command. See your operating-system documentation
  4493. for more information on the SET command.%@NL@%
  4494. %@NL@%
  4495. %@CR:MSE73204@%%@4@%For example, the following assignment causes the editor to search%@EH@%
  4496. directories in the INIT environment variable for the file MARKERS.DAT:%@NL@%
  4497. %@NL@%
  4498.      markfile:$INIT:markers.dat%@NL@%
  4499. %@NL@%
  4500. %@CR:MSE73205@%%@4@%Note that the environment variable should be entered in uppercase letters.%@EH@%%@NL@%
  4501. %@NL@%
  4502. %@NL@%
  4503. %@CR:MSE74000@%%@2@%%@AB@%7.4  Sample TOOLS.INI File%@AE@%%@EH@%%@NL@%
  4504. %@NL@%
  4505. %@CR:MSE74001@%%@4@%Each time you start the editor, it checks the [M] section of the TOOLS.INI%@EH@%
  4506. file for any function assignments, switch assignments, and macro definitions
  4507. you have placed there. (However, the editor may check a different section if
  4508. the editor is not named M.EXE.)%@NL@%
  4509. %@NL@%
  4510. %@CR:MSE74002@%%@4@%You can change these settings at any time during the editing session by%@EH@%
  4511. using the %@AI@%Assign%@AE@% command. However, using TOOLS.INI is more convenient for
  4512. settings you want to use every time. Use TOOLS.INI to make the editor
  4513. automatically start up with all the screen colors, tab behavior, function
  4514. assignments, and special editing functions you want to make available for
  4515. all editing sessions.%@NL@%
  4516. %@NL@%
  4517. %@CR:MSE74003@%%@4@%The editor loads settings from TOOLS.INI when it starts and when you invoke%@EH@%
  4518. the %@AI@%Initialize%@AE@% function (SHIFT+F8) during the editing session. By giving a
  4519. text argument, you can also use %@AI@%Initialize%@AE@% to load specific sections within
  4520. TOOLS.INI.%@NL@%
  4521. %@NL@%
  4522. ───────────────────────────────────────────────────────────────────────────%@NL@%
  4523. %@AI@%NOTE%@AE@%%@NL@%
  4524.    The editor checks the directories listed in the INIT environment variable%@NL@%
  4525.    for the location of the TOOLS.INI file. For example, if the TOOLS.INI%@NL@%
  4526.    file is in the directory %@AI@%C:\BIN%@AE@%, place the following statement in your%@NL@%
  4527.    AUTOEXEC.BAT file: %@AS@%SET INIT=C:\BIN.%@AE@%%@NL@%
  4528. ───────────────────────────────────────────────────────────────────────────%@NL@%
  4529. %@NL@%
  4530. %@CR:MSE74004@%%@4@%The example below shows a sample TOOLS.INI file. The next section explains%@EH@%
  4531. each section of this file in depth. Note that text following the semicolon
  4532. (;) is a comment.%@NL@%
  4533. %@NL@%
  4534.      [M MEP]                       %@AI@%; Settings for both M and MEP%@AE@%%@NL@%
  4535. %@NL@%
  4536.              enterinsmode:         %@AI@%; Start up in insert mode%@AE@%%@NL@%
  4537.              backup:none           %@AI@%; Perform no backup%@AE@%%@NL@%
  4538.              displaycursor:        %@AI@%; Display cursor on status line%@AE@%%@NL@%
  4539.              fgcolor:17            %@AI@%; Set primary and error colors%@AE@%%@NL@%
  4540.              errcolor:04%@NL@%
  4541. %@NL@%
  4542.              join:=savecur endline right arg sdelete savecur   %@AI@%; Macro%@AE@%%@NL@%
  4543. %@NL@%
  4544.              savecur:ctrl+f5       %@AI@%; Assignments to keys%@AE@%%@NL@%
  4545.              restcur:ctrl+f6%@NL@%
  4546.              join:alt+j%@NL@%
  4547. %@NL@%
  4548.      [M-C MEP-C]                   %@AI@%; C specific section - enable with Initialize%@AE@%%@NL@%
  4549. %@NL@%
  4550.              tabstops:3            %@AI@%; Tab columns 3 wide within editor%@AE@%%@NL@%
  4551.              case:                 %@AI@%; Case-sensitive searches%@AE@%%@NL@%
  4552. %@NL@%
  4553.      [NMAKE]%@NL@%
  4554. %@NL@%
  4555.      #  This is a comment line recognized by NMAKE%@NL@%
  4556. %@NL@%
  4557. %@NL@%
  4558. %@CR:MSE75000@%%@2@%%@AB@%7.5  The Structure of the TOOLS.INI File%@AE@%%@EH@%%@NL@%
  4559. %@NL@%
  4560. %@CR:MSE75001@%%@4@%To create a TOOLS.INI file for the editor, you need to follow a few simple%@EH@%
  4561. rules:%@NL@%
  4562. %@NL@%
  4563. %@CR:MSE75002@%  1. You must precede your editor settings by a tag, or they will not be%@NL@%
  4564.      recognized. A "tag" is a heading within the TOOLS.INI file that divides%@NL@%
  4565.      the file into sections.%@NL@%
  4566. %@NL@%
  4567.      For example, you can use tags to create a section for the editor ([M]%@NL@%
  4568.      or [MEP], unless you have renamed the editor) and a section for another%@NL@%
  4569.      utility such as NMAKE, which looks for a section headed by the [NMAKE]%@NL@%
  4570.      tag. Each utility has its own syntax for interpreting TOOLS.INI%@NL@%
  4571.      statements, but all utilities must recognize tags. See the %@AI@%Microsoft%@AE@%%@NL@%
  4572.      %@AI@%CodeView and Utilities User's Guide%@AE@% for more information on NMAKE.%@NL@%
  4573. %@NL@%
  4574.   2. A semicolon (%@AB@%;%@AE@%) indicates that all text from the semicolon to the end%@NL@%
  4575.      of the line is a comment, and is ignored by the editor. To mark the%@NL@%
  4576.      beginning of a comment, a semicolon must either appear at the beginning%@NL@%
  4577.      of a line or be preceded by a space.%@NL@%
  4578. %@NL@%
  4579.   3. All macro definitions, function assignments, and switch assignments use%@NL@%
  4580.      exactly the same syntax used with the %@AI@%Assign%@AE@% command.%@NL@%
  4581. %@NL@%
  4582.      However, you do not invoke %@AI@%Arg%@AE@% or %@AI@%Assign%@AE@%; simply enter the assignment%@NL@%
  4583.      itself. (See the sample TOOLS.INI file for clarification.)%@NL@%
  4584. %@NL@%
  4585.   4. You can use the backslash (%@AB@%\%@AE@%) as a line-continuation character to%@NL@%
  4586.      continue  statements too long for one line. The backslash must be%@NL@%
  4587.      preceded by a space and can be followed only by trailing spaces and an%@NL@%
  4588.      optional comment. Normally, you should precede the backslash by two%@NL@%
  4589.      spaces.%@NL@%
  4590. %@NL@%
  4591. %@CR:MSE75003@%%@4@%The next few sections explain each part of the file──tags, comments, and%@EH@%
  4592. assignments.%@NL@%
  4593. %@NL@%
  4594. %@NL@%
  4595. %@CR:MSE75100@%%@3@%%@AB@%7.5.1  Creating Sections with Tags%@AE@%%@EH@%%@NL@%
  4596. %@NL@%
  4597. %@CR:MSE75101@%%@4@%Tags divide the TOOLS.INI file into sections.  All statements are associated%@EH@%
  4598. only with the tag they immediately follow. This feature allows programs
  4599. other than the Microsoft Editor to use this file for configuration
  4600. information. The most common way to use a tag is to simply include all
  4601. assignments and macro definitions after an M or MEP tag (depending on the
  4602. name of the editor):%@NL@%
  4603. %@NL@%
  4604.      [M]%@NL@%
  4605. %@NL@%
  4606. %@CR:MSE75103@%%@4@%When you run the Microsoft Editor under DOS 2.%@AI@%x%@AE@%, the editor always responds%@EH@%
  4607. to the tag [M]. Otherwise, the tag should use the base file name of the
  4608. editor. If the editor is named MEP.EXE, use the tag [MEP]. Use [M MEP] if
  4609. you have both M.EXE and MEP.EXE.%@NL@%
  4610. %@NL@%
  4611. ───────────────────────────────────────────────────────────────────────────%@NL@%
  4612. %@AI@%IMPORTANT%@AE@%%@NL@%
  4613.    The name you use for the main editor tag should appear in all other%@NL@%
  4614.    editor tags as well. For example, if the main editor tag is [EDIT]%@NL@%
  4615.    (because you renamed the editor to EDIT.EXE), all editor tags should%@NL@%
  4616.    begin with the word EDIT. Instead of using [M-3.20], you would use%@NL@%
  4617.    [EDIT-3.20].%@NL@%
  4618. ───────────────────────────────────────────────────────────────────────────%@NL@%
  4619. %@NL@%
  4620. %@CR:MSE75104@%%@4@%When the Microsoft Editor is started, the tagged sections are loaded in the%@EH@%
  4621. following order:%@NL@%
  4622. %@NL@%
  4623. %@CR:MSE75105@%  1. Information used for all editing sessions.%@NL@%
  4624. %@NL@%
  4625.      All of the statements in the [M] section are loaded. Remember to use a%@NL@%
  4626.      different tag if you rename the editor.%@NL@%
  4627. %@NL@%
  4628.   2. Information specific to the operating system.%@NL@%
  4629. %@NL@%
  4630.      Depending upon the operating system you are running, one of the%@NL@%
  4631.      following tagged sections is loaded (if present):%@NL@%
  4632. %@NL@%
  4633.        ■  [M-3.20] (MS-DOS)%@NL@%
  4634.        ■  [M-10.0] (OS/2 protected mode)%@NL@%
  4635.        ■  [M-10.0R] (OS/2 real mode)%@NL@%
  4636. %@NL@%
  4637.      With the DOS or OS/2 version tag, you should insert the version number%@NL@%
  4638.      you are using. (OS/2 1.10 uses the tag 10.10.) You can combine%@NL@%
  4639.      operating-system tags by grouping them together within the brackets:%@NL@%
  4640. %@NL@%
  4641.           [M-3.20 M-3.30]                      %@AI@%; For DOS versions%@AE@%%@NL@%
  4642.           [MEP-10.0 MEP-10.10]                 %@AI@%; For OS/2 versions%@AE@%%@NL@%
  4643.           [M-3.20 M-3.30 M-10.0R M-10.10R]     %@AI@%; For real mode%@AE@%%@NL@%
  4644. %@NL@%
  4645.   3. Information specific to the display.%@NL@%
  4646. %@NL@%
  4647.      Depending on the video display you are using, one of the following%@NL@%
  4648.      tagged sections is loaded (if present):%@NL@%
  4649. %@NL@%
  4650.        ■  [M-mono]%@NL@%
  4651.        ■  [M-cga]%@NL@%
  4652.        ■  [M-ega]%@NL@%
  4653.        ■  [M-vga]%@NL@%
  4654. %@NL@%
  4655.      You can also put statements for setting the screen dimensions and%@NL@%
  4656.      colors in these tagged sections.%@NL@%
  4657. %@NL@%
  4658.      All tags can be combined so one section of statements applies to more%@NL@%
  4659.      than one tag:%@NL@%
  4660. %@NL@%
  4661.         %@AS@%[M-mono M-cga MEP-mono MEP-cga]%@AE@%%@NL@%
  4662. %@NL@%
  4663.      The example above begins a section that is loaded if your computer has%@NL@%
  4664.      either a monochrome adapter or a CGA adapter.%@NL@%
  4665. %@NL@%
  4666. %@CR:MSE75106@%%@4@%You can also create a tag with statements specific to a file extension. The%@EH@%
  4667. form is%@NL@%
  4668. %@NL@%
  4669.      [M-%@AI@%.ext%@AE@%]%@NL@%
  4670. %@NL@%
  4671. %@CR:MSE75107@%%@4@%where .%@AI@%ext%@AE@% is an extension of up to three characters. Whenever you load a%@EH@%
  4672. new file, or switch to editing a different file, the editor automatically
  4673. searches TOOLS.INI for a tag that matches the new file extension. If it
  4674. finds a matching tag, the statements following that tag are executed. If
  4675. not, the existing configuration is retained.%@NL@%
  4676. %@NL@%
  4677. %@CR:MSE75108@%%@4@%This feature can be used to create operating environments that are specific%@EH@%
  4678. to a particular type of text file or programming language. For example, the
  4679. tag %@AS@%[M-.FOR]%@AE@% could precede a set of statements for editing .FOR (FORTRAN)
  4680. files:  a blue background, the right margin at column 72, and tabs set every
  4681. three columns. C-language files with the .C extension could have their own
  4682. set of statements following a %@AS@%[M-.C]%@AE@% tag: a magenta background, the right
  4683. margin at column 128, and tabs set every five columns.%@NL@%
  4684. %@NL@%
  4685. %@CR:MSE7510A@%%@4@%You can also use a tag to create a special section that is loaded manually%@EH@%
  4686. with the %@AI@%Arg textarg Initialize%@AE@% command. These tags use the following
  4687. syntax:%@NL@%
  4688. %@NL@%
  4689.      [M-%@AI@%textarg%@AE@%]%@NL@%
  4690. %@NL@%
  4691. %@CR:MSE7510C@%%@4@%This feature lets you make special key assignments, load rarely used macros,%@EH@%
  4692. or switch the operating environment to a special configuration, only when
  4693. required.%@NL@%
  4694. %@NL@%
  4695. %@NL@%
  4696. %@CR:MSE75200@%%@3@%%@AB@%7.5.2  Using Comments%@AE@%%@EH@%%@NL@%
  4697. %@NL@%
  4698. %@CR:MSE75201@%%@4@%The Microsoft Editor considers text from a semicolon (;) to the end of a%@EH@%
  4699. line to be a comment. Comments are for documentation purposes only and are
  4700. ignored by the editor.%@NL@%
  4701. %@NL@%
  4702. %@CR:MSE75202@%%@4@%To be considered part of a comment, the semicolon must either appear at the%@EH@%
  4703. beginning of a line or else be preceded by a space. Thus, in the following
  4704. line, the first semicolon is considered part of a command, and the second
  4705. begins a comment:%@NL@%
  4706. %@NL@%
  4707.      extmake:asm masm /Zi /MX %s; %@AI@%; "Compile" setting for MASM%@AE@%%@NL@%
  4708. %@NL@%
  4709. %@CR:MSE75203@%%@4@%Semicolons inside a quoted string do not begin a comment.%@EH@%%@NL@%
  4710. %@NL@%
  4711. %@NL@%
  4712. %@CR:MSE75300@%%@3@%%@AB@%7.5.3  Line Continuation%@AE@%%@EH@%%@NL@%
  4713. %@NL@%
  4714. %@CR:MSE75301@%%@4@%Use the backslash (%@AB@%\%@AE@%) to continue a long macro definition to the next line.%@EH@%
  4715. To be interpreted as the line-continuation character, the backslash must be
  4716. preceded by a space. It should be the last character on the line except for
  4717. spaces and comments. The editor does not interpret the backslash as the
  4718. line-continuation char-acter in the following statement:%@NL@%
  4719. %@NL@%
  4720.      qreplace:ctrl+\%@NL@%
  4721. %@NL@%
  4722. %@CR:MSE75302@%%@4@%The following statement illustrates valid use of line continuation:%@EH@%%@NL@%
  4723. %@NL@%
  4724.      findswitch:=psearch ->skip arg mark :>skip arg "<assign>"  \%@NL@%
  4725.                  setfile begfile psearch%@NL@%
  4726. %@NL@%
  4727. %@CR:MSE75303@%%@4@%Note that the backslash should be followed by at least two spaces, unless%@EH@%
  4728. you want the end of one line to be concatenated without a break to the
  4729. beginning of the next. In the example above, two spaces are necessary to
  4730. prevent the editor from viewing %@AS@%"<assign>"setfile%@AE@% as one item.%@NL@%
  4731. %@NL@%
  4732. %@CR:MSE75304@%%@4@%You can use line continuation to extend a single assignment statement over%@EH@%
  4733. several lines.%@NL@%
  4734. %@NL@%
  4735. %@NL@%
  4736. %@CR:MSE75400@%%@3@%%@AB@%7.5.4  Assignments and Macros%@AE@%%@EH@%%@NL@%
  4737. %@NL@%
  4738. %@CR:MSE75401@%%@4@%Function assignments, switch assignments, and macro definitions all use the%@EH@%
  4739. same syntax within the TOOLS.INI file as they do with the %@AI@%Arg textarg Assign%@AE@%
  4740. command. The only difference is you do not need to invoke the %@AI@%Arg%@AE@% or %@AI@%Assign%@AE@%
  4741. functions.%@NL@%
  4742. %@NL@%
  4743. %@CR:MSE75402@%%@4@%The TOOLS.INI file is convenient for defining complicated macros, especially%@EH@%
  4744. nested macros. By placing macro definitions in the TOOLS.INI file, you can
  4745. view how you wrote a macro. Furthermore, you can easily modify a macro that
  4746. doesn't work correctly by loading the TOOLS.INI file, making changes to your
  4747. macro definitions, and reinitializing.%@NL@%
  4748. %@NL@%
  4749. %@CR:MSE75403@%%@4@%If you customized your copy of the Microsoft Editor when you installed it, a%@EH@%
  4750. special TOOLS.INI was created that contains the special key assignments.
  4751. This TOOLS.INI file also contains a number of useful macros from the
  4752. TOOLS.PRE file. You may want to study TOOLS.PRE to see how macros are
  4753. entered and which macros might be useful to you.%@NL@%
  4754. %@NL@%
  4755. %@CR:MSE75404@%%@4@%Use the %@AI@%Initialize%@AE@% function (SHIFT+F8) to reload your TOOLS.INI settings.%@EH@%
  4756. When you give the %@AI@%Initialize%@AE@% function a %@AI@%textarg%@AE@%, it attempts to use settings
  4757. from the following section:%@NL@%
  4758. %@NL@%
  4759.      [M-%@AI@%textarg%@AE@%]%@NL@%
  4760. %@NL@%
  4761. %@CR:MSE75406@%%@4@%However, when you invoke %@AI@%Initialize%@AE@% with no argument, the editor reloads%@EH@%
  4762. settings in the TOOLS.INI file in the same way that it does on start-up.%@NL@%
  4763. %@NL@%
  4764. %@CR:MSE75407@%%@4@%You can create a macro to be executed whenever the editor starts up. Simply%@EH@%
  4765. define a macro and assign it the name %@AS@%autostart%@AE@%. For example, when you place
  4766. the following macro in the [M] section of the TOOLS.INI file, the editor
  4767. transfers to the Clipboard and returns, thus making the Clipboard the
  4768. previous file:%@NL@%
  4769. %@NL@%
  4770.      autostart:=arg "<clipboard>" setfile setfile%@NL@%
  4771. %@NL@%
  4772. %@NL@%
  4773. %@CR:MSE76000@%%@2@%%@AB@%7.6  Configuring On-Line Help%@AE@%%@EH@%%@NL@%
  4774. %@NL@%
  4775. %@CR:MSE76001@%%@4@%The installation program for your Microsoft language is the recommended%@EH@%
  4776. method for configuring on-line Help. The procedure varies, depending on
  4777. whether you use OS/2 (supporting protected mode and real mode) or DOS (real
  4778. mode only).%@NL@%
  4779. %@NL@%
  4780. %@CR:MSE76002@%  1. If you are running under DOS or real-mode OS/2 only, copy the M.HLP and%@NL@%
  4781.      MHELP.MXT files to any directory specified in the PATH environment%@NL@%
  4782.      variable in your AUTOEXEC.BAT file (DOS) or STARTUP.CMD file (OS/2).%@NL@%
  4783. %@NL@%
  4784.   2. If you are running under protected-mode OS/2 only, copy the M.HLP and%@NL@%
  4785.      MHELP.PXT files to any directory specified in the PATH environment%@NL@%
  4786.      variable. Also copy MSHELP.DLL to any directory listed in the LIBPATH%@NL@%
  4787.      variable in the CONFIG.SYS file. MHELP.DLL is an extension to the%@NL@%
  4788.      editor. MSHELP.DLL is a support library that implements the standard%@NL@%
  4789.      Microsoft Help engine.%@NL@%
  4790. %@NL@%
  4791.   3. If you are setting up for both real- and protected-mode OS/2, perform%@NL@%
  4792.      both the preceding steps.%@NL@%
  4793. %@NL@%
  4794. %@CR:MSE76003@%%@4@%Other Microsoft products include .HLP files that the Microsoft Editor can%@EH@%
  4795. read. If you want to add additional .HLP files to Help, you need to include
  4796. the following tagged section in your TOOLS.INI file:%@NL@%
  4797. %@NL@%
  4798.      [M-MHELP.MXT MEP-MHELP.MXT]%@NL@%
  4799.      helpfiles:%@AI@%path%@AE@%\%@AI@%file.hlp%@AE@%%@NL@%
  4800. %@NL@%
  4801. %@CR:MSE76004@%%@4@%in which %@AI@%path%@AE@% is the directory of the Help file. The tag [M-MHELP.MXT%@EH@%
  4802. MEP-MHELP.MXT] is the heading for the section in the TOOLS.INI file executed
  4803. whenever Help is loaded. If this section is missing, the editor looks for
  4804. the file M.HLP in your PATH directories. To install more than one Help file,
  4805. you must have this tagged section in TOOLS.INI.%@NL@%
  4806. %@NL@%
  4807. %@CR:MSE76005@%%@4@%Whenever you use context-sensitive Help, the editor searches the files%@EH@%
  4808. specified in the %@AB@%helpfiles%@AE@% switch in the order listed. The search is slower
  4809. if the topics you most often inquire about are in files at the end of the
  4810. list. You can alter the %@AB@%helpfiles%@AE@% switch at any time with the %@AI@%Assign%@AE@%
  4811. command.%@NL@%
  4812. %@NL@%
  4813. %@NL@%
  4814. %@CR:MSE76100@%%@3@%%@AB@%7.6.1  Controlling Search Order%@AE@%%@EH@%%@NL@%
  4815. %@NL@%
  4816. %@CR:MSE76101@%%@4@%Context-sensitive Help searches all the Help files for the selected topic.%@EH@%
  4817. The order in which files are searched is important. Two different Help files
  4818. may have an entry for the same topic. Furthermore, searching the appropriate
  4819. file first speeds up Help.%@NL@%
  4820. %@NL@%
  4821. %@CR:MSE76102@%%@4@%You can use the file extension of the current file to change the order in%@EH@%
  4822. which .HLP files are searched. Precede files specified in the %@AB@%helpfiles%@AE@%
  4823. switch by a file extension and a colon (:):%@NL@%
  4824. %@NL@%
  4825.      helpfiles: M.HLP .BAS:QB.HLP .C.H:C.HLP .ASM:OS2.HLP%@NL@%
  4826. %@NL@%
  4827. %@CR:MSE76103@%%@4@%In the example above, Help searches QB.HLP first when the current file has a%@EH@%
  4828. .BAS extension, C.HLP when the current file has a .C or .H extension, and
  4829. OS2.HLP when the current file has a .ASM extension. In all cases, all of the
  4830. files listed are searched before Help concludes it cannot find a topic.%@NL@%
  4831. %@NL@%
  4832. %@NL@%
  4833. %@CR:MSE76200@%%@3@%%@AB@%7.6.2  Default Help File Search%@AE@%%@EH@%%@NL@%
  4834. %@NL@%
  4835. %@CR:MSE76201@%%@4@%The editor looks for .HLP files according to the following rules:%@EH@%%@NL@%
  4836. %@NL@%
  4837. %@CR:MSE76202@%  1. If the %@AB@%helpfiles%@AE@% switch is set, the editor uses the files specified in%@NL@%
  4838.      this switch.%@NL@%
  4839. %@NL@%
  4840.   2. If %@AB@%helpfiles%@AE@% is not set, the editor checks next to see if the HELPFILES%@NL@%
  4841.      environment variable is set. If it is, this environment variable is%@NL@%
  4842.      evaluated the same way the %@AB@%helpfiles%@AE@% switch is.%@NL@%
  4843. %@NL@%
  4844.   3. If neither the %@AB@%helpfiles%@AE@% switch nor the HELPFILES environment variable%@NL@%
  4845.      is set, the editor searches for the file M.HLP. The editor finds M.HLP%@NL@%
  4846.      if this file is in a directory listed in the PATH environment variable.%@NL@%
  4847. %@NL@%
  4848. %@NL@%
  4849. %@CR:MSE80000@%%@1@%%@AB@%Chapter 8  Programming C Extensions%@AE@%%@EH@%%@NL@%
  4850. ───────────────────────────────────────────────────────────────────────────%@NL@%
  4851. %@NL@%
  4852. %@CR:MSE80001@%%@4@%C extensions provide the most powerful means of customizing the Microsoft%@EH@%
  4853. Editor. A "C extension" is a C-language module containing new editing
  4854. functions you program. Your functions can be attached to a key, given
  4855. arguments, or used in macros just as standard editing functions are. The
  4856. module can also define new switches. The user can adjust these switches to
  4857. modify the behavior of your functions.%@NL@%
  4858. %@NL@%
  4859. %@CR:MSE80002@%%@4@%With C extensions, you can use the power of the C language──data structures,%@EH@%
  4860. control-flow structures, and C operators. Furthermore, C extensions are much
  4861. faster than macros because they are compiled.%@NL@%
  4862. %@NL@%
  4863. ───────────────────────────────────────────────────────────────────────────%@NL@%
  4864. %@AI@%NOTE%@AE@%%@NL@%
  4865.    This chapter assumes you already know how to program in C. Before you%@NL@%
  4866.    read the chapter, make sure you understand the following C-language%@NL@%
  4867.    programming concepts: functions, pointers, structures, and unions. You%@NL@%
  4868.    also need to know how to compile and link a C source file.%@NL@%
  4869.    You can also write extensions with the Microsoft Macro Assembler if you%@NL@%
  4870.    simulate the C memory model specified in Section 8.5.1%@BO:   4ab20@%, "Compiling and%@NL@%
  4871.    Linking in Real Mode." However, this chapter is primarily addressed to C%@NL@%
  4872.    programmers.%@NL@%
  4873. ───────────────────────────────────────────────────────────────────────────%@NL@%
  4874. %@NL@%
  4875. %@CR:MSE80003@%%@4@%This chapter gradually develops concepts for writing C extensions. The first%@EH@%
  4876. time you read the chapter, read the sections in order. The chapter first
  4877. describes requirements for writing C extensions and explains how C
  4878. extensions work. It then explains how to create the required objects in a C
  4879. extension, to program your editing functions, to compile and link your
  4880. module, and to use the editor's low-level functions to read and write to
  4881. files.%@NL@%
  4882. %@NL@%
  4883. %@NL@%
  4884. %@CR:MSE81000@%%@2@%%@AB@%8.1  Requirements%@AE@%%@EH@%%@NL@%
  4885. %@NL@%
  4886. %@CR:MSE81001@%%@4@%To create C extensions, you need to have the following files and software%@EH@%
  4887. present in your current directory (or directories listed in the PATH or
  4888. INCLUDE environment variables, as appropriate):%@NL@%
  4889. %@NL@%
  4890. %@CR:MSE81002@%  ■  The Microsoft C Optimizing Compiler, Version 5.1 or later. You can use%@NL@%
  4891.      Version 4.0 or 5.0 of the compiler, but the files you need are provided%@NL@%
  4892.      with Version 5.1 and later. You also get these files with the Microsoft%@NL@%
  4893.      Macro Assembler, Version 5.1 and later.%@NL@%
  4894. %@NL@%
  4895.   ■  The Microsoft Overlay Linker, Version 3.60 or later; the OS/2 version%@NL@%
  4896.      of the linker; or the Microsoft Segmented-Executable Linker, Version%@NL@%
  4897.      5.01.%@NL@%
  4898. %@NL@%
  4899.   ■  EXTHDR.OBJ (supplied with the C compiler) or EXTHDRP.OBJ (a file%@NL@%
  4900.      supplied with the C compiler for creating protected-mode extensions).%@NL@%
  4901. %@NL@%
  4902.   ■  EXT.H (supplied with the C compiler).%@NL@%
  4903. %@NL@%
  4904.   ■  SKEL.C (a template supplied with the C compiler you can replace with%@NL@%
  4905.      your own code).%@NL@%
  4906. %@NL@%
  4907. %@CR:MSE81003@%%@4@%You need a minimum of 220K of available memory for the editor to load a C%@EH@%
  4908. extension at run time, plus the size of the extension itself.%@NL@%
  4909. %@NL@%
  4910. %@NL@%
  4911. %@CR:MSE82000@%%@2@%%@AB@%8.2  How C Extensions Work%@AE@%%@EH@%%@NL@%
  4912. %@NL@%
  4913. %@CR:MSE82001@%%@4@%A C-extension module is similar in the following respects to an OS/2 or%@EH@%
  4914. Windows dynamic-link library:%@NL@%
  4915. %@NL@%
  4916. %@CR:MSE82002@%  ■  There is no function called %@AB@%main%@AE@% in your module. Instead, you use%@NL@%
  4917.      certain names and structures the editor recognizes.%@NL@%
  4918. %@NL@%
  4919.   ■  You compile and link to create an executable file, but this executable%@NL@%
  4920.      file is separate from the "main program," M.EXE or MEP.EXE.%@NL@%
  4921. %@NL@%
  4922.   ■  The editor loads your executable file into memory at run time and uses%@NL@%
  4923.      a table-driven method for enabling your module to call functions within%@NL@%
  4924.      the editor.%@NL@%
  4925. %@NL@%
  4926. %@CR:MSE82003@%%@4@%Once your executable file is loaded, it resides in memory along with the%@EH@%
  4927. editor. The editor can call your functions, and your functions can call the
  4928. Microsoft Editor's low-level functions that perform input and output
  4929. operations.%@NL@%
  4930. %@NL@%
  4931. %@CR:MSE82004@%%@4@%The following list summarizes the process of developing and using a C%@EH@%
  4932. extension:%@NL@%
  4933. %@NL@%
  4934. %@CR:MSE82005@%  1. Compile a C module with a special memory-model option, then link the%@NL@%
  4935.      resulting object file to create an executable file.%@NL@%
  4936. %@NL@%
  4937.      You also link in the object file EXTHDR.OBJ  (or EXTHDRP.OBJ, if%@NL@%
  4938.      linking for protected mode) to the beginning of your executable file.%@NL@%
  4939.      This object file contains a special table that enables your functions%@NL@%
  4940.      to effectively call functions within the editor.%@NL@%
  4941. %@NL@%
  4942.   2. Start up the Microsoft Editor. Set the %@AB@%load%@AE@% switch  to look for the%@NL@%
  4943.      executable file you created. (As discussed in Chapter 7%@BO:   3396c@%, the %@AB@%load%@AE@%%@NL@%
  4944.      switch can be set in the TOOLS.INI file or manually with the %@AI@%Assign%@AE@%%@NL@%
  4945.      function.)%@NL@%
  4946. %@NL@%
  4947.      The editor loads your executable file into memory.%@NL@%
  4948. %@NL@%
  4949.   3. As soon as the executable file is loaded, the Microsoft Editor calls%@NL@%
  4950.      the function %@AB@%WhenLoaded%@AE@%──a special function your module must define.%@NL@%
  4951.      At the same time, the editor examines the table %@AB@%cmdTable%@AE@%, which is an%@NL@%
  4952.      array of structures your module must declare. The editor examines this%@NL@%
  4953.      table to recognize the editing functions you created. The table%@NL@%
  4954.      contains function names and pointers to functions.%@NL@%
  4955. %@NL@%
  4956.   4. You can assign keys to call your functions. Assign a key manually or in%@NL@%
  4957.      the %@AB@%WhenLoaded%@AE@% function, then press the assigned key. You can also call%@NL@%
  4958.      an editing function indirectly by placing it in a macro and calling the%@NL@%
  4959.      macro.%@NL@%
  4960. %@NL@%
  4961.   5. When you invoke a C-extension function, the editor responds by calling%@NL@%
  4962.      your module.%@NL@%
  4963. %@NL@%
  4964.   6. Your editing function is executed. It calls the Microsoft Editor's%@NL@%
  4965.      low-level functions to read from the text file, read output to the text%@NL@%
  4966.      file, and print messages.%@NL@%
  4967. %@NL@%
  4968. %@NL@%
  4969. %@CR:MSE83000@%%@2@%%@AB@%8.3  Writing a C Extension%@AE@%%@EH@%%@NL@%
  4970. %@NL@%
  4971. %@CR:MSE83001@%%@4@%To create a successful C extension, you need to follow these guidelines:%@EH@%%@NL@%
  4972. %@NL@%
  4973. %@CR:MSE83002@%  1. Include the file EXT.H.%@NL@%
  4974. %@NL@%
  4975.      This file declares all structures and types required to establish an%@NL@%
  4976.      interface to the editor.%@NL@%
  4977. %@NL@%
  4978.   2. Include the standard items that are described in Section 8.3.1%@BO:   41aca@%,%@NL@%
  4979.      "Required Objects," and write your functions by following the steps in%@NL@%
  4980.      Section 8.4%@BO:   45aeb@%, "Programming Your Function." Then compile and link as%@NL@%
  4981.      directed in Section 8.5%@BO:   4a7bb@%, "Compiling and Linking."%@NL@%
  4982. %@NL@%
  4983.   3. Call the low-level extension functions to do most any operation with%@NL@%
  4984.      files, such as read from a file, write to a file, delete or add files,%@NL@%
  4985.      and move the cursor. These functions are completely described in%@NL@%
  4986.      Chapter 9%@BO:   50fea@%, "C-Extension Functions," (an alphabetical reference), and%@NL@%
  4987.      summarized by topic at the end of this chapter.%@NL@%
  4988. %@NL@%
  4989.      Do not call functions from the C library routine, except for the ones%@NL@%
  4990.      specifically listed in Section 8.7%@BO:   4fa83@%, "Calling Library Functions."%@NL@%
  4991.      Futhermore, floating-point arithmetic is not supported.%@NL@%
  4992. %@NL@%
  4993. %@NL@%
  4994. %@CR:MSE83100@%%@3@%%@AB@%8.3.1  Required Objects%@AE@%%@EH@%%@NL@%
  4995. %@NL@%
  4996. %@CR:MSE83101@%%@4@%A C-extension module must have at minimum the three objects described below:%@EH@%%@NL@%
  4997. %@NL@%
  4998. %@CR:MSE83102@%%@AB@%Object Name                 Description%@AE@%%@NL@%
  4999. %@NL@%
  5000. %@AB@%swiTable%@AE@%                    An array of structures that declares internal%@NL@%
  5001.                             switches you wish to create%@NL@%
  5002. %@NL@%
  5003. %@AB@%cmdTable%@AE@%                    An array of structures that declares editing%@NL@%
  5004.                             functions you have coded%@NL@%
  5005. %@NL@%
  5006. %@AB@%WhenLoaded%@AE@%                  A function that the editor calls as soon as the%@NL@%
  5007.                             C-extension module is loaded%@NL@%
  5008. %@NL@%
  5009. %@CR:MSE83103@%%@4@%Each of these items can be as short or long as you wish. Each table can be%@EH@%
  5010. as short as a single row of entries. The %@AB@%WhenLoaded%@AE@% function can return
  5011. immediately, or it can perform useful initialization tasks, such as
  5012. assigning keys to functions or printing a message.%@NL@%
  5013. %@NL@%
  5014. %@NL@%
  5015. %@CR:MSE83200@%%@3@%%@AB@%8.3.2  The Switch Table%@AE@%%@EH@%%@NL@%
  5016. %@NL@%
  5017. %@CR:MSE83201@%%@4@%The switch table, %@AB@%swiTable%@AE@%, consists of a series of structures in which each%@EH@%
  5018. structure describes a switch you wish to create. The table ends with a
  5019. structure that has all null (all zero) values. Though you may choose not to
  5020. create any switches, the table must still be present. The simplest table
  5021. allowed is therefore%@NL@%
  5022. %@NL@%
  5023.      struct swiDesc swiTable[] =%@NL@%
  5024.      {%@NL@%
  5025.           { (void *) 0, (void *) 0, 0 }%@NL@%
  5026.      };%@NL@%
  5027. %@NL@%
  5028. %@CR:MSE83202@%%@4@%The structure type %@AB@%swiDesc%@AE@% is defined in EXT.H. This structure contains the%@EH@%
  5029. following three fields that define a switch for the editor to recognize:%@NL@%
  5030. %@NL@%
  5031. %@CR:MSE83203@%  1. A pointer to the name of the switch.%@NL@%
  5032. %@NL@%
  5033.   2. A pointer to the switch itself or to a function. If the switch is%@NL@%
  5034.      Boolean, this field must point to the switch (an integer which assumes%@NL@%
  5035.      the value -1 or 0). If the switch is text, this field must point to a%@NL@%
  5036.      function, as explained below. If the switch is numeric, this field%@NL@%
  5037.      points to switch itself──an integer.%@NL@%
  5038. %@NL@%
  5039.   3. A flag that indicates the type of switch: either %@AB@%SWI_BOOLEAN%@AE@%,%@NL@%
  5040.      %@AB@%SWI_NUMERIC%@AE@%, or %@AB@%SWI_SPECIAL%@AE@%.%@NL@%
  5041. %@NL@%
  5042. %@CR:MSE83204@%%@4@%If the third field has value %@AB@%SWI_NUMERIC%@AE@%, you must combine it with the value%@EH@%
  5043. %@AB@%RADIX10%@AE@% or %@AB@%RADIX16%@AE@% by using binary or (%@AB@%|%@AE@%). (See the second example below.)
  5044. If you specify %@AB@%RADIX10%@AE@%, the editor interprets user-assigned values as
  5045. decimal digits. If you specify %@AB@%RADIX16%@AE@%, the editor interprets these values
  5046. as hexadecimal.%@NL@%
  5047. %@NL@%
  5048. %@CR:MSE83205@%%@4@%If the third field has value %@AB@%SWI_SPECIAL%@AE@%, the second field must be a pointer%@EH@%
  5049. to a function of type %@AB@%int far pascal%@AE@%. You define this function in your code.
  5050. Each time the value of the switch changes, the editor calls your function
  5051. and passes the updated value in a character string. Your function should
  5052. declare exactly one parameter: a far pointer to a character string.
  5053. Typically, this function might set a global variable:%@NL@%
  5054. %@NL@%
  5055.      char globalstr[BUFLEN];%@NL@%
  5056. %@NL@%
  5057.      int far pascal setstr (char far *p)%@NL@%
  5058.      {%@NL@%
  5059.           strcpy (globalstr, p);%@NL@%
  5060.      }%@NL@%
  5061. %@NL@%
  5062. %@CR:MSE83206@%%@4@%The table may have any number of rows (each row being a structure), and must%@EH@%
  5063. at least include the final row of all null values. Here is an example of a
  5064. table that creates a numeric switch with a default value of 27:%@NL@%
  5065. %@NL@%
  5066.      int n = 27;%@NL@%
  5067. %@NL@%
  5068.      struct swiDesc swiTable [] =%@NL@%
  5069.      {%@NL@%
  5070.           { "newswitch", &n, SWI_NUMERIC|RADIX10  } ,%@NL@%
  5071.           { (void *) 0, (void *) 0, 0 }%@NL@%
  5072.      }%@NL@%
  5073. %@NL@%
  5074. %@NL@%
  5075. %@CR:MSE83300@%%@3@%%@AB@%8.3.3  The Command Table%@AE@%%@EH@%%@NL@%
  5076. %@NL@%
  5077. %@CR:MSE83301@%%@4@%The command table, %@AB@%cmdTable%@AE@%, is similar to the switch table, %@AB@%swiTable%@AE@%, in%@EH@%
  5078. its construction. Each "row" of the table consists of a structure that
  5079. describes an editing function you want the editor to recognize. The last row
  5080. must contain all null values. The simplest table allowed is the following:%@NL@%
  5081. %@NL@%
  5082.      struct cmdDesc cmdTable[] =%@NL@%
  5083.      {%@NL@%
  5084.           { (void *) 0, (void *) 0, 0, 0 }%@NL@%
  5085.      }%@NL@%
  5086. %@NL@%
  5087. %@CR:MSE83302@%%@4@%Usually you'll want to declare at least one new editing function. The%@EH@%
  5088. structure type %@AB@%cmdDesc%@AE@% is defined in EXT.H. This structure contains the
  5089. following four fields that make an editing function recognizable to the
  5090. editor:%@NL@%
  5091. %@NL@%
  5092. %@CR:MSE83303@%  1. A pointer to the name of the function, in ASCII format. This name could%@NL@%
  5093.      appear in assignments and macros.%@NL@%
  5094. %@NL@%
  5095.   2. The address of the function itself. Give the function name but do not%@NL@%
  5096.      follow it with parentheses.%@NL@%
  5097. %@NL@%
  5098.   3. A field used internally by the editor. Always declare this field as%@NL@%
  5099.      null.%@NL@%
  5100. %@NL@%
  5101.   4. Flags indicating the type of the function. Function types are described%@NL@%
  5102.      below and define what type of argument the function will accept.%@NL@%
  5103. %@NL@%
  5104. %@CR:MSE83304@%%@4@%Here is an example of a command table declaring a function that takes no%@EH@%
  5105. arguments and a second function that takes either a %@AI@%linearg%@AE@% or a %@AI@%boxarg%@AE@% or
  5106. can be entered without arguments:%@NL@%
  5107. %@NL@%
  5108.      struct cmdDesc cmdTable[] =%@NL@%
  5109.      {%@NL@%
  5110.           { "newfun", newfun, 0, NOARG } ,%@NL@%
  5111.           { "fun2",  fun2,     0, LINEARG | BOXARG | NOARG } ,%@NL@%
  5112.           { (void *) 0, (void *) 0, 0, 0 }%@NL@%
  5113.      }%@NL@%
  5114. %@NL@%
  5115. %@CR:MSE83305@%%@4@%In the fourth field of the command table, use one or more of the values%@EH@%
  5116. described in Table 8.1%@BO:   435cc@% below.%@NL@%
  5117. %@NL@%
  5118. %@CR:MSE83306@%%@4@%The first column of Table 8.1%@BO:   435cc@% contains a flag you can enter in the fourth%@EH@%
  5119. field of %@AB@%cmdTable%@AE@%. The second column describes the associated behavior. The
  5120. third column indicates which of the six data formats the editor uses to pass
  5121. information. Your function determines the format at run time by testing the
  5122. value of pArg->argType. Sections 8.4.3%@BO:   470c5@%-8.4.8 give complete descriptions of
  5123. these formats.%@NL@%
  5124. %@NL@%
  5125. %@CR:MSE83307@%%@4@%Many of the descriptions below state that the editor responds by passing%@EH@%
  5126. certain information. However, these responses only apply when the editor
  5127. detects the associated condition. For example, the %@AB@%BOXARG%@AE@% flag controls the
  5128. editor's behavior only when a %@AI@%boxarg%@AE@% is detected. However, %@AB@%KEEPMETA%@AE@%,
  5129. %@AB@%MODIFIES%@AE@%, and %@AB@%CURSORFUNC%@AE@% apply regardless of argument type.%@NL@%
  5130. %@CR:MSE8T100@%%@NL@%
  5131. %@4@%%@AU@%Table 8.1  Meaning of cmdTable Flags%@AE@%%@EH@%%@NL@%
  5132. %@TH:   68   3808  3 14 51 11 @%
  5133. %@AB@%cmdTable                                                         argType%@AE@%
  5134. %@AB@%Flag          Behavior                                           Format%@AE@%
  5135.  
  5136. %@AB@%KEEPMETA%@AE@%      Preserves the state of the %@AI@%Meta%@AE@% prefix, which is   Not
  5137.               normally reset upon completion of the function.    applicable
  5138.  
  5139. %@AB@%MODIFIES%@AE@%      Prevents execution of the function when the        Not
  5140.               current file is No-Edit.                           applicable
  5141.  
  5142. %@AB@%WINDOWFUNC%@AE@%    Does not cancel highlight resulting from a         Not
  5143.               previous command, such as %@AI@%Psearch%@AE@%. This flag is    applicable
  5144.               useful for window-movement functions.
  5145.  
  5146. %@AB@%CURSORFUNC%@AE@%    Does not recognize or cancel %@AI@%Arg%@AE@% prefix. The       %@AB@%NOARG%@AE@%
  5147.               function is useful for helping define
  5148.               cursor-movement arguments, since it preserves the
  5149.               preexisting argument. Conflicts with all flags
  5150.               except %@AB@%KEEPMETA%@AE@% and %@AB@%MODIFIES%@AE@%.
  5151.  
  5152. %@AB@%NOARG%@AE@%         Accepts absence of the %@AI@%Arg%@AE@% prefix. The editor      %@AB@%NOARG%@AE@%
  5153.               passes location of the cursor.
  5154.  
  5155. %@AB@%NULLARG%@AE@%       Accepts %@AI@%Arg%@AE@% without an argument. The editor        %@AB@%NULLARG%@AE@%
  5156.               passes location of the cursor. Conflicts with
  5157.               %@AB@%NULLEOL%@AE@% and %@AB@%NULLEOW%@AE@%.
  5158.  
  5159. %@AB@%NULLEOL%@AE@%       Accepts %@AI@%Arg%@AE@% without an argument. The editor        %@AB@%TEXTARG%@AE@%
  5160.               passes the string of text from the cursor
  5161.               position up to the end of the line. Conflicts
  5162.               with %@AB@%NULLARG%@AE@% and %@AB@%NULLEOW%@AE@%.
  5163.  
  5164. %@AB@%NULLEOW%@AE@%       Accepts %@AI@%Arg%@AE@% without an argument. The editor        %@AB@%TEXTARG%@AE@%
  5165.               passes the string of text from the cursor
  5166.               position up to the next white space. Conflicts
  5167.               with %@AB@%NULLARG%@AE@% and %@AB@%NULLEOL%@AE@%.
  5168.  
  5169. %@AB@%TEXTARG%@AE@%       Accepts a text argument that the user types in     %@AB@%TEXTARG%@AE@%
  5170.               directly.
  5171.  
  5172. %@AB@%BOXSTR%@AE@%        Accepts a one-line box argument. The editor        %@AB@%TEXTARG%@AE@%
  5173.               passes the highlighted string as a text argument.
  5174.  
  5175. %@AB@%LINEARG%@AE@%       Accepts a %@AI@%linearg%@AE@%. The editor passes location of   %@AB@%LINEARG%@AE@%
  5176.               first and last lines.
  5177.  
  5178. %@AB@%BOXARG%@AE@%        Accepts a %@AI@%boxarg%@AE@%. The editor passes location of    %@AB@%BOXARG%@AE@%
  5179.               the four edges of the box.
  5180.  
  5181. %@AB@%STREAMARG%@AE@%     Interprets any cursor-movement argument as a       %@AB@%STREAMARG%@AE@%
  5182.               stream of text. The stream may span more than one
  5183.               line. The editor passes location of beginning and
  5184.               ending points.
  5185.  
  5186. %@AB@%NUMARG%@AE@%        Interprets a numeric text argument as a file       Any cursor-
  5187.               position exactly %@AI@%numarg%@AE@% lines down from the        movement
  5188.               cursor. This position and the cursor position      type
  5189.               then define a region in the file. (The two
  5190.               positions form the end points of the region.) Use
  5191.               this flag in conjunction with other
  5192.               cursor-movement-argument flags, especially
  5193.               %@AB@%LINEARG%@AE@%.
  5194.  
  5195. %@AB@%MARKARG%@AE@%       Interprets a valid file-marker name as a file      Any cursor-
  5196.               position. This position and the cursor position    movement
  5197.               then define a region in the file. (The two         type
  5198.               positions form the end points of the region.) Use
  5199.               this flag in conjunction with other
  5200.               cursor-movement-argument flags.
  5201. %@TE:   68   3808  3 14 51 11 @%
  5202. %@NL@%
  5203. %@CR:MSE83308@%%@4@%The descriptions also refer to the passing of information to the function;%@EH@%
  5204. you'll see how the function receives information in Section 8.3.5%@BO:   44a45@%,
  5205. "Defining the Editing Function."%@NL@%
  5206. %@NL@%
  5207. %@CR:MSE83309@%%@4@%The flags are bit masks; each turns a specific bit within an unsigned%@EH@%
  5208. integer. You can combine these bit masks with binary or ( %@AB@%|%@AE@% ). For example,
  5209. you can specify a function that accepts a %@AI@%boxarg%@AE@%, %@AI@%linearg%@AE@%, or %@AI@%numarg%@AE@% as:%@NL@%
  5210. %@NL@%
  5211.      BOXARG | LINEARG | NUMARG%@NL@%
  5212. %@NL@%
  5213. %@NL@%
  5214. %@CR:MSE83400@%%@3@%%@AB@%8.3.4  The WhenLoaded Function%@AE@%%@EH@%%@NL@%
  5215. %@NL@%
  5216. %@CR:MSE83401@%%@4@%The function %@AB@%WhenLoaded%@AE@% takes no arguments and can return immediately.%@EH@%
  5217. However, you must include the function because the editor expects it to be
  5218. present. The simplest version of %@AB@%WhenLoaded%@AE@% is this:%@NL@%
  5219. %@NL@%
  5220.      WhenLoaded()%@NL@%
  5221.      {%@NL@%
  5222.           return TRUE;%@NL@%
  5223.      }%@NL@%
  5224. %@NL@%
  5225. %@CR:MSE83402@%%@4@%In Section 8.7%@BO:   4fa83@%, "Calling Library Functions," you'll learn how to call%@EH@%
  5226. functions that assign keys to functions and print a message on the message
  5227. line. These functions are often useful to call from within %@AB@%WhenLoaded%@AE@%.%@NL@%
  5228. %@NL@%
  5229. %@NL@%
  5230. %@CR:MSE83500@%%@3@%%@AB@%8.3.5  Defining the Editing Function%@AE@%%@EH@%%@NL@%
  5231. %@NL@%
  5232. %@CR:MSE83501@%%@4@%This section describes how to define an editing function. The section also%@EH@%
  5233. gives an overview of the information the editor passes to every function.
  5234. Section 8.4%@BO:   45aeb@%, "Programming Your Function," gives specific information on how
  5235. to interpret user-defined arguments.%@NL@%
  5236. %@NL@%
  5237. %@CR:MSE83502@%%@4@%The editing function must be declared %@AB@%flagType pascal EXPORT%@AE@%. The %@AB@%flagType%@AE@%%@EH@%
  5238. declaration indicates that your function returns one of two values: TRUE
  5239. (nonzero) or FALSE (zero). (Returning a value is recommended, because once
  5240. loaded, your function can be used within a macro. However, returning a value
  5241. is not a strict requirement.) The %@AB@%pascal%@AE@% keyword indicates that your
  5242. function uses the Pascal calling convention. Finally, your function must be
  5243. of type %@AB@%EXPORT%@AE@% to be properly accessed through the editor's dynamic-link
  5244. calls.%@NL@%
  5245. %@NL@%
  5246. %@CR:MSE83503@%%@4@%The sample function %@AS@%Skel%@AE@% is declared as follows:%@EH@%%@NL@%
  5247. %@NL@%
  5248.      #define TRUE  -1%@NL@%
  5249.      #define FALSE 0%@NL@%
  5250. %@NL@%
  5251.      flagType pascal EXPORT Skel (argData, pArg, fMeta)%@NL@%
  5252.      unsigned int argData;%@NL@%
  5253.      ARG far *pArg;%@NL@%
  5254.      flagType fMeta;%@NL@%
  5255.      {%@NL@%
  5256.           return TRUE;%@NL@%
  5257.      }%@NL@%
  5258. %@NL@%
  5259. %@CR:MSE83504@%%@4@%Replace the name %@AS@%Skel%@AE@% by the name of your function. This same name should%@EH@%
  5260. appear in the second field of the %@AB@%cmdTable%@AE@% data structure.%@NL@%
  5261. %@NL@%
  5262. %@CR:MSE83505@%%@4@%The parameter list is described below:%@EH@%%@NL@%
  5263. %@NL@%
  5264. %@CR:MSE83506@%%@AB@%Parameter                   Description%@AE@%%@NL@%
  5265. %@NL@%
  5266. %@AB@%argData%@AE@%                     The value of the keystroke used to invoke the%@NL@%
  5267.                             function. This parameter is generally not used.%@NL@%
  5268. %@NL@%
  5269. %@AB@%pArg%@AE@%                        A pointer to a structure that contains almost%@NL@%
  5270.                             all the information passed by the editor. This%@NL@%
  5271.                             structure is discussed in detail below.%@NL@%
  5272. %@NL@%
  5273. %@AB@%fMeta%@AE@%                       An integer that describes whether or not a %@AI@%Meta%@AE@%%@NL@%
  5274.                             prefix is present. This integer has value true%@NL@%
  5275.                             (nonzero) if %@AI@%Meta%@AE@% is present and value false (0)%@NL@%
  5276.                             if not.%@NL@%
  5277. %@NL@%
  5278. %@CR:MSE83507@%%@4@%The parameter %@AB@%pArg%@AE@% points to a structure whose first member is %@AB@%argType%@AE@%. This%@EH@%
  5279. variable contains one of six values: %@AB@%NOARG%@AE@%, %@AB@%TEXTARG%@AE@%, %@AB@%NULLARG%@AE@%, %@AB@%LINEARG%@AE@%,
  5280. %@AB@%STREAMARG%@AE@%, or %@AB@%TEXTARG%@AE@%. Each of these values is defined in Section 8.3.3%@BO:   42a57@%,
  5281. "The Command Table." For example, you could test for the presence of a
  5282. %@AI@%boxarg%@AE@% with the following code:%@NL@%
  5283. %@NL@%
  5284.      if( pArg->argType == BOXARG )%@NL@%
  5285.      {%@NL@%
  5286.          %@AI@%/* take appropriate action for boxarg */%@AE@%%@NL@%
  5287.      }%@NL@%
  5288. %@NL@%
  5289. %@CR:MSE83508@%%@4@%The rest of the structure consists of a union of smaller structures. The C%@EH@%
  5290. %@AB@%union%@AE@% type is necessary here; it enables the editor to pass data in a
  5291. variety of formats. The choice of format depends on what kind of argument
  5292. the user defined.%@NL@%
  5293. %@NL@%
  5294. %@CR:MSE83509@%%@4@%The declaration of the %@AB@%ARG%@AE@% structure is:%@EH@%%@NL@%
  5295. %@NL@%
  5296.      struct argType%@NL@%
  5297.      {%@NL@%
  5298.          int   argType;%@NL@%
  5299.          union%@NL@%
  5300.          {%@NL@%
  5301.              struct  noargType      noarg;%@NL@%
  5302.              struct  textargType    textarg;%@NL@%
  5303.              struct  nullargType    nullarg;%@NL@%
  5304.              struct  lineargType    linearg;%@NL@%
  5305.              struct  streamargType  streamarg;%@NL@%
  5306.              struct  boxargType     boxarg;%@NL@%
  5307.          } arg;%@NL@%
  5308.      }%@NL@%
  5309. %@NL@%
  5310.      typedef struct argType ARG;%@NL@%
  5311. %@NL@%
  5312. %@CR:MSE8350A@%%@4@%The editor returns argument information in one of the nested structures. The%@EH@%
  5313. next section describes the contents of each of these structures and provides
  5314. examples showing how to use each data format.%@NL@%
  5315. %@NL@%
  5316. %@NL@%
  5317. %@CR:MSE84000@%%@2@%%@AB@%8.4  Programming Your Function%@AE@%%@EH@%%@NL@%
  5318. %@NL@%
  5319. %@CR:MSE84001@%%@4@%When you write an editing function, you have two basic tasks. First, you%@EH@%
  5320. interpret information that the editor passes you. Second, you call the
  5321. editor's lower-level functions to execute basic editing tasks.%@NL@%
  5322. %@NL@%
  5323. %@CR:MSE84002@%%@4@%This section focuses on the most typical class of editing functions:%@EH@%
  5324. functions that analyze the user-defined argument and modify only the current
  5325. file. This class of functions, although huge in scope, depends on only a few
  5326. lower-level functions. Once you learn how to write these functions, you can
  5327. progress to more advanced operations──such as working on several files at
  5328. once or reading keyboard input. Chapter 9%@BO:   50fea@% describes the whole range of
  5329. low-level functions available.%@NL@%
  5330. %@NL@%
  5331. %@CR:MSE84003@%%@4@%A typical editing function might execute the following sequence of steps:%@EH@%%@NL@%
  5332. %@NL@%
  5333. %@CR:MSE84004@%  1. Get a handle to the current file by calling %@AB@%FileNameToHandle%@AE@%.%@NL@%
  5334. %@NL@%
  5335.   2. Use information about the user-defined argument to initialize local%@NL@%
  5336.      variables.%@NL@%
  5337. %@NL@%
  5338.   3. Process the argument. Modify the current file by calling %@AB@%GetLine%@AE@% and%@NL@%
  5339.      %@AB@%Putline%@AE@%.%@NL@%
  5340. %@NL@%
  5341.   4. Return TRUE or FALSE.%@NL@%
  5342. %@NL@%
  5343. %@CR:MSE84005@%%@4@%The order above is recommended, but you do not have to follow it strictly.%@EH@%
  5344. You can perform Step 2 before Step 1. However, you must get a handle to the
  5345. current file before you can modify it.%@NL@%
  5346. %@NL@%
  5347. %@CR:MSE84006@%%@4@%Sections 8.4.1%@BO:   46181@%-8.4.9 discuss each step.%@EH@%%@NL@%
  5348. %@NL@%
  5349. %@NL@%
  5350. %@CR:MSE84100@%%@3@%%@AB@%8.4.1  Getting a File Handle%@AE@%%@EH@%%@NL@%
  5351. %@NL@%
  5352. %@CR:MSE84101@%%@4@%The Microsoft Editor has its own file system. A "file system" is a group of%@EH@%
  5353. integrated structures and function calls for modifying files. The editor's
  5354. file system is not compatible with that of the C library.%@NL@%
  5355. %@NL@%
  5356. %@CR:MSE84102@%%@4@%The editor has its own file-handle type, %@AB@%PFILE%@AE@%. This type, along with other%@EH@%
  5357. types needed for extensions, is defined in the include file EXT.H. For
  5358. example, you can create a file handle %@AS@%pFile%@AE@% with the declaration:%@NL@%
  5359. %@NL@%
  5360.      PFILE   pFile;%@NL@%
  5361. %@NL@%
  5362. %@CR:MSE84103@%%@4@%Usually, your editing work involves the current file; that is, the file that%@EH@%
  5363. now appears in the current editing window. Because the current file is
  5364. already open for editing, you do not need to open or initialize the current
  5365. file in any way. You simply assign the existing file handle to one of your
  5366. own variables.%@NL@%
  5367. %@NL@%
  5368. %@CR:MSE84104@%%@4@%The %@AB@%FileNameToHandle%@AE@% function returns a handle to a file that is already%@EH@%
  5369. open for editing. (More than one file may be open for editing, particularly
  5370. if the user has worked on more than one file during the editing session.)%@NL@%
  5371. %@NL@%
  5372. %@CR:MSE84105@%%@4@%To get a handle to the current file, simply pass two empty strings to the%@EH@%
  5373. function:%@NL@%
  5374. %@NL@%
  5375.      pFile = FileNameToHandle( "", "" );%@NL@%
  5376. %@NL@%
  5377. %@CR:MSE84106@%%@4@%The first argument to %@AB@%FileNameToHandle%@AE@% takes a file name. The second%@EH@%
  5378. argument takes a "short name," which is a base name the editor searches for
  5379. in its list of open files. If the first string is empty, the function
  5380. returns a handle to the current file.%@NL@%
  5381. %@NL@%
  5382. %@CR:MSE84107@%%@4@%The %@AB@%AddFile%@AE@% function is the other function that returns a file handle.%@EH@%
  5383. %@AB@%AddFile%@AE@% causes the editor to open a file for editing──either a new file or a
  5384. file that exists on disk but is not yet open for editing.%@NL@%
  5385. %@NL@%
  5386. %@CR:MSE84108@%%@4@%See Chapter 9%@BO:   50fea@% for complete information on each function.%@EH@%%@NL@%
  5387. %@NL@%
  5388. %@NL@%
  5389. %@CR:MSE84200@%%@3@%%@AB@%8.4.2  Interpreting the User-Defined Argument%@AE@%%@EH@%%@NL@%
  5390. %@NL@%
  5391. %@CR:MSE84201@%%@4@%After getting a handle to the current file, you need to interpret the%@EH@%
  5392. user-defined argument.%@NL@%
  5393. %@NL@%
  5394. %@CR:MSE84202@%%@4@%You determine the type of the user's argument by testing the value of%@EH@%
  5395. pArg->argType. If you declare a function that takes only one type of
  5396. argument, testing pArg->argType is not necessary. You know in advance what
  5397. kind of argument was given, since the editor rejects invalid arguments.
  5398. Table 8.1%@BO:   435cc@%, "Meaning of cmdTable Flags," explains how to declare what
  5399. arguments your function accepts.%@NL@%
  5400. %@NL@%
  5401. %@CR:MSE84203@%%@4@%If your function accepts more than one kind of argument, you can use either%@EH@%
  5402. if-then-else blocks or switch-case statements to evaluate the user's
  5403. argument:%@NL@%
  5404. %@NL@%
  5405.      switch( pArg->argType )%@NL@%
  5406.      {%@NL@%
  5407.         case( NULLARG ):    %@AI@%/* Take action for empty arg */%@AE@%%@NL@%
  5408.         .%@NL@%
  5409.         .%@NL@%
  5410.         .%@NL@%
  5411.         case( BOXARG ):     %@AI@%/* Take action for boxarg */%@AE@%%@NL@%
  5412.         .%@NL@%
  5413.         .%@NL@%
  5414.         .%@NL@%
  5415.         case( LINEARG ):   %@AI@%/* Take action for linearg */%@AE@%%@NL@%
  5416.         .%@NL@%
  5417.         .%@NL@%
  5418.         .%@NL@%
  5419.      }%@NL@%
  5420. %@NL@%
  5421. %@CR:MSE84204@%%@4@%The value of pArg->argType is always equal to one of six values:%@EH@%%@NL@%
  5422. %@NL@%
  5423. %@CR:MSE84205@%  ■  %@AB@%NOARG%@AE@%%@NL@%
  5424.   ■  %@AB@%NULLARG%@AE@%%@NL@%
  5425.   ■  %@AB@%TEXTARG%@AE@%%@NL@%
  5426.   ■  %@AB@%LINEARG%@AE@%%@NL@%
  5427.   ■  %@AB@%STREAMARG%@AE@%%@NL@%
  5428.   ■  %@AB@%BOXARG%@AE@%%@NL@%
  5429. %@NL@%
  5430. %@CR:MSE84206@%%@4@%The next six sections consider each of these argument types in detail,%@EH@%
  5431. giving declarations and examples for each.%@NL@%
  5432. %@NL@%
  5433. %@NL@%
  5434. %@CR:MSE84300@%%@3@%%@AB@%8.4.3  The NOARG Type%@AE@%%@EH@%%@NL@%
  5435. %@NL@%
  5436. %@CR:MSE84301@%%@4@%When pArg->argType is equal to %@AB@%NOARG%@AE@%, the editor passes information in the%@EH@%
  5437. pArg->arg.noarg structure, which has the format:%@NL@%
  5438. %@NL@%
  5439.      struct  noargType%@NL@%
  5440.      {%@NL@%
  5441.          LINE    y;   %@AI@%/* Line number of cursor */%@AE@%%@NL@%
  5442.          COL     x;   %@AI@%/* Column of cursor */%@AE@%%@NL@%
  5443.      };%@NL@%
  5444. %@NL@%
  5445. %@CR:MSE84302@%%@4@%%@AB@%Description%@AE@%%@EH@%%@NL@%
  5446. %@NL@%
  5447. %@CR:MSE84303@%%@4@%The %@AB@%NOARG%@AE@% type indicates that the user did not invoke the %@AI@%Arg%@AE@% prefix, and%@EH@%
  5448. therefore did not enter an argument. The cursor coordinates are zero-based;
  5449. in other words, the start of the file is position (0,0).%@NL@%
  5450. %@NL@%
  5451. %@CR:MSE84304@%%@4@%This argument type is possible if you declared your function with the flag%@EH@%
  5452. %@AB@%NOARG%@AE@% or %@AB@%CURSORFUNC%@AE@%.%@NL@%
  5453. %@NL@%
  5454. %@CR:MSE84305@%%@4@%%@AB@%Example%@AE@%%@EH@%%@NL@%
  5455. %@NL@%
  5456. %@CR:MSE84306@%%@4@%The following example initializes the coordinates (%@AS@%yCur%@AE@%, %@AS@%xCur%@AE@%) with the row%@EH@%
  5457. and column of the cursor position:%@NL@%
  5458. %@NL@%
  5459.      COL   xCur;%@NL@%
  5460.      LINE  yCur;%@NL@%
  5461.      .%@NL@%
  5462.      .%@NL@%
  5463.      .%@NL@%
  5464.      if( pArg->argType == NOARG )%@NL@%
  5465.      {%@NL@%
  5466.           xCur = pArg->arg.noarg.x;%@NL@%
  5467.           yCur = pArg->arg.noarg.y;%@NL@%
  5468.      }%@NL@%
  5469. %@NL@%
  5470. %@NL@%
  5471. %@CR:MSE84400@%%@3@%%@AB@%8.4.4  The NULLARG Type%@AE@%%@EH@%%@NL@%
  5472. %@NL@%
  5473. %@CR:MSE84401@%%@4@%When pArg->argType is equal to %@AB@%NULLARG%@AE@%, the editor passes information in the%@EH@%
  5474. pArg->arg.nullarg structure, which has the format:%@NL@%
  5475. %@NL@%
  5476.      struct  nullargType%@NL@%
  5477.      {%@NL@%
  5478.          int     cArg;   %@AI@%/* Number of times Arg was invoked */%@AE@%%@NL@%
  5479.          LINE    y;      %@AI@%/* Line number of cursor */%@AE@%%@NL@%
  5480.          COL     x;      %@AI@%/* Column of cursor */%@AE@%%@NL@%
  5481.      };%@NL@%
  5482. %@NL@%
  5483. %@CR:MSE84402@%%@4@%%@AB@%Description%@AE@%%@EH@%%@NL@%
  5484. %@NL@%
  5485. %@CR:MSE84403@%%@4@%The %@AB@%NULLARG%@AE@% type indicates that the user invoked the %@AI@%Arg%@AE@% prefix but did not%@EH@%
  5486. enter an argument. The argument is therefore empty, or null. The cursor
  5487. coordinates are zero-based; in other words, the start of the file is
  5488. position (0,0).%@NL@%
  5489. %@NL@%
  5490. %@CR:MSE84404@%%@4@%This argument type is possible if you declared your function with the flag%@EH@%
  5491. %@AB@%NULLARG%@AE@%.%@NL@%
  5492. %@NL@%
  5493. %@CR:MSE84405@%%@4@%%@AB@%Example%@AE@%%@EH@%%@NL@%
  5494. %@NL@%
  5495. %@CR:MSE84406@%%@4@%The following example initializes the coordinates (%@AS@%yCur%@AE@%, %@AS@%xCur%@AE@%) with the row%@EH@%
  5496. and column of the cursor position, and sets %@AS@%cArg%@AE@% equal to the number of
  5497. times that the user invoked the %@AI@%Arg%@AE@% prefix:%@NL@%
  5498. %@NL@%
  5499.      COL   xCur;%@NL@%
  5500.      LINE  yCur;%@NL@%
  5501.      int   cArg;%@NL@%
  5502.      .%@NL@%
  5503.      .%@NL@%
  5504.      .%@NL@%
  5505.      if( pArg->argType == NULLARG )%@NL@%
  5506.      {%@NL@%
  5507.           xCur = pArg->arg.nullarg.x;%@NL@%
  5508.           yCur = pArg->arg.nullarg.y;%@NL@%
  5509.           cArg = pArg->arg.nullarg.cArg;%@NL@%
  5510.      }%@NL@%
  5511. %@NL@%
  5512. %@NL@%
  5513. %@CR:MSE84500@%%@3@%%@AB@%8.4.5  The TEXTARG Type%@AE@%%@EH@%%@NL@%
  5514. %@NL@%
  5515. %@CR:MSE84501@%%@4@%When pArg->argType is equal to %@AB@%TEXTARG%@AE@%, the editor passes information in the%@EH@%
  5516. pArg->arg.textarg structure, which has the format:%@NL@%
  5517. %@NL@%
  5518.      struct  textargType%@NL@%
  5519.      {%@NL@%
  5520.          int     cArg;   %@AI@%/* Number of times Arg was invoked */%@AE@%%@NL@%
  5521.          LINE    y;      %@AI@%/* Line number of cursor */%@AE@%%@NL@%
  5522.          COL     x;      %@AI@%/* Column of cursor */%@AE@%%@NL@%
  5523.          char far *pText %@AI@%/* Pointer to textarg string */%@AE@%%@NL@%
  5524.      };%@NL@%
  5525. %@NL@%
  5526. %@CR:MSE84502@%%@4@%%@AB@%Description%@AE@%%@EH@%%@NL@%
  5527. %@NL@%
  5528. %@CR:MSE84503@%%@4@%The %@AB@%TEXTARG%@AE@% type indicates that the user's argument defined a string of%@EH@%
  5529. text. The cursor coordinates are zero-based, and %@AS@%pText%@AE@% points to a
  5530. null-terminated string.%@NL@%
  5531. %@NL@%
  5532. %@CR:MSE84504@%%@4@%This argument type is possible if you declared your function with the flag%@EH@%
  5533. %@AB@%TEXTARG%@AE@%, %@AB@%BOXSTR%@AE@%, %@AB@%NULLEOL%@AE@%, or %@AB@%NULLEOW%@AE@%. Each of these argument types selects a
  5534. string of text in a different way (for example, %@AB@%BOXSTR%@AE@% uses a
  5535. cursor-movement argument); however, the format used for all these cases is
  5536. the same.%@NL@%
  5537. %@NL@%
  5538. %@CR:MSE84505@%%@4@%%@AB@%Example%@AE@%%@EH@%%@NL@%
  5539. %@NL@%
  5540. %@CR:MSE84506@%%@4@%The following example initializes the coordinates (%@AS@%yCur%@AE@%, %@AS@%xCur%@AE@%) with the row%@EH@%
  5541. and column of the cursor position, and sets %@AS@%cArg%@AE@% equal to the number of
  5542. times that the user invoked the %@AI@%Arg%@AE@% prefix. Finally, the user-defined
  5543. %@AI@%textarg%@AE@% is copied into the character array %@AS@%buf%@AE@%.%@NL@%
  5544. %@NL@%
  5545.      COL   xCur;%@NL@%
  5546.      LINE  yCur;%@NL@%
  5547.      int   cArg;%@NL@%
  5548.      char  buf[BUFLEN]; .%@NL@%
  5549.      .%@NL@%
  5550.      .%@NL@%
  5551.      if( pArg->argType == TEXTARG )%@NL@%
  5552.      {%@NL@%
  5553.           xCur = pArg->arg.textarg.x;%@NL@%
  5554.           yCur = pArg->arg.textarg.y;%@NL@%
  5555.           cArg = pArg->arg.textarg.cArg;%@NL@%
  5556.           strcpy (buf, pArg->arg.textarg.pText);%@NL@%
  5557.      }%@NL@%
  5558. %@NL@%
  5559. %@NL@%
  5560. %@CR:MSE84600@%%@3@%%@AB@%8.4.6  The LINEARG Type%@AE@%%@EH@%%@NL@%
  5561. %@NL@%
  5562. %@CR:MSE84601@%%@4@%When pArg->argType is equal to %@AB@%LINEARG%@AE@%, the editor passes information in the%@EH@%
  5563. pArg->arg.linearg structure, which has the format:%@NL@%
  5564. %@NL@%
  5565.      struct  lineargType%@NL@%
  5566.      {%@NL@%
  5567.          int     cArg;   %@AI@%/* Number of times Arg was invoked */%@AE@%%@NL@%
  5568.          LINE    yStart; %@AI@%/* Line number of first line */%@AE@%%@NL@%
  5569.          LINE    yEnd;   %@AI@%/* Line number of last line */%@AE@%%@NL@%
  5570.      };%@NL@%
  5571. %@NL@%
  5572. %@CR:MSE84602@%%@4@%%@AB@%Description%@AE@%%@EH@%%@NL@%
  5573. %@NL@%
  5574. %@CR:MSE84603@%%@4@%The %@AB@%LINEARG%@AE@% type indicates that the user defined a range of lines by%@EH@%
  5575. aligning the cursor and arg position in the same column but different rows.
  5576. The range of lines includes %@AS@%yStart%@AE@% and %@AS@%yEnd%@AE@%, as well as all lines in
  5577. between. Line numbers are zero-based, so that line 0 is the first line in
  5578. the file.%@NL@%
  5579. %@NL@%
  5580. %@CR:MSE84604@%%@4@%This argument type is possible if you declared your function with the flag%@EH@%
  5581. %@AB@%LINEARG%@AE@%.%@NL@%
  5582. %@NL@%
  5583. %@CR:MSE84605@%%@4@%%@AB@%Example%@AE@%%@EH@%%@NL@%
  5584. %@NL@%
  5585. %@CR:MSE84606@%%@4@%The following example sets %@AS@%cArg%@AE@% equal to the number of times that the user%@EH@%
  5586. invoked the %@AI@%Arg%@AE@% prefix, and sets %@AS@%yStart%@AE@% and %@AS@%yEnd%@AE@% equal to the line numbers
  5587. of the first and last lines:%@NL@%
  5588. %@NL@%
  5589.      int   cArg;%@NL@%
  5590.      LINE  yStart;%@NL@%
  5591.      LINE  yEnd;%@NL@%
  5592.      .%@NL@%
  5593.      .%@NL@%
  5594.      .%@NL@%
  5595.      if( pArg->argType == LINEARG )%@NL@%
  5596.      {%@NL@%
  5597.           cArg   = pArg->arg.linearg.cArg;%@NL@%
  5598.           yStart = pArg->arg.linearg.yStart;%@NL@%
  5599.           yEnd   = pArg->arg.linearg.yEnd;%@NL@%
  5600.      }%@NL@%
  5601. %@NL@%
  5602. %@NL@%
  5603. %@CR:MSE84700@%%@3@%%@AB@%8.4.7  The STREAMARG Type%@AE@%%@EH@%%@NL@%
  5604. %@NL@%
  5605. %@CR:MSE84701@%%@4@%When pArg->argType is equal to %@AB@%STREAMARG%@AE@%, the editor passes information in%@EH@%
  5606. the pArg->arg.linearg structure, which has the format:%@NL@%
  5607. %@NL@%
  5608.      struct streamargType%@NL@%
  5609.      {%@NL@%
  5610.          int   cArg;     %@AI@%/* Number of times Arg was invoked */%@AE@%%@NL@%
  5611.          LINE  yStart;   %@AI@%/* Coordinates of first byte in */%@AE@%%@NL@%
  5612.          COL   xStart;   %@AI@%/*   the stream of text */%@AE@%%@NL@%
  5613.          LINE  yEnd;     %@AI@%/* Coordinates of byte just after */%@AE@%%@NL@%
  5614.          COL   xEnd;     %@AI@%/*   the last byte of the stream */%@AE@%%@NL@%
  5615.      };%@NL@%
  5616. %@NL@%
  5617. %@CR:MSE84702@%%@4@%%@AB@%Description%@AE@%%@EH@%%@NL@%
  5618. %@NL@%
  5619. %@CR:MSE84703@%%@4@%The %@AB@%STREAMARG%@AE@% type indicates that the user defined a cursor-movement%@EH@%
  5620. argument, which the function interprets as a stream of text rather than as a
  5621. %@AI@%boxarg%@AE@% or %@AI@%linearg%@AE@%. The stream of text includes %@AS@%yStart%@AE@% and %@AS@%xStart%@AE@% but not
  5622. %@AS@%yEnd%@AE@% and %@AS@%xEnd%@AE@%, which gives the location of the character just to the right
  5623. of the last character in the stream.%@NL@%
  5624. %@NL@%
  5625. %@CR:MSE84704@%%@4@%This argument type is possible if you declared your function with the flag%@EH@%
  5626. %@AB@%STREAMARG%@AE@%.%@NL@%
  5627. %@NL@%
  5628. %@CR:MSE84705@%%@4@%%@AB@%Example%@AE@%%@EH@%%@NL@%
  5629. %@NL@%
  5630. %@CR:MSE84706@%%@4@%The following example sets %@AS@%cArg%@AE@% equal to the number of times that the user%@EH@%
  5631. invoked the %@AI@%Arg%@AE@% prefix. Then the example initializes variables for the
  5632. beginning and end of the stream.%@NL@%
  5633. %@NL@%
  5634.      int   cArg;%@NL@%
  5635.      LINE  yStart;%@NL@%
  5636.      COL   xStart;%@NL@%
  5637.      LINE  yEnd;%@NL@%
  5638.      COL   xEnd;%@NL@%
  5639.      .%@NL@%
  5640.      .%@NL@%
  5641.      .%@NL@%
  5642.      if( pArg-argType == LINEARG )%@NL@%
  5643.      {%@NL@%
  5644.           cArg   = pArg->arg.streamarg.cArg;%@NL@%
  5645.           yStart = pArg->arg.streamarg.yStart;%@NL@%
  5646.           xStart = pArg->arg.streamarg.xStart;%@NL@%
  5647.           yEnd   = pArg->arg.streamarg.yEnd;%@NL@%
  5648.           xEnd   = pArg->arg.streamarg.xEnd;%@NL@%
  5649.      }%@NL@%
  5650. %@NL@%
  5651. %@NL@%
  5652. %@CR:MSE84800@%%@3@%%@AB@%8.4.8  The BOXARG Type%@AE@%%@EH@%%@NL@%
  5653. %@NL@%
  5654. %@CR:MSE84801@%%@4@%When pArg->argType is equal to %@AB@%BOXARG%@AE@%, the editor passes information in the%@EH@%
  5655. pArg->arg.boxarg structure, which has the format:%@NL@%
  5656. %@NL@%
  5657.      struct  boxargType%@NL@%
  5658.      {%@NL@%
  5659.          int     cArg;        %@AI@%/* Number of times Arg was invoked */%@AE@%%@NL@%
  5660.          LINE    yTop;        %@AI@%/* Line number of first line */%@AE@%%@NL@%
  5661.          LINE    yBottom;     %@AI@%/* Line number of last line */%@AE@%%@NL@%
  5662.          COL     xLeft;       %@AI@%/* Leftmost column in box */%@AE@%%@NL@%
  5663.          COL     xRight;      %@AI@%/* Rightmost column in box */%@AE@%%@NL@%
  5664.      };%@NL@%
  5665. %@NL@%
  5666. %@CR:MSE84802@%%@4@%%@AB@%Description%@AE@%%@EH@%%@NL@%
  5667. %@NL@%
  5668. %@CR:MSE84803@%%@4@%The %@AB@%BOXARG%@AE@% type indicates that the user defined a rectangular area on the%@EH@%
  5669. screen. Row and column numbers are zero-based; in other words, the start of
  5670. the file is position (0,0). The lines and column edges, %@AS@%yTop%@AE@%, %@AS@%yBottom%@AE@%,
  5671. %@AS@%xLeft%@AE@%, and %@AS@%xRight%@AE@%, are all included in the area itself.%@NL@%
  5672. %@NL@%
  5673. %@CR:MSE84804@%%@4@%This argument type is possible if you declared your function with the flag %@EH@%
  5674. %@AB@%BOXARG%@AE@%.%@NL@%
  5675. %@NL@%
  5676. %@CR:MSE84805@%%@4@%%@AB@%Example%@AE@%%@EH@%%@NL@%
  5677. %@NL@%
  5678. %@CR:MSE84806@%%@4@%The following example sets %@AS@%cArg%@AE@% equal to the number of times that the user%@EH@%
  5679. invoked the %@AI@%Arg%@AE@% prefix. Then the example initializes variables for the four
  5680. borders of the box.%@NL@%
  5681. %@NL@%
  5682.      int   cArg;%@NL@%
  5683.      LINE  yTop;%@NL@%
  5684.      LINE  yBottom;%@NL@%
  5685.      COL   xLeft;%@NL@%
  5686.      COL   xRight;%@NL@%
  5687.      .%@NL@%
  5688.      .%@NL@%
  5689.      .%@NL@%
  5690.      if( pArg-argType == LINEARG )%@NL@%
  5691.      {%@NL@%
  5692.           cArg    = pArg->arg.boxarg.cArg;%@NL@%
  5693.           yTop    = pArg->arg.boxarg.yTop;%@NL@%
  5694.           yBottom = pArg->arg.boxarg.yBottom;%@NL@%
  5695.           xLeft   = pArg->arg.boxarg.xLeft;%@NL@%
  5696.           xRight  = pArg->arg.boxarg.xRight;%@NL@%
  5697.      }%@NL@%
  5698. %@NL@%
  5699. %@NL@%
  5700. %@CR:MSE84900@%%@3@%%@AB@%8.4.9  Modifying the Current File%@AE@%%@EH@%%@NL@%
  5701. %@NL@%
  5702. %@CR:MSE84901@%%@4@%This section deals with the core of an editing function──reading and%@EH@%
  5703. altering the file.%@NL@%
  5704. %@NL@%
  5705. %@CR:MSE84902@%%@4@%After you have analyzed the user's argument and got a handle to the current%@EH@%
  5706. file, you are ready to work on the file. At this stage, two functions are
  5707. most relevant: %@AB@%GetLine%@AE@% and %@AB@%Putline%@AE@%.%@NL@%
  5708. %@NL@%
  5709. %@CR:MSE84903@%%@4@%The %@AB@%GetLine%@AE@% function reads one line from the file:%@EH@%%@NL@%
  5710. %@NL@%
  5711.      len = GetLine (yStart, buffer, pFile);%@NL@%
  5712. %@NL@%
  5713. %@CR:MSE84904@%%@4@%The first argument is a line number, the second a pointer to a buffer, and%@EH@%
  5714. the third a file handle. With extension functions, line numbers are
  5715. consistently indexed (they are all zero-based so that the first line in the
  5716. file is numbered 0), so you can use a line number previously passed by the
  5717. editor. The buffer is a previously declared string of characters. %@AB@%GetLine%@AE@%
  5718. fills this string with characters and a terminating null byte. Since you are
  5719. working on the current file, pass the file handle you received when you
  5720. called %@AB@%FileNameToHandle%@AE@%.%@NL@%
  5721. %@NL@%
  5722. %@CR:MSE84905@%%@4@%Finally, %@AB@%GetLine%@AE@% returns the length of the line copied.%@EH@%%@NL@%
  5723. %@NL@%
  5724. %@CR:MSE84906@%%@4@%The %@AB@%PutLine%@AE@% function is the flip side of %@AB@%GetLine%@AE@% and takes almost exactly%@EH@%
  5725. the same arguments:%@NL@%
  5726. %@NL@%
  5727.      PutLine (yStart, buffer, pFile);%@NL@%
  5728. %@NL@%
  5729. %@CR:MSE84907@%%@4@%The first argument is a zero-based line number. The second argument points%@EH@%
  5730. to a buffer containing text that you want to write to the file. The third
  5731. argument is a file handle. Again, you can use a handle to the current file.%@NL@%
  5732. %@NL@%
  5733. %@CR:MSE84908@%%@4@%Both %@AB@%GetLine%@AE@% and %@AB@%PutLine%@AE@% deal with null-terminated strings. You should not%@EH@%
  5734. add a new-line character to the string you pass to %@AB@%PutLine%@AE@%. The editor adds
  5735. or strips new-line characters as appropriate.%@NL@%
  5736. %@NL@%
  5737. %@CR:MSE84909@%%@4@%The following section of code demonstrates the use of %@AB@%GetLine%@AE@% and %@AB@%PutLine%@AE@% in%@EH@%
  5738. a loop that numbers the lines %@AS@%yStart%@AE@% to %@AS@%yEnd%@AE@%:%@NL@%
  5739. %@NL@%
  5740.      for( curLine = yStart, i = 1; curLine <= yEnd; curLine++, i++ )%@NL@%
  5741.      {%@NL@%
  5742.          GetLine( curLine, buffer, pFile ); %@AI@%/* Get line */%@AE@%%@NL@%
  5743. %@NL@%
  5744.          itoa( i, digits, 10 );             %@AI@%/* Convert i to digit string */%@AE@%%@NL@%
  5745.          strcat( digits, ". " );%@NL@%
  5746.          strcat( digits, buffer );          %@AI@%/* Prefix buffer with digits */%@AE@%%@NL@%
  5747. %@NL@%
  5748.          PutLine( curLine, digits, pFile ); %@AI@%/* Put line back */%@AE@%%@NL@%
  5749.      }%@NL@%
  5750. %@NL@%
  5751. %@NL@%
  5752. %@CR:MSE85000@%%@2@%%@AB@%8.5  Compiling and Linking%@AE@%%@EH@%%@NL@%
  5753. %@NL@%
  5754. %@CR:MSE85001@%%@4@%After writing your C module, you're ready to compile and link. The%@EH@%
  5755. procedures for compiling and linking in protected mode are slightly
  5756. different from compiling and linking in real mode. Sections 8.5.1%@BO:   4ab20@% and
  5757. 8.5.2%@BO:   4b1b6@% consider both environments.%@NL@%
  5758. %@NL@%
  5759. ───────────────────────────────────────────────────────────────────────────%@NL@%
  5760. %@AI@%NOTE%@AE@%%@NL@%
  5761.    If you created C-extension modules for Version 1.0 of the Microsoft%@NL@%
  5762.    Editor, you do not have to recompile or relink your C extensions.%@NL@%
  5763.    However, if you do recompile your extensions, make sure that you use the%@NL@%
  5764.    new version of the EXT.H include file.%@NL@%
  5765. ───────────────────────────────────────────────────────────────────────────%@NL@%
  5766. %@NL@%
  5767. %@NL@%
  5768. %@CR:MSE85100@%%@3@%%@AB@%8.5.1  Compiling and Linking for Real Mode%@AE@%%@EH@%%@NL@%
  5769. %@NL@%
  5770. %@CR:MSE85101@%%@4@%To create a C extension for real mode (DOS or the OS/2 3.%@AI@%x%@AE@% compability box),%@EH@%
  5771. follow these steps:%@NL@%
  5772. %@NL@%
  5773. %@CR:MSE85102@%  1. Compile with command line options /Gs and /Asfu. These mandatory%@NL@%
  5774.      options establish the proper memory model and calling convention. (If%@NL@%
  5775.      you are programming in the Microsoft Macro Assembler (MASM), use near%@NL@%
  5776.      code and far data segments, in which SS is not assumed equal to DS.)%@NL@%
  5777.      For example:%@NL@%
  5778. %@NL@%
  5779.          %@AS@%CL /c /Gs /Asfu myext.c%@AE@%%@NL@%
  5780. %@NL@%
  5781.   2. Link the file EXTHDR.OBJ to your extension. The EXTHDR.OBJ file must be%@NL@%
  5782.      the first object module on the command line:%@NL@%
  5783. %@NL@%
  5784.          %@AS@%CL /AC /Femyext.mxt exthdr myext%@AE@%%@NL@%
  5785. %@NL@%
  5786.      Use the /AC option if your extension calls C library functions. The /AC%@NL@%
  5787.      option directs the linker to use the compact-model library.%@NL@%
  5788. %@NL@%
  5789. ───────────────────────────────────────────────────────────────────────────%@NL@%
  5790. %@AI@%IMPORTANT%@AE@%%@NL@%
  5791.    Strictly speaking, the .MXT file extension is not required; the editor%@NL@%
  5792.    can load modules with any file extension name. However, using a file%@NL@%
  5793.    extension of .MXT is strongly recommended so that your extensions are not%@NL@%
  5794.    confused with true executable (.EXE) files, which can be run directly%@NL@%
  5795.    from DOS. Trying to execute an extension as if it were an .EXE file will%@NL@%
  5796.    bring the system to its knees.%@NL@%
  5797. ───────────────────────────────────────────────────────────────────────────%@NL@%
  5798. %@NL@%
  5799. %@NL@%
  5800. %@CR:MSE85200@%%@3@%%@AB@%8.5.2  Compiling and Linking for Protected Mode%@AE@%%@EH@%%@NL@%
  5801. %@NL@%
  5802. %@CR:MSE85201@%%@4@%To create a C extension for protected mode, follow these steps:%@EH@%%@NL@%
  5803. %@NL@%
  5804. %@CR:MSE85202@%  1. Compile with command-line options /Gs and /Asfu. These mandatory%@NL@%
  5805.      options establish the proper memory model and calling convention. (If%@NL@%
  5806.      you are programming in MASM, use near code and far data segments in%@NL@%
  5807.      which SS is not assumed equal to DS.) For example:%@NL@%
  5808. %@NL@%
  5809.           %@AS@%CL /c /Gs /Asfu myext.c%@AE@%%@NL@%
  5810. %@NL@%
  5811.      The same object module can be used for both real and protected mode, so%@NL@%
  5812.      you do not have to recompile if you want an extension for both modes.%@NL@%
  5813.      However, you do have to relink, as explained below.%@NL@%
  5814. %@NL@%
  5815.   2. Link with the file EXTHDRP.OBJ to your extension along with a%@NL@%
  5816.      module-definitions file. The EXTHDRP.OBJ file must be the first object%@NL@%
  5817.      module on the command line:%@NL@%
  5818. %@NL@%
  5819.           %@AS@%LINK /NOI exthdrp myext, myext.dll,, doscalls, myext.def;%@AE@%%@NL@%
  5820. %@NL@%
  5821.      If your extension calls C library functions, link in the compact-model%@NL@%
  5822.      library. Link with the /NOI option, since the OS/2 loader is%@NL@%
  5823.      case-sensitive.%@NL@%
  5824. %@NL@%
  5825. %@CR:MSE85203@%%@4@%The file MYEXT.DEF can be created by copying the file SKEL.DEF (provided%@EH@%
  5826. with the editor). No modification is necessary. You can also link with
  5827. SKEL.DEF itself.%@NL@%
  5828. %@NL@%
  5829. %@NL@%
  5830. %@CR:MSE85300@%%@3@%%@AB@%8.5.3  Loading Your Extension%@AE@%%@EH@%%@NL@%
  5831. %@NL@%
  5832. %@CR:MSE85301@%%@4@%Compiling and linking your module with the correct options produces an .MXT%@EH@%
  5833. file (for real mode) or a .DLL file (for OS/2 protected mode) the editor can
  5834. load and execute on demand.%@NL@%
  5835. %@NL@%
  5836. %@CR:MSE85302@%%@4@%To use a real-mode extension, set the %@AB@%load%@AE@% switch with the full path name%@EH@%
  5837. for your C extension. For example, after you have created the file
  5838. MYEXT.MXT, you could place the following statement in the TOOLS.INI file:%@NL@%
  5839. %@NL@%
  5840.      load:%@AI@%path%@AE@%\myext.mxt%@NL@%
  5841. %@NL@%
  5842. %@CR:MSE85303@%%@4@%in which %@AI@%path%@AE@% is the location of the extension. The editor responds by%@EH@%
  5843. automatically loading your C-extension module into memory upon start-up. You
  5844. can also set the %@AB@%load%@AE@% switch with the %@AI@%Assign%@AE@% command.%@NL@%
  5845. %@NL@%
  5846. ───────────────────────────────────────────────────────────────────────────%@NL@%
  5847. %@AI@%NOTE%@AE@%%@NL@%
  5848.    The load switch can be assigned a number of times, each assignment%@NL@%
  5849.    causing the editor to load another extension. All of the extensions%@NL@%
  5850.    reside in memory together; no extension is removed from memory until the%@NL@%
  5851.    editor terminates.%@NL@%
  5852. ───────────────────────────────────────────────────────────────────────────%@NL@%
  5853. %@NL@%
  5854. %@CR:MSE85304@%%@4@%The load switch can accept an environment variable as described in Section%@EH@%
  5855. 7.3%@BO:   3a7a5@%, "Special Syntax for Text Switches."%@NL@%
  5856. %@NL@%
  5857. %@CR:MSE85305@%%@4@%To use a protected-mode extension, place your .DLL file in a directory%@EH@%
  5858. specified in the LIBPATH variable. You can set the load switch in the same
  5859. way described above; however, when running under protected mode, the editor
  5860. ignores the %@AI@%path%@AE@% and the file extension. Therefore, for protected-mode-only
  5861. extensions, the only declaration you need is the following:%@NL@%
  5862. %@NL@%
  5863.      load:myext%@NL@%
  5864. %@NL@%
  5865. %@CR:MSE85306@%%@4@%To load an extension for both real and protected modes, follow these steps:%@EH@%%@NL@%
  5866. %@NL@%
  5867. %@CR:MSE85307@%  1. Compile the source file once.%@NL@%
  5868. %@NL@%
  5869.   2. Link two times, once for real mode and once for protected mode.%@NL@%
  5870. %@NL@%
  5871.   3. Place the protected-mode module (a .DLL file) in a LIBPATH directory.%@NL@%
  5872. %@NL@%
  5873.   4. Use the real-mode %@AB@%load%@AE@% setting. The editor uses the full text of the%@NL@%
  5874.      switch setting when in real mode, but ignores the path and file%@NL@%
  5875.      extension when in protected mode.%@NL@%
  5876. %@NL@%
  5877. %@CR:MSE85308@%%@4@%Whenever the editor successfully loads an extension, it checks the TOOLS.INI%@EH@%
  5878. file for the tag%@NL@%
  5879. %@NL@%
  5880.      %@AB@%[M-%@AE@%%@AI@%mxt%@AE@%%@AB@%]%@AE@%%@NL@%
  5881. %@NL@%
  5882. %@CR:MSE8530A@%%@4@%in which %@AI@%mxt%@AE@% is the base name of the extension. If the tag exists, the%@EH@%
  5883. editor recognizes the settings immediately following the tag.%@NL@%
  5884. %@NL@%
  5885. %@CR:MSE85310@%%@4@%%@AB@%Special Considerations for OS/2%@AE@%%@EH@%%@NL@%
  5886. %@NL@%
  5887. %@CR:MSE85311@%%@4@%Under OS/2 Version 1.1 and later, protected-mode editor extensions may have%@EH@%
  5888. file extensions other than .DLL and may be placed in directories other than
  5889. those specified in LIBPATH. The editor searches for the extensions specified
  5890. in the %@AB@%load%@AE@% statement in the following sequence:%@NL@%
  5891. %@NL@%
  5892. %@CR:MSE85312@%  1. If an environment variable or a full path is specified, the editor%@NL@%
  5893.      searches the appropriate directories, as in the following examples:%@NL@%
  5894. %@NL@%
  5895.          load:$LIB:yourext.mxt%@NL@%
  5896. %@NL@%
  5897.          load:drive:\dir\ yourext.mxt%@NL@%
  5898. %@NL@%
  5899.      The editor searches the current directory if there is no environment%@NL@%
  5900.      variable or full-path specification.%@NL@%
  5901. %@NL@%
  5902.   2. If the desired extension is not found, and its name is only a base name%@NL@%
  5903.      without a file extension, the editor appends the appropriate file%@NL@%
  5904.      extension (.MXT for real mode, .PXT for protected mode) and repeats%@NL@%
  5905.      Step 1.%@NL@%
  5906. %@NL@%
  5907.   3. If the editor extension still cannot be located, the editor searches%@NL@%
  5908.      for %@AI@%basename%@AE@%.DLL in the directories specified in LIBPATH, where%@NL@%
  5909.      %@AI@%basename%@AE@% is the base name of the extension.%@NL@%
  5910. %@NL@%
  5911. %@CR:MSE85313@%%@4@%In real mode (DOS or the OS/2 3.%@AI@%x%@AE@% compatibility box), only Steps 1 and 2 are%@EH@%
  5912. preformed. Under OS/2 Version 1.0, only Step 3 is performed.%@NL@%
  5913. %@NL@%
  5914. %@CR:MSE85314@%%@4@%Within TOOLS.INI tag declarations, only the base name is significant, not%@EH@%
  5915. the file extension. For example, the statements following%@NL@%
  5916. %@NL@%
  5917.      [M-YOUREXT]%@NL@%
  5918. %@NL@%
  5919. %@CR:MSE85315@%%@4@%would always be used, regardless of the file extension that was used to%@EH@%
  5920. locate YOUREXT.%@NL@%
  5921. %@NL@%
  5922. %@CR:MSE85316@%%@4@%The "autoload" feature automatically loads extensions without a %@AB@%load%@AE@%%@EH@%
  5923. statement in TOOLS.INI. The editor searches the directories in the PATH
  5924. environment variable for file names with the following patterns, and loads
  5925. as many of them as it finds:%@NL@%
  5926. %@NL@%
  5927. %@CR:MSE85317@%%@AB@%Operating System            Extension Autoloaded%@AE@%%@NL@%
  5928. %@NL@%
  5929. DOS or OS/2 real mode       M*.MXT%@NL@%
  5930. %@NL@%
  5931. OS/2 protected mode         M*.PXT%@NL@%
  5932. %@NL@%
  5933. %@CR:MSE85318@%%@4@%The file names for the on-line Help extensions supplied with this version of%@EH@%
  5934. the Microsoft Editor have the correct form for autoloading. Therefore, they
  5935. only need to be placed in any directory in the PATH environment variable;
  5936. you do not have to add a %@AB@%load%@AE@% statement to TOOLS.INI.%@NL@%
  5937. %@NL@%
  5938. %@CR:MSE85319@%%@4@%Autoloading occurs after TOOLS.INI has been read, so any extension-specific%@EH@%
  5939. sections still take effect.%@NL@%
  5940. %@NL@%
  5941. ───────────────────────────────────────────────────────────────────────────%@NL@%
  5942. %@AI@%NOTE%@AE@%%@NL@%
  5943.    Autoloading does not work under OS/2 Version 1.0.%@NL@%
  5944. ───────────────────────────────────────────────────────────────────────────%@NL@%
  5945. %@NL@%
  5946. %@CR:MSE8531A@%%@4@%You can load extensions in both real and protected mode by using a single%@EH@%
  5947. %@AB@%load%@AE@% statement of the following form:%@NL@%
  5948. %@NL@%
  5949.      load:$PATH:%@AI@%basename%@AE@%%@NL@%
  5950. %@NL@%
  5951. %@CR:MSE8531B@%%@4@%The extensions must have the same %@AI@%basename%@AE@% and the default extension (.MXT%@EH@%
  5952. for DOS or OS/2 real mode, .PXT for OS/2 protected mode) for the appropriate
  5953. operating system. The extensions can go anywhere in the specified path.
  5954. Since the file extension is omitted in this %@AB@%load%@AE@% statement, the editor will
  5955. append the appropriate extension to %@AI@%basename%@AE@% (be sure the name has no
  5956. trailing period) and load the correct file.%@NL@%
  5957. %@NL@%
  5958. %@CR:MSE8531C@%%@4@%You can also give your extension a name of the form M*.MXT or M*.PXT%@EH@%
  5959. (according to the operating system). The extension will be autoloaded
  5960. without requiring a %@AB@%load%@AE@% statement in TOOLS.INI. It is also possible to
  5961. specify the editor extension for one mode in a %@AB@%load%@AE@% statement, while giving
  5962. the extension for the other mode an autoload default name.%@NL@%
  5963. %@NL@%
  5964. %@NL@%
  5965. %@CR:MSE86000@%%@2@%%@AB@%8.6  A C-Extension Sample Program%@AE@%%@EH@%%@NL@%
  5966. %@NL@%
  5967. %@CR:MSE86001@%%@4@%The following C-extension sample program features a function named %@AS@%tglcase%@AE@%.%@EH@%
  5968. This function converts uppercase letters to lowercase, and lowercase letters
  5969. to uppercase. It acts on the file according to the argument type:%@NL@%
  5970. %@NL@%
  5971. %@CR:MSE86002@%%@AB@%Argument                    Effect%@AE@%%@NL@%
  5972. %@NL@%
  5973. %@AB@%NOARG%@AE@%                       Acts on entire current line.%@NL@%
  5974. %@NL@%
  5975. %@AB@%NULLARG%@AE@%                     Acts on current line, from the cursor position%@NL@%
  5976.                             (inclusive) up to the end of the line.%@NL@%
  5977. %@NL@%
  5978. %@AB@%BOXARG%@AE@%                      Acts on the highlighted region.%@NL@%
  5979. %@NL@%
  5980. %@AB@%LINEARG%@AE@%                     Acts on the highlighted region (containing a%@NL@%
  5981.                             range of complete lines).%@NL@%
  5982. %@NL@%
  5983. %@AB@%TEXTARG%@AE@%                     Argument not accepted.%@NL@%
  5984. %@NL@%
  5985. %@AB@%STREAMARG%@AE@%                   Not recognized. The argument is treated as %@AB@%%@AE@%%@NL@%
  5986.                             %@AB@%BOXARG%@AE@% or %@AB@%LINEARG%@AE@%.%@NL@%
  5987. %@NL@%
  5988. %@CR:MSE86003@%%@4@%In each case, the function responds to the argument by initializing the%@EH@%
  5989. limits of an imaginary box. In the case of a %@AB@%LINEARG%@AE@%, the column limits are
  5990. set at 0 and BUFLEN (the maximum length of a text line in M). %@AB@%NOARG%@AE@% and
  5991. %@AB@%NULLARG%@AE@% are handled in a similar fashion. Once the limits of the area are
  5992. initialized, one small section of code does the actual work. This section
  5993. calls %@AB@%GetLine%@AE@% and %@AB@%PutLine%@AE@% repeatedly to read and replace lines in the
  5994. current file.%@NL@%
  5995. %@NL@%
  5996. %@CR:MSE86004@%%@4@%This extension calls C library functions. To successfully link this%@EH@%
  5997. extension, include the compact-model library.%@NL@%
  5998. %@NL@%
  5999.      %@AI@%/*** tglcase.c - case toggling editor extension%@AE@%%@NL@%
  6000.      %@AI@%*/%@AE@%%@NL@%
  6001.      #define ID      " tglcase ver 1.00 "##__DATE__##" "##__TIME__%@NL@%
  6002.      #define NULL    ((void *) 0)%@NL@%
  6003. %@NL@%
  6004.      #include <stdlib.h>                     %@AI@%/* min macro definition */%@AE@%%@NL@%
  6005.      #include <string.h>                     %@AI@%/* prototypes for string fcns*/%@AE@%%@NL@%
  6006.      #include "ext.h"%@NL@%
  6007.      %@AI@%/*%@AE@%%@NL@%
  6008.      %@AI@%** Internal function prototypes%@AE@%%@NL@%
  6009.      %@AI@%*/%@AE@%%@NL@%
  6010.      void     pascal          id         (char *);%@NL@%
  6011.      void     WhenLoaded (void);%@NL@%
  6012.      flagType pascal EXPORT tglcase    (unsigned int, ARG far *, flagType);%@NL@%
  6013. %@NL@%
  6014.      %@AI@%/********************************************************************%@AE@%%@NL@%
  6015.      %@AI@%**%@AE@%%@NL@%
  6016.      %@AI@%** tglcase%@AE@%%@NL@%
  6017.      %@AI@%** Toggle the case of alphabetics contained within the selected argument:%@AE@%%@NL@%
  6018.      %@AI@%**%@AE@%%@NL@%
  6019.      %@AI@%**  NOARG       - Toggle case of entire current line%@AE@%%@NL@%
  6020.      %@AI@%**  NULLARG     - Toggle case of current line from cursor to end of line%@AE@%%@NL@%
  6021.      %@AI@%**  LINEARG     - Toggle case of range of lines%@AE@%%@NL@%
  6022.      %@AI@%**  BOXARG      - Toggle case of characters with the selected box%@AE@%%@NL@%
  6023.      %@AI@%**  NUMARG      - Converted to LINEARG before extension is called%@AE@%%@NL@%
  6024.      %@AI@%**  MARKARG     - Converted to Appropriate ARG form above before extension is%@AE@%%@NL@%
  6025.      %@AI@%**                called%@AE@%%@NL@%
  6026.      %@AI@%**%@AE@%%@NL@%
  6027.      %@AI@%**  STREAMARG   - Not Allowed; treated as BOXARG%@AE@%%@NL@%
  6028.      %@AI@%**  TEXTARG     - Not Allowed%@AE@%%@NL@%
  6029.      %@AI@%**%@AE@%%@NL@%
  6030.      %@AI@%*/%@AE@%%@NL@%
  6031.      flagType pascal EXTERNAL tglcase (argData, pArg, fMeta)%@NL@%
  6032.      unsigned int argData;                   %@AI@%/* keystroke invoked with */%@AE@%%@NL@%
  6033.      ARG far *pArg;                          %@AI@%/* argument data */%@AE@%%@NL@%
  6034.      flagType fMeta;                         %@AI@%/* indicates preceded by meta */%@AE@%%@NL@%
  6035.      {%@NL@%
  6036.          PFILE   pFile;                  %@AI@%/* file handle of current file */%@AE@%%@NL@%
  6037.          COL     xStart;                 %@AI@%/* left border of arg area */%@AE@%%@NL@%
  6038.          LINE    yStart;                 %@AI@%/* starting line of arg area */%@AE@%%@NL@%
  6039.          COL     xEnd;                   %@AI@%/* right border of arg area */%@AE@%%@NL@%
  6040.          LINE    yEnd;                   %@AI@%/* ending line of arg area */%@AE@%%@NL@%
  6041.          int     cbLine;                 %@AI@%/* byte count of current line */%@AE@%%@NL@%
  6042.          COL     xCur;                   %@AI@%/* current column being toggled */%@AE@%%@NL@%
  6043.          char    buf[BUFLEN];            %@AI@%/* buffer for line being toggled*/%@AE@%%@NL@%
  6044.          register char c;                %@AI@%/* character being analyzed */%@AE@%%@NL@%
  6045. %@NL@%
  6046.          id( "" );%@NL@%
  6047.          pFile = FileNameToHandle( "", NULL );%@NL@%
  6048.          switch( pArg->argType )%@NL@%
  6049.          {%@NL@%
  6050.      %@AI@%/*%@AE@%%@NL@%
  6051.      %@AI@%** For the various argument types, set up a box%@AE@%%@NL@%
  6052.      %@AI@%** (xStart, yStart) - (xEnd, yEnd)%@AE@%%@NL@%
  6053.      %@AI@%** over which the case conversion code below can operate%@AE@%%@NL@%
  6054.      %@AI@%*/%@AE@%%@NL@%
  6055.              case NOARG:                         %@AI@%/* case switch entire line */%@AE@%%@NL@%
  6056.                  xStart = 0;%@NL@%
  6057.                  xEnd = BUFLEN;%@NL@%
  6058.                  yStart = yEnd = pArg->arg.noarg.y;%@NL@%
  6059.                  break;%@NL@%
  6060. %@NL@%
  6061.              case NULLARG:                       %@AI@%/* case switch to EOL */%@AE@%%@NL@%
  6062.                  xStart = pArg->arg.nullarg.x;%@NL@%
  6063.                  xEnd = BUFLEN;%@NL@%
  6064.                  yStart = yEnd = pArg->arg.nullarg.y;%@NL@%
  6065.                  break;%@NL@%
  6066. %@NL@%
  6067.              case LINEARG:                       %@AI@%/* case switch line range */%@AE@%%@NL@%
  6068.                  xStart = 0;%@NL@%
  6069.                  xEnd = BUFLEN;%@NL@%
  6070.                  yStart = pArg->arg.linearg.yStart;%@NL@%
  6071.                  yEnd = pArg->arg.linearg.yEnd;%@NL@%
  6072.                  break;%@NL@%
  6073. %@NL@%
  6074.              case BOXARG:                        %@AI@%/* case switch box */%@AE@%%@NL@%
  6075.                  xStart = pArg->arg.boxarg.xLeft;%@NL@%
  6076.                  xEnd   = pArg->arg.boxarg.xRight;%@NL@%
  6077.                  yStart = pArg->arg.boxarg.yTop;%@NL@%
  6078.                  yEnd   = pArg->arg.boxarg.yBottom;%@NL@%
  6079.                  break;%@NL@%
  6080.          }%@NL@%
  6081.      %@AI@%/*%@AE@%%@NL@%
  6082.      %@AI@%** Within range of lines yStart to yEnd, get each line, and if non-null,%@AE@%%@NL@%
  6083.      %@AI@%** check each character. If alphabetic, replace with its case-converted%@AE@%%@NL@%
  6084.      %@AI@%** value. After all characters have been checked, replace line in file.%@AE@%%@NL@%
  6085.      %@AI@%*/%@AE@%%@NL@%
  6086.          while( yStart <= yEnd )%@NL@%
  6087.          {%@NL@%
  6088.           if( cbLine = GetLine( yStart, buf, pFile ))%@NL@%
  6089.              {%@NL@%
  6090.               for( xCur = xStart; (xCur <= min( cbLine, xEnd )); xCur++ )%@NL@%
  6091.                  {%@NL@%
  6092.                      c = buf[xCur];%@NL@%
  6093.                if( (c >= 'A' ) && (c <= 'Z'))%@NL@%
  6094.                          c += 'a'-'A';%@NL@%
  6095.                else if( (c >= 'a' ) && (c <= 'z'))%@NL@%
  6096.                          c += 'A'-'a';%@NL@%
  6097.                      buf[xCur] = c;%@NL@%
  6098.                  }%@NL@%
  6099.               PutLine( yStart++, buf, pFile );%@NL@%
  6100.              }%@NL@%
  6101.          }%@NL@%
  6102.          return 1;%@NL@%
  6103.      }%@NL@%
  6104.      %@AI@%/*************************************************************************%@AE@%%@NL@%
  6105.      %@AI@%**%@AE@%%@NL@%
  6106.      %@AI@%** WhenLoaded%@AE@%%@NL@%
  6107.      %@AI@%** Executed when extension gets loaded. Identify self & assign default%@AE@%%@NL@%
  6108.      %@AI@%** keystroke.%@AE@%%@NL@%
  6109.      %@AI@%**%@AE@%%@NL@%
  6110.      %@AI@%** Entry:%@AE@%%@NL@%
  6111.      %@AI@%**  none%@AE@%%@NL@%
  6112.      %@AI@%*/%@AE@%%@NL@%
  6113.      void WhenLoaded ()%@NL@%
  6114.      {%@NL@%
  6115.      id("case conversion extension:");%@NL@%
  6116.      SetKey ("tglcase",  "alt+c");%@NL@%
  6117.      } %@AI@%/* end WhenLoaded */%@AE@%%@NL@%
  6118. %@NL@%
  6119.      %@AI@%/*************************************************************************%@AE@%%@NL@%
  6120.      %@AI@%**%@AE@%%@NL@%
  6121.      %@AI@%** id%@AE@%%@NL@%
  6122.      %@AI@%** identify ourselves, along with any passed informative message%@AE@%%@NL@%
  6123.      %@AI@%**%@AE@%%@NL@%
  6124.      %@AI@%** Entry:%@AE@%%@NL@%
  6125.      %@AI@%**  pszMsg      = Pointer to asciiz message to which the extension name%@AE@%%@NL@%
  6126.      %@AI@%**                and version are appended prior to display%@AE@%%@NL@%
  6127.      %@AI@%*/%@AE@%%@NL@%
  6128.      void pascal id (pszFcn)%@NL@%
  6129.      char *pszFcn;                                   %@AI@%/* function name */%@AE@%%@NL@%
  6130.      {%@NL@%
  6131.          char    buf[80];                                %@AI@%/* message buffer */%@AE@%%@NL@%
  6132. %@NL@%
  6133.          strcpy (buf,pszFcn);                    %@AI@%/* start with message */%@AE@%%@NL@%
  6134.          strcat (buf,ID);                                %@AI@%/* append version */%@AE@%%@NL@%
  6135.          DoMessage (buf);%@NL@%
  6136.      } %@AI@%/* end id */%@AE@%%@NL@%
  6137. %@NL@%
  6138. %@NL@%
  6139.      %@AI@%/*************************************************************************%@AE@%%@NL@%
  6140.      %@AI@%**%@AE@%%@NL@%
  6141.      %@AI@%** Switch communication table to the editor%@AE@%%@NL@%
  6142.      %@AI@%** This extension defines no switches%@AE@%%@NL@%
  6143.      %@AI@%*/%@AE@%%@NL@%
  6144.      struct swiDesc  swiTable[] =%@NL@%
  6145.      {%@NL@%
  6146.          { NULL, NULL, 0 }%@NL@%
  6147.      };%@NL@%
  6148. %@NL@%
  6149.      %@AI@%/*************************************************************************%@AE@%%@NL@%
  6150.      %@AI@%**%@AE@%%@NL@%
  6151.      %@AI@%** Command communication table to the editor%@AE@%%@NL@%
  6152.      %@AI@%** Defines the name, location and acceptable argument types%@AE@%%@NL@%
  6153.      %@AI@%*/%@AE@%%@NL@%
  6154.      struct cmdDesc  cmdTable[] =%@NL@%
  6155.      {%@NL@%
  6156.          {"tglcase",tglcase,0, KEEPMETA | NOARG | BOXARG | NULLARG | LINEARG%@NL@%
  6157.      |%@NL@%
  6158.                                MARKARG | NUMARG | MODIFIES},%@NL@%
  6159.          { NULL, NULL, 0, 0 }%@NL@%
  6160.      };%@NL@%
  6161. %@NL@%
  6162. %@NL@%
  6163. %@CR:MSE87000@%%@2@%%@AB@%8.7  Calling Library Functions%@AE@%%@EH@%%@NL@%
  6164. %@NL@%
  6165. %@CR:MSE87001@%%@4@%This section lists compatible C library functions as well as low-level%@EH@%
  6166. extension functions you can call.%@NL@%
  6167. %@NL@%
  6168. %@CR:MSE87002@%%@4@%You should call the editor's own low-level functions in preference to%@EH@%
  6169. functions in the standard C library whenever possible. Using the editor's
  6170. low-level functions guarantees that all file operations are compatible with
  6171. the editor.%@NL@%
  6172. %@NL@%
  6173. %@CR:MSE87003@%%@4@%Furthermore, not all functions in the C library are compatible with%@EH@%
  6174. extensions. The following list summarizes which functions from the
  6175. compact-model library should work when called by a C-extension module. Link
  6176. with a compact-memory-model C library if you want to call these functions.
  6177. The list refers to the function categories from Chapter 4%@BO:   120e2@% of the %@AI@%Microsoft C%@AE@%
  6178. %@AI@%Optimizing Compiler Run-Time Library Reference%@AE@% (Version 4.0 or later).%@NL@%
  6179. %@NL@%
  6180. %@CR:MSE87004@%%@4@%Note that floating-point arithmetic is not supported because it involves%@EH@%
  6181. calls to low-level, floating-point math routines.%@NL@%
  6182. %@CR:MSE87005@%%@NL@%
  6183. %@TH:   42   1423  2 28 48 @%
  6184. %@AB@%Category                    Compatible Functions%@AE@%
  6185.  
  6186. Buffer manipulation         All functions can be called.
  6187.  
  6188. Character                   All functions can be called.
  6189. classification and
  6190. conversion
  6191.  
  6192. Data conversion             All functions can be called except %@AB@%strtod%@AE@%.
  6193.  
  6194. Directory control           All functions can be called except %@AB@%getcwd%@AE@%.
  6195.  
  6196. Graphics                    None.
  6197.  
  6198. File handling               All functions can be called.
  6199.  
  6200. Stream routines             None.
  6201.  
  6202. Low-level I/O routines      None.
  6203.  
  6204. Console and port I/O        All functions can be called except %@AB@%cgets%@AE@%,
  6205.                             %@AB@%cprintf%@AE@%, and %@AB@%cscanf%@AE@%.
  6206.  
  6207. Math                        None.
  6208.  
  6209. Memory allocation           None.
  6210.  
  6211. Process control             None.
  6212.  
  6213. Searching and sorting       All functions can be called except %@AB@%qsort%@AE@%.
  6214.  
  6215. String manipulation         All functions can be called except %@AB@%strdup%@AE@%.
  6216.  
  6217. BIOS interface              All functions can be called.
  6218.  
  6219. MS-DOS interface            All functions can be called except %@AB@%int86%@AE@% and
  6220.                             %@AB@%int86x%@AE@%.
  6221.  
  6222. Time                        None.
  6223.  
  6224. Miscellaneous               All functions can be called except %@AB@%assert%@AE@%,
  6225.                             %@AB@%getenv%@AE@%, %@AB@%perror%@AE@%, %@AB@%putenv%@AE@%, and %@AB@%_searchenv%@AE@%.
  6226. %@TE:   42   1423  2 28 48 @%
  6227. %@NL@%
  6228. %@CR:MSE87006@%%@4@%Table 8.2%@BO:   505ed@% lists the low-level extension functions by category. Your%@EH@%
  6229. extension can call any of these functions. The next chapter gives an
  6230. alphabetical reference to all of the functions, including declarations and
  6231. examples.%@NL@%
  6232. %@NL@%
  6233. %@CR:MSE8T200@%%@4@%%@AU@%Table 8.2  Summary of Extension Functions by Category%@AE@%%@EH@%%@NL@%
  6234. %@NL@%
  6235. %@TH:   38   2405  1 19 20 37 @%
  6236. %@AB@%Category           Functions           Description%@AE@%
  6237.  
  6238. File Handle        AddFile             Opens new file and gets file handle
  6239.                    %@AB@%FileNameToHandle%@AE@%    Gets handle to already opened file
  6240.                    %@AB@%Remove File%@AE@%         Removes file structure from memory
  6241.  
  6242. Line-Oriented      %@AB@%FileLength%@AE@%          Returns number of lines in file
  6243.                    %@AB@%GetLine%@AE@%             Gets contents of one line
  6244.                    %@AB@%PutLine%@AE@%             Replaces a line
  6245.  
  6246. Cursor             %@AB@%GetCursor%@AE@%           Gets cursor position
  6247.                    %@AB@%MoveCur%@AE@%             Moves cursor to new location
  6248.  
  6249. Display            %@AB@%BadArg%@AE@%              Reports that argument was invalid
  6250.                    %@AB@%Display%@AE@%             Forces immediate update of screen
  6251.                    %@AB@%DoMessage%@AE@%           Puts message on the dialog line
  6252.  
  6253. File-Oriented      %@AB@%DelFile%@AE@%             Deletes contents of a file buffer
  6254.                    %@AB@%FileRead%@AE@%            Copies disk file to file buffer
  6255.                    %@AB@%FileWrite%@AE@%           Copies file buffer to disk file
  6256.                    %@AB@%pFileToTop%@AE@%          Makes specified file the current file
  6257.  
  6258. Block Operations   %@AB@%CopyBox%@AE@%             Inserts rectangular area
  6259.                    %@AB@%CopyLine%@AE@%            Inserts range of lines
  6260.                    %@AB@%CopyStream%@AE@%          Inserts stream of text
  6261.                    %@AB@%DelBox%@AE@%              Deletes rectangular area
  6262.                    %@AB@%DelLine%@AE@%             Deletes range of lines
  6263.                    %@AB@%DelStream%@AE@%           Deletes stream of text
  6264.  
  6265. Keyboard           %@AB@%KbHook%@AE@%              Restores keyboard control to M
  6266.                    %@AB@%KbUnHook%@AE@%            Removes keyboard control from M
  6267.                    %@AB@%ReadChar%@AE@%            Returns information on next keystroke
  6268.                    %@AB@%ReadCmd%@AE@%             Returns keystroke info in %@AB@%CmdDesc%@AE@%
  6269.                                        format
  6270.  
  6271. Miscellaneous      %@AB@%fExecute%@AE@%            Executes a macro
  6272.                    %@AB@%Replace%@AE@%             Replaces one character in a file
  6273.                    %@AB@%SetKey%@AE@%              Assigns a function to a keystroke
  6274. %@TE:   38   2405  1 19 20 37 @%
  6275. %@NL@%
  6276. %@NL@%
  6277. %@CR:MSE90000@%%@1@%%@AB@%Chapter 9  C-Extension Functions%@AE@%%@EH@%%@NL@%
  6278. ───────────────────────────────────────────────────────────────────────────%@NL@%
  6279. %@NL@%
  6280. %@CR:MSE90001@%%@4@%Most of the real work of an extension is done by the editor. Your extension%@EH@%
  6281. provides program logic and decision making. Yet it relies on the editor to
  6282. interact with the environment. Specifically, an extension calls low-level
  6283. functions within the editor itself to alter a file, update the screen, read
  6284. keyboard input, and perform many other useful functions.%@NL@%
  6285. %@NL@%
  6286. %@CR:MSE90002@%%@4@%This chapter describes these low-level functions in alphabetical order. Most%@EH@%
  6287. descriptions contain a summary, description, return value, cross-reference
  6288. ("See Also"), and example. The summary is a description of syntax, showing
  6289. you the number and type of arguments to give when calling the function. The
  6290. description explains the effects of the function and gives further
  6291. information about arguments. The return value typically indicates whether or
  6292. not the function was successful. In addition, some functions return a file
  6293. handle or a length.%@NL@%
  6294. %@NL@%
  6295. %@CR:MSE90003@%%@4@%Finally, the cross-reference refers you to other functions that you may need%@EH@%
  6296. to use in combination with the function described. For example, many
  6297. functions cannot be performed unless you first call the %@AB@%FileNameToHandle%@AE@%
  6298. function.%@NL@%
  6299. %@NL@%
  6300. %@CR:MSE90004@%%@4@%For a topical listing of these functions, see Table 8.2%@BO:   505ed@% in the previous%@EH@%
  6301. chapter.%@NL@%
  6302. %@NL@%
  6303. %@NL@%
  6304. %@CR:MSE9R010@%%@3@%%@AB@%AddFile%@AE@%%@EH@%%@NL@%
  6305. %@NL@%
  6306. %@4@%%@AB@%■  Summary%@AE@%%@EH@%%@NL@%
  6307. %@NL@%
  6308.      %@CR:MSE9R011@%%@AB@%#include <ext.h>%@AE@%%@NL@%
  6309. %@NL@%
  6310.      %@AB@%PFILE pascal AddFile%@AE@% (%@AI@%p%@AE@%)%@NL@%
  6311.      %@AB@%char far%@AE@% *%@AI@%p%@AE@%;%@NL@%
  6312. %@NL@%
  6313. %@4@%%@AB@%■  Description%@AE@%%@EH@%%@NL@%
  6314. %@NL@%
  6315. %@CR:MSE9R012@%%@4@%The %@AB@%AddFile%@AE@% function opens a file for editing. The parameter %@AI@%p%@AE@% points to a%@EH@%
  6316. null-terminated string of text containing the name of the file to open.%@NL@%
  6317. %@NL@%
  6318. %@CR:MSE9R013@%%@4@%The file can be new or one that currently exists on disk; however, the file%@EH@%
  6319. should not already be open for editing. Therefore, to open an existing file,
  6320. first check to see if it is already open by calling %@AB@%FileNameToHandle%@AE@%.%@NL@%
  6321. %@NL@%
  6322. %@CR:MSE9R014@%%@4@%After you open an existing file, you should immediately call the %@AB@%FileRead%@AE@%%@EH@%
  6323. function to properly initialize the internal file buffer. If you open a new
  6324. file, the file will not be added to the disk until you call %@AB@%FileWrite%@AE@%.%@NL@%
  6325. %@NL@%
  6326. %@4@%%@AB@%■  Return value%@AE@%%@EH@%%@NL@%
  6327. %@NL@%
  6328. %@CR:MSE9R015@%%@4@%The function returns a handle to the file.%@EH@%%@NL@%
  6329. %@NL@%
  6330. %@4@%%@AB@%■  See also%@AE@%%@EH@%%@NL@%
  6331. %@NL@%
  6332.      %@CR:MSE9R016@%%@4@%%@AB@%FileNameToHandle%@AE@%, %@AB@%FileRead%@AE@%, %@AB@%FileWrite%@AE@%%@EH@%%@NL@%
  6333. %@NL@%
  6334. %@4@%%@AB@%■  Example%@AE@%%@EH@%%@NL@%
  6335. %@NL@%
  6336. %@CR:MSE9R017@%%@4@%The following example checks to see if the file MYDATA.FIL is currently open%@EH@%
  6337. for editing; if not, %@AB@%AddFile%@AE@% is called to open the file. In either case, the
  6338. file handle is assigned to pFile.%@NL@%
  6339. %@NL@%
  6340.      char *p = "MYDATA.FIL";%@NL@%
  6341. %@NL@%
  6342.      if( (pFile = FileNameToHandle( p, NULL )) == 0 )%@NL@%
  6343.      {%@NL@%
  6344.           pFile = AddFile( p );%@NL@%
  6345.           FileRead( p, pFile );%@NL@%
  6346.      }%@NL@%
  6347. %@NL@%
  6348. %@NL@%
  6349. %@CR:MSE9R020@%%@3@%%@AB@%BadArg%@AE@%%@EH@%%@NL@%
  6350. %@NL@%
  6351. %@4@%%@AB@%■  Summary%@AE@%%@EH@%%@NL@%
  6352. %@NL@%
  6353.      %@CR:MSE9R021@%%@AB@%#include <ext.h>%@AE@%%@NL@%
  6354. %@NL@%
  6355.      %@AB@%flagType pascal BadArg%@AE@% (%@AB@%void%@AE@%)%@NL@%
  6356. %@NL@%
  6357. %@4@%%@AB@%■  Description%@AE@%%@EH@%%@NL@%
  6358. %@NL@%
  6359. %@CR:MSE9R022@%%@4@%The %@AB@%BadArg%@AE@% function reports an error message stating that the user's%@EH@%
  6360. argument is invalid. Usually you do not need to call this function because
  6361. the editor looks at the type of your function as declared in %@AB@%cmdTable%@AE@% and
  6362. rejects commands with the wrong argument type.%@NL@%
  6363. %@NL@%
  6364. %@CR:MSE9R023@%%@4@%This function is primarily useful if your editing function does some%@EH@%
  6365. additional tests for valid input, beyond argument type. For example, you may
  6366. want to exclude each %@AI@%numarg%@AE@% larger than a certain value.%@NL@%
  6367. %@NL@%
  6368. %@4@%%@AB@%■  Return value%@AE@%%@EH@%%@NL@%
  6369. %@NL@%
  6370. %@CR:MSE9R024@%%@4@%The function does not return a value.%@EH@%%@NL@%
  6371. %@NL@%
  6372. %@4@%%@AB@%■  See also%@AE@%%@EH@%%@NL@%
  6373. %@NL@%
  6374.      %@CR:MSE9R025@%%@AB@%DoMessage%@AE@%%@NL@%
  6375. %@NL@%
  6376. %@4@%%@AB@%■  Example%@AE@%%@EH@%%@NL@%
  6377. %@NL@%
  6378. %@CR:MSE9R026@%%@4@%The following example causes the editor to report an invalid-argument%@EH@%
  6379. message if the range of lines is greater than 10. Normally this condition is
  6380. not an error, but you may want to write a function that restricts the size
  6381. of an argument.%@NL@%
  6382. %@NL@%
  6383.      if( yEnd > yStart == 10 )%@NL@%
  6384.      {%@NL@%
  6385.          BadArg( );%@NL@%
  6386.          return 0;%@NL@%
  6387.      }%@NL@%
  6388. %@NL@%
  6389. %@NL@%
  6390. %@CR:MSE9R030@%%@3@%%@AB@%CopyBox%@AE@%%@EH@%%@NL@%
  6391. %@NL@%
  6392. %@4@%%@AB@%■  Summary%@AE@%%@EH@%%@NL@%
  6393. %@NL@%
  6394.      %@CR:MSE9R031@%%@AB@%#include <ext.h>%@AE@%%@NL@%
  6395. %@NL@%
  6396.      %@AB@%void pascal CopyBox%@AE@% (%@AI@%pFileSrc%@AE@%, %@AI@%pFileDst%@AE@%, %@AI@%xLeft%@AE@%, %@AI@%yTop%@AE@%, %@AI@%xRight%@AE@%, %@AI@%yBottom%@AE@%, %@AI@%xDst%@AE@%, %@AI@%yDst%@AE@%)%@NL@%
  6397.      %@AB@%PFILE%@AE@% %@AI@%pFileSrc%@AE@%, %@AI@%pFileDst%@AE@%;%@NL@%
  6398.      %@AB@%COL%@AE@% %@AI@%xLeft%@AE@%, %@AI@%xRight%@AE@%, %@AI@%xDst%@AE@%;%@NL@%
  6399.      %@AB@%LINE%@AE@% %@AI@%yTop%@AE@%, %@AI@%yBottom%@AE@%, %@AI@%yDst%@AE@%;%@NL@%
  6400. %@NL@%
  6401. %@4@%%@AB@%■  Description%@AE@%%@EH@%%@NL@%
  6402. %@NL@%
  6403. %@CR:MSE9R032@%%@4@%The %@AB@%CopyBox%@AE@% function copies the box delimited by the edges %@AI@%xLeft%@AE@%, %@AI@%yTop%@AE@%,%@EH@%
  6404. %@AI@%xRight%@AE@%, and %@AI@%yBottom%@AE@% in the source file and inserts this box just before
  6405. position (%@AI@%xDst%@AE@%, %@AI@%yDst%@AE@%) in the destination file. If the %@AI@%pFileSrc%@AE@% is null (0),
  6406. the function inserts a box of blank spaces of the size implied by the
  6407. coordinate parameters.%@NL@%
  6408. %@NL@%
  6409. %@CR:MSE9R033@%%@4@%The parameters %@AI@%pFileSrc%@AE@% and %@AI@%pFileDst%@AE@% are handles to the source and%@EH@%
  6410. destination files. The parameters %@AI@%xLeft%@AE@%, %@AI@%xRight%@AE@%, %@AI@%yTop,%@AE@% and %@AI@%yBottom%@AE@% specify
  6411. the boundaries of the box, inclusive, of the text to be copied. The text is
  6412. inserted into the destination file just before the location specified by
  6413. %@AI@%xDst, yDst%@AE@%.%@NL@%
  6414. %@NL@%
  6415. %@CR:MSE9R034@%%@4@%The same file can serve as source and destination. However, in that case the%@EH@%
  6416. source and destination regions must not overlap.%@NL@%
  6417. %@NL@%
  6418. %@CR:MSE9R035@%%@4@%All coordinates in lower-level functions are zero based.%@EH@%%@NL@%
  6419. %@NL@%
  6420. %@4@%%@AB@%■  Return value%@AE@%%@EH@%%@NL@%
  6421. %@NL@%
  6422. %@CR:MSE9R036@%%@4@%The function does not return a value.%@EH@%%@NL@%
  6423. %@NL@%
  6424. %@4@%%@AB@%■  See also%@AE@%%@EH@%%@NL@%
  6425. %@NL@%
  6426.      %@CR:MSE9R037@%%@4@%%@AB@%CopyBox%@AE@%, %@AB@%CopyLine%@AE@%, %@AB@%CopyStream%@AE@%, %@AB@%FileNameToHandle%@AE@%%@EH@%%@NL@%
  6427. %@NL@%
  6428. %@4@%%@AB@%■  Example%@AE@%%@EH@%%@NL@%
  6429. %@NL@%
  6430. %@CR:MSE9R038@%%@4@%The following example copies a box from the file A.TXT and inserts this%@EH@%
  6431. region into the file B.TXT:%@NL@%
  6432. %@NL@%
  6433.      pAFILE = FileNameToHandle( "A.TXT", NULL );%@NL@%
  6434.      pBFILE = FileNameToHandle( "B.TXT", NULL );%@NL@%
  6435.      .%@NL@%
  6436.      .%@NL@%
  6437.      .%@NL@%
  6438.      CopyBox( pAFILE, pBFILE, Left, Top, Right, End, xBFILE, yBFILE );%@NL@%
  6439. %@NL@%
  6440. %@NL@%
  6441. %@CR:MSE9R040@%%@3@%%@AB@%CopyLine%@AE@%%@EH@%%@NL@%
  6442. %@NL@%
  6443. %@4@%%@AB@%■  Summary%@AE@%%@EH@%%@NL@%
  6444. %@NL@%
  6445.      %@CR:MSE9R041@%%@AB@%#include <ext.h>%@AE@%%@NL@%
  6446. %@NL@%
  6447.      %@AB@%void pascal CopyLine%@AE@% (%@AI@%pFileSrc%@AE@%, %@AI@%pFileDst%@AE@%, %@AI@%yStart%@AE@%, %@AI@%yEnd%@AE@%, %@AI@%yDst%@AE@%)%@NL@%
  6448.      %@AB@%PFILE%@AE@% %@AI@%pFileSrc%@AE@%, %@AI@%pFileDst%@AE@%;%@NL@%
  6449.      %@AB@%LINE%@AE@% %@AI@%yStart%@AE@%, %@AI@%yEnd%@AE@%, %@AI@%yDst%@AE@%;%@NL@%
  6450. %@NL@%
  6451. %@4@%%@AB@%■  Description%@AE@%%@EH@%%@NL@%
  6452. %@NL@%
  6453. %@CR:MSE9R042@%%@4@%The %@AB@%CopyLine%@AE@% function can be used either to copy a group of lines from one%@EH@%
  6454. region to another or to insert a blank line.%@NL@%
  6455. %@NL@%
  6456. %@CR:MSE9R043@%%@4@%The %@AI@%pFileSrc%@AE@% and %@AI@%pFileDst%@AE@% parameters are handles to the source and%@EH@%
  6457. destination files. If %@AI@%pFileSrc%@AE@% is null (0), the function inserts one or more
  6458. blanks lines, the number of lines being determined by the relative values of
  6459. %@AI@%yStart%@AE@% and%@AI@%yEnd%@AE@%. (The number of blank lines is equal to the difference
  6460. between %@AI@%yStart%@AE@% and %@AI@%yEnd%@AE@% plus one.) Otherwise, the function copies the lines
  6461. from %@AI@%yStart%@AE@% to %@AI@%yEnd%@AE@%, inclusive, in the destination file. Lines are inserted
  6462. directly before line %@AI@%yDst%@AE@% in the destination file.%@NL@%
  6463. %@NL@%
  6464. %@CR:MSE9R044@%%@4@%The %@AB@%CopyLine%@AE@% function should not be confused with the %@AB@%PutLine%@AE@% function.%@EH@%
  6465. %@AB@%PutLine%@AE@% replaces a line and does not affect the total number of lines.
  6466. %@AB@%CopyLine%@AE@% inserts one or more lines and therefore increases the length of the
  6467. file.%@NL@%
  6468. %@NL@%
  6469. %@CR:MSE9R045@%%@4@%The same file cannot serve as both source and destination. To copy text from%@EH@%
  6470. one part of the file to another, copy to a temporary file, such as
  6471. <clipboard>.%@NL@%
  6472. %@NL@%
  6473. %@CR:MSE9R046@%%@4@%All line numbers in low-level functions are zero based.%@EH@%%@NL@%
  6474. %@NL@%
  6475. %@4@%%@AB@%■  Return value%@AE@%%@EH@%%@NL@%
  6476. %@NL@%
  6477. %@CR:MSE9R047@%%@4@%The function does not return a value.%@EH@%%@NL@%
  6478. %@NL@%
  6479. %@4@%%@AB@%■  See also%@AE@%%@EH@%%@NL@%
  6480. %@NL@%
  6481.      %@CR:MSE9R048@%%@4@%%@AB@%CopyBox%@AE@%, %@AB@%CopyStream%@AE@%, %@AB@%FileNameToHandle%@AE@%, %@AB@%PutLine%@AE@%%@EH@%%@NL@%
  6482. %@NL@%
  6483. %@4@%%@AB@%■  Example%@AE@%%@EH@%%@NL@%
  6484. %@NL@%
  6485. %@CR:MSE9R049@%%@4@%The following code inserts a blank line at the beginning of the file:%@EH@%%@NL@%
  6486. %@NL@%
  6487.      cfile = FileNameToHandle( "", NULL );%@NL@%
  6488.      CopyLines( NULL, cfile, 0, 0, 0 );%@NL@%
  6489. %@NL@%
  6490. %@NL@%
  6491. %@CR:MSE9R050@%%@3@%%@AB@%CopyStream%@AE@%%@EH@%%@NL@%
  6492. %@NL@%
  6493. %@4@%%@AB@%■  Summary%@AE@%%@EH@%%@NL@%
  6494. %@NL@%
  6495.      %@CR:MSE9R051@%%@AB@%#include <ext.h>%@AE@%%@NL@%
  6496. %@NL@%
  6497.      %@AB@%void pascal CopyStream%@AE@% (%@AI@%pFileSrc%@AE@%, %@AI@%pFileDst%@AE@%, %@AI@%xStart%@AE@%,%@AI@%yStart%@AE@%, %@AI@%xEnd%@AE@%, %@AI@%yEnd%@AE@%, %@AI@%xDst%@AE@%, %@AI@%yDst%@AE@%)%@NL@%
  6498.      %@AB@%PFILE%@AE@% %@AI@%pFileSrc%@AE@%, %@AI@%pFileDst%@AE@%;%@NL@%
  6499.      %@AB@%COL%@AE@% %@AI@%xStart%@AE@%, %@AI@%xEnd%@AE@%, %@AI@%xDst%@AE@%;%@NL@%
  6500.      %@AB@%LINE%@AE@% %@AI@%yStart%@AE@%, %@AI@%yEnd%@AE@%, %@AI@%yDst%@AE@%;%@NL@%
  6501. %@NL@%
  6502. %@4@%%@AB@%■  Description%@AE@%%@EH@%%@NL@%
  6503. %@NL@%
  6504. %@CR:MSE9R052@%%@4@%The %@AB@%CopyStream%@AE@% function copies the stream of text (including new lines)%@EH@%
  6505. beginning at position (%@AI@%xStart, yStart%@AE@%), up to but not including position
  6506. (%@AI@%xEnd, yEnd%@AE@%).  The stream of text is inserted into the destination file just
  6507. before position (%@AI@%xDst,%@AE@%%@AI@%yDst%@AE@%).  If %@AI@%pFileSrc%@AE@% is null (0), a blank space is
  6508. inserted.%@NL@%
  6509. %@NL@%
  6510. %@CR:MSE9R053@%%@4@%The %@AI@%pFileSrc%@AE@% and %@AI@%pFileDst%@AE@% parameters are file handles to the source and%@EH@%
  6511. destination files.%@NL@%
  6512. %@NL@%
  6513. %@CR:MSE9R054@%%@4@%The same file cannot serve as both source and destination. To copy text from%@EH@%
  6514. one part of the file to another, copy to a temporary file, such as
  6515. <clipboard>.%@NL@%
  6516. %@NL@%
  6517. %@4@%%@AB@%■  Return value%@AE@%%@EH@%%@NL@%
  6518. %@NL@%
  6519. %@CR:MSE9R055@%%@4@%The function does not return a value.%@EH@%%@NL@%
  6520. %@NL@%
  6521. %@4@%%@AB@%■  See also%@AE@%%@EH@%%@NL@%
  6522. %@NL@%
  6523.      %@CR:MSE9R056@%%@4@%%@AB@%CopyBox%@AE@%, %@AB@%CopyLine%@AE@%, %@AB@%FileNameToHandle%@AE@%%@EH@%%@NL@%
  6524. %@NL@%
  6525. %@4@%%@AB@%■  Example%@AE@%%@EH@%%@NL@%
  6526. %@NL@%
  6527. %@CR:MSE9R057@%%@4@%The following example copies a stream from the file A.TXT and inserts this%@EH@%
  6528. region into the file B.TXT:%@NL@%
  6529. %@NL@%
  6530.      pAFILE = FileNameToHandle( "A.TXT", "" );%@NL@%
  6531.      pBFILE = FileNameToHandle( "B.TXT", "" );%@NL@%
  6532.      .%@NL@%
  6533.      .%@NL@%
  6534.      .%@NL@%
  6535.      CopyStream( pAFILE, pBFILE, xStart, yStart, xEnd, yEnd, xBFILE, yBFILE );%@NL@%
  6536. %@NL@%
  6537. %@NL@%
  6538. %@CR:MSE9R060@%%@3@%%@AB@%DelBox%@AE@%%@EH@%%@NL@%
  6539. %@NL@%
  6540. %@4@%%@AB@%■  Summary%@AE@%%@EH@%%@NL@%
  6541. %@NL@%
  6542.      %@CR:MSE9R061@%%@AB@%#include <ext.h>%@AE@%%@NL@%
  6543. %@NL@%
  6544.      %@AB@%void pascal DelBox%@AE@% (%@AI@%pFile%@AE@%, %@AI@%xLeft%@AE@%, %@AI@%yTop%@AE@%, %@AI@%xRight%@AE@%, %@AI@%yBottom%@AE@%)%@NL@%
  6545.      %@AB@%PFILE%@AE@% %@AI@%pFile%@AE@%;%@NL@%
  6546.      %@AB@%COL%@AE@% %@AI@%xLeft%@AE@%, %@AI@%xRight%@AE@%;%@NL@%
  6547.      %@AB@%LINE%@AE@% %@AI@%yTop%@AE@%, %@AI@%yBottom%@AE@%;%@NL@%
  6548. %@NL@%
  6549. %@4@%%@AB@%■  Description%@AE@%%@EH@%%@NL@%
  6550. %@NL@%
  6551. %@CR:MSE9R062@%%@4@%The %@AB@%DelBox%@AE@% function deletes all spaces in the box delimited by the positions%@EH@%
  6552. (%@AI@%xLeft%@AE@%, %@AI@%yTop%@AE@%) and (%@AI@%xRight%@AE@%, %@AI@%yBottom%@AE@%). The box includes all four edges in the
  6553. parameter list. The %@AI@%pFile%@AE@% parameter is a handle to the file to be modified.%@NL@%
  6554. %@NL@%
  6555. %@CR:MSE9R063@%%@4@%All line and column coordinates are zero based.%@EH@%%@NL@%
  6556. %@NL@%
  6557. %@4@%%@AB@%■  Return value%@AE@%%@EH@%%@NL@%
  6558. %@NL@%
  6559. %@CR:MSE9R064@%%@4@%The function does not return a value.%@EH@%%@NL@%
  6560. %@NL@%
  6561. %@4@%%@AB@%■  See also%@AE@%%@EH@%%@NL@%
  6562. %@NL@%
  6563.      %@CR:MSE9R065@%%@4@%%@AB@%DelLine%@AE@%, %@AB@%DelStream%@AE@%, %@AB@%FileNameToHandle%@AE@%%@EH@%%@NL@%
  6564. %@NL@%
  6565. %@4@%%@AB@%■  Example%@AE@%%@EH@%%@NL@%
  6566. %@NL@%
  6567. %@CR:MSE9R066@%%@4@%The following example deletes the user-defined box argument:%@EH@%%@NL@%
  6568. %@NL@%
  6569.      pFile = FileNameToHandle( "", NULL );%@NL@%
  6570.      .%@NL@%
  6571.      .%@NL@%
  6572.      .%@NL@%
  6573.      Left   = pArg->arg.boxarg.xLeft;%@NL@%
  6574.      Right  = pArg->arg.boxarg.xRight;%@NL@%
  6575.      Top    = pArg->arg.boxarg.yTop;%@NL@%
  6576.      Bottom = pArg->arg.boxarg.yBottom;%@NL@%
  6577.      .%@NL@%
  6578.      .%@NL@%
  6579.      .%@NL@%
  6580.      DelBox( pFile, Left, Top, Right, Bottom );%@NL@%
  6581. %@NL@%
  6582. %@NL@%
  6583. %@CR:MSE9R070@%%@3@%%@AB@%DelFile%@AE@%%@EH@%%@NL@%
  6584. %@NL@%
  6585. %@4@%%@AB@%■  Summary%@AE@%%@EH@%%@NL@%
  6586. %@NL@%
  6587.      %@CR:MSE9R071@%%@AB@%#include <ext.h>%@AE@%%@NL@%
  6588. %@NL@%
  6589.      %@AB@%void pascal DelFile%@AE@% (%@AI@%pFile%@AE@%)%@NL@%
  6590.      %@AB@%PFILE%@AE@% %@AI@%pFile%@AE@%;%@NL@%
  6591. %@NL@%
  6592. %@4@%%@AB@%■  Description%@AE@%%@EH@%%@NL@%
  6593. %@NL@%
  6594. %@CR:MSE9R072@%%@4@%The %@AI@%DelFile%@AE@% function deletes the entire contents of an internal file buffer.%@EH@%
  6595. The effect of deleting contents can be made permanent by calling the
  6596. %@AB@%FileWrite%@AE@% function, which replaces the contents of the file on disk with the
  6597. contents of the internal file buffer.%@NL@%
  6598. %@NL@%
  6599. %@CR:MSE9R073@%%@4@%The  parameter %@AI@%pFile%@AE@% is the handle of the file to be cleared.%@EH@%%@NL@%
  6600. %@NL@%
  6601. %@4@%%@AB@%■  Return value%@AE@%%@EH@%%@NL@%
  6602. %@NL@%
  6603. %@CR:MSE9R074@%%@4@%The function does not return a value.%@EH@%%@NL@%
  6604. %@NL@%
  6605. %@4@%%@AB@%■  See also%@AE@%%@EH@%%@NL@%
  6606. %@NL@%
  6607.      %@CR:MSE9R075@%%@4@%%@AB@%AddFile%@AE@%, %@AB@%FileNameToHandle%@AE@%, %@AB@%FileWrite%@AE@%%@EH@%%@NL@%
  6608. %@NL@%
  6609. %@4@%%@AB@%■  Example%@AE@%%@EH@%%@NL@%
  6610. %@NL@%
  6611. %@CR:MSE9R076@%%@4@%The following example deletes the contents of the file JUNK.TXT, then calls%@EH@%
  6612. %@AB@%FileWrite%@AE@% to make the change permanent:%@NL@%
  6613. %@NL@%
  6614.      if( (pFile = FileNameToHandle( "JUNK.TXT", NULL)) == 0 )%@NL@%
  6615.           pFile = AddFile(  "JUNK.TXT"  );%@NL@%
  6616. %@NL@%
  6617.      DelFile( pFile );%@NL@%
  6618.      FileWrite( "JUNK.TXT", pFile );%@NL@%
  6619. %@NL@%
  6620. %@NL@%
  6621. %@CR:MSE9R080@%%@3@%%@AB@%DelLine%@AE@%%@EH@%%@NL@%
  6622. %@NL@%
  6623. %@4@%%@AB@%■  Summary%@AE@%%@EH@%%@NL@%
  6624. %@NL@%
  6625.      %@CR:MSE9R081@%%@4@%%@AB@%#include <ext.h>%@EH@%%@AE@%%@NL@%
  6626. %@NL@%
  6627.      %@AB@%void pascal DelLine%@AE@% (%@AI@%pFile%@AE@%, %@AI@%yStart%@AE@%, %@AI@%yEnd%@AE@%)%@NL@%
  6628.      %@AB@%PFILE%@AE@% %@AI@%pFile%@AE@%;%@NL@%
  6629.      %@AB@%LINE%@AE@% %@AI@%yStart%@AE@%, %@AI@%yEnd%@AE@%;%@NL@%
  6630. %@NL@%
  6631. %@4@%%@AB@%■  Description%@AE@%%@EH@%%@NL@%
  6632. %@NL@%
  6633. %@CR:MSE9R082@%%@4@%The %@AB@%DelLine%@AE@% function deletes lines %@AI@%yStart%@AE@% through %@AI@%yEnd%@AE@%, inclusive, in the%@EH@%
  6634. file %@AI@%pFile%@AE@%.%@NL@%
  6635. %@NL@%
  6636. %@CR:MSE9R083@%%@4@%The %@AI@%pFile%@AE@% parameter is a handle to a file from which lines are to be%@EH@%
  6637. deleted. %@AI@%yStart%@AE@% is the first line to be deleted, and %@AI@%yEnd%@AE@% is the last line
  6638. to be deleted.%@NL@%
  6639. %@NL@%
  6640. %@CR:MSE9R084@%%@4@%All line coordinates for low-level functions are zero based.%@EH@%%@NL@%
  6641. %@NL@%
  6642. %@4@%%@AB@%■  Return value%@AE@%%@EH@%%@NL@%
  6643. %@NL@%
  6644. %@CR:MSE9R085@%%@4@%The function does not return a value.%@EH@%%@NL@%
  6645. %@NL@%
  6646. %@4@%%@AB@%■  See also%@AE@%%@EH@%%@NL@%
  6647. %@NL@%
  6648.      %@CR:MSE9R086@%%@4@%%@AB@%DelBox%@AE@%, %@AB@%DelStream%@AE@%, %@AB@%FileNameToHandle%@AE@%%@EH@%%@NL@%
  6649. %@NL@%
  6650. %@4@%%@AB@%■  Example%@AE@%%@EH@%%@NL@%
  6651. %@NL@%
  6652. %@CR:MSE9R087@%%@4@%The following example deletes the user-defined line argument:%@EH@%%@NL@%
  6653. %@NL@%
  6654.      cfile = FileNameToHandle( "", NULL );%@NL@%
  6655.      .%@NL@%
  6656.      .%@NL@%
  6657.      .%@NL@%
  6658.      Start  = pArg->arg.linearg.xStart;%@NL@%
  6659.      End    = pArg->arg.linearg.xEnd;%@NL@%
  6660.      .%@NL@%
  6661.      .%@NL@%
  6662.      .%@NL@%
  6663.      DelLine( cfile, Start, End );%@NL@%
  6664. %@NL@%
  6665. %@NL@%
  6666. %@CR:MSE9R090@%%@3@%%@AB@%DelStream%@AE@%%@EH@%%@NL@%
  6667. %@NL@%
  6668. %@4@%%@AB@%■  Summary%@AE@%%@EH@%%@NL@%
  6669. %@NL@%
  6670.      %@CR:MSE9R091@%%@AB@%#include <ext.h>%@AE@%%@NL@%
  6671. %@NL@%
  6672.      %@AB@%void pascal DelStream%@AE@% (%@AI@%pFile%@AE@%, %@AI@%xStart%@AE@%, %@AI@%yStart%@AE@%, %@AI@%xEnd%@AE@%, %@AI@%yEnd%@AE@%)%@NL@%
  6673.      %@AB@%PFILE%@AE@% %@AI@%pFile%@AE@%;%@NL@%
  6674.      %@AB@%COL%@AE@% xStart, x%@AI@%End%@AE@%%@NL@%
  6675.      %@AB@%LINE%@AE@% %@AI@%yStart%@AE@%, %@AI@%yEnd%@AE@%;%@NL@%
  6676. %@NL@%
  6677. %@4@%%@AB@%■  Description%@AE@%%@EH@%%@NL@%
  6678. %@NL@%
  6679. %@CR:MSE9R092@%%@4@%The %@AB@%DelStream%@AE@% function deletes a stream of text beginning with a starting%@EH@%
  6680. coordinate up to but not including the ending coordinate.%@NL@%
  6681. %@NL@%
  6682. %@CR:MSE9R093@%%@4@%The %@AI@%xStart%@AE@% and %@AI@%yStart%@AE@% parameters give the coordinates of the beginning of%@EH@%
  6683. the stream. The %@AI@%xEnd%@AE@% and %@AI@%yEnd%@AE@% parameters give the coordinates of the byte
  6684. just after the end of the stream.%@NL@%
  6685. %@NL@%
  6686. %@CR:MSE9R094@%%@4@%All column and line coordinates for low-level functions are zero based.%@EH@%%@NL@%
  6687. %@NL@%
  6688. %@4@%%@AB@%■  Return value%@AE@%%@EH@%%@NL@%
  6689. %@NL@%
  6690. %@CR:MSE9R095@%%@4@%The function does not return a value.%@EH@%%@NL@%
  6691. %@NL@%
  6692. %@4@%%@AB@%■  See also%@AE@%%@EH@%%@NL@%
  6693. %@NL@%
  6694.      %@CR:MSE9R096@%%@4@%%@AB@%DelBox%@AE@%, %@AB@%DelLine%@AE@%, %@AB@%FileNameToHandle%@AE@%%@EH@%%@NL@%
  6695. %@NL@%
  6696. %@4@%%@AB@%■  Example%@AE@%%@EH@%%@NL@%
  6697. %@NL@%
  6698. %@CR:MSE9R097@%%@4@%The following example deletes the user-defined stream of text:%@EH@%%@NL@%
  6699. %@NL@%
  6700.      cfile = FileNameToHandle( "", NULL );%@NL@%
  6701.      .%@NL@%
  6702.      .%@NL@%
  6703.      .%@NL@%
  6704.      xStart = pArg->arg.streamarg.xStart;%@NL@%
  6705.      yStart = pArg->arg.streamarg.yStart;%@NL@%
  6706.      xEnd   = pArg->arg.streamarg.xEnd;%@NL@%
  6707.      yEnd   = pArg->arg.streamarg.yEnd;%@NL@%
  6708.      .%@NL@%
  6709.      .%@NL@%
  6710.      .%@NL@%
  6711.      DelStream( cfile, xStart, yStart, xEnd, yEnd );%@NL@%
  6712. %@NL@%
  6713. %@NL@%
  6714. %@CR:MSE9R100@%%@3@%%@AB@%Display%@AE@%%@EH@%%@NL@%
  6715. %@NL@%
  6716. %@4@%%@AB@%■  Summary%@AE@%%@EH@%%@NL@%
  6717. %@NL@%
  6718.      %@CR:MSE9R101@%%@AB@%#include <ext.h>%@AE@%%@NL@%
  6719. %@NL@%
  6720.      %@AB@%void pascal Display%@AE@% ()%@NL@%
  6721. %@NL@%
  6722. %@4@%%@AB@%■  Description%@AE@%%@EH@%%@NL@%
  6723. %@NL@%
  6724. %@CR:MSE9R102@%%@4@%The %@AB@%Display%@AE@% function refreshes the screen by examining editing changes and%@EH@%
  6725. making the minimum screen changes necessary. A keystroke interrupts the
  6726. function and causes immediate return.%@NL@%
  6727. %@NL@%
  6728. %@CR:MSE9R103@%%@4@%The editor normally updates the display whenever the editing session is%@EH@%
  6729. "idle"; that is, when the editor is waiting for the next command from the
  6730. user. Therefore, it is usually not necessary to call the %@AB@%Display%@AE@% function.
  6731. However, if your function runs for an extended period of time, call %@AB@%Display%@AE@%
  6732. periodically to show the user the stage of any intermediate changes.
  6733. Otherwise, the results of these changes are not displayed until completion
  6734. of the function.%@NL@%
  6735. %@NL@%
  6736. %@4@%%@AB@%■  Return value%@AE@%%@EH@%%@NL@%
  6737. %@NL@%
  6738. %@CR:MSE9R104@%%@4@%The function does not return a value.%@EH@%%@NL@%
  6739. %@NL@%
  6740. %@4@%%@AB@%■  Example%@AE@%%@EH@%%@NL@%
  6741. %@NL@%
  6742.      Display();%@NL@%
  6743. %@NL@%
  6744. %@NL@%
  6745. %@CR:MSE9R110@%%@3@%%@AB@%DoMessage%@AE@%%@EH@%%@NL@%
  6746. %@NL@%
  6747. %@4@%%@AB@%■  Summary%@AE@%%@EH@%%@NL@%
  6748. %@NL@%
  6749.      %@CR:MSE9R111@%%@AB@%#include <ext.h>%@AE@%%@NL@%
  6750. %@NL@%
  6751.      %@AB@%int pascal DoMessage%@AE@% (%@AI@%pStr%@AE@%)%@NL@%
  6752.      %@AB@%char far%@AE@% *%@AI@%pStr%@AE@%;%@NL@%
  6753. %@NL@%
  6754. %@4@%%@AB@%■  Description%@AE@%%@EH@%%@NL@%
  6755. %@NL@%
  6756. %@CR:MSE9R112@%%@4@%The %@AB@%DoMessage%@AE@% function writes a message to the dialog line. The %@AI@%pStr%@AE@%%@EH@%
  6757. parameter points to a null-terminated string of text containing the message
  6758. to be written.%@NL@%
  6759. %@NL@%
  6760. %@4@%%@AB@%■  Return value%@AE@%%@EH@%%@NL@%
  6761. %@NL@%
  6762. %@CR:MSE9R113@%%@4@%The function returns the number of characters written.%@EH@%%@NL@%
  6763. %@NL@%
  6764. %@4@%%@AB@%■  Example%@AE@%%@EH@%%@NL@%
  6765. %@NL@%
  6766. %@CR:MSE9R114@%%@4@%The following example outputs a message on the dialog line as part of the%@EH@%
  6767. initialization procedure %@AB@%WhenLoaded%@AE@%:%@NL@%
  6768. %@NL@%
  6769.      WhenLoaded ()%@NL@%
  6770.      {%@NL@%
  6771.           .%@NL@%
  6772.           .%@NL@%
  6773.           .%@NL@%
  6774. %@NL@%
  6775.              DoMessage( "My extension now loaded" );%@NL@%
  6776.      }%@NL@%
  6777. %@NL@%
  6778. %@NL@%
  6779. %@CR:MSE9R120@%%@3@%%@AB@%fExecute%@AE@%%@EH@%%@NL@%
  6780. %@NL@%
  6781. %@4@%%@AB@%■  Summary%@AE@%%@EH@%%@NL@%
  6782. %@NL@%
  6783.      %@CR:MSE9R121@%%@AB@%#include <ext.h>%@AE@%%@NL@%
  6784. %@NL@%
  6785.      %@AB@%flagType pascal fExecute%@AE@% %@AI@%(pStr)%@AE@%%@NL@%
  6786.      %@AB@%char far%@AE@% %@AI@%*pStr%@AE@%;%@NL@%
  6787. %@NL@%
  6788. %@4@%%@AB@%■  Description%@AE@%%@EH@%%@NL@%
  6789. %@NL@%
  6790. %@CR:MSE9R122@%%@4@%The %@AB@%fExecute%@AE@% function executes a macro, using the standard rules for macro%@EH@%
  6791. execution. The pointer %@AI@%pStr%@AE@% points to a null-terminated string of text
  6792. containing the macro to be executed.%@NL@%
  6793. %@NL@%
  6794. %@CR:MSE9R123@%%@4@%You may sometimes find it convenient to invoke a predefined editing function%@EH@%
  6795. by calling %@AB@%fExecute%@AE@%. For example, to search for the next occurrence of a
  6796. given string, you can either write a loop that examines each line in the
  6797. file, or simply invoke %@AI@%Psearch%@AE@% by calling %@AB@%fExecute%@AE@%. Macros are especially
  6798. convenient when you want to look for a regular expression.%@NL@%
  6799. %@NL@%
  6800. %@4@%%@AB@%■  Return value%@AE@%%@EH@%%@NL@%
  6801. %@NL@%
  6802. %@CR:MSE9R124@%%@4@%The function passes along the value TRUE (nonzero) or FALSE (zero) returned%@EH@%
  6803. by the last function the macro executed.%@NL@%
  6804. %@NL@%
  6805. %@4@%%@AB@%■  Example%@AE@%%@EH@%%@NL@%
  6806. %@NL@%
  6807. %@CR:MSE9R125@%%@4@%The following example invokes a macro in order to search for the next%@EH@%
  6808. occurrence of the regular expression %@AS@%RegEx%@AE@%:%@NL@%
  6809. %@NL@%
  6810.      strcpy( buf, "arg arg \"" );%@NL@%
  6811.      strcat( buf, RegEx );%@NL@%
  6812.      strcat( buf, "\" psearch" );%@NL@%
  6813. %@NL@%
  6814.      if( fExecute (buf) )%@NL@%
  6815.      {%@NL@%
  6816.          GetCursor( xCur, yCur );    %@AI@%/* Get new coordinates */%@AE@%%@NL@%
  6817.      }%@NL@%
  6818.      else%@NL@%
  6819.      {%@NL@%
  6820.      .%@NL@%
  6821.      .%@NL@%
  6822.      .%@NL@%
  6823.       %@AI@%/* Take action for item not found */%@AE@%%@NL@%
  6824.      .%@NL@%
  6825.      .%@NL@%
  6826.      .%@NL@%
  6827.      }%@NL@%
  6828. %@NL@%
  6829. %@NL@%
  6830. %@CR:MSE9R130@%%@3@%%@AB@%FileLength%@AE@%%@EH@%%@NL@%
  6831. %@NL@%
  6832. %@4@%%@AB@%■  Summary%@AE@%%@EH@%%@NL@%
  6833. %@NL@%
  6834.      %@CR:MSE9R131@%%@AB@%#include <ext.h>%@AE@%%@NL@%
  6835. %@NL@%
  6836.      %@AB@%LINE pascal FileLength%@AE@% %@AI@%(pFile)%@AE@%%@NL@%
  6837.      %@AB@%PFILE%@AE@% %@AI@%pFile%@AE@%;%@NL@%
  6838. %@NL@%
  6839. %@4@%%@AB@%■  Description%@AE@%%@EH@%%@NL@%
  6840. %@NL@%
  6841. %@CR:MSE9R132@%%@4@%The %@AB@%FileLength%@AE@% function determines the length of the file pointed to by%@EH@%
  6842. %@AI@%pFile%@AE@%.%@NL@%
  6843. %@NL@%
  6844. %@CR:MSE9R133@%%@4@%This function is useful for global operations in which it is necessary to%@EH@%
  6845. know when you have reached the end of the file.%@NL@%
  6846. %@NL@%
  6847. %@4@%%@AB@%■  Return value%@AE@%%@EH@%%@NL@%
  6848. %@NL@%
  6849. %@CR:MSE9R134@%%@4@%The function returns the number of lines in the given file.%@EH@%%@NL@%
  6850. %@NL@%
  6851. %@4@%%@AB@%■  See also%@AE@%%@EH@%%@NL@%
  6852. %@NL@%
  6853.      %@CR:MSE9R135@%%@AB@%FileNameToHandle%@AE@%%@NL@%
  6854. %@NL@%
  6855. %@4@%%@AB@%■  Example%@AE@%%@EH@%%@NL@%
  6856. %@NL@%
  6857. %@CR:MSE9R136@%%@4@%The following example determines the number of lines in the current file:%@EH@%%@NL@%
  6858. %@NL@%
  6859.      LINE fileLen;%@NL@%
  6860. %@NL@%
  6861.      cfile = FileNameToHandle( "", NULL );%@NL@%
  6862.      fileLen = FileLength( cfile );%@NL@%
  6863. %@NL@%
  6864. %@NL@%
  6865. %@CR:MSE9R140@%%@3@%%@AB@%FileNameToHandle%@AE@%%@EH@%%@NL@%
  6866. %@NL@%
  6867. %@4@%%@AB@%■  Summary%@AE@%%@EH@%%@NL@%
  6868. %@NL@%
  6869.      %@CR:MSE9R141@%%@AB@%#include <ext.h>%@AE@%%@NL@%
  6870. %@NL@%
  6871.      %@AB@%PFILE pascal FileNameToHandle%@AE@% (%@AI@%pname%@AE@%, %@AI@%pShortName%@AE@%) %@NL@%
  6872.      %@AB@%char%@AE@% *%@AI@%pname%@AE@%, *%@AI@%pShortName%@AE@%;%@NL@%
  6873. %@NL@%
  6874. %@4@%%@AB@%■  Description%@AE@%%@EH@%%@NL@%
  6875. %@NL@%
  6876. %@CR:MSE9R142@%%@4@%The %@AB@%FileNameToHandle%@AE@% function returns the handle of a file already opened%@EH@%
  6877. for editing.%@NL@%
  6878. %@NL@%
  6879. %@CR:MSE9R143@%%@4@%The %@AI@%pname%@AE@% parameter points to a null-terminated string of text containing a%@EH@%
  6880. complete file name. %@AB@%FileNameToHandle%@AE@% looks for an exact match in its list of
  6881. open files. The full path name must match. If the string does not specify a
  6882. path to a directory, the current directory is assumed.%@NL@%
  6883. %@NL@%
  6884. %@CR:MSE9R144@%%@4@%If the function cannot find a match to %@AI@%pname%@AE@%, it attempts to match the%@EH@%
  6885. %@AI@%pShortName%@AE@% parameter. This parameter points to a null-terminated string of
  6886. text containing only a base file name──the function ignores any path name or
  6887. extension in the short name. The editor selects the first file name with a
  6888. base name matching the short name.%@NL@%
  6889. %@NL@%
  6890. %@CR:MSE9R145@%%@4@%If the first string is empty, the function returns a handle to the current%@EH@%
  6891. file. The editor does not try to match a short name if the second parameter
  6892. is a null pointer or points to an empty string.%@NL@%
  6893. %@NL@%
  6894. %@4@%%@AB@%■  Return value%@AE@%%@EH@%%@NL@%
  6895. %@NL@%
  6896. %@CR:MSE9R146@%%@4@%The %@AB@%FileNameToHandle%@AE@% function returns the handle to the given file. If the%@EH@%
  6897. given file is not open for editing, the function returns NULL.%@NL@%
  6898. %@NL@%
  6899. %@4@%%@AB@%■  Example%@AE@%%@EH@%%@NL@%
  6900. %@NL@%
  6901. %@CR:MSE9R147@%%@4@%The following example returns a handle to the current file:%@EH@%%@NL@%
  6902. %@NL@%
  6903.      PFILE  curfile;%@NL@%
  6904. %@NL@%
  6905.      curfile = FileNameToHandle( "", NULL );%@NL@%
  6906. %@NL@%
  6907. %@NL@%
  6908. %@CR:MSE9R150@%%@3@%%@AB@%FileRead%@AE@%%@EH@%%@NL@%
  6909. %@NL@%
  6910. %@4@%%@AB@%■  Summary%@AE@%%@EH@%%@NL@%
  6911. %@NL@%
  6912.      %@CR:MSE9R151@%%@AB@%#include <ext.h>%@AE@%%@NL@%
  6913. %@NL@%
  6914.      %@AB@%flagType pascal FileRead%@AE@% %@AI@%(name, pFile)%@AE@%%@NL@%
  6915.      %@AB@%char far *name%@AE@%;
  6916.      %@AB@%PFILE%@AE@% %@AI@%pFile%@AE@%;%@NL@%
  6917. %@NL@%
  6918. %@4@%%@AB@%■  Description%@AE@%%@EH@%%@NL@%
  6919. %@NL@%
  6920. %@CR:MSE9R152@%%@4@%The %@AB@%FileRead%@AE@% function reads the contents of the specified disk file and%@EH@%
  6921. stores them in the internal file buffer specified by the %@AI@%pFile%@AE@%. The old
  6922. contents of the file buffer are lost.%@NL@%
  6923. %@NL@%
  6924. %@CR:MSE9R153@%%@4@%The parameter %@AI@%name%@AE@% is a pointer to a null-terminated string containing the%@EH@%
  6925. name of the disk file to be read. The %@AI@%pFile%@AE@% parameter is the handle of the
  6926. internal file buffer to write the data to.%@NL@%
  6927. %@NL@%
  6928. %@CR:MSE9R154@%%@4@%When you open a file for editing with %@AB@%AddFile%@AE@%, the file buffer is initially%@EH@%
  6929. empty. Call %@AB@%FileRead%@AE@% to initialize the buffer with the current contents of
  6930. the file.%@NL@%
  6931. %@NL@%
  6932. %@4@%%@AB@%■  Return value%@AE@%%@EH@%%@NL@%
  6933. %@NL@%
  6934. %@CR:MSE9R155@%%@4@%The function returns TRUE (nonzero) if the copy is successful and FALSE%@EH@%
  6935. (zero) if not.%@NL@%
  6936. %@NL@%
  6937. %@4@%%@AB@%■  See also%@AE@%%@EH@%%@NL@%
  6938. %@NL@%
  6939.      %@CR:MSE9R156@%%@4@%%@AB@%AddFile%@AE@%, %@AB@%FileWrite%@AE@%, %@AB@%FileNameToHandle%@AE@%%@EH@%%@NL@%
  6940. %@NL@%
  6941. %@4@%%@AB@%■  Example%@AE@%%@EH@%%@NL@%
  6942. %@NL@%
  6943. %@CR:MSE9R157@%%@4@%The following example opens the file MYTEXT.FIL for editing and then%@EH@%
  6944. initializes the buffer with the current contents of the file:%@NL@%
  6945. %@NL@%
  6946.      if( (pFile = FileNameToHandle("MYTEXT.FIL",NULL)) == 0 )%@NL@%
  6947.      {%@NL@%
  6948.           pFile = AddFile( "MYTEXT.FIL" );%@NL@%
  6949.           FileRead( "MYTEXT.FIL", pFile );%@NL@%
  6950.      }%@NL@%
  6951. %@NL@%
  6952. %@NL@%
  6953. %@CR:MSE9R160@%%@3@%%@AB@%FileWrite%@AE@%%@EH@%%@NL@%
  6954. %@NL@%
  6955. %@4@%%@AB@%■  Summary%@AE@%%@EH@%%@NL@%
  6956. %@NL@%
  6957.      %@CR:MSE9R161@%%@AB@%#include <ext.h>%@AE@%%@NL@%
  6958. %@NL@%
  6959.      %@AB@%flagType pascal FileWrite%@AE@%%@AI@% (savename, pFile)%@AE@%%@NL@%
  6960.      %@AB@%char far *savename%@AE@%;%@NL@%
  6961.      %@AB@%PFILE%@AE@%%@AI@% pFile%@AE@%;%@NL@%
  6962. %@NL@%
  6963. %@4@%%@AB@%■  Description%@AE@%%@EH@%%@NL@%
  6964. %@NL@%
  6965. %@CR:MSE9R162@%%@4@%The %@AB@%FileWrite%@AE@% function writes the contents of the specified file buffer out%@EH@%
  6966. to a disk file.%@NL@%
  6967. %@NL@%
  6968. %@CR:MSE9R163@%%@4@%The %@AI@%pFile%@AE@% parameter is the handle to the file buffer. The %@AI@%savename%@AE@% parameter%@EH@%
  6969. points to the name of the disk file. If %@AI@%savename%@AE@% points to an empty string,
  6970. the function writes to the disk file with the name as the file %@AI@%pFile%@AE@%. (Note
  6971. that a file handle points to an internal structure that contains the name of
  6972. the file as well as other data.)%@NL@%
  6973. %@NL@%
  6974. %@CR:MSE9R164@%%@4@%The function first writes contents to a temporary file. If the write%@EH@%
  6975. operation is successful, the temporary file is renamed to the destination
  6976. file.%@NL@%
  6977. %@NL@%
  6978. %@CR:MSE9R165@%%@4@%You need not use %@AB@%FileWrite%@AE@% with the current file. Since the user is%@EH@%
  6979. currently editing this file, you can let the user decide when to save the
  6980. file to disk. However,%@AB@%FileWrite%@AE@% should be used with other files that you
  6981. open for editing.%@NL@%
  6982. %@NL@%
  6983. %@4@%%@AB@%■  Return value%@AE@%%@EH@%%@NL@%
  6984. %@NL@%
  6985. %@CR:MSE9R166@%%@4@%The function returns TRUE (nonzero) if the copy was successful and FALSE%@EH@%
  6986. (zero) if not.%@NL@%
  6987. %@NL@%
  6988. %@4@%%@AB@%■  See also%@AE@%%@EH@%%@NL@%
  6989. %@NL@%
  6990.      %@CR:MSE9R167@%%@4@%%@AB@%AddFile%@AE@%, %@AB@%FileRead%@AE@%, %@AB@%FileNameToHandle%@AE@%%@EH@%%@NL@%
  6991. %@NL@%
  6992. %@4@%%@AB@%■  Example%@AE@%%@EH@%%@NL@%
  6993. %@NL@%
  6994. %@CR:MSE9R168@%%@4@%The following example alters the contents of the file JUNK.TXT, then makes%@EH@%
  6995. the deletion permanent by calling %@AB@%FileWrite%@AE@%:%@NL@%
  6996. %@NL@%
  6997.      char *p = "JUNK.TXT";%@NL@%
  6998. %@NL@%
  6999.      if( (pFile = FileNameToHandle(p, NULL)) == 0 )%@NL@%
  7000.      {%@NL@%
  7001.          pFile = AddFile( p );%@NL@%
  7002.          FileRead( p, pFile );%@NL@%
  7003.      }%@NL@%
  7004.      .%@NL@%
  7005.      .%@NL@%
  7006.      .%@NL@%
  7007.      %@AI@%/* Manipulate data in the file *%@AE@%/%@NL@%
  7008.      .%@NL@%
  7009.      .%@NL@%
  7010.      .%@NL@%
  7011.      FileWrite( p, pFile );%@NL@%
  7012. %@NL@%
  7013. %@NL@%
  7014. %@CR:MSE9R170@%%@3@%%@AB@%GetCursor%@AE@%%@EH@%%@NL@%
  7015. %@NL@%
  7016. %@4@%%@AB@%■  Summary%@AE@%%@EH@%%@NL@%
  7017. %@NL@%
  7018.      %@CR:MSE9R171@%%@AB@%#include <ext.h>%@AE@%%@NL@%
  7019. %@NL@%
  7020.      %@AB@%void pascal GetCursor%@AE@% %@AI@%(px, py)%@AE@%;%@NL@%
  7021.      %@AB@%COL far%@AE@% %@AI@%*px%@AE@%;%@NL@%
  7022.      %@AB@%LINE far%@AE@% %@AI@%*py%@AE@%;%@NL@%
  7023. %@NL@%
  7024. %@4@%%@AB@%■  Description%@AE@%%@EH@%%@NL@%
  7025. %@NL@%
  7026. %@CR:MSE9R172@%%@4@%The %@AB@%GetCursor%@AE@% function indicates current cursor position by modifying the%@EH@%
  7027. variables to which %@AI@%px%@AE@% and %@AI@%py%@AE@% point. The function sets %@AI@%*px%@AE@% to the current
  7028. cursor column, and %@AI@%*py%@AE@% to the current cursor line.%@NL@%
  7029. %@NL@%
  7030. %@CR:MSE9R173@%%@4@%Upon return, the numbers pointed to by %@AI@%px%@AE@% and %@AI@%py%@AE@% indicate the column and%@EH@%
  7031. row, respectively, of the current cursor position.%@NL@%
  7032. %@NL@%
  7033. %@4@%%@AB@%■  Return value%@AE@%%@EH@%%@NL@%
  7034. %@NL@%
  7035. %@CR:MSE9R174@%%@4@%The function does not return a value.%@EH@%%@NL@%
  7036. %@NL@%
  7037. %@4@%%@AB@%■  See also%@AE@%%@EH@%%@NL@%
  7038. %@NL@%
  7039.      %@CR:MSE9R175@%%@AB@%MoveCur%@AE@%%@NL@%
  7040. %@NL@%
  7041. %@4@%%@AB@%■  Example%@AE@%%@EH@%%@NL@%
  7042. %@NL@%
  7043.      LINE  yCur;%@NL@%
  7044.      COL   xCur;%@NL@%
  7045.      .%@NL@%
  7046.      .%@NL@%
  7047.      .%@NL@%
  7048.           GetCursor( &xCur, &yCur );%@NL@%
  7049. %@NL@%
  7050. %@NL@%
  7051. %@CR:MSE9R180@%%@3@%%@AB@%GetLine%@AE@%%@EH@%%@NL@%
  7052. %@NL@%
  7053. %@4@%%@AB@%■  Summary%@AE@%%@EH@%%@NL@%
  7054. %@NL@%
  7055.      %@CR:MSE9R181@%%@AB@%#include <ext.h>%@AE@%%@NL@%
  7056. %@NL@%
  7057.      %@AB@%int pascal GetLine%@AE@% (%@AI@%line%@AE@%, %@AI@%buf%@AE@%, %@AI@%pFile%@AE@%)%@NL@%
  7058.      %@AB@%LINE%@AE@% %@AI@%line%@AE@%;%@NL@%
  7059.      %@AB@%char far *%@AE@%%@AI@%buf%@AE@%%@NL@%
  7060.      %@AB@%PFILE%@AE@% %@AI@%pFile%@AE@%;%@NL@%
  7061. %@NL@%
  7062. %@4@%%@AB@%■  Description%@AE@%%@EH@%%@NL@%
  7063. %@NL@%
  7064. %@CR:MSE9R182@%%@4@%The %@AB@%GetLine%@AE@% function is the principal means for reading text from a file%@EH@%
  7065. buffer.%@NL@%
  7066. %@NL@%
  7067. %@CR:MSE9R183@%%@4@%The function reads a specified line of text and copies the line into a%@EH@%
  7068. character string pointed to by %@AI@%buf%@AE@%. The editor terminates the string with a
  7069. null value. The %@AI@%line%@AE@% parameter contains a line number to read. In
  7070. extensions, line numbers are always zero based. The %@AI@%pFile%@AE@% parameter is the
  7071. handle to the file.%@NL@%
  7072. %@NL@%
  7073. %@CR:MSE9R184@%%@4@%If the %@AB@%realtabs%@AE@% switch is off, the function expands tabs to spaces (as%@EH@%
  7074. indicated by the %@AB@%entab%@AE@% and %@AB@%filetab%@AE@% switches) before copying the text to %@AI@%buf%@AE@%.%@NL@%
  7075. %@NL@%
  7076. %@4@%%@AB@%■  Return value%@AE@%%@EH@%%@NL@%
  7077. %@NL@%
  7078. %@CR:MSE9R185@%%@4@%The function returns the number of characters in the line after any tab%@EH@%
  7079. conversion.%@NL@%
  7080. %@NL@%
  7081. %@4@%%@AB@%■  See also%@AE@%%@EH@%%@NL@%
  7082. %@NL@%
  7083.      %@CR:MSE9R186@%%@4@%%@AB@%CopyLine%@AE@%, %@AB@%PutLine%@AE@%, %@AB@%FileNameToHandle%@AE@%%@EH@%%@NL@%
  7084. %@NL@%
  7085. %@4@%%@AB@%■  Example%@AE@%%@EH@%%@NL@%
  7086. %@NL@%
  7087. %@CR:MSE9R187@%%@4@%The following example reads the line of text that includes the initial%@EH@%
  7088. cursor position and copies it into %@AI@%buf%@AE@%:%@NL@%
  7089. %@NL@%
  7090.      PFILE cfile;%@NL@%
  7091.      LINE  yCur;%@NL@%
  7092.      COL   xCur;%@NL@%
  7093.       char  buf[BUFLEN];%@NL@%
  7094.      int   len; .%@NL@%
  7095.      .%@NL@%
  7096.      .%@NL@%
  7097.          cfile = FileNameToHandle( "", NULL );%@NL@%
  7098.          GetCursor( &xCur, &yCur );%@NL@%
  7099.          len = GetLine( yCur, buf, cfile );%@NL@%
  7100. %@NL@%
  7101. %@NL@%
  7102. %@CR:MSE9R190@%%@3@%%@AB@%KbHook%@AE@%%@EH@%%@NL@%
  7103. %@NL@%
  7104. %@4@%%@AB@%■  Summary%@AE@%%@EH@%%@NL@%
  7105. %@NL@%
  7106.      %@CR:MSE9R191@%%@AB@%#include <ext.h>%@AE@%%@NL@%
  7107. %@NL@%
  7108.      %@AB@%void pascal KbHook%@AE@%();%@NL@%
  7109. %@NL@%
  7110. %@4@%%@AB@%■  Description%@AE@%%@EH@%%@NL@%
  7111. %@NL@%
  7112. %@CR:MSE9R192@%%@4@%The %@AB@%KbHook%@AE@% function reverses the effect of the %@AB@%KbUnHook%@AE@% function and%@EH@%
  7113. restores normal keyboard-input reading by the editor.%@NL@%
  7114. %@NL@%
  7115. %@4@%%@AB@%■  Return value%@AE@%%@EH@%%@NL@%
  7116. %@NL@%
  7117. %@CR:MSE9R193@%%@4@%The function does not return a value.%@EH@%%@NL@%
  7118. %@NL@%
  7119. %@4@%%@AB@%■  See also%@AE@%%@EH@%%@NL@%
  7120. %@NL@%
  7121.      %@CR:MSE9R194@%%@AB@%KhUnHook%@AE@%%@NL@%
  7122. %@NL@%
  7123. %@4@%%@AB@%■  Example%@AE@%%@EH@%%@NL@%
  7124. %@NL@%
  7125.      KbHook( );%@NL@%
  7126. %@NL@%
  7127. %@NL@%
  7128. %@CR:MSE9R200@%%@3@%%@AB@%KbUnHook%@AE@%%@EH@%%@NL@%
  7129. %@NL@%
  7130. %@4@%%@AB@%■  Summary%@AE@%%@EH@%%@NL@%
  7131. %@NL@%
  7132.      %@CR:MSE9R201@%%@AB@%#include <ext.h>%@AE@%%@NL@%
  7133. %@NL@%
  7134.      %@AB@%void pascal KbUnHook%@AE@%();%@NL@%
  7135. %@NL@%
  7136. %@4@%%@AB@%■  Descripti on%@AE@%%@EH@%%@NL@%
  7137. %@NL@%
  7138. %@CR:MSE9R202@%%@4@%The %@AB@%KbUnHook%@AE@% function changes the focus of the keyboard so that keyboard%@EH@%
  7139. input is no longer read by the editor.  When attempting to use system-level
  7140. calls to read from the keyboard, it is necessary to first call this
  7141. function.%@NL@%
  7142. %@NL@%
  7143. %@CR:MSE9R203@%%@4@%In particular, it is necessary to call the %@AB@%KbUnHook%@AE@% function before%@EH@%
  7144. transferring control to a program that reads directly from the keyboard by
  7145. using operating-system or BIOS calls, or by working directly with hardware.%@NL@%
  7146. %@NL@%
  7147. %@CR:MSE9R204@%%@4@%You normally do not need to call this function. For most work with the%@EH@%
  7148. keyboard, use the %@AB@%ReadChar%@AE@% function. %@AB@%ReadChar%@AE@% lets the editor read the
  7149. keyboard for you, but allows you to intercept the keystroke and evaluate it
  7150. in any way you choose. Use %@AB@%KbUnHook%@AE@% only for situations that %@AB@%ReadChar%@AE@% cannot
  7151. accommodate.%@NL@%
  7152. %@NL@%
  7153. %@4@%%@AB@%■  Return value%@AE@%%@EH@%%@NL@%
  7154. %@NL@%
  7155. %@CR:MSE9R205@%%@4@%The function does not return a value.%@EH@%%@NL@%
  7156. %@NL@%
  7157. %@4@%%@AB@%■  See also%@AE@%%@EH@%%@NL@%
  7158. %@NL@%
  7159.      %@CR:MSE9R206@%%@AB@%KbHook%@AE@%%@NL@%
  7160. %@NL@%
  7161. %@4@%%@AB@%■  Example%@AE@%%@EH@%%@NL@%
  7162. %@NL@%
  7163.      KbUnHook( );%@NL@%
  7164. %@NL@%
  7165. %@NL@%
  7166. %@CR:MSE9R210@%%@3@%%@AB@%MoveCur%@AE@%%@EH@%%@NL@%
  7167. %@NL@%
  7168. %@4@%%@AB@%■  Summary%@AE@%%@EH@%%@NL@%
  7169. %@NL@%
  7170.      %@CR:MSE9R211@%%@AB@%#include <ext.h>%@AE@%%@NL@%
  7171. %@NL@%
  7172.      %@AB@%void pascal MoveCur%@AE@% (%@AI@%x%@AE@%, %@AI@%y%@AE@%)%@NL@%
  7173.      %@AB@%COL%@AE@% %@AI@%x%@AE@%;%@NL@%
  7174.      %@AB@%LINE%@AE@% %@AI@%y%@AE@%;%@NL@%
  7175. %@NL@%
  7176. %@4@%%@AB@%■  Description%@AE@%%@EH@%%@NL@%
  7177. %@NL@%
  7178. %@CR:MSE9R212@%%@4@%The %@AB@%MoveCur%@AE@% function moves the cursor to the specified position within the%@EH@%
  7179. current file. If the cursor is within the same window, no window movement
  7180. occurs. Otherwise, the window scrolls as needed, and the cursor is placed at
  7181. a common position specified by the numeric switch %@AB@%hike.%@AE@%%@NL@%
  7182. %@NL@%
  7183. %@CR:MSE9R213@%%@4@%After the function is called, the cursor moves to column %@AI@%x%@AE@%, line %@AI@%y%@AE@% of the%@EH@%
  7184. current file. The editing window scrolls, if necessary, to display this
  7185. position within the window.%@NL@%
  7186. %@NL@%
  7187. %@4@%%@AB@%■  Return value%@AE@%%@EH@%%@NL@%
  7188. %@NL@%
  7189. %@CR:MSE9R214@%%@4@%The function does not return a value.%@EH@%%@NL@%
  7190. %@NL@%
  7191. %@4@%%@AB@%■  See also%@AE@%%@EH@%%@NL@%
  7192. %@NL@%
  7193.      %@CR:MSE9R215@%%@AB@%GetCursor%@AE@%%@NL@%
  7194. %@NL@%
  7195. %@4@%%@AB@%■  Example%@AE@%%@EH@%%@NL@%
  7196. %@NL@%
  7197. %@CR:MSE9R216@%%@4@%The following example edits the file but restores the initial cursor%@EH@%
  7198. position:%@NL@%
  7199. %@NL@%
  7200.      GetCursor( &xCur, &yCur );%@NL@%
  7201.      .%@NL@%
  7202.      .%@NL@%
  7203.      .%@NL@%
  7204.      %@AI@%/* Modify the file */%@AE@%%@NL@%
  7205.      .%@NL@%
  7206.      .%@NL@%
  7207.      .%@NL@%
  7208.      MoveCur( xCur, yCur );%@NL@%
  7209. %@NL@%
  7210. %@NL@%
  7211. %@CR:MSE9R220@%%@3@%%@AB@%pFileToTop%@AE@%%@EH@%%@NL@%
  7212. %@NL@%
  7213. %@4@%%@AB@%■  Summary%@AE@%%@EH@%%@NL@%
  7214. %@NL@%
  7215.      %@CR:MSE9R221@%%@AB@%#include <ext.h>%@AE@%%@NL@%
  7216. %@NL@%
  7217.      %@AB@%void pascal pFileToTop%@AE@%%@AI@% (pFileTmp)%@AE@%%@NL@%
  7218.      %@AB@%PFILE%@AE@% %@AI@%pFileTmp%@AE@%;%@NL@%
  7219. %@NL@%
  7220. %@4@%%@AB@%■  Description%@AE@%%@EH@%%@NL@%
  7221. %@NL@%
  7222. %@CR:MSE9R222@%%@4@%The %@AB@%pFileToTop%@AE@% function selects a file as the current file and makes it%@EH@%
  7223. visible in the current window.  The function accomplishes this operation by
  7224. moving the specified file handle to the top of the file list for the current
  7225. window. (This list is stored in the <information-file> pseudo file.)%@NL@%
  7226. %@NL@%
  7227. %@CR:MSE9R223@%%@4@%The parameter %@AI@%pFileTmp%@AE@% is the file handle to move to the top of the file%@EH@%
  7228. list.%@NL@%
  7229. %@NL@%
  7230. %@4@%%@AB@%■  Return value%@AE@%%@EH@%%@NL@%
  7231. %@NL@%
  7232. %@CR:MSE9R224@%%@4@%The function does not return a value.%@EH@%%@NL@%
  7233. %@NL@%
  7234. %@4@%%@AB@%■  See also%@AE@%%@EH@%%@NL@%
  7235. %@NL@%
  7236.      %@CR:MSE9R225@%%@4@%%@AB@%AddFile%@AE@%, %@AB@%FileNameToHandle%@AE@%%@EH@%%@NL@%
  7237. %@NL@%
  7238. %@4@%%@AB@%■  Example%@AE@%%@EH@%%@NL@%
  7239. %@NL@%
  7240.      pFileToTop( pFile );%@NL@%
  7241. %@NL@%
  7242. %@NL@%
  7243. %@CR:MSE9R230@%%@3@%%@AB@%PutLine%@AE@%%@EH@%%@NL@%
  7244. %@NL@%
  7245. %@4@%%@AB@%■  Summary%@AE@%%@EH@%%@NL@%
  7246. %@NL@%
  7247.      %@CR:MSE9R231@%%@AB@%#include <ext.h>%@AE@%%@NL@%
  7248. %@NL@%
  7249.      %@AB@%void pascal PutLine%@AE@% (%@AI@%line%@AE@%, %@AI@%buf%@AE@%, %@AI@%pFile%@AE@%)%@NL@%
  7250.      %@AB@%LINE%@AE@% %@AI@%line%@AE@%;%@NL@%
  7251.      %@AB@%char far *%@AE@%%@AI@%buf%@AE@%;%@NL@%
  7252.      %@AB@%PFILE%@AE@% %@AI@%pFile%@AE@%;%@NL@%
  7253. %@NL@%
  7254. %@4@%%@AB@%■  Description%@AE@%%@EH@%%@NL@%
  7255. %@NL@%
  7256. %@CR:MSE9R232@%%@4@%The %@AB@%PutLine%@AE@% function is the principal means for writing text to a file%@EH@%
  7257. buffer.%@NL@%
  7258. %@NL@%
  7259. %@CR:MSE9R233@%%@4@%The function replaces a single line of text. The parameter %@AI@%buf%@AE@% points to the%@EH@%
  7260. string that contains the new line of text. This string should terminate with
  7261. a null value, but it should not contain a new-line character.%@NL@%
  7262. %@NL@%
  7263. %@CR:MSE9R234@%%@4@%The parameter %@AI@%line%@AE@% contains the line number at which the replacement is to%@EH@%
  7264. take place. Line numbers start at 0; if %@AI@%line%@AE@% has the value 0, the new line
  7265. of text is inserted at the beginning of the file.%@NL@%
  7266. %@NL@%
  7267. %@CR:MSE9R235@%%@4@%If %@AI@%line%@AE@% is greater than the number of lines in the file, %@AB@%PutLine%@AE@% inserts%@EH@%
  7268. empty lines at the end of the file.%@NL@%
  7269. %@NL@%
  7270. %@4@%%@AB@%■  Return value%@AE@%%@EH@%%@NL@%
  7271. %@NL@%
  7272. %@CR:MSE9R236@%%@4@%The function does not return a value.%@EH@%%@NL@%
  7273. %@NL@%
  7274. %@4@%%@AB@%■  See also%@AE@%%@EH@%%@NL@%
  7275. %@NL@%
  7276.      %@CR:MSE9R237@%%@4@%%@AB@%CopyLine%@AE@%, %@AB@%GetLine%@AE@%, %@AB@%FileLength%@AE@%, %@AB@%FileNameToHandle%@AE@%%@EH@%%@NL@%
  7277. %@NL@%
  7278. %@4@%%@AB@%■  Example%@AE@%%@EH@%%@NL@%
  7279. %@NL@%
  7280. %@CR:MSE9R238@%%@4@%The following code replaces the first line of the current file with the%@EH@%
  7281. string pointed to by %@AS@%buf%@AE@%:%@NL@%
  7282. %@NL@%
  7283.      PutLine( 0, buf, cfile );%@NL@%
  7284. %@NL@%
  7285. %@NL@%
  7286. %@CR:MSE9R240@%%@3@%%@AB@%ReadChar%@AE@%%@EH@%%@NL@%
  7287. %@NL@%
  7288. %@4@%%@AB@%■  Summary%@AE@%%@EH@%%@NL@%
  7289. %@NL@%
  7290.      %@CR:MSE9R241@%%@AB@%#include <ext.h>%@AE@%%@NL@%
  7291. %@NL@%
  7292.      %@AB@%long pascal ReadChar%@AE@%();%@NL@%
  7293. %@NL@%
  7294. %@4@%%@AB@%■  Description%@AE@%%@EH@%%@NL@%
  7295. %@NL@%
  7296. %@CR:MSE9R242@%%@4@%The %@AB@%ReadChar%@AE@% function returns the next keystroke typed. The editor does not%@EH@%
  7297. echo the keystroke or invoke a function. Once intercepted, the keystroke
  7298. cannot be placed back into the keyboard buffer for execution. The function
  7299. returns a long integer composed of four bytes containing information about
  7300. the keystroke:%@NL@%
  7301. %@NL@%
  7302. %@CR:MSE9R243@%%@AB@%Byte                        Description%@AE@%%@NL@%
  7303. %@NL@%
  7304. 0                           ASCII character%@NL@%
  7305. %@NL@%
  7306. 1                           scan-code character%@NL@%
  7307. %@NL@%
  7308. 2                           shift information, in xxNxACxS format described%@NL@%
  7309.                             below%@NL@%
  7310. %@NL@%
  7311. 3                           null character (0), which is unused%@NL@%
  7312. %@NL@%
  7313. %@CR:MSE9R244@%%@4@%Byte 2 provides information about the shift-key conditions (N)UMLOCK, (A)LT,%@EH@%
  7314. (C)TRL, and (S)HIFT, in the format xxNxACxS. Each x indicates an unused bit.
  7315. The bits N, A, C, and S are each on or off, depending on the associated
  7316. condition.  For example, if the ALT, CTRL, and SHIFT conditions are all on,
  7317. but the NUMLOCK condition is off, byte 2 is returned as 00001101.  Note: the
  7318. N bit is 0 unless the key pressed is on the numeric keypad.%@NL@%
  7319. %@NL@%
  7320. %@4@%%@AB@%■  Return value%@AE@%%@EH@%%@NL@%
  7321. %@NL@%
  7322. %@CR:MSE9R245@%%@4@%The function returns a long integer containing the keystroke information.%@EH@%%@NL@%
  7323. %@NL@%
  7324. %@4@%%@AB@%■  See also%@AE@%%@EH@%%@NL@%
  7325. %@NL@%
  7326.      %@CR:MSE9R246@%%@4@%%@AB@%ReadCmd%@AE@%, %@AB@%KbHook%@AE@%%@EH@%%@NL@%
  7327. %@NL@%
  7328. %@4@%%@AB@%■  Example%@AE@%%@EH@%%@NL@%
  7329. %@NL@%
  7330.      #define ASCIIBYTE  0x000000FF%@NL@%
  7331.      #define SCANBYTE   0x0000FF00%@NL@%
  7332.      #define CTRLBIT    0x00040000%@NL@%
  7333.      #define SHIFTBIT   0x00010000%@NL@%
  7334.      #define NUMLKBIT   0x00200000%@NL@%
  7335. %@NL@%
  7336.      long keystroke;%@NL@%
  7337.      int  ascii_key, scan_byte;%@NL@%
  7338.      int  contrl_on, shift_on, numlk_on;%@NL@%
  7339. %@NL@%
  7340.           keystroke = ReadChar();%@NL@%
  7341.           ascii_key = keystroke & ASCIIBYTE;%@NL@%
  7342.           scan_byte = (keystroke & SCANBYTE) >>> 8;%@NL@%
  7343.           contrl_on = (keystroke & CTRLBIT) > 0;%@NL@%
  7344.           shift_on  = (keystroke & SHIFTBIT) > 0;%@NL@%
  7345.           numlk_on  = (keystroke & NUMLKBIT) > 0;%@NL@%
  7346. %@NL@%
  7347. %@NL@%
  7348. %@CR:MSE9R250@%%@3@%%@AB@%ReadCmd%@AE@%%@EH@%%@NL@%
  7349. %@NL@%
  7350. %@4@%%@AB@%■  Summary%@AE@%%@EH@%%@NL@%
  7351. %@NL@%
  7352.      %@CR:MSE9R251@%%@AB@%#include <ext.h>%@AE@%%@NL@%
  7353. %@NL@%
  7354.      %@AB@%PCMD pascal ReadCmd%@AE@%(  );%@NL@%
  7355. %@NL@%
  7356. %@4@%%@AB@%■  Description%@AE@%%@EH@%%@NL@%
  7357. %@NL@%
  7358. %@CR:MSE9R252@%%@4@%The %@AB@%ReadCmd%@AE@% function waits for input from the user. The next keystroke is%@EH@%
  7359. translated into a function reference (according to current assignments), but
  7360. the function is not executed. Instead, the editor passes information about
  7361. the function in the form of a structure of type %@AB@%cmdDesc%@AE@%. Once intercepted,
  7362. the keystroke cannot be placed back for execution.%@NL@%
  7363. %@NL@%
  7364. %@4@%%@AB@%■  Return value%@AE@%%@EH@%%@NL@%
  7365. %@NL@%
  7366. %@CR:MSE9R253@%%@4@%The return value is a structure of type %@AB@%cmdDesc%@AE@%. The structure describes the%@EH@%
  7367. command corresponding to the keystroke pressed.%@NL@%
  7368. %@NL@%
  7369. %@4@%%@AB@%■  See also%@AE@%%@EH@%%@NL@%
  7370. %@NL@%
  7371.      %@CR:MSE9R254@%%@AB@%ReadChar%@AE@%%@NL@%
  7372. %@NL@%
  7373. %@NL@%
  7374. %@CR:MSE9R260@%%@3@%%@AB@%RemoveFile%@AE@%%@EH@%%@NL@%
  7375. %@NL@%
  7376. %@4@%%@AB@%■  Summary%@AE@%%@EH@%%@NL@%
  7377. %@NL@%
  7378.      %@CR:MSE9R261@%%@AB@%#include <ext.h>%@AE@%%@NL@%
  7379. %@NL@%
  7380.      %@AB@%flagType pascal RemoveFile%@AE@% (%@AI@%pFileRem%@AE@%)%@NL@%
  7381.      %@AB@%PFILE%@AE@%%@AI@%pFileRem%@AE@%;%@NL@%
  7382. %@NL@%
  7383. %@4@%%@AB@%■  Description%@AE@%%@EH@%%@NL@%
  7384. %@NL@%
  7385. %@CR:MSE9R262@%%@4@%The %@AB@%RemoveFile%@AE@% function removes a file handle from memory, along with the%@EH@%
  7386. file buffer and all other memory-resident information about the file.
  7387. Calling this function helps to free up main memory, but it has no effect on
  7388. the file as stored on disk.%@NL@%
  7389. %@NL@%
  7390. %@CR:MSE9R263@%%@4@%This function is the converse of the %@AB@%AddFile%@AE@% function. %@AB@%RemoveFile%@AE@% closes a%@EH@%
  7391. file. In other words, the file is no longer open for editing. However,
  7392. unlike the C function %@AB@%fclose%@AE@%, the %@AB@%RemoveFile%@AE@% function does not force the
  7393. writing of the file buffer to disk.%@NL@%
  7394. %@NL@%
  7395. %@CR:MSE9R264@%%@4@%The parameter %@AI@%pFileRem%@AE@% is the file handle of the file to be removed.%@EH@%%@NL@%
  7396. %@NL@%
  7397. %@4@%%@AB@%■  Return value%@AE@%%@EH@%%@NL@%
  7398. %@NL@%
  7399. %@CR:MSE9R265@%%@4@%The function does not return a value.%@EH@%%@NL@%
  7400. %@NL@%
  7401. %@4@%%@AB@%■  See also%@AE@%%@EH@%%@NL@%
  7402. %@NL@%
  7403.      %@CR:MSE9R266@%%@4@%%@AB@%AddFile%@AE@%, %@AB@%FileNameToHandle%@AE@%%@EH@%%@NL@%
  7404. %@NL@%
  7405. %@4@%%@AB@%■  Example%@AE@%%@EH@%%@NL@%
  7406. %@NL@%
  7407.      RemoveFile( pNewFile );%@NL@%
  7408. %@NL@%
  7409. %@NL@%
  7410. %@CR:MSE9R270@%%@3@%%@AB@%Replace%@AE@%%@EH@%%@NL@%
  7411. %@NL@%
  7412. %@4@%%@AB@%■  Summary%@AE@%%@EH@%%@NL@%
  7413. %@NL@%
  7414.      %@CR:MSE9R271@%%@AB@%#include <ext.h>%@AE@%%@NL@%
  7415. %@NL@%
  7416.      %@AB@%flagType pascal Replace%@AE@% (%@AI@%c%@AE@%, %@AI@%x%@AE@%, %@AI@%y%@AE@%, %@AI@%pFile%@AE@%, %@AI@%fInsert%@AE@%)%@NL@%
  7417.      %@AB@%char%@AE@% %@AI@%c%@AE@%;%@NL@%
  7418.      %@AB@%COL%@AE@% %@AI@%x%@AE@%;%@NL@%
  7419.      %@AB@%LINE%@AE@% %@AI@%y%@AE@%;%@NL@%
  7420.      %@AB@%PFILE%@AE@% %@AI@%pFile%@AE@%;%@NL@%
  7421.      %@AB@%flagType%@AE@% %@AI@%fInsert%@AE@%;%@NL@%
  7422. %@NL@%
  7423. %@4@%%@AB@%■  Description%@AE@%%@EH@%%@NL@%
  7424. %@NL@%
  7425. %@CR:MSE9R272@%%@4@%The %@AB@%Replace%@AE@% function inserts or replaces characters one at a time. The %@AI@%c%@AE@%%@EH@%
  7426. parameter contains the new character. The %@AI@%x%@AE@% and %@AI@%y%@AE@% parameters indicate the
  7427. file position──by column and line──where the edit is to take place. Line
  7428. numbers are zero based.%@NL@%
  7429. %@NL@%
  7430. %@CR:MSE9R273@%%@4@%The %@AI@%pFile%@AE@% parameter is a file parameter handle returned by the%@EH@%
  7431. %@AB@%FileNameToHandle%@AE@% function. To specify insertion, set %@AI@%fInsert%@AE@% to TRUE
  7432. (nonzero). To specify replacement, set %@AI@%fInsert%@AE@% to FALSE (zero).%@NL@%
  7433. %@NL@%
  7434. %@4@%%@AB@%■  Return value%@AE@%%@EH@%%@NL@%
  7435. %@NL@%
  7436. %@CR:MSE9R274@%%@4@%The function returns TRUE (nonzero) if the edit is successful and FALSE%@EH@%
  7437. (zero) otherwise.%@NL@%
  7438. %@NL@%
  7439. %@4@%%@AB@%■  See also%@AE@%%@EH@%%@NL@%
  7440. %@NL@%
  7441.      %@CR:MSE9R275@%%@AB@%PutLine%@AE@%%@NL@%
  7442. %@NL@%
  7443. %@4@%%@AB@%■  Example%@AE@%%@EH@%%@NL@%
  7444. %@NL@%
  7445. %@CR:MSE9R276@%%@4@%The following code inserts the word "Hello" at line %@AS@%y%@AE@% and column %@AS@%x%@AE@% of the%@EH@%
  7446. current file:%@NL@%
  7447. %@NL@%
  7448.      #define  TRUE  -1%@NL@%
  7449.      char    *p; PFILE   cfile;  /* handle to current file */%@NL@%
  7450.      .%@NL@%
  7451.      .%@NL@%
  7452.      .%@NL@%
  7453.      cfile = FileNameToHandle( "", NULL );  /* initialize cfile */%@NL@%
  7454.      for ( p = "Hello"; *p; p++, y++ )%@NL@%
  7455.          Replace( *p, x, y, cfile, TRUE );%@NL@%
  7456. %@NL@%
  7457. %@NL@%
  7458. %@CR:MSE9R280@%%@3@%%@AB@%SetKey%@AE@%%@EH@%%@NL@%
  7459. %@NL@%
  7460. %@4@%%@AB@%■  Summary%@AE@%%@EH@%%@NL@%
  7461. %@NL@%
  7462.      %@CR:MSE9R281@%%@AB@%#include <ext.h>%@AE@%%@NL@%
  7463. %@NL@%
  7464.      %@AB@%flagType pascal SetKey%@AE@% (%@AI@%name%@AE@%, %@AI@%p%@AE@%)%@NL@%
  7465.      %@AB@%char far *%@AE@%%@AI@%name%@AE@%, %@AB@%far *%@AE@%%@AI@%p%@AE@%;%@NL@%
  7466. %@NL@%
  7467. %@4@%%@AB@%■  Description%@AE@%%@EH@%%@NL@%
  7468. %@NL@%
  7469. %@CR:MSE9R282@%%@4@%The %@AB@%SetKey%@AE@% function assigns an editing function to a key.%@EH@%%@NL@%
  7470. %@NL@%
  7471. %@CR:MSE9R283@%%@4@%The %@AI@%name%@AE@% parameter points to a string containing the name of the function,%@EH@%
  7472. and the %@AI@%p%@AE@% parameter points to a string that names the key.%@NL@%
  7473. %@NL@%
  7474. %@4@%%@AB@%■  Return value%@AE@%%@EH@%%@NL@%
  7475. %@NL@%
  7476. %@CR:MSE9R284@%%@4@%The function returns TRUE (nonzero) if the assignment is successful and%@EH@%
  7477. FALSE (zero) otherwise.%@NL@%
  7478. %@NL@%
  7479. %@4@%%@AB@%■  See also%@AE@%%@EH@%%@NL@%
  7480. %@NL@%
  7481.      %@CR:MSE9R285@%%@4@%%@AB@%RemoveFile%@AE@%, %@AB@%Replace%@AE@%%@EH@%%@NL@%
  7482. %@NL@%
  7483. %@4@%%@AB@%■  Example%@AE@%%@EH@%%@NL@%
  7484. %@NL@%
  7485. %@CR:MSE9R286@%%@4@%The following code assigns the CTRL+X key to the newly defined function%@EH@%
  7486. %@AS@%NewFunc%@AE@%:%@NL@%
  7487. %@NL@%
  7488.      SetKey( "NewFunc", "ctrl+x" );%@NL@%
  7489. %@NL@%
  7490. %@NL@%
  7491. %@CR:MSEa0000@%%@1@%%@AB@%Appendix A  Reference Tables%@AE@%%@EH@%%@NL@%
  7492. ───────────────────────────────────────────────────────────────────────────%@NL@%
  7493. %@NL@%
  7494. %@NL@%
  7495. %@CR:MSEa1000@%%@2@%%@AB@%A.1  Categories of Editing Functions%@AE@%%@EH@%%@NL@%
  7496. %@NL@%
  7497. %@CR:MSEa1001@%%@4@%Table A.1 lists the editing functions by category and gives a brief%@EH@%
  7498. description of each function.%@NL@%
  7499. %@NL@%
  7500. %@CR:MSEaT100@%%@4@%%@AU@%Table A.1  Summary of Editing Functions by Category%@AE@%%@EH@%%@NL@%
  7501. %@NL@%
  7502. %@AB@%Command Manipulation      Description%@AE@%%@NL@%
  7503. %@NL@%
  7504. %@AI@%Arg%@AE@%                       Introduces an argument or function%@NL@%
  7505. %@AI@%Assign%@AE@%                    Assigns function to a keystroke%@NL@%
  7506. %@AI@%Boxstream%@AE@%                 Toggles between box and stream mode%@NL@%
  7507. %@AI@%Cancel%@AE@%                    Cancels current operation%@NL@%
  7508. %@AI@%Execute%@AE@%                   Executes an editor function or macro list%@NL@%
  7509. %@AI@%Graphic%@AE@%                   Inserts the ASCII value of the key into the file%@NL@%
  7510. %@AI@%Lastselect%@AE@%                Recalls the last cursor-movement argument%@NL@%
  7511. %@AI@%Lasttext%@AE@%                  Recalls the last %@AI@%textarg%@AE@% entered%@NL@%
  7512. %@AI@%Meta%@AE@%                      Turns on the %@AI@%Meta%@AE@% command prefix%@NL@%
  7513. %@AI@%Quote%@AE@%                     Treats next character literally%@NL@%
  7514. %@AI@%Repeat%@AE@%                    Repeats the previous command%@NL@%
  7515. %@AI@%Undo%@AE@%                      Reverses the effect of the last editing change%@NL@%
  7516. %@NL@%
  7517. %@AB@%File Operations%@AE@%           %@AB@%Description%@AE@%%@NL@%
  7518. %@NL@%
  7519. %@AI@%Exit%@AE@%                      Exits the editor, with or without saving%@NL@%
  7520. %@AI@%Noedit%@AE@%                    Toggles the no-edit restriction%@NL@%
  7521. %@AI@%Paste%@AE@%                     Merges file or program output%@NL@%
  7522. %@AI@%Refresh%@AE@%                   Rereads file, discarding edits%@NL@%
  7523. %@AI@%Saveall%@AE@%                   Saves all modified files%@NL@%
  7524. %@AI@%Setfile%@AE@%                   Saves current file or loads a new file%@NL@%
  7525. %@NL@%
  7526. %@AB@%Cursor Movement%@AE@%           %@AB@%Description%@AE@%%@NL@%
  7527. %@NL@%
  7528. %@AI@%Backtab%@AE@%                   Moves cursor left to previous tab stop%@NL@%
  7529. %@AI@%Begfile%@AE@%                   Moves cursor to beginning of file%@NL@%
  7530. %@AI@%Begline%@AE@%                   Moves cursor left to beginning of line%@NL@%
  7531. %@AI@%Down%@AE@%                      Moves cursor down one line%@NL@%
  7532. %@AI@%Endfile%@AE@%                   Moves cursor to end of file%@NL@%
  7533. %@AI@%Endline%@AE@%                   Moves cursor to right of last character of line%@NL@%
  7534. %@AI@%Home%@AE@%                      Moves cursor to upper-left corner of window%@NL@%
  7535. %@AI@%Left%@AE@%                      Moves cursor left one character%@NL@%
  7536. %@AI@%Mpage%@AE@%                     Moves cursor back by one page%@NL@%
  7537. %@AI@%Mpara%@AE@%                     Moves cursor back by paragraphs%@NL@%
  7538. %@AI@%Mword%@AE@%                     Moves cursor back by words%@NL@%
  7539. %@AI@%Newline%@AE@%                   Moves cursor down to next line%@NL@%
  7540. %@AI@%Ppage%@AE@%                     Moves cursor forward by one page%@NL@%
  7541. %@AI@%Ppara%@AE@%                     Moves cursor forward by paragraphs%@NL@%
  7542. %@AI@%Pword%@AE@%                     Moves cursor forward by words%@NL@%
  7543. %@AI@%Right%@AE@%                     Moves cursor right one character%@NL@%
  7544. %@AI@%Tab%@AE@%                       Moves cursor right to next tab stop%@NL@%
  7545. %@AI@%Up%@AE@%                        Moves cursor up one line%@NL@%
  7546. %@NL@%
  7547. %@AB@%Mark/Goto Position%@AE@%        %@AB@%Description%@AE@%%@NL@%
  7548. %@NL@%
  7549. %@AI@%Mark%@AE@%                      Moves cursor to specified position in file%@NL@%
  7550. %@AI@%Restcur%@AE@%                   Restores cursor position saved with %@AI@%Savecur%@AE@%%@NL@%
  7551. %@AI@%Savecur%@AE@%                   Saves cursor position for use with %@AI@%Restcur%@AE@%%@NL@%
  7552. %@AI@%Mlines%@AE@%                    Moves window back by lines%@NL@%
  7553. %@AI@%Plines%@AE@%                    Moves window forward by lines%@NL@%
  7554. %@AI@%Setwindow%@AE@%                 Redisplays window%@NL@%
  7555. %@AI@%Window%@AE@%                    Creates, removes, or moves between windows%@NL@%
  7556. %@NL@%
  7557. %@AB@%Searching/Replacing%@AE@%       %@AB@%Description%@AE@%%@NL@%
  7558. %@NL@%
  7559. %@AI@%Mgrep%@AE@%                     Searches a series of files%@NL@%
  7560. %@AI@%Mreplace%@AE@%                  Replaces throughout a series of files%@NL@%
  7561. %@AI@%Msearch%@AE@%                   Searches backward%@NL@%
  7562. %@AI@%Psearch%@AE@%                   Searches forward%@NL@%
  7563. %@AI@%Qreplace%@AE@%                  Replaces with confirmation%@NL@%
  7564. %@AI@%Replace%@AE@%                   Replaces without confirmation%@NL@%
  7565. %@AI@%Searchall%@AE@%                 Highlights all occurrences of a string%@NL@%
  7566. %@NL@%
  7567. %@AB@%Special Insert%@AE@%            %@AB@%Description%@AE@%%@NL@%
  7568. %@NL@%
  7569. %@AI@%Curdate%@AE@%                   Inserts current date (e.g., 28-Nov-1988)%@NL@%
  7570. %@AI@%Curday%@AE@%                    Inserts current day (Sun...Sat)%@NL@%
  7571. %@AI@%Curfile%@AE@%                   Inserts name of current file%@NL@%
  7572. %@AI@%Curfileext%@AE@%                Inserts extension of current file%@NL@%
  7573. %@AI@%Curfilenam%@AE@%                Inserts base name of current file%@NL@%
  7574. %@AI@%Curtime%@AE@%                   Inserts current time (e.g., 13:45:55)%@NL@%
  7575. %@NL@%
  7576. %@AB@%Inserting/Deleting Text%@AE@%   %@AB@%Description%@AE@%%@NL@%
  7577. %@NL@%
  7578. %@AI@%Cdelete%@AE@%                   Deletes character to left, excluding line breaks%@NL@%
  7579. %@AI@%Copy%@AE@%                      Copies lines to the Clipboard%@NL@%
  7580. %@AI@%Delete%@AE@%                    Deletes the highlighted area%@NL@%
  7581. %@AI@%Emacscdel%@AE@%                 Deletes character to left, including line breaks%@NL@%
  7582. %@AI@%Emacsnewl%@AE@%                 Starts new line, breaking current line%@NL@%
  7583. %@AI@%Insert%@AE@%                    Inserts spaces into the highlighted area%@NL@%
  7584. %@AI@%Ldelete%@AE@%                   Deletes lines into the Clipboard%@NL@%
  7585. %@AI@%Linsert%@AE@%                   Inserts blank lines%@NL@%
  7586. %@AI@%Paste%@AE@%                     Inserts text from the Clipboard%@NL@%
  7587. %@AI@%Sdelete%@AE@%                   Deletes stream of text, including line breaks%@NL@%
  7588. %@AI@%Sinsert%@AE@%                   Inserts blanks, breaking lines if necessary%@NL@%
  7589. %@NL@%
  7590. %@AB@%Programming%@AE@%               %@AB@%Description%@AE@%%@NL@%
  7591. %@NL@%
  7592. %@AI@%Argcompile%@AE@%                Performs the %@AI@%Arg Compile%@AE@% command%@NL@%
  7593. %@AI@%Compile%@AE@%                   Executes compile or build command%@NL@%
  7594. %@AI@%Nextmsg%@AE@%                   Moves cursor to next error message%@NL@%
  7595. %@AI@%Pbal%@AE@%                      Balances parentheses and brackets%@NL@%
  7596. %@NL@%
  7597. %@AB@%Macro Creation%@AE@%            %@AB@%Description%@AE@%%@NL@%
  7598. %@NL@%
  7599. %@AI@%Assign%@AE@%                    Defines a macro%@NL@%
  7600. %@AI@%Message%@AE@%                   Displays message on the dialog line%@NL@%
  7601. %@AI@%Record%@AE@%                    Turns macro recording on or off%@NL@%
  7602. %@AI@%Tell%@AE@%                      Displays assignment or macro definition%@NL@%
  7603. %@NL@%
  7604. %@AB@%Miscellaneous%@AE@%             %@AB@%Description%@AE@%%@NL@%
  7605. %@NL@%
  7606. %@AI@%Environment%@AE@%               Executes and views environment settings%@NL@%
  7607. %@AI@%Information%@AE@%               Displays list of previously edited files%@NL@%
  7608. %@AI@%Initialize%@AE@%                Rereads initialization file%@NL@%
  7609. %@AI@%Insertmode%@AE@%                Toggles insert mode on and off%@NL@%
  7610. %@AI@%Print%@AE@%                     Prints all or part of a file%@NL@%
  7611. %@AI@%Shell%@AE@%                     Spawns a system-level shell or command line%@NL@%
  7612. %@NL@%
  7613. %@NL@%
  7614. %@CR:MSEa2000@%%@2@%%@AB@%A.2  Key Assignments for Editing Functions%@AE@%%@EH@%%@NL@%
  7615. %@NL@%
  7616. %@CR:MSEa2001@%%@4@%Table A.2 lists the editing functions and the assigned keys for each of the%@EH@%
  7617. configurations provided with the setup program.%@NL@%
  7618. %@NL@%
  7619. %@CR:MSEaT200@%%@CR:MSEa2002@%%@CR:MSEa2003@%%@4@%%@AU@%Table A.2  Function Assignments%@AE@%%@EH@%%@NL@%
  7620. %@TH:  176   6744  3 17 13 13 12 21 @%
  7621.                               %@AB@%Quick/%@AE@%
  7622. %@AB@%Function         Default      WordStar     BRIEF       Epsilon%@AE@%
  7623.  
  7624. %@AI@%Arg%@AE@%              ALT+A        ALT+A        ALT+A       CTRL+U or CTRL+X
  7625.  
  7626. %@AI@%Argcompile%@AE@%       ---          F5           ALT+F10     F5
  7627.  
  7628. %@AI@%Assign%@AE@%           ALT+=        ALT+=        F7          F1
  7629.  
  7630. %@AI@%Backtab%@AE@%          SHIFT+TAB    SHIFT+TAB    SHIFT+TAB   SHIFT+TAB
  7631.  
  7632. %@AI@%Begfile%@AE@%          CTRL+PGUP ---             ---         ---
  7633.  
  7634. %@AI@%Begline%@AE@%          HOME         HOME or      HOME        CTRL+A
  7635.                               CTRL+QS
  7636.  
  7637. %@AI@%Boxstream%@AE@%        CTRL+B       ---          ---         ---
  7638.  
  7639. %@AI@%Cancel%@AE@%           ESC or       ESC          ESC         CTRL+C
  7640.                  CTRL+BREAK
  7641.  
  7642. %@AI@%Cdelete%@AE@%          CTRL+G       CTRL+G       BKSP        ---
  7643.  
  7644. %@AI@%Compile%@AE@%          CTRL+F3      SHIFT+F3     CTRL+N      SHIFT+F3
  7645.  
  7646. %@AI@%Copy%@AE@%             CTRL+INS     CTRL+INS     + (keypad)  ALT+W
  7647.                  or press +
  7648.                  (keypad)
  7649.  
  7650. %@AI@%Curdate%@AE@%          ---          ---          ---         ---
  7651.  
  7652. %@AI@%Curday%@AE@%           ---          ---          ---         ---
  7653.  
  7654. %@AI@%Curfile%@AE@%          ---          ---          ---         ---
  7655.  
  7656. %@AI@%Curfileext%@AE@%       ---          ---          ---         ---
  7657.  
  7658. %@AI@%Curfilenam%@AE@%       ---          ---          ---         ---
  7659.  
  7660. %@AI@%Curtime%@AE@%          ---          ---          ---         ---
  7661.  
  7662. %@AI@%Delete%@AE@%           DEL          ---          ---         ---
  7663.  
  7664. %@AI@%Down%@AE@%             DOWN or      DOWN or      DOWN        DOWN or CTRL+N
  7665.                  CTRL+X       CTRL+X
  7666.  
  7667. %@AI@%Emacscdel%@AE@%        BKSP         BKSP         ---         BKSP or CTRL+H
  7668.  
  7669. %@AI@%Emacsnewl%@AE@%        ENTEREND     END or       END         CTRL+E
  7670.  
  7671. %@AI@%Endfile%@AE@%          CTRL+PGDN    ---          CTRL+QD     ---
  7672.  
  7673. %@AI@%Endline%@AE@%          END          END or       END         CTRL+E
  7674.                               CTRL+QD
  7675.  
  7676. %@AI@%Environment%@AE@%      ---          ---          ---         ---
  7677.  
  7678. %@AI@%Execute%@AE@%          F7           F10          F10         ALT+X
  7679.  
  7680. %@AI@%Exit%@AE@%             F8           ALT+X        ALT+X       F8
  7681.  
  7682. %@AI@%Home%@AE@%             CTRL+HOME    CTRL+HOME    CTRL+HOME   HOME
  7683.  
  7684. %@AI@%Information%@AE@%      SHIFT+F10    SHIFT+F1     ALT+B       SHIFT+F1
  7685.  
  7686. %@AI@%Initialize%@AE@%       SHIFT+F8     ALT+F10      SHIFT+F10   ALT+F10
  7687.  
  7688. %@AI@%Insert%@AE@%           ---          ---          ---         ---
  7689.  
  7690. %@AI@%Insertmode%@AE@%       INS or       INS or       ALT+I       CTRL+V
  7691.                  CTRL+V       CTRL+V
  7692.  
  7693. %@AI@%Lastselect%@AE@%       CTRL+U       ---          ---         ---
  7694.  
  7695. %@AI@%Lasttext%@AE@%         CTRL+O       ALT+L        ALT+L       ALT+L
  7696.  
  7697. %@AI@%Ldelete%@AE@%          CTRL+Y       CTRL+Y       ALT+D       CTRL+K
  7698.  
  7699. %@AI@%Left%@AE@%             LEFT or      LEFT         LEFT        LEFT or CTRL+B
  7700.                  CTRL+S
  7701.  
  7702. %@AI@%Linsert%@AE@%          CTRL+N       CTRL+N       CTRL+ENTER  CTRL+O
  7703.  
  7704. %@AI@%Mark%@AE@%             CTRL+M       ALT+M        ALT+M       CTRL+@
  7705.  
  7706. %@AI@%Message%@AE@%          ---          ---          ---         ---
  7707.  
  7708. %@AI@%Meta%@AE@%             F9           F9           F9          F9
  7709.  
  7710. %@AI@%Mgrep%@AE@%            ---          ---          ---         ---
  7711.  
  7712. %@AI@%Mlines%@AE@%           CTRL+W       CTRL+W       ALT+U       CTRL+W
  7713.  
  7714. %@AI@%Mpage%@AE@%            PGUP         PGUP or      PGUP        PGUP or ALT+V
  7715.                  CTRL+R       CTRL+R
  7716.  
  7717. %@AI@%Mpara%@AE@%            ---          CTRL+PGUP    CTRL+PGUP   ALT+UP
  7718.  
  7719. %@AI@%Mreplace%@AE@%         ---          ---          ---         ---
  7720.  
  7721. %@AI@%Msearch%@AE@%          F4           F4           ALT+F5      CTRL+R
  7722.  
  7723. %@AI@%Mword%@AE@%            CTRL+LEFT    CTRL+LEFT    CTRL+LEFT   CTRL+LEFT or
  7724.                  or CTRL+A                             ALT+B
  7725.  
  7726. %@AI@%Newline%@AE@%          ---          ---          ENTER       ---
  7727.  
  7728. %@AI@%Nextmsg%@AE@%          SHIFT+F3     ---          ---         ---
  7729.  
  7730. %@AI@%Noedit%@AE@%           ---          ---          ---         ---
  7731.  
  7732. %@AI@%Paste%@AE@%            SHIFT+INS    SHIFT+INS    INS         CTRL+Y or INS
  7733.  
  7734. %@AI@%Pbal%@AE@%             CTRL+[       CTRL+[       CTRL+[      CTRL+[
  7735.  
  7736. %@AI@%Plines%@AE@%           CTRL+Z       CTRL+Z       CTRL+Z      CTRL+Z
  7737.  
  7738. %@AI@%Ppage%@AE@%            PGDN or      PGDN or      PDGN        PDGN
  7739.                  CTRL+C       CTRL+C
  7740.  
  7741. %@AI@%Ppara%@AE@%            ---          CTRL+PGDN    CTRL+PDGN   ALT+DOWN
  7742.  
  7743. %@AI@%Print%@AE@%            CTRL+F8      ---          ---         ---
  7744.                  or ALT+F2
  7745.  
  7746. %@AI@%Psearch%@AE@%          F3           F3           F5          F4 or CTRL+S
  7747.  
  7748. %@AI@%Pword%@AE@%            CTRL+RIGHT   CTRL+RIGHT   CTRL+RIGHT  CTRL+RIGHT
  7749.                  or CTRL+F                             or ALT+F
  7750.  
  7751. %@AI@%Qreplace%@AE@%         CTRL+\       ALT+F3       F6          ALT+F3 or ALT+5 or
  7752.                                                        ALT+8
  7753.  
  7754. %@AI@%Quote%@AE@%            CTRL+P       ALT+Q        ALT+Q       CTRL+Q
  7755.  
  7756. %@AI@%Record%@AE@%           ALT+R        ---          ---         ---
  7757.  
  7758. %@AI@%Refresh%@AE@%          SHIFT+F7     ALT+R        CTRL+]      ALT+R
  7759.  
  7760. %@AI@%Repeat%@AE@%           ---          ---          ---         ---
  7761.  
  7762. %@AI@%Replace%@AE@%          CTRL+L       CTRL+L       SHIFT+F6    ---
  7763.  
  7764. %@AI@%Restcur%@AE@%          ---          ---          ---         ---
  7765.  
  7766. %@AI@%Right%@AE@%            RIGHT or     RIGHT or     RIGHT       RIGHT or CTRL+F
  7767.                  CTRL+D       CTRL+D
  7768.  
  7769. %@AI@%Saveall%@AE@%          ---          ---          ---         ---
  7770.  
  7771. %@AI@%Savecur%@AE@%          ---          ---          ---         ---
  7772.  
  7773. %@AI@%Sdelete%@AE@%          ---          DEL          DEL or      DEL or
  7774.                                            press       CTRL+D
  7775.                                            - (keypad)
  7776.  
  7777. %@AI@%Searchall%@AE@%        SHIFT+F6     ---          ---         ---
  7778.  
  7779. %@AI@%Setfile%@AE@%          F2           F2           ALT+N       F2
  7780.  
  7781. %@AI@%Setwindow%@AE@%        CTRL+]       CTRL+]       F2          CTRL+]
  7782.  
  7783. %@AI@%Shell%@AE@%            SHIFT+F9     SHIFT+F9     ALT+Z       ALT+Z
  7784.  
  7785. %@AI@%Sinsert%@AE@%          CTRL+J       ALT+INS      CTRL+INS    ALT+INS
  7786.  
  7787. %@AI@%Tab%@AE@%              TAB          TAB          TAB         TAB or CTRL+I
  7788.  
  7789. %@AI@%Tell%@AE@%             CTRL+T       ---          ---         ---
  7790.  
  7791. %@AI@%Undo%@AE@%             ALT+BKSP     ALT+BKSP     * (keypad)  CTRL+BKSP
  7792.  
  7793. %@AI@%Up%@AE@%               UP or        UP or        UP          UP or CTRL+P
  7794.                  CTRL+E       CTRL+E
  7795.  
  7796. %@AI@%Window%@AE@%           F6           F6           F1          ALT+PGDN
  7797. %@TE:  176   6744  3 17 13 13 12 21 @%
  7798. %@NL@%
  7799. %@CR:MSEa3000@%%@2@%%@AB@%A.3  Comprehensive Listing of Editing Functions%@AE@%%@EH@%%@NL@%
  7800. %@NL@%
  7801. %@CR:MSEa3001@%%@4@%Table A.3 gives a comprehensive listing of the editing functions and syntax%@EH@%
  7802. for each command. Default keystrokes, if available, are given in
  7803. parentheses.%@NL@%
  7804. %@NL@%
  7805. %@CR:MSEaT300@%%@4@%%@AU@%Table A.3  Comprehensive List of Functions%@AE@%%@EH@%%@NL@%
  7806. %@TH:  915  62451  4 16 31 60 @%
  7807. Function
  7808. (and Default
  7809. Keysrokes)      Syntax                         Description
  7810.  
  7811. %@AI@%Arg             Arg%@AE@%                            Introduces a function or an argument for a
  7812. (ALT+A)                                        function.
  7813.  
  7814. %@AI@%Argcompile      Argcompile%@AE@%                     Performs the %@AI@%Arg Compile command%@AE@%. A macro for
  7815.                                                this function appears in the TOOLS.PRE file.
  7816.  
  7817. %@AI@%Assign          Assign%@AE@%                         Treats the entire line (except for the line
  7818. (ALT+=)                                        break) on which the cursor is positioned as a
  7819.                                                function assignment or macro definition.
  7820.  
  7821.                 %@AI@%Arg Assign%@AE@%                     Treats the text from the initial cursor
  7822.                                                position to the end of the line (not including
  7823.                                                the line break) as a function assignment or
  7824.                                                macro definition.
  7825.  
  7826.                 %@AI@%Arg boxarg Assign%@AE@%              Treats each line of the %@AI@%boxarg%@AE@% as an
  7827.                 %@AI@%Arg markarg Assign%@AE@%             individual function assignment or macro
  7828.                 %@AI@%Arg numarg Assign%@AE@%              definition.
  7829.  
  7830.                 %@AI@%Arg linearg Assign%@AE@%             Treats each line as a separate function
  7831.                                                assignment or macro definition, ignoring blank
  7832.                                                lines.
  7833.  
  7834.                 %@AI@%Arg textarg Assign%@AE@%             Treats %@AI@%textarg%@AE@% as a function assignment or
  7835.                                                macro definition.
  7836.  
  7837.                 %@AI@%Arg%@AE@% %@AB@%?%@AE@% %@AI@%Assign%@AE@%                   Displays the current function assignments for
  7838.                                                all functions and macros.
  7839.  
  7840. %@AI@%Backtab         Backtab%@AE@%                        Moves the cursor to the previous tab stop. Tab
  7841. %@AI@%(SHIFT+TAB)%@AE@%                                    stops are defined to be every %@AI@%n%@AE@%th character,
  7842.                                                where %@AI@%n%@AE@% is defined by the %@AB@%tabstops%@AE@% switch.
  7843.  
  7844. %@AI@%Begfile         Begfile%@AE@%                        Places the cursor at the beginning of the
  7845. %@AI@%(CTRL+PGUP)%@AE@%                                    file.
  7846.  
  7847. %@AI@%Begline         Begline%@AE@%                        Places the cursor on the first nonblank
  7848. (HOME)                                         character on the line.
  7849.  
  7850.                 %@AI@%Meta Begline%@AE@%                   Places the cursor in the first character
  7851.                                                position of the line.
  7852.  
  7853. %@AI@%Boxstream       Boxstream%@AE@%                      Toggles between box mode and stream mode. In
  7854. (CTRL+B)                                       box mode, each
  7855.                                                cursor-movement is interpreted as a
  7856.                                                rectangular-shaped %@AI@%linearg%@AE@% or
  7857.                                                %@AI@%boxarg%@AE@%. In stream mode, the editor highlights
  7858.                                                all file positions between initial and new
  7859.                                                cursor position.
  7860.  
  7861. %@AI@%Cancel          Cancel%@AE@%                         Cancels the current operation in
  7862. (ESC)                                          progress.
  7863.  
  7864. %@AI@%Cdelete         Cdelete%@AE@%                        Deletes the previous character, excluding line
  7865. (CTRL+G)                                       breaks. If the cursor is in column 1, %@AI@%Cdelete%@AE@%
  7866.                                                moves the cursor to the end of the previous
  7867.                                                line. If issued in insert mode, %@AI@%Cdelete%@AE@%
  7868.                                                deletes the previous character, reducing the
  7869.                                                length of the line by 1; otherwise, it deletes
  7870.                                                the previous character and replaces it with a
  7871.                                                blank. If the cursor is beyond the end of the
  7872.                                                line when the function is invoked, the cursor
  7873.                                                is moved to the immediate right of the last
  7874.                                                character on the line.
  7875.  
  7876. %@AI@%Compile         Compile%@AE@%                        Displays status of the current compilation (if
  7877. (CTRL+F3)                                      any) on the dialog line.
  7878.  
  7879.                 %@AI@%Arg Compile%@AE@%                    Compiles the current file. Uses the %@AB@%extmake%@AE@%
  7880.                                                command line that matches the filename
  7881.                                                extension of the current file.
  7882.  
  7883.                 %@AI@%Arg textarg Compile%@AE@%            Uses the command line specified by
  7884.                                                %@AB@%extmake:text%@AE@%. The %@AI@%textarg%@AE@% replaces %s in the
  7885.                                                command line. See Table A.5%@BO:   701fe@% for more
  7886.                                                information on
  7887.                                                %@AB@%extmake%@AE@%.
  7888.  
  7889.                 %@AI@%Arg Arg textarg Compile%@AE@%        Invokes the specified text as a program. The
  7890.                                                program is assumed to display its errors in
  7891.                                                the following format: %@AI@%file row column message%@AE@%.
  7892.  
  7893.                 %@AI@%Arg Meta Compile%@AE@%               OS/2 only. Kills a protected-mode compilation
  7894.                                                running in the background, after prompting for
  7895.                                                confirmation.
  7896.  
  7897. %@AI@%Copy            Copy%@AE@%                           Copies the current line into the
  7898. (CTRL+INS, or                                  Clipboard.
  7899. press + on
  7900. numeric keypad)
  7901.  
  7902.                 %@AI@%Arg Copy%@AE@%                       Copies text from the initial cursor position
  7903.                                                to the end of the line and places it into the
  7904.                                                Clipboard. Note that the line break is not
  7905.                                                picked up.
  7906.  
  7907.                 %@AI@%Arg boxarg Copy%@AE@%                Copies the highlighted text into the
  7908.                 %@AI@%Arg linearg Copy%@AE@%               Clipboard.
  7909.                 %@AI@%Arg streamarg Copy%@AE@%
  7910.                 %@AI@%Arg textarg Copy%@AE@%
  7911.  
  7912.                 %@AI@%Arg markarg Copy%@AE@%               Copies the range of text between the cursor
  7913.                                                and the location of the file marker into the
  7914.                                                Clipboard. In %@AI@%stream%@AE@% mode, a stream of text is
  7915.                                                selected. In %@AI@%box%@AE@% mode, the text is treated as
  7916.                                                a %@AI@%boxarg%@AE@% or %@AI@%linearg%@AE@% depending on the
  7917.                                                relative positions of the initial cursor position and
  7918.                                                the file marker.
  7919.  
  7920.                 %@AI@%Arg numarg Copy%@AE@%                Copies the specified number
  7921.                                                of lines into the Clipboard, starting with the
  7922.                                                current line.
  7923.  
  7924. %@AI@%Curdate         Curdate%@AE@%                        Inserts the current date at the cursor in the
  7925.                                                format of 28-Nov-1988.
  7926.  
  7927. %@AI@%Curday          Curday%@AE@%                         Inserts the current day at the cursor in the
  7928.                                                format of Sun...Sat.
  7929.  
  7930. %@AI@%Curfile         Curfile%@AE@%                        Inserts the fully qualified path name of the
  7931.                                                current file at the cursor.
  7932.  
  7933. %@AI@%Curfileext      Curfileext%@AE@%                     Inserts the extension of the current file at
  7934.                                                the cursor.
  7935.  
  7936. %@AI@%Curfilenam      Curfilenam%@AE@%                     Inserts the base name of the current file at
  7937.                                                the cursor.
  7938.  
  7939. %@AI@%Curtime         Curtime%@AE@%                        Inserts the current time at the cursor in the
  7940.                                                format of 13:45:55.
  7941.  
  7942. %@AI@%Delete          Delete%@AE@%                         Deletes the single character under the cursor,
  7943. (DEL)                                          excluding line breaks. The deleted character
  7944.                                                is not placed into the Clipboard.
  7945.  
  7946.                 %@AI@%Arg Delete%@AE@%                     Deletes all text from the current cursor
  7947.                                                position to the end of the line. The deleted
  7948.                                                text (including the line break) is placed into
  7949.                                                the Clipboard. This command has the effect of
  7950.                                                joining lines.
  7951.  
  7952.                 %@AI@%Arg boxarg Delete%@AE@%              Deletes the highlighted text. The
  7953.                 %@AI@%Arg linearg Delete%@AE@%             deleted text is placed into the Clipboard.
  7954.                 %@AI@%Arg streamarg Delete%@AE@%
  7955.  
  7956.                 %@AI@%Arg Meta Delete%@AE@%                Performs the deletions as described above,
  7957.                 %@AI@%Arg boxarg Meta Delete%@AE@%         except the deleted text is not placed into the
  7958.                 %@AI@%Arg linearg Meta Delete%@AE@%        Clipboard.
  7959.                 %@AI@%Arg streamarg Meta Delete%@AE@%
  7960.  
  7961. %@AI@%Down            Down%@AE@%                           Moves the cursor down one line. If this would
  7962. (DOWN or                                       result in the cursor moving out of the window,
  7963. CTRL+X)                                        the window is adjusted downward by the number
  7964.                                                of lines specified by the %@AB@%vscroll%@AE@% switch or
  7965.                                                less if in a small window.
  7966.  
  7967.                 %@AI@%Meta Down%@AE@%                      Moves the cursor to the bottom of the window
  7968.                                                without changing the column position.
  7969.  
  7970. %@AI@%Emacscdel       Emacscdel%@AE@%                      Performs similarly to %@AI@%Cdelete%@AE@%, except that at
  7971. (BKSP)                                         the beginning of a line while in insert mode,
  7972.                                                %@AI@%Emacscdel%@AE@% deletes the line break between the
  7973.                                                current line and the previous line, joining
  7974.                                                the two lines together.
  7975.  
  7976. %@AI@%Emacsnewl       Emacsnewl%@AE@%                      Performs similarly to %@AI@%Newline%@AE@%, except that
  7977. (ENTER)                                        when in insert mode, it breaks the current
  7978.                                                line at the cursor position.
  7979.  
  7980. %@AI@%Endfile         Endfile%@AE@%                        Places the cursor at the end of the file.
  7981. (CTRL+PGDN)
  7982.  
  7983. %@AI@%Endline         Endline%@AE@%                        Moves the cursor to the immediate right of the
  7984. (END)                                          last nonblank character on the line.
  7985.  
  7986.                 %@AI@%Meta Endline%@AE@%                   Moves the cursor one character be-yond the
  7987.                                                column corresponding to the rightmost edge of
  7988.                                                the window.
  7989.  
  7990. %@AI@%Environment     Environment%@AE@%                    Executes the current line as an
  7991.                                                environment-variable setting. For example,
  7992.                                                assume the current line contains the following
  7993.                                                text:
  7994.  
  7995.                                                %@AS@%PATH=C:\BIN;C:\DOS%@AE@%
  7996.  
  7997.                                                The editor responds by adding this setting to
  7998.                                                the operating system environment space. This
  7999.                                                function is essentially the same as the
  8000.                                                system-level SET command. The editor
  8001.                                                recognizes the setting during the rest of the
  8002.                                                editing session, but the setting is lost when
  8003.                                                you exit the editor.
  8004.  
  8005.                 %@AI@%Arg boxarg Environment%@AE@%         Executes each highlighted line or line
  8006.                 %@AI@%Arg linearg Environment%@AE@%        fragment as an environment-
  8007.                                                variable setting.
  8008.  
  8009.                 %@AI@%Arg textarg Environment%@AE@%        Executes the text argument as an
  8010.                                                environment-variable setting.
  8011.  
  8012.                 %@AI@%Arg%@AE@% %@AB@%?%@AE@% %@AI@%Environment%@AE@%              Displays all current environment-variable
  8013.                                                settings.
  8014.  
  8015.                 %@AI@%Meta Environment%@AE@%               Performs environment "mappings" for all
  8016.                                                environment variables found on the current
  8017.                                                line, whenever the variable appears in the
  8018.                                                following
  8019.                                                syntax:
  8020.  
  8021.                                                %@AB@%$(%@AE@%%@AI@%environment-variable%@AE@%%@AB@%)%@AE@%
  8022.  
  8023.                                                For each such environment variable appearing
  8024.                                                on the line, the editor replaces the variable
  8025.                                                with the corresponding setting. For
  8026.                                                example, if PATH is set to %@AS@%C:\BIN%@AE@%, the editor
  8027.                                                replaces each occurrence of the text %@AS@%$(PATH)%@AE@%
  8028.                                                with the text %@AS@%C:\BIN%@AE@%.
  8029.  
  8030.                 %@AI@%Arg Meta Environment%@AE@%           Performs environment mappings (see description
  8031.                                                above) for all text from the cursor position
  8032.                                                to the end of line.
  8033.  
  8034.                 %@AI@%Arg linearg Meta Environment%@AE@%   Performs environment mappings (see description
  8035.                 %@AI@%Arg boxarg Meta Environment%@AE@%    above) for all highlighted text.
  8036.                 %@AI@%Arg streamarg Meta Environment%@AE@%
  8037.  
  8038. %@AI@%Execute         Arg Execute%@AE@%                    Treats the line from the initial cursor
  8039. (F7)                                           position to the end as a series of
  8040.                                                Microsoft Editor commands and executes them.
  8041.  
  8042.                 %@AI@%Arg linearg Execute%@AE@%            Treats the specified text as Microsoft Editor
  8043.                 %@AI@%Arg textarg Execute%@AE@%            commands and executes them, following the
  8044.                                                standard rules of macro execution.
  8045.  
  8046. %@AI@%Exit            Exit%@AE@%                           Saves the current file. If multiple files were
  8047. (F8)                                           specified on the command line, the editor
  8048.                                                advances to the next file. Otherwise, the
  8049.                                                editor quits and returns control to the
  8050.                                                operating system.
  8051.  
  8052.                 %@AI@%Meta Exit%@AE@%                      Performs similarly to %@AI@%Exit%@AE@%, except that the
  8053.                                                current file is not saved.
  8054.  
  8055.                 %@AI@%Arg Exit%@AE@%                       Performs similarly to %@AI@%Exit%@AE@%, except that if
  8056.                                                multiple files are specified on the command
  8057.                                                line, the editor exits without advancing to
  8058.                                                the next file.
  8059.  
  8060.                 %@AI@%Arg Meta Exit%@AE@%                  Performs similarly to %@AI@%Arg Exit%@AE@%, except that
  8061.                                                the editor does not save the current file.
  8062.  
  8063. %@AI@%Home            Home%@AE@%                           Places the cursor in the upper-left corner of
  8064. %@AI@%(CTRL+HOME)%@AE@%                                    the current window.
  8065.  
  8066. %@AI@%Information     Information%@AE@%                    Saves the current file and loads an
  8067. (F10)                                          information file that contains a list of all
  8068.                                                files in memory along with the current set of
  8069.                                                files that you have edited. The size of this
  8070.                                                list is con-trolled by the %@AB@%tmpsav switch%@AE@%,
  8071.                                                which has a default value of 20.
  8072.  
  8073. %@AI@%Initialize      Initialize%@AE@%                     Reads all the editor statements from the [M]
  8074. (SHIFT+F8)                                     section of TOOLS.INI.
  8075.  
  8076.                 %@AI@%Arg Initialize%@AE@%                 Reads the editor statements from the TOOLS.INI
  8077.                                                file, using the continuous string of nonblank
  8078.                                                characters, starting with the initial cursor
  8079.                                                position, as the tag name.
  8080.  
  8081.                 %@AI@%Arg textarg Initialize%@AE@%         Reads all the editor statements from the
  8082.                                                [M-%@AI@%textarg%@AE@%] section of TOOLS.INI.
  8083.  
  8084. %@AI@%Insert          Insert%@AE@%                         Inserts a single blank space at the current
  8085.                                                cursor position.
  8086.  
  8087.                 %@AI@%Arg Insert%@AE@%                     Inserts a carriage return at the initial
  8088.                                                cursor position, splitting the line.
  8089.  
  8090.                 %@AI@%Arg streamarg Insert%@AE@%           Inserts blank spaces into the highlighted
  8091.                 %@AI@%Arg linearg Insert%@AE@%             area.
  8092.                 %@AI@%Arg boxarg Insert%@AE@%
  8093.  
  8094. %@AI@%Insertmode      Insertmode%@AE@%                     Toggles between insert mode and overtype mode.
  8095. (INS or                                        If insert mode is on, %@AS@%insert%@AE@% appears on the
  8096. CTRL+V)                                        status line. While in insert mode, each
  8097.                                                character that is entered is inserted at the
  8098.                                                cursor position, shifting the remainder of the
  8099.                                                line one position to the right. Overtype mode
  8100.                                                replaces the character at the cursor position
  8101.                                                with the character you type.
  8102.  
  8103. %@AI@%Lastselect      Lastselect%@AE@%                     Recalls the last cursor-movement argument.
  8104. (CTRL+U)                                       This function produces the same result as
  8105.                                                returning to the last %@AI@%Arg%@AE@% position, invoking
  8106.                                                the %@AI@%Arg%@AE@% function, and then recreating the last
  8107.                                                cursor-movement argument.
  8108.  
  8109. %@AI@%Lasttext        Lasttext%@AE@%                       Recalls the last %@AI@%textarg%@AE@%. This function
  8110. (CTRL+O)                                       produces the same result as invoking the %@AI@%Arg%@AE@%
  8111.                                                function and then retyping the previous
  8112.                                                %@AI@%textarg%@AE@%.
  8113.  
  8114. %@AI@%Ldelete         Ldelete%@AE@%                        Deletes the current line and places it into
  8115. (CTRL+Y)                                       the Clipboard.
  8116.  
  8117.                 %@AI@%Arg Ldelete%@AE@%                    Deletes text, starting with the initial cursor
  8118.                                                position through the end of the line, and
  8119.                                                places it into the Clipboard. Note that it
  8120.                                                does not join the current line with the next
  8121.                                                line.
  8122.  
  8123.                 %@AI@%Arg boxarg Ldelete%@AE@%             Deletes the specified text from the file and
  8124.                 %@AI@%Arg linearg Ldelete%@AE@%            places it into the Clipboard, treating the
  8125.                                                argument as a %@AI@%linearg%@AE@% or %@AI@%boxarg%@AE@% regardless of
  8126.                                                what mode the editor is in.
  8127.  
  8128. %@AI@%Left            Left%@AE@%                           Moves the cursor one character to the left. If
  8129. %@AI@%(LEFT or%@AE@%                                       this would result in the cursor moving out of
  8130. %@AI@%CTRL+S)%@AE@%                                        the window, the window is adjusted to the left
  8131.                                                by the number of columns specified by the
  8132.                                                %@AB@%hscroll%@AE@% switch or less if in a small window.
  8133.  
  8134.                 %@AI@%Meta Left%@AE@%                      Moves the cursor to the left-most position in
  8135.                                                the window on the same line.
  8136.  
  8137. %@AI@%Linsert         Linsert%@AE@%                        Inserts one blank line above the current line.
  8138. (CTRL+N)
  8139.  
  8140.                 %@AI@%Arg Linsert%@AE@%                    Inserts or deletes blanks at the beginning of
  8141.                                                a line to make the first nonblank character
  8142.                                                appear under the cursor.
  8143.  
  8144.                 %@AI@%Arg boxarg Linsert%@AE@%             Fills the specified area with blanks, treating
  8145.                 %@AI@%Arg linearg Linsert%@AE@%            the argument as a %@AI@%linearg%@AE@% or %@AI@%boxarg%@AE@% regardless
  8146.                                                of the editor's mode.
  8147.  
  8148. %@AI@%Mark            Mark%@AE@%                           Moves the window to the beginning of the file.
  8149. (CTRL+M)
  8150.  
  8151.                 %@AI@%Arg Mark%@AE@%                       Restores the window to its previous location.
  8152.                                                The editor remembers only the location prior
  8153.                                                to the last scrolling operation.
  8154.  
  8155.                 %@AI@%Arg numarg Mark%@AE@%                Moves the cursor to the beginning of the line,
  8156.                                                where %@AI@%numarg%@AE@% specifies the position of the
  8157.                                                line in the file.
  8158.  
  8159.                 %@AI@%Arg textarg Mark%@AE@%               Moves the cursor to the specified file marker.
  8160.                                                If the file marker was not previously defined,
  8161.                                                the editor uses the %@AB@%markfile%@AE@% switch to find
  8162.                                                the file that contains file marker
  8163.                                                definitions.
  8164.  
  8165.                 %@AI@%Arg Arg textarg Mark%@AE@%           Deletes a marker definition.
  8166.  
  8167.                 %@AI@%Arg Arg textarg Meta Mark%@AE@%      Defines a file marker at the initial cursor
  8168.                                                position. This does not record the file marker
  8169.                                                in the file specified by the %@AB@%markfile%@AE@% switch,
  8170.                                                but allows you to refer to this position as
  8171.                                                %@AI@%textarg%@AE@%.
  8172.  
  8173. %@AI@%Message         Message%@AE@%                        Clears the dialog line.
  8174.  
  8175.                 %@AI@%Arg textarg Message%@AE@%            Prints the text argument on the dialog line.
  8176.  
  8177. %@AI@%Meta            Meta%@AE@%                           Modifies the action of the function it is used
  8178. (F9)                                           with. Refer to the individual functions for
  8179.                                                specific information.
  8180.  
  8181. %@AI@%Mgrep           Mgrep%@AE@%                          Searches for the previously defined string or
  8182.                                                pattern. The editor searches all files listed
  8183.                                                in the %@AS@%mgreplist%@AE@% macro, which can contain DOS
  8184.                                                wildcards and environment variables, as in the
  8185.                                                following example:
  8186.  
  8187.                                                %@AS@%megreplist:="DATA.FIL *.FOR  $INCLUDE:*.H"%@AE@%
  8188.  
  8189.                                                The editor places all strings found in the
  8190.                                                <compile> pseudo file.
  8191.  
  8192.                 %@AI@%Arg Mgrep%@AE@%                      Searches files for the string defined as the
  8193.                                                characters from the initial cursor position to
  8194.                                                the first blank character.
  8195.  
  8196.                 %@AI@%Arg textarg Mgrep%@AE@%              Searches files for the specified text.
  8197.  
  8198.                 %@AI@%Arg Arg Mgrep%@AE@%                  Searches files for the regular expression
  8199.                                                defined as the characters from the initial
  8200.                                                cursor position to the first blank character.
  8201.  
  8202.                 %@AI@%Arg Arg textarg Mgrep%@AE@%          Searches files for a regular expression as
  8203.                                                defined by %@AI@%textarg%@AE@%.
  8204.  
  8205.                 %@AI@%Meta Mgrep%@AE@%                     Performs similarly to command form above,
  8206.                 %@AI@%Arg Meta Mgrep%@AE@%                 except that value of the %@AB@%case%@AE@% switch is
  8207.                 %@AI@%Arg textarg Meta Mgrep%@AE@%         temporarily reversed.
  8208.                 %@AI@%Arg Arg Meta Mgrep%@AE@%
  8209.                 %@AI@%Arg Arg textarg Meta Mgrep%@AE@%
  8210.  
  8211. %@AI@%Mlines          Mlines%@AE@%                         Moves the window back by the number of lines
  8212. (CTRL+W)                                       specified by the %@AB@%vscroll%@AE@% switch or less if in
  8213.                                                a small window.
  8214.  
  8215.                 %@AI@%Arg Mlines%@AE@%                     Moves the window until the line that the
  8216.                                                cursor is on is at the bottom of the window.
  8217.  
  8218.                 %@AI@%Arg numarg Mlines%@AE@%              Moves the window back by the specified number
  8219.                                                of lines.
  8220.  
  8221. %@AI@%Mpage           Mpage%@AE@%                          Moves the window backward in the file by one
  8222. (PGUP or                                       window's worth of lines.
  8223. CTRL+R)
  8224.  
  8225. %@AI@%Mpara           Mpara%@AE@%                          Moves the cursor to the first blank line
  8226.                                                preceding the current paragraph, or if
  8227.                                                currently on a blank line, the cursor is
  8228.                                                positioned before the previous paragraph.
  8229.  
  8230.                 %@AI@%Meta Mpara%@AE@%                     Moves the cursor to the first previous line
  8231.                                                that has text.
  8232.  
  8233. %@AI@%Mreplace        Mreplace%@AE@%                       Performs a simple search-and-
  8234.                                                replace operation, prompting you for the
  8235.                                                search and replacement strings, and prompting
  8236.                                                at each occurrence for confirmation. The
  8237.                                                function searches all the file listed in the
  8238.                                                %@AS@%mgreplist%@AE@% macro, which can contain DOS
  8239.                                                wildcards and environment variables, as in the
  8240.                                                following example:
  8241.  
  8242.                                                %@AS@%megreplist:="DATA.FIL *.FOR   $INCLUDE:*.H"%@AE@%
  8243.  
  8244.                 %@AI@%Arg Arg Mreplace%@AE@%               Performs the same action as
  8245.                                                %@AI@%Mreplace%@AE@%, but uses regular-
  8246.                                                expression syntax.
  8247.  
  8248. %@AI@%Msearch         Msearch%@AE@%                        Searches backward for the previously defined
  8249. (F4)                                           string or pattern. If the string or pattern is
  8250.                                                found, the window is moved to display it and
  8251.                                                the matched string or pattern is high-lighted.
  8252.                                                If no match is found, no cursor movement takes
  8253.                                                place and a message is displayed.
  8254.  
  8255.                 %@AI@%Arg Msearch%@AE@%                    Searches backward in the file for the string
  8256.                                                defined as the characters from the initial
  8257.                                                cursor position to the first blank character.
  8258.  
  8259.                 %@AI@%Arg textarg Msearch%@AE@%            Searches backward for the specified text.
  8260.  
  8261.                 %@AI@%Arg Arg Msearch%@AE@%                Searches backward in the file for the regular
  8262.                                                expression defined as the characters from the
  8263.                                                initial cursor position to the first blank
  8264.                                                character.
  8265.  
  8266.                 %@AI@%Arg Arg textarg Msearch%@AE@%        Searches backward for a regular expression as
  8267.                                                defined by %@AI@%textarg%@AE@%.
  8268.  
  8269.                 %@AI@%Meta Msearch%@AE@%                   Performs similarly to command form above,
  8270.                 %@AI@%Arg Meta Msearch%@AE@%               except that value of the %@AB@%case%@AE@% switch is
  8271.                 %@AI@%Arg textarg Meta Msearch%@AE@%       temporarily reversed.
  8272.                 %@AI@%Arg Arg Meta Msearch%@AE@%
  8273.                 %@AI@%Arg Arg textarg Meta Msearch%@AE@%
  8274.  
  8275. %@AI@%Mword           Mword%@AE@%                          Moves the cursor to the beginning of a word.
  8276. (CTRL+LEFT                                     If not in a word or at the first character,
  8277. or CTRL+A)                                     uses the previous word; otherwise, uses the
  8278.                                                current word.
  8279.  
  8280.                 %@AI@%Meta Mword%@AE@%                     Moves the cursor to the immediate right of the
  8281.                                                previous word.
  8282.  
  8283. %@AI@%Newline         Newline%@AE@%                        Moves the cursor to a new line. If the %@AB@%softcr%@AE@%
  8284.                                                switch is set, the editor tries to place the
  8285.                                                cursor in an appropriate position based on the
  8286.                                                type of file. If the file is a C program, the
  8287.                                                editor tries to tab in based on continuation
  8288.                                                of lines and on open blocks. If the next line
  8289.                                                is blank, the editor places the cursor in the
  8290.                                                column corresponding to the first nonblank
  8291.                                                character of the previous line. If neither of
  8292.                                                the above is true, the editor places the
  8293.                                                cursor on the first nonblank character of the
  8294.                                                line.
  8295.  
  8296.                 %@AI@%Meta Newline%@AE@%                   Moves the cursor to column 1 of the next line.
  8297.  
  8298. %@AI@%Nextmsg         Nextmsg%@AE@%                        Advances to next error message.
  8299. (SHIFT+F3)
  8300.  
  8301.                 %@AI@%Arg numarg Nextmsg%@AE@%             Moves forward or backward %@AI@%numarg%@AE@% error
  8302.                                                messages. A %@AI@%numarg%@AE@% value of 1 moves to next
  8303.                                                message; a value of -1 moves to previous
  8304.                                                message.
  8305.  
  8306.                 %@AI@%Arg Nextmsg%@AE@%                    Moves to the next error message (within
  8307.                                                current set of messages) that does not refer
  8308.                                                to current file.
  8309.  
  8310.                 %@AI@%Arg Arg Nextmsg%@AE@%                Positions the text-file cursor at the line
  8311.                                                with the error described in the error message
  8312.                                                at the current cursor position in the
  8313.                                                <compile> pseudo file. This message becomes
  8314.                                                the current error message. The following
  8315.                                                %@AI@%Nextmsg%@AE@% command displays the next error
  8316.                                                message from the <compile> pseudo file.
  8317.  
  8318.                 %@AI@%Meta Nextmsg%@AE@%                   OS/2 only. Advance to next "set" of error
  8319.                                                messages, in which a set corresponds to all
  8320.                                                the error messages for a single compilation.
  8321.                                                After executing this command, the previous set
  8322.                                                is deleted (though you can still view all
  8323.                                                subsequent sets of error messages in the
  8324.                                                <compile> pseudo file, until deleted).
  8325.  
  8326. %@AI@%Noedit          Noedit%@AE@%                         Reverses the no-edit condition, so that if the
  8327.                                                editor was started with the /R (read only)
  8328.                                                option, this command removes the no-edit
  8329.                                                limitation. If the editor is not in the
  8330.                                                no-edit state, this command disallows all
  8331.                                                editing commands that alter a file.
  8332.  
  8333.                 %@AI@%Meta Noedit%@AE@%                    Reverses the no-edit condition for the current
  8334.                                                file.
  8335.  
  8336. %@AI@%Paste           Paste%@AE@%                          Inserts the contents of the Clipboard prior to
  8337. %@AI@%(SHIFT+INS)%@AE@%                                    the current line if the contents were placed
  8338.                                                there in a line-oriented way, such as with
  8339.                                                %@AI@%linearg%@AE@% or %@AI@%numarg%@AE@%. Otherwise, the contents of
  8340.                                                the Clipboard are inserted at the current
  8341.                                                cursor position.
  8342.  
  8343.                 %@AI@%Arg Paste%@AE@%                      Inserts the text from the initial cursor
  8344.                                                position to the end of the line at the initial
  8345.                                                cursor position.
  8346.  
  8347.                 %@AI@%Arg textarg Paste%@AE@%              Places the specified text into the Clipboard
  8348.                                                and inserts that text at the initial cursor
  8349.                                                position.
  8350.  
  8351.                 %@AI@%Arg Arg textarg Paste%@AE@%          Interprets %@AI@%textarg%@AE@% as a file name
  8352.                                                and inserts the contents of that file into the
  8353.                                                current file above the current line.
  8354.  
  8355.                 %@AI@%Arg Arg%@AE@% %@AB@%!%@AE@%%@AI@%textarg Paste%@AE@%         Treats the text as a DOS command and inserts
  8356.                                                its output to stdout into the current file at
  8357.                                                the initial cursor position. The exclamation
  8358.                                                mark must be entered as shown.
  8359.  
  8360. %@AI@%Pbal            Pbal%@AE@%                           Scans backward through the file, balancing
  8361. (CTRL+[)                                       parentheses and brackets. The first unbalanced
  8362.                                                one is highlighted when found. If it is found
  8363.                                                and is not visible, the editor displays the
  8364.                                                matching line on the dialog line, with the
  8365.                                                highlighted matching character. The
  8366.                                                corresponding character is placed into the
  8367.                                                file at the current cursor position.  Note
  8368.                                                that the search does not include the current
  8369.                                                cursor position and that the scan only looks
  8370.                                                for more left brackets or parentheses than
  8371.                                                right, not just an unequal amount.
  8372.  
  8373.                 %@AI@%Arg Pbal%@AE@%                       Performs similarly to %@AI@%Pbal%@AE@% except that it
  8374.                                                scans forward in the file and looks for more
  8375.                                                right brackets or parentheses than left.
  8376.  
  8377.                 %@AI@%Meta Pbal%@AE@%                      Performs similarly to %@AI@%Pbal%@AE@% except that the
  8378.                                                file is not updated.
  8379.  
  8380.                 %@AI@%Arg Meta Pbal%@AE@%                  Performs similarly to %@AI@%Arg Pbal%@AE@% except that the
  8381.                                                file is not updated.
  8382.  
  8383. %@AI@%Plines          Plines%@AE@%                         Adjusts the window forward by the number of
  8384. (CTRL+Z)                                       lines specified by the %@AB@%vscroll%@AE@% switch or less
  8385.                                                if in a small window.
  8386.  
  8387.                 %@AI@%Arg Plines%@AE@%                     Moves the window downward so the line that the
  8388.                                                cursor is on is at the top of the window.
  8389.  
  8390.                 %@AI@%Arg numarg Plines%@AE@%              Moves the window forward the specified number
  8391.                                                of lines.
  8392.  
  8393. %@AI@%Ppage           Ppage%@AE@%                          Moves the window forward in the file by one
  8394. (PGDN or                                       window's worth of lines.
  8395. CTRL+C)
  8396.  
  8397. %@AI@%Ppara           Ppara%@AE@%                          Moves the cursor forward one paragraph and
  8398.                                                places the cursor on the first line of the new
  8399.                                                paragraph.
  8400.  
  8401.                 %@AI@%Meta Ppara%@AE@%                     Moves the cursor to the first blank line
  8402.                                                following the current paragraph.
  8403.  
  8404. %@AI@%Print           Print%@AE@%                          Prints the current file. If the %@AB@%printcmd%@AE@%
  8405. (CTRL+F8)                                      switch is set, this function uses the
  8406.                                                system-level command given in the switch.
  8407.                                                Otherwise, the function copies output to LPT1.
  8408.  
  8409.                 %@AI@%Arg textarg Print%@AE@%              Prints all the files listed in the text
  8410.                                                argument. File names should be sepa- rated
  8411.                                                with a space.
  8412.  
  8413.                 %@AI@%Arg linearg Print%@AE@%              Prints the highlighted area.
  8414.                 %@AI@%Arg boxarg Print%@AE@%
  8415.                 %@AI@%Arg streamarg Print%@AE@%
  8416.  
  8417. %@AI@%Psearch         Psearch%@AE@%                        Searches forward for the previously defined
  8418. (F3)                                           string or pattern. If the string or pattern is
  8419.                                                found, the window is moved to display it and
  8420.                                                the matched string or pattern is highlighted.
  8421.                                                If it is not found, no cursor movement takes
  8422.                                                place and a message is displayed.
  8423.  
  8424.                 %@AI@%Arg Psearch%@AE@%                    Searches forward in the file for the string
  8425.                                                defined as the characters from the initial
  8426.                                                cursor position to the first blank character.
  8427.  
  8428.                 %@AI@%Arg textarg Psearch%@AE@%            Searches forward for the specified text.
  8429.  
  8430.                 %@AI@%Arg Arg Psearch%@AE@%                Searches forward in the file for the regular
  8431.                                                expression defined as the characters from the
  8432.                                                initial cursor position to the first blank
  8433.                                                character.
  8434.  
  8435.                 %@AI@%Arg Arg textarg Psearch%@AE@%        Searches forward for a regular expression as
  8436.                                                defined by %@AI@%textarg%@AE@%.
  8437.  
  8438.                 %@AI@%Meta Psearch%@AE@%                   Performs similarly to command form above,
  8439.                 %@AI@%Arg Meta Psearch%@AE@%               except that value of the %@AB@%case%@AE@% switch is
  8440.                 %@AI@%Arg textarg Meta Psearch%@AE@%       temporarily reversed.
  8441.                 %@AI@%Arg Arg Meta Psearch%@AE@%
  8442.                 %@AI@%Arg Arg textarg Meta Psearch%@AE@%
  8443.  
  8444. %@AI@%Pword           Pword%@AE@%                          Moves the cursor forward one word and places
  8445. (CTRL+RIGHT                                    the cursor on the beginning of the new word.
  8446. or CTRL+F)
  8447.  
  8448.                 %@AI@%Meta Pword%@AE@%                     Moves cursor to immediate right of current
  8449.                                                word or, if not in a word, to the right of the
  8450.                                                next word.
  8451.  
  8452. %@AI@%Qreplace        Qreplace%@AE@%                       Performs a simple search-and-
  8453. (CTRL+\)                                       replace operation, prompting you for the
  8454.                                                search and replacement strings, and prompting
  8455.                                                at each occurrence for confirmation. The
  8456.                                                search begins at the cursor position and
  8457.                                                continues through the end of the file.
  8458.  
  8459.                 %@AI@%Arg boxarg Qreplace%@AE@%            Perform the search-and-replace operation over
  8460.                 %@AI@%Arg linearg Qreplace%@AE@%           the highlighted area, prompting at each
  8461.                 %@AI@%Arg streamarg Qreplace%@AE@%         occurrence for confirmation.
  8462.  
  8463.                 %@AI@%Arg markarg Qreplace%@AE@%           Performs the search-and-replace operation
  8464.                                                between the initial cursor position and the
  8465.                                                specified file marker, prompting at each
  8466.                                                occurrence for confirmation.
  8467.  
  8468.                 %@AI@%Arg numarg Qreplace%@AE@%            Performs the search-and-replace operation over
  8469.                                                the specified number of lines, starting with
  8470.                                                the current line, prompting at each occurrence
  8471.                                                for confirmation.
  8472.  
  8473.                 %@AI@%Arg Arg Qreplace%@AE@%               Performs the same as the corresponding command
  8474.                 %@AI@%Arg Arg boxarg Qreplace%@AE@%        listed above, except that the search pattern
  8475.                 %@AI@%Arg Arg linearg Qreplace%@AE@%       is a regular expression and the replacement
  8476.                 %@AI@%Arg Arg streamarg Qreplace%@AE@%     pattern can select special tagged sections of
  8477.                 %@AI@%Arg Arg markarg Qreplace%@AE@%       the search for selective replacement. See
  8478.                 %@AI@%Arg Arg numarg Qreplace%@AE@%        Chapter 5%@BO:   206bc@% for more information.
  8479.  
  8480.  
  8481. %@AI@%Quote           Quote%@AE@%                          Reads one keystroke from the keyboard and
  8482. (CTRL+P)                                       treats it literally. This is useful for
  8483.                                                inserting text into a file that happens to be
  8484.                                                assigned to an editor function.
  8485.  
  8486. %@AI@%Record          Record%@AE@%                         Turns on macro recording if off, and off if
  8487. (ALT+R)                                        on. When a recording is stopped, the editor
  8488.                                                assigns all the recorded commands to the
  8489.                                                default macro name recordvalue. During the
  8490.                                                recording, the name of each command is written
  8491.                                                to the <record> pseudo file, which can be
  8492.                                                placed in a window and viewed as it is
  8493.                                                dynamically updated.
  8494.  
  8495.                 %@AI@%Arg textarg Record%@AE@%             Turns on macro recording if off and gives
  8496.                                                recording the name specified in the text
  8497.                                                argument or turns recording off if on.
  8498.  
  8499.                 %@AI@%Meta Record%@AE@%                    Turns recording on if recording state is off,
  8500.                                                but no editing commands are executed until
  8501.                                                recording is turned off. Turns recording off
  8502.                                                if it is on.
  8503.  
  8504.                 %@AI@%Arg Arg Record%@AE@%                 Performs identically to the corresponding
  8505.                 %@AI@%Arg Arg textarg Record%@AE@%         command listed above, but if the target macro
  8506.                 %@AI@%Arg Arg Meta Record%@AE@%            already exists, editing commands are appended
  8507.                                                to the end of the macro.
  8508.  
  8509. %@AI@%Refresh         Refresh%@AE@%                        Asks for confirmation and then rereads the
  8510. (SHIFT+F7)                                     file from disk, discarding all edits since the
  8511.                                                file was last saved.
  8512.  
  8513.                 %@AI@%Arg Refresh%@AE@%                    Asks for confirmation and then discards the
  8514.                                                file from memory, loading the last file edited
  8515.                                                in its place.
  8516.  
  8517. %@AI@%Repeat          Repeat%@AE@%                         Repeats the last editing command, using
  8518.                                                precisely the same arguments and %@AI@%Meta%@AE@%
  8519.                                                condition used by the last command. However,
  8520.                                                the command is executed relative to the new
  8521.                                                cursor position. (Note: if the previous
  8522.                                                command had a cursor-movement argument, the
  8523.                                                text actually high-lighted is reused as the
  8524.                                                argument.)
  8525.  
  8526. %@AI@%Replace         Replace%@AE@%                        Performs a simple search-and-
  8527. (CTRL+L)                                       replace operation without confirmation,
  8528.                                                prompting you for the search string and
  8529.                                                replacement string. The search begins at
  8530.                                                the cursor position and continues through
  8531.                                                the end of the file.
  8532.  
  8533.                 %@AI@%Arg boxarg Replace%@AE@%             Performs the search-and-replace operation over
  8534.                 %@AI@%Arg linearg Replace%@AE@%            the highlighted area.
  8535.                 %@AI@%Arg streamarg Replace%@AE@%
  8536.  
  8537.                 %@AI@%Arg markarg Replace%@AE@%            Performs the search-and-replace operation
  8538.                                                between the cursor and the specified file
  8539.                                                marker.
  8540.  
  8541.                 %@AI@%Arg numarg Replace%@AE@%             Performs the search-and-replace operation over
  8542.                                                the specified number of lines, starting with
  8543.                                                the current line.
  8544.  
  8545.                 %@AI@%Arg Arg Replace%@AE@%                Performs the same as the corresponding command
  8546.                 %@AI@%Arg Arg boxarg Replace%@AE@%         listed above except that the search pattern is
  8547.                 %@AI@%Arg Arg linearg Replace%@AE@%        a regular expression and the replacement
  8548.                 %@AI@%Arg Arg streamarg Replace%@AE@%      pattern can select special tagged sections of
  8549.                 %@AI@%Arg Arg markarg Replace%@AE@%        the search for selective replacement. See
  8550.                 %@AI@%Arg Arg numarg Replace%@AE@%         Chapter 5%@BO:   206bc@% for more information.
  8551.  
  8552.  
  8553. %@AI@%Restcur         Restcur%@AE@%                        Restores the cursor position saved with
  8554.                                                %@AI@%Savecur%@AE@%.
  8555.  
  8556. %@AI@%Right (RIGHT    Right%@AE@%                          Moves the cursor one character to the right.
  8557. %@AI@%or CTRL+D)%@AE@%                                     If this would result in the cursor moving out
  8558.                                                of the window,  the window is adjusted to the
  8559.                                                right the number of columns specified by the
  8560.                                                %@AB@%hscroll%@AE@% switch or less if in a small window.
  8561.  
  8562.                 %@AI@%Meta Right%@AE@%                     Moves the cursor to the right-most position in
  8563.                                                the window.
  8564.  
  8565. %@AI@%Saveall         Saveall%@AE@%                        Saves all files that have been altered during
  8566.                                                the current editing session without being
  8567.                                                saved.
  8568.  
  8569. %@AI@%Savecur         Savecur%@AE@%                        Saves the current cursor position to be
  8570.                                                restored with %@AI@%Restcur%@AE@%.
  8571.  
  8572. %@AI@%Sdelete         Sdelete%@AE@%                        Deletes the single character under the cursor,
  8573. (DEL)                                          excluding line breaks. It does not place the
  8574.                                                deleted character into the Clipboard. This
  8575.                                                command has the effect of joining lines.
  8576.  
  8577.                 %@AI@%Arg Sdelete%@AE@%                    Deletes from the current line at the point of
  8578.                                                the cursor position. The text deleted
  8579.                                                (including the line break) is placed into the
  8580.                                                Clipboard.
  8581.  
  8582.                 %@AI@%Arg streamarg Sdelete%@AE@%          Deletes the stream of text from the initial
  8583.                                                cursor position up to the current cursor
  8584.                                                position and places it into the Clipboard.
  8585.  
  8586. %@AI@%Searchall       Searchall%@AE@%                      Highlights all occurrences of the previously
  8587. (SHIFT+F6)                                     defined string or pattern. If at least one
  8588.                                                occurrence is found, the cursor moves to the
  8589.                                                first occurrence in the file.
  8590.  
  8591.                 %@AI@%Arg Searchall%@AE@%                  Highlights all occurrences of the string
  8592.                                                defined as the characters from the initial
  8593.                                                cursor position to the first blank character.
  8594.  
  8595.                 %@AI@%Arg textarg Searchall%@AE@%          Highlights all occurrences of the specified
  8596.                                                text.
  8597.  
  8598.                 %@AI@%Arg Arg Searchall%@AE@%              Highlights all occurrences of the regular
  8599.                                                expression defined as the char- acters from
  8600.                                                the initial cursor position to the first blank
  8601.                                                character.
  8602.  
  8603.                 %@AI@%Arg Arg textarg Searchall%@AE@%      Highlights all occurrences of a regular
  8604.                                                expression as defined by %@AI@%textarg%@AE@%.
  8605.  
  8606.                 %@AI@%Meta Searchall%@AE@%                 Performs similarly to command forms above,
  8607.                 %@AI@%Arg Meta Searchall%@AE@%             except that the value of the %@AB@%case%@AE@% switch is
  8608.                 %@AI@%Arg textarg Meta Searchall%@AE@%     temporarily reversed.
  8609.                 %@AI@%Arg Arg Meta Searchall%@AE@%
  8610.                 %@AI@%Arg Arg textarg Meta Searchall%@AE@%
  8611.  
  8612. %@AI@%Setfile         Setfile%@AE@%                        Switches to the most recently edited file,
  8613. (F2)                                           saving any changes made to the current file to
  8614.                                                disk.
  8615.  
  8616.                 %@AI@%Arg Setfile%@AE@%                    Switches to the file name that begins at the
  8617.                                                initial cursor position and ends with the
  8618.                                                first blank.
  8619.  
  8620.                 %@AI@%Arg textarg Setfile%@AE@%            Switches to the file specified by %@AI@%textarg%@AE@%. The
  8621.                                                text argument may be a drive or directory, in
  8622.                                                which case the editor changes the current
  8623.                                                drive or directory.
  8624.  
  8625.                 %@AI@%Meta Setfile%@AE@%                   Performs similarly to the corresponding
  8626.                 %@AI@%Arg Meta Setfile%@AE@%               command listed above, but disables the saving
  8627.                 %@AI@%Arg textarg Meta Setfile%@AE@%       of changes for the current file.
  8628.  
  8629.                 %@AI@%Arg Arg textarg Setfile%@AE@%        Saves the current file under the name
  8630.                                                specified by %@AI@%textarg%@AE@%.
  8631.  
  8632.                 %@AI@%Arg Arg Setfile%@AE@%                Saves the current file.
  8633.  
  8634. %@AI@%Setwindow       Setwindow%@AE@%                      Redisplays the entire screen.
  8635. (CTRL+])
  8636.  
  8637.                 %@AI@%Arg Setwindow%@AE@%                  Adjusts the window so that the initial cursor
  8638.                                                position becomes the home position (upper-left
  8639.                                                corner).
  8640.  
  8641.                 %@AI@%Meta Setwindow%@AE@%                 Redisplays the current line.
  8642.  
  8643. %@AI@%Shell           Shell%@AE@%                          Saves the current file and runs the command
  8644. (SHIFT+F9)                                     shell.
  8645.  
  8646.                 %@AI@%Meta Shell%@AE@%                     Runs the command shell without saving the
  8647.                                                current file.
  8648.  
  8649.                 %@AI@%Arg Shell%@AE@%                      Uses the text on the screen from the cursor up
  8650.                                                to the end of line as a command to the shell.
  8651.  
  8652.                 %@AI@%Arg boxarg Shell%@AE@%               Treats each line of either argument as a
  8653.                 %@AI@%Arg linearg Shell%@AE@%              separate command to the shell
  8654.  
  8655.                 %@AI@%Arg textarg Shell%@AE@%              Uses %@AI@%textarg%@AE@% as a command to the shell.
  8656.  
  8657. %@AI@%Sinsert         Sinsert%@AE@%                        Inserts a single blank space at the current
  8658. (CTRL+J)                                       cursor position.
  8659.  
  8660.                 %@AI@%Arg Sinsert%@AE@%                    Inserts a carriage return at the initial
  8661.                                                cursor position, splitting the line.
  8662.  
  8663.                 %@AI@%Arg streamarg Sinsert%@AE@%          Insert a stream of blanks between the initial
  8664.                                                cursor position and the current cursor
  8665.                                                position.
  8666.  
  8667. %@AI@%Tab             Tab%@AE@%                            Moves the cursor to the next tab stop. Tab
  8668. (TAB)                                          stops are defined to be every %@AI@%n%@AE@%th character,
  8669.                                                where %@AI@%n%@AE@% is defined by the %@AB@%tabstops%@AE@% switch.
  8670.  
  8671. %@AI@%Tell            Tell%@AE@%                           Prompts for a keystroke, then displays the
  8672. (CTRL+T)                                       name of the keystroke and the function
  8673.                                                assigned to it in the format %@AI@%function:keyname%@AE@%.
  8674.  
  8675.                 %@AI@%Arg Tell%@AE@%                       Identical to %@AI@%Tell%@AE@%, but if the key has a macro
  8676.                                                attached, displays
  8677.                                                %@AI@%MacroName:=MacroValue%@AE@%.
  8678.  
  8679.                 %@AI@%Arg Arg Tell%@AE@%                   Prompts for a keystroke, then displays the
  8680.                                                value of the macro attached to the key. If a
  8681.                                                function is assigned to the key, the editor
  8682.                                                displays the name of the function.
  8683.  
  8684.                 %@AI@%Arg textarg Tell%@AE@%               Like %@AI@%Arg Tell%@AE@% but obtains the macro name from
  8685.                                                a %@AI@%textarg%@AE@% rather than a keystroke.
  8686.  
  8687.                 %@AI@%Meta Tell%@AE@%                      Performs the same as the command listed above,
  8688.                 %@AI@%Arg Meta Tell%@AE@%                  except the editor inserts the output into the
  8689.                 %@AI@%Arg Arg Meta Tell%@AE@%              file rather than on the dialog line.
  8690.                 %@AI@%Arg textarg Meta Tell%@AE@%
  8691.  
  8692. %@AI@%Undo            Undo%@AE@%                           Reverses the last editing change. The maximum
  8693. (ALT+BKSP)                                     number of times this can be performed is set
  8694.                                                by the %@AB@%undocount%@AE@% switch.
  8695.  
  8696.                 %@AI@%Meta Undo%@AE@%                      Recalls a command previously canceled with
  8697.                                                %@AI@%Undo%@AE@%. This command is often called "redo."
  8698.  
  8699. %@AI@%Up              Up%@AE@%                             Moves the cursor up one line. If this would
  8700. %@AI@%(UP or%@AE@%                                         result in the cursor moving out of the window,
  8701. %@AI@%CTRL+E)%@AE@%                                        the window is adjusted upward by the number of
  8702.                                                lines specified by the %@AB@%vscroll%@AE@% switch or fewer
  8703.                                                if in a small window.
  8704.  
  8705.                 %@AI@%Meta Up%@AE@%                        Moves the cursor to the top of the window
  8706.                                                without changing the column position.
  8707.  
  8708. %@AI@%Window          Window%@AE@%                         Moves the cursor to the next window. With
  8709. (F6)                                           multiple windows, the next window is defined
  8710.                                                as being to the right of or below the current
  8711.                                                window.
  8712.  
  8713.                 %@AI@%Arg Window%@AE@%                     Splits the current window horizontally at the
  8714.                                                initial cursor position. Note that all windows
  8715.                                                must be at least five lines high.
  8716.  
  8717.                 %@AI@%Arg Arg Window%@AE@%                 Splits the current window vertically at the
  8718.                                                initial cursor position. Note that all windows
  8719.                                                must be at least 10 columns wide.
  8720.  
  8721.                 %@AI@%Meta Window%@AE@%                    Closes the window.
  8722. %@TE:  915  62451  4 16 31 60 @%
  8723. %@NL@%
  8724. %@CR:MSEa4000@%%@2@%%@AB@%A.4  Return Values of Editing Functions%@AE@%%@EH@%%@NL@%
  8725. %@NL@%
  8726. %@CR:MSEa4001@%%@4@%Table A.4 gives an alphabetical listing of editing functions along with the%@EH@%
  8727. conditions under which each function returns TRUE or FALSE. These return
  8728. values are useful in conditional macros.%@NL@%
  8729. %@NL@%
  8730. %@CR:MSEaT400@%%@CR:MSEaT500@%%@CR:MSEaT600@%%@4@%%@AU@%Table A.4  Editor Functions and Return Values%@AE@%%@EH@%%@NL@%
  8731. %@TH:  188   7800  2 18 28 30 @%
  8732. %@AB@%Function          Returns TRUE               Returns FALSE%@AE@%
  8733.  
  8734. %@AI@%Arg%@AE@%               Always                     Never
  8735.  
  8736. %@AI@%Argcompile%@AE@%        Compile successful         Bad argument/compiler not found
  8737.  
  8738. %@AI@%Assign%@AE@%            Assignment successful      Invalid assignment
  8739.  
  8740. %@AI@%Backtab%@AE@%           Cursor moved               Cursor at left margin
  8741.  
  8742. %@AI@%Begfile%@AE@%           Cursor moved               Cursor not moved
  8743.  
  8744. %@AI@%Begline%@AE@%           Cursor moved               Cursor not moved
  8745.  
  8746. %@AI@%Boxstream%@AE@%         New mode is box mode       New mode is stream mode
  8747.  
  8748. %@AI@%Cancel%@AE@%            Always                     Never
  8749.  
  8750. %@AI@%Cdelete%@AE@%           Cursor moved               Cursor not moved
  8751.  
  8752. %@AI@%Compile%@AE@%           Compilation                Compilation unsuccessfully
  8753.                   successfully initiated     initiated or background
  8754.                   or background              compilation not
  8755.                   compilation running        running
  8756.  
  8757. %@AI@%Copy%@AE@%              Always                     Never
  8758.  
  8759. %@AI@%Curdate%@AE@%           Date inserted              Insertion would make line
  8760.                                              too long
  8761.  
  8762. %@AI@%Curday%@AE@%            Day inserted               Insertion would make line
  8763.                                              too long
  8764.  
  8765. %@AI@%Curfile%@AE@%           File inserted              Insertion would make line
  8766.                                              too long
  8767.  
  8768. %@AI@%Curfileext%@AE@%        File extension inserted    Insertion would make line
  8769.                                              too long
  8770.  
  8771. %@AI@%Curfilenam%@AE@%        File name inserted         Insertion would make line
  8772.                                              too long
  8773.  
  8774. %@AI@%Curtime%@AE@%           Time inserted              Insertion would make line
  8775.                                              too long
  8776.  
  8777. %@AI@%Delete%@AE@%            Always                     Never
  8778.  
  8779. %@AI@%Down%@AE@%              Cursor moved               Cursor not moved
  8780.  
  8781. %@AI@%Emacscdel%@AE@%         Cursor moved               Cursor not moved
  8782.  
  8783. %@AI@%Emacsnewl%@AE@%         Always                     Never
  8784.  
  8785. %@AI@%Endfile%@AE@%           Cursor moved               Cursor not moved
  8786.  
  8787. %@AI@%Endline%@AE@%           Cursor moved               Cursor not moved
  8788.  
  8789. %@AI@%Environment%@AE@%       Successful set or map      Syntax error or line too long
  8790.  
  8791. %@AI@%Execute%@AE@%           Last command successful    Last command failed
  8792.  
  8793. %@AI@%Exit%@AE@%              No return condition        No return condition
  8794.  
  8795. %@AI@%Graphic%@AE@%           Character inserted         Insertion would make line
  8796.                                                          too long
  8797.  
  8798. %@AI@%Home%@AE@%              Cursor moved               Cursor not moved
  8799.  
  8800. %@AI@%Information%@AE@%       Always                     Never
  8801.  
  8802. %@AI@%Initialize%@AE@%        Found tagged section       Did not find tagged section in
  8803.                   in TOOLS.INI               TOOLS.INI
  8804.  
  8805. %@AI@%Insert%@AE@%            Always                     Never
  8806.  
  8807. %@AI@%Insertmode%@AE@%        Insert mode turned on      Insert mode turned off
  8808.  
  8809. %@AI@%Lastselect%@AE@%        Selection recreated        %@AI@%Arg%@AE@% already selected
  8810.  
  8811. %@AI@%Lasttext%@AE@%          Value of function          Bad argument
  8812.                   eventually executed
  8813.  
  8814. %@AI@%Ldelete%@AE@%           Always                     Never
  8815.  
  8816. %@AI@%Left%@AE@%              Cursor moved               Cursor not moved
  8817.  
  8818. %@AI@%Linsert%@AE@%           Always                     Never
  8819.  
  8820. %@AI@%Mark%@AE@%              Definition/move            Bad argument/not found
  8821.                   successful
  8822.  
  8823. %@AI@%Message%@AE@%           Always                     Never
  8824.  
  8825. %@AI@%Meta%@AE@%              %@AI@%Meta%@AE@% turned on             %@AI@%Meta%@AE@% turned off
  8826.  
  8827. %@AI@%Mgrep%@AE@%             String found               String not found or specified,
  8828.                                              or search terminated by
  8829.                                              CTRL+BREAK, or background
  8830.                                              compilation in progress
  8831.  
  8832. %@AI@%Mlines%@AE@%            Movement occurred          Bad argument
  8833.  
  8834. %@AI@%Mpage%@AE@%             Movement occurred          Bad argument
  8835.  
  8836. %@AI@%Mpara%@AE@%             String found               Bad argument/string not found
  8837.  
  8838. %@AI@%Mreplace%@AE@%          Replacement successful     Replacement failed or was
  8839.                                              aborted
  8840.  
  8841. %@AI@%Msearch%@AE@%
  8842.  
  8843. %@AI@%Mword%@AE@%             Cursor moved               Cursor not moved
  8844.  
  8845. %@AI@%Newline%@AE@%           Always                     Never
  8846.  
  8847. %@AI@%Nextmsg%@AE@%           Message found              No more messages
  8848.  
  8849. %@AI@%Noedit%@AE@%            File or editor in          File or editor is not in
  8850.                   no-edit state              no-edit state
  8851.  
  8852. %@AI@%Paste%@AE@%             Almost always              Tried %@AI@%Arg Arg filename Paste%@AE@%
  8853.                                              and file didn't exist
  8854.  
  8855. %@AI@%Pbal%@AE@%              Balance successful         Bad argument/not balanced
  8856.  
  8857. %@AI@%Plines%@AE@%            Movement occurred          Bad argument
  8858.  
  8859. %@AI@%Ppage%@AE@%             Cursor moved               Cursor not moved
  8860.  
  8861. %@AI@%Ppara%@AE@%             Cursor moved               Cursor not moved
  8862.  
  8863. %@AI@%Print%@AE@%             Print successfully         Could not start print job
  8864.                   submitted
  8865.  
  8866. %@AI@%Psearch%@AE@%           String found               Bad argument/string not found
  8867.  
  8868. %@AI@%Pword%@AE@%             Cursor moved               Cursor not moved
  8869.  
  8870. %@AI@%Qreplace%@AE@%          At least one               String not found/invalid
  8871.                   replacement                pattern
  8872.  
  8873. %@AI@%Quote%@AE@%             Almost always              Insertion would make line
  8874.                                              too long
  8875.  
  8876. %@AI@%Record%@AE@%            Recording turned on        Recording turned off
  8877.  
  8878. %@AI@%Refresh%@AE@%           File read in/deleted       Canceled, bad argument
  8879.  
  8880. %@AI@%Repeat%@AE@%            Function repeated and      Function repeated and returned
  8881.                   returned TRUE              FALSE, or no function to repeat
  8882.  
  8883. %@AI@%Replace%@AE@%           At least one               String not found/invalid
  8884.                   replacement                pattern
  8885.  
  8886. %@AI@%Restcur%@AE@%           Position previously        Position not saved with
  8887.                   saved with %@AI@%Savecur%@AE@%         %@AI@%Savecur%@AE@%
  8888.  
  8889. %@AI@%Right%@AE@%             Cursor over text of line   Cursor beyond end of line
  8890.  
  8891. %@AI@%Saveall%@AE@%           Always                     Never
  8892.  
  8893. %@AI@%Savecur%@AE@%           Always                     Never
  8894.  
  8895. %@AI@%Sdelete%@AE@%           Always                     Never
  8896.  
  8897. %@AI@%Searchall%@AE@%         Something found            Nothing found
  8898.  
  8899. %@AI@%Setfile%@AE@%           File-switch successful     No alternate file, or current
  8900.                                              file needs to be saved and
  8901.                                              can't be
  8902.  
  8903. %@AI@%Setwindow%@AE@%         Always                     Never
  8904.  
  8905. %@AI@%Shell%@AE@%             Shell successful           Bad argument/program not found
  8906.  
  8907. %@AI@%Sinsert%@AE@%           Always                     Never
  8908.  
  8909. %@AI@%Tab%@AE@%               Cursor moved               Cursor not moved
  8910.  
  8911. %@AI@%Tell%@AE@%              Key pressed has            Key pressed has no function
  8912.                   function assigned          assigned
  8913.  
  8914. %@AI@%Undo%@AE@%              Almost always              If nothing to undo
  8915.  
  8916. %@AI@%Up%@AE@%                Cursor moved               Cursor not moved
  8917.  
  8918. %@AI@%Window%@AE@%            Successful split,          Any error
  8919.                   join, or move
  8920. %@TE:  188   7800  2 18 28 30 @%
  8921. %@NL@%
  8922. %@CR:MSEa5000@%%@2@%%@AB@%A.5  Editor Switches%@AE@%%@EH@%%@NL@%
  8923. %@NL@%
  8924. %@CR:MSEa5001@%%@4@%Table A.5%@BO:   7225b@% gives an alphabetical listing of editor switches along with%@EH@%
  8925. descriptions and default values. The first word in each description
  8926. identifies the switch as a text, numeric, or Boolean switch.%@NL@%
  8927. %@NL@%
  8928. %@CR:MSEaT700@%%@4@%%@AU@%Table A.5  Editor Switches%@AE@%%@EH@%%@NL@%
  8929. %@TH:  304  17158  2 18 58 @%
  8930. %@AB@%Switch            Description (and Default Value)%@AE@%
  8931.  
  8932. %@AB@%askexit%@AE@%           Boolean. Prompts for confirmation when you exit from the
  8933.                   editor. (Default value: No)
  8934.  
  8935. %@AB@%askrtn%@AE@%            Boolean. Prompts you to press ENTER when returning from a
  8936.                   %@AI@%Shell%@AE@% command. (Default value: Yes)
  8937.  
  8938. %@AB@%autosave%@AE@%          Boolean. Saves the current file whenever you switch away
  8939.                   from it. If this switch is off, contents of file buffer
  8940.                   are maintained, but subsequent actions, such as exiting,
  8941.                   may lose edits. (Default value: Yes)
  8942.  
  8943. %@AB@%backup%@AE@%            Text. Determines what happens to the old copy of a file
  8944.                   when a new version is saved to disk. A value of none
  8945.                   specifies that no backup operation is to be performed; the
  8946.                   editor simply overwrites the old file. A value of %@AB@%undel%@AE@%
  8947.                   specifies that the old file is to be moved so that
  8948.                   UNDEL.EXE can retrieve it. A value of bak specifies that
  8949.                   the file name of the old version of the file will be
  8950.                   changed to .BAK. (Default value: bak)
  8951.  
  8952. %@AB@%case%@AE@%              Boolean. Considers case to be significant for search and
  8953.                   replace operations. For example if %@AB@%case%@AE@% is on, the string
  8954.                   %@AS@%Procedure%@AE@% is not found as a match for the string
  8955.                   %@AS@%procedure%@AE@%. (Default value: No)
  8956.  
  8957. %@AB@%displaycursor%@AE@%     Boolean. Shows a position on the status line in the
  8958.                   (%@AI@%row%@AE@%,%@AI@%column%@AE@%) format. When off, the position listed is that
  8959.                   of the upper-left corner. When on, the current cursor
  8960.                   position is given. (Default value: No)
  8961.  
  8962. %@AB@%editreadonly%@AE@%      Boolean. Allows read-only files to be edited. If off, a
  8963.                   read-only file is marked no-edit in the editor. (Default
  8964.                   value: Yes)
  8965.  
  8966. %@AB@%entab%@AE@%             Numeric. Controls the degree to which the Microsoft Editor
  8967.                   converts multiple spaces to tabs when reading or writing a
  8968.                   file. A value of 0 means tabs are not used to represent
  8969.                   white space; 1 means all multiple spaces outside of quoted
  8970.                   strings are converted; 2 means all multiple spaces are
  8971.                   converted to tabs. (Default value: 1)
  8972.  
  8973. %@AB@%enterinsmode%@AE@%      Boolean. Starts the editor up in insert mode instead of
  8974.                   overtype mode, or switches to insert mode in the middle of
  8975.                   an editing session. (Default value: No)
  8976.  
  8977. %@AB@%errcolor%@AE@%          Numeric, using hexadecimal radix. Controls the color used
  8978.                   for error messages. The default is red text on a black
  8979.                   background. (Default value: 04)
  8980.  
  8981. %@AB@%errprompt%@AE@%         Boolean. Controls the "Press any key" prompt. When On, the
  8982.                   editor stops at each error message and waits for a
  8983.                   keystroke. (Default value: Yes)
  8984.  
  8985. %@AB@%extmake%@AE@%           Text. Associates a command line with a particular file
  8986.                   extension for use by the %@AI@%Compile%@AE@% function. The text after
  8987.                   the switch has this form:
  8988.  
  8989.                   %@AB@%extmake:%@AE@%%@AI@%extension commandline%@AE@%
  8990.  
  8991.                   Here, %@AI@%extension%@AE@% is the extension of the file to match, and
  8992.                   %@AI@%commandline%@AE@% is a command line to be executed. If there is
  8993.                   a %@AB@%%s%@AE@% in the command line, it is replaced with the name of
  8994.                   the current file or with the %@AI@%textarg%@AE@% in the %@AI@%Arg textarg%@AE@%
  8995.                   %@AI@%Compile%@AE@% command. This switch may appear more than once in
  8996.                   the TOOLS.INI file.
  8997.  
  8998.                   For example, you could have the following lines in
  8999.                   TOOLS.INI:
  9000.  
  9001.                   %@AS@%extmake:bc /Z %s;%@AE@%
  9002.                   %@AS@%extmake:for fl /c %s%@AE@%
  9003.                   %@AS@%extmake:pas pl /c /h %s%@AE@%
  9004.                   %@AS@%extmake:asm masm -Mx %s;%@AE@%
  9005.                   %@AS@%extmake:c cl /c /Zep /D LINT_ARGS %s%@AE@%
  9006.                   %@AS@%extmake:text make %s     %@AE@%
  9007.  
  9008.                   The %@AI@%Arg Compile%@AE@% command spawns a system-level command line
  9009.                   based on extension of current file; the editor selects the
  9010.                   corresponding %@AB@%extmake%@AE@% setting. The %@AI@%Arg textarg Compile%@AE@%
  9011.                   command spawns the command line for %@AB@%text%@AE@% extension, in
  9012.                   which %@AI@%textarg%@AE@% replaces %@AB@%%s%@AE@%.
  9013.  
  9014.                   This switch can also use the %@AB@%%|F%@AE@% syntax described in
  9015.                   Section 7.3%@BO:   3a7a5@%.
  9016.  
  9017. %@AB@%fgcolor%@AE@%           Numeric. Controls the color used for the editing window.
  9018.                   The default is light gray text on a black background.
  9019.                   (Default value: 07)
  9020.  
  9021. %@AB@%filetab%@AE@%           Numeric. Determines how the editor translates tabs to
  9022.                   spaces when reading or writing a disk file. This switch
  9023.                   also determines how the editor translates spaces to tabs
  9024.                   for modified lines, when %@AB@%entab%@AE@% > 0. The value of the
  9025.                   switch gives the number of spaces associated with each tab
  9026.                   column. For example, the setting "filetab:4" assumes a tab
  9027.                   column every 4 positions on each line. Every time the
  9028.                   editor finds a tab character in a file, it loads the
  9029.                   buffer with the number of spaces necessary to get to the
  9030.                   next tab column. (Default value: 8)
  9031.  
  9032. %@AB@%height%@AE@%            Numeric. Controls the number of lines that the Microsoft
  9033.                   Editor uses in the editing window, not including the
  9034.                   dialog and status lines. This is useful with a nonstandard
  9035.                   display device. Enhanced Graphics Adapter (EGA) in 43-line
  9036.                   mode on the IBM PC uses a value of 41. Video Graphics
  9037.                   Array (VGA) in 50-line mode uses a value of 48. (Default
  9038.                   value: 23)
  9039.  
  9040. %@AB@%helpboldcolor%@AE@%     Numeric. Controls the color of text designated as
  9041.                   boldface. (Default value: 0F)
  9042.  
  9043. %@AB@%helpfiles%@AE@%         Text. Specifies which .HLP files should be used by on-line
  9044.                   Help.
  9045.  
  9046. %@AB@%helpitalcolor%@AE@%     Numeric. Controls the color of text designated as italic.
  9047.                   (Default value: 0A)
  9048.  
  9049. %@AB@%helpundcolor%@AE@%      Numeric. Controls the color of text designated as
  9050.                   underlined. (Default value: 0C)
  9051.  
  9052. %@AB@%helpwarncolor%@AE@%     Numeric. Controls the color of text used for a "warning"
  9053.                   note. Also controls the color of highlighted
  9054.                   cross-references. (Default value: 07)
  9055.  
  9056. %@AB@%helpwindow%@AE@%        Boolean. Controls split-screen behavior. When off, the
  9057.                   editor cannot split the screen to display Help
  9058.                   information. (Default value: Yes)
  9059.  
  9060. %@AB@%hgcolor%@AE@%           Numeric; hexadecimal value. Controls the color of text
  9061.                   highlighted by a search command. (See %@AB@%selcolor%@AE@%.) The
  9062.                   default is green. (Default value: 02)
  9063.  
  9064. %@AB@%hike%@AE@%              Numeric. Specifies the cursor's new-line position (from
  9065.                   the top of the screen) when the cursor is moved out of the
  9066.                   current window by more than %@AB@%vscroll%@AE@% lines. (Default value:
  9067.                   4)
  9068.  
  9069. %@AB@%hscroll%@AE@%           Numeric. Controls the number of columns shifted left or
  9070.                   right when the cursor is scrolled out of the editing
  9071.                   window. (Default value: 10)
  9072.  
  9073. %@AB@%infcolor%@AE@%          Numeric, using hexadecimal radix. Controls the color used
  9074.                   for informative text. The default is dark yellow text on a
  9075.                   black background. (On some monitors, this may appear
  9076.                   brown.) (Default value: 06)
  9077.  
  9078. %@AB@%keyboard%@AE@%          Text. Set to "compatible" if you have a 101-key enhanced
  9079.                   keyboard and wish to use keyboard-enhancer programs that
  9080.                   do not fully support the enhanced keyboard. Set to
  9081.                   "enhanced" to restore normal operation after using
  9082.                   "compatible." If no option is used, the editor makes its
  9083.                   own decision about type of keyboard in use. This switch
  9084.                   works only under DOS or real-mode OS/2.
  9085.  
  9086. %@AB@%load%@AE@%              Text. Specifies the name of a C-extension executable file
  9087.                   to be loaded. Whenever this switch is assigned a new
  9088.                   value, the extension file named is loaded into memory and
  9089.                   initialized by calling the %@AB@%WhenLoaded%@AE@% function. The file
  9090.                   named must be a full name, including base name and file
  9091.                   extension (unless extension module is for OS/2 protected
  9092.                   mode). See Chapter 8%@BO:   3fbeb@%, "Programming C Extensions," for
  9093.                   more information.
  9094.  
  9095. %@AB@%markfile%@AE@%          Text. Specifies the name of the file the Microsoft Editor
  9096.                   searches when looking for a marker that is not in the
  9097.                   in-memory set. This file can be created by entering lines
  9098.                   of the following form:
  9099.  
  9100.                   %@AI@%markername%@AE@% %@AI@%filename%@AE@% %@AI@%line%@AE@% %@AI@%column%@AE@%
  9101.  
  9102.                   Here, %@AI@%line%@AE@% and %@AI@%column%@AE@% specify the position in the file
  9103.                   %@AI@%filename%@AE@% where the marker %@AI@%markername%@AE@% appears.
  9104.  
  9105. %@AB@%noise%@AE@%             Numeric. Controls the number of lines counted at a time
  9106.                   when searching or loading a file. This value is displayed
  9107.                   in the lower-right corner of the screen and may be turned
  9108.                   off by setting %@AB@%noise%@AE@% to 0. (Default value: 50)
  9109.  
  9110. %@AB@%printcmd%@AE@%          Text. Specifies a system-level command that the editor
  9111.                   invokes when you issue the %@AI@%Print%@AE@% command. For example, the
  9112.                   following setting copies output to LPT2:
  9113.  
  9114.                   %@AS@%COPY %s LPT2%@AE@%
  9115.  
  9116.                   By default, the %@AI@%Print%@AE@% command sends output directly to
  9117.                   LPT1.
  9118.  
  9119. %@AB@%readonly%@AE@%          Text. Specifies the DOS command invoked when the Microsoft
  9120.                   Editor attempts to overwrite a read-only file. The current
  9121.                   file name is appended to the command, as shown in the
  9122.                   following example:
  9123.  
  9124.                   %@AS@%readonly:attrib -r %s%@AE@%
  9125.  
  9126.                   This command removes the read-only attribute from the
  9127.                   current file so the file can be overwritten. If no command
  9128.                   is specified, you are prompted to enter a new name under
  9129.                   which to save the file.
  9130.  
  9131. %@AB@%realtabs%@AE@%          Boolean. Preserves actual tab characters instead of
  9132.                   converting them to spaces. When this switch is on, the
  9133.                   editor preserves tab alignment as characters are added and
  9134.                   deleted, and cursor-movement functions treat each tab as a
  9135.                   single character. (Default value: Yes)
  9136.  
  9137. %@AB@%rmargin%@AE@%           Numeric. Controls the right column margin used in wordwrap
  9138.                   mode. A space typed to the right of this margin causes a
  9139.                   line break. Wordwrap mode is turned on and off with the
  9140.                   %@AB@%wordwrap%@AE@% switch. (Default value: 72)
  9141.  
  9142. %@AB@%savescreen%@AE@%        Boolean. Saves and restores the DOS screen (used with the
  9143.                   %@AI@%Shell%@AE@% and %@AI@%Exit%@AE@% functions). (Default value: Yes)
  9144.  
  9145. %@AB@%searchwrap%@AE@%        Boolean. Causes search and replace commands to wrap past
  9146.                   the end of the file and continue searching from the
  9147.                   beginning. Unsuccessful searches stop after the entire
  9148.                   file is searched once. When this switch is off, searches
  9149.                   stop at the end of the file. (Default value: No)
  9150.  
  9151. %@AB@%selcolor%@AE@%          Numeric. Controls the color of text highlighted by an
  9152.                   on-screen argument (%@AI@%linearg%@AE@%, %@AI@%boxarg%@AE@%, %@AI@%streamarg%@AE@%). The
  9153.                   default is black text on a white background. Do not
  9154.                   confuse with %@AB@%hgcolor%@AE@%. (Default value: 70)
  9155.  
  9156. %@AB@%shortnames%@AE@%        Boolean. Allows you to load a file by giving only the base
  9157.                   name, which the editor searches for in the
  9158.                   <information-file>. (Default value: Yes)
  9159.  
  9160. %@AB@%snow%@AE@%              Boolean. Eliminates snow on a CGA, at a penalty to speed.
  9161.                   Turn this switch off if you have a CGA-compatible that
  9162.                   doesn't generate snow. (Default value: Yes)
  9163.  
  9164. %@AB@%softcr%@AE@%            Boolean. Attempts to indent based upon the format of the
  9165.                   surrounding text when you invoke the %@AI@%Newline%@AE@% or %@AI@%Emacsnewl%@AE@%
  9166.                   function. (Default value: Yes)
  9167.  
  9168. %@AB@%stacolor%@AE@%          Numeric. Controls the color used for the status-line
  9169.                   information. The default is cyan text on a black
  9170.                   background. (Default value: 03)
  9171.  
  9172. %@AB@%tabalign%@AE@%          Boolean. Determines where the cursor may be placed in a
  9173.                   tab field. When off, the cursor may be placed anywhere in
  9174.                   a tab field. When on (and if %@AB@%realtabs%@AE@% is also on), the
  9175.                   cursor must align with the column position of the tab.
  9176.                   (Default value: No)
  9177.  
  9178. %@AB@%tabdisp%@AE@%           Numeric. Specifies the ASCII value of the character used
  9179.                   to display tabs. Normally, a space is used, but a graphic
  9180.                   character can be used to show which spaces correspond to
  9181.                   tabs. (Default value: 32)
  9182.  
  9183. %@AB@%tabstops%@AE@%          Numeric. Controls the number of spaces between each
  9184.                   logical tab stop for the %@AI@%Tab%@AE@% and %@AI@%Backtab%@AE@% movement
  9185.                   functions. Note that this switch has no relation to the
  9186.                   interpretation of actual tabs. (Default value: 4)
  9187.  
  9188. %@AB@%tmpsav%@AE@%            Numeric. Controls the maximum number of recently edited
  9189.                   files listed in the information file. If this switch is
  9190.                   set to 0, the editor lets the information file grow
  9191.                   without limit; all files ever edited appear in the
  9192.                   information file until M.TMP is altered or deleted.
  9193.                   (Default value: 20)
  9194.  
  9195. %@AB@%traildisp%@AE@%         Numeric. Specifies the ASCII value of the character to be
  9196.                   displayed as trailing spaces. Note that this switch has no
  9197.                   effect unless the %@AB@%trailspace%@AE@% switch is turned on. (Default
  9198.                   value: 0)
  9199.  
  9200. %@AB@%trailspace%@AE@%        Boolean. Preserves trailing spaces in each line you
  9201.                   modify. (Default value: No)
  9202.  
  9203. %@AB@%undelcount%@AE@%        Numeric. Controls the number of backup copies of a file
  9204.                   that are saved when the %@AB@%backup%@AE@% switch is set to %@AB@%undel%@AE@%.
  9205.                   When the limit is exceeded, the editor discards the oldest
  9206.                   backup. (Default value: no limit)
  9207.  
  9208. %@AB@%undocount%@AE@%         Numeric. Controls the number of edit functions that you
  9209.                   can undo. (Default value: 10)
  9210.  
  9211. %@AB@%unixre%@AE@%            Boolean. Specifies the use of UNIX regular-expression
  9212.                   syntax rather than the syntax used inVersion 1.0 of the
  9213.                   editor. (Default value: Yes)
  9214.  
  9215. %@AB@%viewonly%@AE@%          Boolean. Identical to the /r command-line switch and the
  9216.                   %@AI@%Noedit%@AE@% function. When set, no file can be edited. (Default
  9217.                   value: No)
  9218.  
  9219. %@AB@%vscroll%@AE@%           Numeric. Controls the number of lines shifted up or down
  9220.                   when the cursor is scrolled out of the editing window. The
  9221.                   %@AI@%Mlines%@AE@% and %@AI@%Plines%@AE@% functions also use this value. (Default
  9222.                   value: 7)
  9223.  
  9224. %@AB@%wdcolor%@AE@%           Numeric. Controls the color of the border line created
  9225.                   when you split a window. (Default value: 07).
  9226.  
  9227. %@AB@%width%@AE@%             Numeric. Controls the width of the display mode for
  9228.                   displays that are capable of showing more than 80 columns.
  9229.                   Values other than 80 are supported only for a limited
  9230.                   number of monitors. (Default value: 80)
  9231.  
  9232. %@AB@%wordwrap%@AE@%          Boolean. Breaks lines of text when you edit them beyond
  9233.                   the margin specified
  9234. %@TE:  304  17158  2 18 58 @%
  9235. %@NL@%
  9236. %@NL@%
  9237. %@CR:MSEb0000@%%@1@%%@AB@%Appendix B  Support Programs for the Microsoft Editor%@AE@%%@EH@%%@NL@%
  9238. ───────────────────────────────────────────────────────────────────────────%@NL@%
  9239. %@NL@%
  9240. %@CR:MSEb0001@%%@4@%This appendix discusses two programs that work in conjunction with the%@EH@%
  9241. Microsoft Editor:%@NL@%
  9242. %@NL@%
  9243. %@CR:MSEb0002@%  ■  UNDEL.EXE%@NL@%
  9244. %@NL@%
  9245.   ■  EXP.EXE%@NL@%
  9246. %@NL@%
  9247. %@CR:MSEb0003@%%@4@%Both programs work with backup files. When a file is updated and the %@AB@%backup%@AE@%%@EH@%
  9248. switch is set to %@AB@%undel%@AE@%, the old version of the file is copied to a hidden
  9249. subdirectory called DELETED. UNDEL.EXE and EXP.EXE manipulate the files in
  9250. the DELETED subdirectory.%@NL@%
  9251. %@NL@%
  9252. %@NL@%
  9253. %@CR:MSEb1000@%%@2@%%@AB@%B.1  UNDEL.EXE%@AE@%%@EH@%%@NL@%
  9254. %@NL@%
  9255. %@CR:MSEb1001@%%@4@%Use this program to move a file from the DELETED subdirectory to the parent%@EH@%
  9256. directory. Its command-line syntax is as follows:%@NL@%
  9257. %@NL@%
  9258.      undel «%@AI@%filename%@AE@%»%@NL@%
  9259. %@NL@%
  9260. %@CR:MSEb1002@%%@4@%If %@AI@%filename%@AE@% is not given, the contents of the DELETED subdirectory are%@EH@%
  9261. listed. If there is more than one version of the file, you are given a list
  9262. to choose from. If the file already exists in the parent directory, the two
  9263. files are swapped.%@NL@%
  9264. %@NL@%
  9265. %@NL@%
  9266. %@CR:MSEb2000@%%@2@%%@AB@%B.2  EXP.EXE%@AE@%%@EH@%%@NL@%
  9267. %@NL@%
  9268. %@CR:MSEb2001@%%@4@%Use this program to remove all of the files in the hidden DELETED%@EH@%
  9269. subdirectory of the specified directory. Use the following command-line
  9270. syntax:%@NL@%
  9271. %@NL@%
  9272.      exp «/r» «/q» «%@AI@%directory%@AE@%»%@NL@%
  9273. %@NL@%
  9274. %@CR:MSEb2002@%%@4@%If no %@AI@%directory%@AE@% is specified, the current directory's DELETED subdirectory%@EH@%
  9275. is used. If the /r option is given, EXP.EXE recursively operates on all
  9276. subdirectories. The /q option specifies quiet mode; the deleted file names
  9277. are not displayed on the screen.%@NL@%
  9278. %@NL@%
  9279. %@NL@%
  9280. %@CR:MSEc0000@%%@1@%%@AB@%Appendix C  Microsoft Editor Messages%@AE@%%@EH@%%@NL@%
  9281. ───────────────────────────────────────────────────────────────────────────%@NL@%
  9282. %@NL@%
  9283. %@CR:MSEc0001@%%@4@%This appendix lists the messages that the editor can report on the dialog%@EH@%
  9284. line, along with explanations. Some of these messages represent error
  9285. conditions; in that case, the explanation given describes what went wrong
  9286. and what action to take to correct the error. Other messages prompt you for
  9287. information or report what operation is taking place. For example, the
  9288. editor displays a message whenever it saves a file.%@NL@%
  9289. %@NL@%
  9290. %@CR:MSEc0002@%%@4@%The messages are listed in two sections. The first section consists of%@EH@%
  9291. messages that begin with a placeholder. A "placeholder" is a piece of
  9292. information──such as a number or a file name──that varies with the
  9293. situation. This section is organized alphabetically by the placeholder type.
  9294. The second section consists of messages that do not begin with a
  9295. placeholder. These messages are organized alphabetically by first symbol or
  9296. word.%@NL@%
  9297. %@NL@%
  9298. %@NL@%
  9299. %@CR:MSEc1000@%%@2@%%@AB@%C.1  Messages Starting with Placeholders%@AE@%%@EH@%%@NL@%
  9300. %@NL@%
  9301. %@CR:MSEcE001@%%@4@%%@AI@%driveletter%@AE@%%@AB@% is an invalid drive%@AE@%%@EH@%%@NL@%
  9302. %@NL@%
  9303.                You attempted to use %@AI@%Setfile%@AE@% to change the current drive to a%@NL@%
  9304.                drive not recognized by your system. Use a different drive%@NL@%
  9305.                letter.%@NL@%
  9306. %@NL@%
  9307. %@CR:MSEcE002@%%@4@%%@AI@%file%@AE@%%@AB@% does not exist%@AE@%%@EH@%%@NL@%
  9308. %@NL@%
  9309.                You gave the %@AI@%Arg Arg filename Paste%@AE@% command, but the file%@NL@%
  9310.                specified does not exist. Make sure you give the complete%@NL@%
  9311.                path name of the file if it is not in the current directory.%@NL@%
  9312. %@NL@%
  9313. %@CR:MSEcE003@%%@4@%%@AI@%file%@AE@%%@AB@% does not exist. Create?%@AE@%%@EH@%%@NL@%
  9314. %@NL@%
  9315.                When you started the editor, you specified a file that does%@NL@%
  9316.                not exist. Type Y to create the file or N to avoid creating%@NL@%
  9317.                the file, in which case the editor loads the most recently%@NL@%
  9318.                edited file.%@NL@%
  9319. %@NL@%
  9320. %@CR:MSEcE004@%%@4@%%@AI@%file%@AE@%%@AB@% has been changed.  Refresh?%@AE@%%@EH@%%@NL@%
  9321. %@NL@%
  9322.                One of the files opened for editing was altered by a program%@NL@%
  9323.                other than the editor. This change has not yet been reflected%@NL@%
  9324.                in the file buffer. You should either type Y to discard%@NL@%
  9325.                recent edits and have the editor reread the file from disk,%@NL@%
  9326.                or type N to preserve your edits. If you answer N, you should%@NL@%
  9327.                execute a save operation so that the file buffer is copied to%@NL@%
  9328.                the file stored on disk.%@NL@%
  9329. %@NL@%
  9330. %@CR:MSEcE005@%%@4@%%@AI@%file%@AE@%%@AB@% has changed. Save changes (Y/N)?%@AE@%%@EH@%%@NL@%
  9331. %@NL@%
  9332.                You have attempted to exit, and the file you are currently%@NL@%
  9333.                working on has been changed since it was last saved. If you%@NL@%
  9334.                respond Y, the changes will be saved; if N, they will be%@NL@%
  9335.                discarded.%@NL@%
  9336. %@NL@%
  9337. %@CR:MSEcE006@%%@4@%%@AI@%file%@AE@%%@AB@% is read-only%@AE@%%@EH@%%@NL@%
  9338. %@NL@%
  9339.                You attempted to overwrite a file that has the read-only%@NL@%
  9340.                attribute. After displaying this message, the editor prompts%@NL@%
  9341.                for a new file name under which to save the file. If you%@NL@%
  9342.                assigned a command line to the %@AB@%readonly%@AE@% switch, the editor%@NL@%
  9343.                asks if you want to execute this command.%@NL@%
  9344. %@NL@%
  9345. %@CR:MSEcE007@%%@4@%%@AB@%'%@AE@%%@AI@%keystroke%@AE@%%@AB@%' is an unknown key%@AE@%%@EH@%%@NL@%
  9346. %@NL@%
  9347.                You gave an unrecognized keystroke in an assignment. Some%@NL@%
  9348.                keyboards may support keystroke combinations that the editor%@NL@%
  9349.                does not accept.%@NL@%
  9350. %@NL@%
  9351. %@CR:MSEcE008@%%@4@%%@AI@%keystroke%@AE@%%@AB@% is not assigned to any editor function%@AE@%%@EH@%%@NL@%
  9352. %@NL@%
  9353.                The keystroke you pressed has no editing function assigned to%@NL@%
  9354.                it (not even the %@AI@%Graphic%@AE@% function, which makes keystrokes%@NL@%
  9355.                literal). You must assign a function to a keystroke before%@NL@%
  9356.                using it.%@NL@%
  9357. %@NL@%
  9358. %@CR:MSEcE009@%%@4@%%@AI@%name%@AE@%%@AB@% is not an editor function%@AE@%%@EH@%%@NL@%
  9359. %@NL@%
  9360.                You attempted to assign an undefined function to a keystroke.%@NL@%
  9361.                You may have mistyped the function name, or you may have used%@NL@%
  9362.                the colon (:) instead of the definition symbol (:=) to enter%@NL@%
  9363.                a macro definition.%@NL@%
  9364. %@NL@%
  9365. %@CR:MSEcE010@%%@4@%%@AI@%name%@AE@%%@AB@% is not an editor switch%@AE@%%@EH@%%@NL@%
  9366. %@NL@%
  9367.                You entered an assignment in which the left side did not%@NL@%
  9368.                contain a recognized function, macro, or switch name. You may%@NL@%
  9369.                have mistyped the name or used the wrong syntax.%@NL@%
  9370. %@NL@%
  9371. %@CR:MSEcE011@%%@4@%%@AI@%number%@AE@%%@AB@% occurrences found%@AE@%%@EH@%%@NL@%
  9372. %@NL@%
  9373.                The %@AI@%Searchall%@AE@% function found %@AI@%number%@AE@% occurrences of the search%@NL@%
  9374.                string.%@NL@%
  9375. %@NL@%
  9376. %@CR:MSEcE012@%%@4@%%@AI@%number%@AE@%%@AB@% occurrences replaced%@AE@%%@EH@%%@NL@%
  9377. %@NL@%
  9378.                The %@AI@%Replace%@AE@% or %@AI@%Qreplace%@AE@% function replaced %@AI@%number%@AE@% occurrences%@NL@%
  9379.                of the search string.%@NL@%
  9380. %@NL@%
  9381. %@CR:MSEcE013@%%@4@%%@AI@%number%@AE@%%@AB@%: Undefined opcode%@AE@%%@EH@%%@NL@%
  9382. %@NL@%
  9383.                The editor detected an internal error in the way it analyzed%@NL@%
  9384.                a regular expression. Please note the circumstances of this%@NL@%
  9385.                error and notify Microsoft Corporation by following the%@NL@%
  9386.                directions in the Microsoft Product Assistance Request form%@NL@%
  9387.                at the back of one of your manuals.%@NL@%
  9388. %@NL@%
  9389. %@CR:MSEcE014@%%@4@%%@AB@%+'%@AE@%%@AI@%string%@AE@%%@AB@%' not found%@AE@%%@EH@%%@NL@%
  9390. %@NL@%
  9391.                The %@AI@%Psearch%@AE@% function failed to find an occurrence of %@AI@%string%@AE@%.%@NL@%
  9392.                This message may be reported for both ordinary and%@NL@%
  9393.                regular-expression searches.%@NL@%
  9394. %@NL@%
  9395. %@CR:MSEcE015@%%@4@%%@AI@%value%@AE@%%@AB@% is an illegal setting%@AE@%%@EH@%%@NL@%
  9396. %@NL@%
  9397.                You attempted to give an illegal value in a switch%@NL@%
  9398.                assignment.%@NL@%
  9399. %@NL@%
  9400. %@NL@%
  9401. %@CR:MSEc2000@%%@2@%%@AB@%C.2  Other Messages%@AE@%%@EH@%%@NL@%
  9402. %@NL@%
  9403. %@CR:MSEcE016@%%@4@%%@AB@%<ZFormat???>%@AE@%%@EH@%%@NL@%
  9404. %@NL@%
  9405.                You used the percent sign (%@AS@%%%@AE@%) in a text switch (such as%@NL@%
  9406.                %@AB@%extmake%@AE@%) without following it by correct syntax such as %@AS@%%s%@AE@% or%@NL@%
  9407.                %@AS@%|F%@AE@%. To include a literal use of the percent sign, enter two%@NL@%
  9408.                percent signs in a row (%@AS@%%%%@AE@%).%@NL@%
  9409. %@NL@%
  9410. %@CR:MSEcE017@%%@4@%%@AB@%**PANIC EXIT** Really exit and lose edits?%@AE@%%@EH@%%@NL@%
  9411. %@NL@%
  9412.                The editor appeared to be "hung" (non-functioning) and you%@NL@%
  9413.                pressed CTRL+BREAK five times to exit. If you answer Y, the%@NL@%
  9414.                editing session will be terminated and any unsaved changes%@NL@%
  9415.                will be lost. The editor sometimes has so many operations to%@NL@%
  9416.                perform that it appears to be hung, but is actually%@NL@%
  9417.                functioning normally. If you think this is the case, answer N%@NL@%
  9418.                to return to the editing session.%@NL@%
  9419. %@NL@%
  9420. %@CR:MSEcE018@%%@4@%%@AB@%- floating point not loaded%@AE@%%@EH@%%@NL@%
  9421. %@NL@%
  9422.                The editor encountered an internal error. Please note the%@NL@%
  9423.                circumstances of this error and notify Microsoft Corporation%@NL@%
  9424.                by following the directions in the Microsoft Product%@NL@%
  9425.                Assistance Request form at the back of one of your manuals.%@NL@%
  9426. %@NL@%
  9427. %@CR:MSEcE019@%%@4@%%@AB@%- integer divide by zero%@AE@%%@EH@%%@NL@%
  9428. %@NL@%
  9429.                The editor encountered an internal error. Please note the%@NL@%
  9430.                circumstances of this error and notify Microsoft Corporation%@NL@%
  9431.                by following the directions in the Microsoft Product%@NL@%
  9432.                Assistance Request form at the back of one of your manuals.%@NL@%
  9433. %@NL@%
  9434. %@CR:MSEcE020@%%@4@%%@AB@%- not enough memory on exec%@AE@%%@EH@%%@NL@%
  9435. %@NL@%
  9436.                The editor encountered an internal error. Please note the%@NL@%
  9437.                circumstances of this error and notify Microsoft Corporation%@NL@%
  9438.                by following the directions in the Microsoft Product%@NL@%
  9439.                Assistance Request form at the back of one of your manuals.%@NL@%
  9440. %@NL@%
  9441. %@CR:MSEcE021@%%@4@%%@AB@%- not enough space for arguments%@AE@%%@EH@%%@NL@%
  9442. %@NL@%
  9443.                You attempted to start the editor with more file names than%@NL@%
  9444.                can be stored in free memory. This error should be impossible%@NL@%
  9445.                to get unless you use a wildcard expression (such as %@AS@%*.c%@AE@%)%@NL@%
  9446.                with an extraordinarily large directory.%@NL@%
  9447. %@NL@%
  9448. %@CR:MSEcE022@%%@4@%%@AB@%- not enough space for environment%@AE@%%@EH@%%@NL@%
  9449. %@NL@%
  9450.                The editor has insufficient free memory to store the%@NL@%
  9451.                environment variables for the current session. This error%@NL@%
  9452.                should be impossible to get unless you have severely%@NL@%
  9453.                restricted the amount of memory granted to the editor.%@NL@%
  9454. %@NL@%
  9455. %@CR:MSEcE023@%%@4@%%@AB@%- null pointer assignment%@AE@%%@EH@%%@NL@%
  9456. %@NL@%
  9457.                The editor encountered an internal error. Please note the%@NL@%
  9458.                circumstances of this error and notify Microsoft Corporation%@NL@%
  9459.                by following the directions in the Microsoft Product%@NL@%
  9460.                Assistance Request form at the back of one of your manuals.%@NL@%
  9461. %@NL@%
  9462. %@CR:MSEcE024@%%@4@%%@AB@%-Search for '%@AE@%%@AI@%string%@AE@%%@AB@%'%@AE@%%@EH@%%@NL@%
  9463. %@NL@%
  9464.                The %@AI@%Msearch%@AE@% function is currently searching for %@AI@%string%@AE@%.%@NL@%
  9465. %@NL@%
  9466. %@CR:MSEcE025@%%@4@%%@AB@%- stack overflow%@AE@%%@EH@%%@NL@%
  9467. %@NL@%
  9468.                Internal function calls required a larger stack than is%@NL@%
  9469.                available to the editor. If you receive this error, it is%@NL@%
  9470.                most likely because you are using an extension that makes%@NL@%
  9471.                extensive use of local variables or function calls. Rewrite%@NL@%
  9472.                the extension so that it uses fewer or smaller local%@NL@%
  9473.                variables; then recompile and relink.%@NL@%
  9474. %@NL@%
  9475. %@CR:MSEcE026@%%@4@%%@AB@%-'%@AE@%%@AI@%string%@AE@%%@AB@%' not found%@AE@%%@EH@%%@NL@%
  9476. %@NL@%
  9477.                The %@AI@%Msearch%@AE@% function failed to find an occurrence of %@AI@%string%@AE@%.%@NL@%
  9478.                This message may be reported for both ordinary and%@NL@%
  9479.                regular-expression searches.%@NL@%
  9480. %@NL@%
  9481. %@CR:MSEcE027@%%@4@%%@AB@%+Search for '%@AE@%%@AI@%string%@AE@%%@AB@%'%@AE@%%@EH@%%@NL@%
  9482. %@NL@%
  9483.                The %@AI@%Psearch%@AE@% function is currently searching for %@AI@%string%@AE@%.%@NL@%
  9484. %@NL@%
  9485. %@CR:MSEcE028@%%@4@%%@AB@%All edits lost (Sorry)%@AE@%%@EH@%%@NL@%
  9486. %@NL@%
  9487.                The editor lost information as a result of an internal error.%@NL@%
  9488.                Please note the circumstances of this error and notify%@NL@%
  9489.                Microsoft Corporation by following the directions in the%@NL@%
  9490.                Microsoft Product Assistance Request form at the back of one%@NL@%
  9491.                of your manuals.%@NL@%
  9492. %@NL@%
  9493. %@CR:MSEcE029@%%@4@%%@AB@%Are you sure you want to exit? (y/n):%@AE@%%@EH@%%@NL@%
  9494. %@NL@%
  9495.                You gave the %@AI@%Meta Exit%@AE@% command (exit without saving), or the%@NL@%
  9496.                %@AB@%autosave%@AE@% switch is not on and you tried to exit. Type Y to%@NL@%
  9497.                exit or N to continue the editing session.%@NL@%
  9498. %@NL@%
  9499. %@CR:MSEcE030@%%@4@%%@AB@%Arg [%@AE@%%@AI@%number%@AE@%%@AB@%]:%@AE@%%@EH@%%@NL@%
  9500. %@NL@%
  9501.                You invoked the %@AI@%Arg%@AE@% function, which is used to introduce an%@NL@%
  9502.                argument or modify a function. The %@AI@%number%@AE@% placeholder%@NL@%
  9503.                indicates the number of times you invoked %@AI@%Arg%@AE@%. Complete the%@NL@%
  9504.                command or type %@AI@%Cancel%@AE@% to escape. Any %@AI@%textarg%@AE@% s you type in%@NL@%
  9505.                are displayed after the colon.%@NL@%
  9506. %@NL@%
  9507. %@CR:MSEcE031@%%@4@%%@AB@%Arg list too long%@AE@%%@EH@%%@NL@%
  9508. %@NL@%
  9509.                The editor encountered an internal error. Please note the%@NL@%
  9510.                circumstances of this error and notify Microsoft Corporation%@NL@%
  9511.                by following the directions in the Microsoft Product%@NL@%
  9512.                Assistance Request form at the back of one of your manuals.%@NL@%
  9513. %@NL@%
  9514. %@CR:MSEcE032@%%@4@%%@AB@%Argument cancelled%@AE@%%@EH@%%@NL@%
  9515. %@NL@%
  9516.                You invoked the %@AI@%Cancel%@AE@% function, which removes arguments. To%@NL@%
  9517.                clear this message from the dialog line, invoke %@AI@%Cancel%@AE@% again.%@NL@%
  9518. %@NL@%
  9519. %@CR:MSEcE033@%%@4@%%@AB@%Argument required%@AE@%%@EH@%%@NL@%
  9520. %@NL@%
  9521.                The function you just invoked requires an argument.%@NL@%
  9522. %@NL@%
  9523. %@CR:MSEcE034@%%@4@%%@AB@%Bad Assignment!%@AE@%%@EH@%%@NL@%
  9524. %@NL@%
  9525.                The editor could not perform the assignment requested. You%@NL@%
  9526.                may have mistyped your entry or requested nonexistent%@NL@%
  9527.                functions.%@NL@%
  9528. %@NL@%
  9529. %@CR:MSEcE035@%%@4@%%@AB@%bad environment on exec%@AE@%%@EH@%%@NL@%
  9530. %@NL@%
  9531.                OS/2 only. You gave a %@AI@%Compile%@AE@% or %@AI@%Shell%@AE@% command that could not%@NL@%
  9532.                be executed.%@NL@%
  9533. %@NL@%
  9534. %@CR:MSEcE036@%%@4@%%@AB@%Bad file number%@AE@%%@EH@%%@NL@%
  9535. %@NL@%
  9536.                The editor encountered an internal error. Please note the%@NL@%
  9537.                circumstances of this error and notify Microsoft Corporation%@NL@%
  9538.                by following the directions in the Microsoft Product%@NL@%
  9539.                Assistance Request form at the back of one of your manuals.%@NL@%
  9540. %@NL@%
  9541. %@CR:MSEcE037@%%@4@%%@AB@%bad format on exec%@AE@%%@EH@%%@NL@%
  9542. %@NL@%
  9543.                OS/2 only. You gave a %@AI@%Compile%@AE@% or %@AI@%Shell%@AE@% command that could not%@NL@%
  9544.                be executed.%@NL@%
  9545. %@NL@%
  9546. %@CR:MSEcE038@%%@4@%%@AB@%Bookmark not found%@AE@%%@EH@%%@NL@%
  9547. %@NL@%
  9548.                You attempted to go to a file marker that does not exist or%@NL@%
  9549.                mistyped the marker name.%@NL@%
  9550. %@NL@%
  9551. %@CR:MSEcE039@%%@4@%%@AB@%Can't delete%@AE@% %@AI@%file%@AE@%%@AB@% -%@AE@%%@AI@%messagetext%@AE@%%@EH@%%@NL@%
  9552. %@NL@%
  9553.                The editor could not delete the given file, for the reason%@NL@%
  9554.                given in %@AI@%messagetext%@AE@%.%@NL@%
  9555. %@NL@%
  9556. %@CR:MSEcE040@%%@4@%%@AB@%Can't delete old version of%@AE@% %@AI@%file%@AE@%%@EH@%%@NL@%
  9557. %@NL@%
  9558.                The editor attempted to write a file to disk during the UNDEL%@NL@%
  9559.                backup procedure (the old version of the file is stored in%@NL@%
  9560.                the DELETED subdirectory), but the editor could not do the%@NL@%
  9561.                necessary file deletion. Attempt saving to an alternate file.%@NL@%
  9562. %@NL@%
  9563. %@CR:MSEcE041@%%@4@%%@AB@%Can't rename%@AE@% %@AI@%srcfile%@AE@%%@AB@% to%@AE@% %@AI@%destfile%@AE@%%@AB@% -%@AE@% %@AI@%messagetext%@AE@%%@EH@%%@NL@%
  9564. %@NL@%
  9565.                The editor attempted to write a file to disk during the BAK%@NL@%
  9566.                backup procedure (the old version of the file is stored as%@NL@%
  9567.                %@AI@%srcfile%@AE@%.BAK), but the editor could not do the necessary%@NL@%
  9568.                renaming. Attempt saving to an alternate file.%@NL@%
  9569. %@NL@%
  9570. %@CR:MSEcE042@%%@4@%%@AB@%Cannot access%@AE@% %@AI@%file%@AE@%%@AB@% -%@AE@% %@AI@%messagetext%@AE@%%@EH@%%@NL@%
  9571. %@NL@%
  9572.                You tried to load %@AI@%file%@AE@%, but were denied access by the system%@NL@%
  9573.                for the reason given in %@AI@%messagetext%@AE@%.%@NL@%
  9574. %@NL@%
  9575. %@CR:MSEcE043@%%@4@%%@AB@%Cannot allocate mpPnPage -%@AE@% %@AI@%number%@AE@%%@EH@%%@NL@%
  9576. %@NL@%
  9577.                OS/2 only. The editor encountered an internal error. Please%@NL@%
  9578.                note the circumstances of this error and notify Microsoft%@NL@%
  9579.                Corporation by following the directions in the Microsoft%@NL@%
  9580.                Product Assistance Request form at the back of one of your%@NL@%
  9581.                manuals.%@NL@%
  9582. %@NL@%
  9583. %@CR:MSEcE044@%%@4@%%@AB@%Cannot allocate pageTmp -%@AE@% %@AI@%number%@AE@%%@EH@%%@NL@%
  9584. %@NL@%
  9585.                OS/2 only. The editor encountered an internal error. Please%@NL@%
  9586.                note the circumstances of this error and notify Microsoft%@NL@%
  9587.                Corporation by following the directions in the Microsoft%@NL@%
  9588.                Product Assistance Request form at the back of one of your%@NL@%
  9589.                manuals.%@NL@%
  9590. %@NL@%
  9591. %@CR:MSEcE045@%%@4@%%@AB@%Cannot change screen parameters when windows present%@AE@%%@EH@%%@NL@%
  9592. %@NL@%
  9593.                You attempted to reset the %@AB@%height%@AE@% switch when multiple%@NL@%
  9594.                windows were present. Close all windows but one before%@NL@%
  9595.                attempting to set %@AB@%height%@AE@%. (The editor can give this message%@NL@%
  9596.                when attempting to read TOOLS.INI.)%@NL@%
  9597. %@NL@%
  9598. %@CR:MSEcE046@%%@4@%%@AB@%Cannot close this window%@AE@%%@EH@%%@NL@%
  9599. %@NL@%
  9600.                You attempted to close a window that cannot be merged with%@NL@%
  9601.                another window. Two windows can be merged only if the windows%@NL@%
  9602.                share one complete side. A window could not be merged with%@NL@%
  9603.                two smaller windows if each shared part of one side adjoining%@NL@%
  9604.                the larger window.%@NL@%
  9605. %@NL@%
  9606.                The editor closes the window if it can find at least one%@NL@%
  9607.                adjoining window that can be properly merged. If the editor%@NL@%
  9608.                cannot close the window, move to another window and close it%@NL@%
  9609.                first.%@NL@%
  9610. %@NL@%
  9611. %@CR:MSEcE047@%%@4@%%@AB@%Cannot create%@AE@% %@AI@%file%@AE@%%@AB@% -%@AE@% %@AI@%messagetext%@AE@%%@EH@%%@NL@%
  9612. %@NL@%
  9613.                The editor was unable to create %@AI@%file%@AE@%, for the reason given in%@NL@%
  9614.                %@AI@%messagetext%@AE@%.%@NL@%
  9615. %@NL@%
  9616. %@CR:MSEcE048@%%@4@%%@AB@%Cannot create printer intermediate file%@AE@%%@EH@%%@NL@%
  9617. %@NL@%
  9618.                OS/2 only. The editor was unable to create the intermediate%@NL@%
  9619.                file needed for printer queuing.%@NL@%
  9620. %@NL@%
  9621. %@CR:MSEcE049@%%@4@%%@AB@%Cannot duplicate:%@AE@% %@AI@%errormessage%@AE@%%@EH@%%@NL@%
  9622. %@NL@%
  9623.                In attempting to perform a shell command or compile action,%@NL@%
  9624.                the editor was unable to redirect output. The C run-time%@NL@%
  9625.                error message indicates the nature of the problem.%@NL@%
  9626. %@NL@%
  9627. %@CR:MSEcE050@%%@4@%%@AB@%Cannot find label%@AE@% %@AI@%name%@AE@%%@EH@%%@NL@%
  9628. %@NL@%
  9629.                The given %@AI@%name%@AE@% was the target of a jump-to-label instruction%@NL@%
  9630.                (%@AS@%+>%@AE@%, %@AS@%->%@AE@%, or %@AS@%=>%@AE@%) within a macro, but the label was not%@NL@%
  9631.                defined. Place %@AS@%:>%@AE@% %@AI@%name%@AE@% in the macro to define the label.%@NL@%
  9632. %@NL@%
  9633. %@CR:MSEcE051@%%@4@%%@AB@%Cannot load%@AE@% %@AI@%file%@AE@%%@AB@% -%@AE@% %@AI@%messagetext%@AE@%%@EH@%%@NL@%
  9634. %@NL@%
  9635.                You attempted to load %@AI@%file%@AE@% as an extensions module, but it%@NL@%
  9636.                cannot be loaded for the reason given in %@AI@%messagetext%@AE@%.%@NL@%
  9637. %@NL@%
  9638. %@CR:MSEcE052@%%@4@%%@AB@%Cannot mgrep to <compile> during background compile%@AE@%%@EH@%%@NL@%
  9639. %@NL@%
  9640.                OS/2 only. You cannot start an %@AB@%mgrep%@AE@% during a background%@NL@%
  9641.                compile.%@NL@%
  9642. %@NL@%
  9643. %@CR:MSEcE053@%%@4@%%@AB@%Cannot open%@AE@% %@AI@%file%@AE@%%@EH@%%@NL@%
  9644. %@NL@%
  9645.                The %@AI@%file%@AE@% was specified as an argument to the %@AI@%Setfile%@AE@% or %@AI@%Paste%@AE@%%@NL@%
  9646.                command, but the %@AI@%file%@AE@% cannot be opened.%@NL@%
  9647. %@NL@%
  9648. %@CR:MSEcE054@%%@4@%%@AB@%Cannot open%@AE@% %@AI@%file%@AE@%%@AB@% -%@AE@% %@AI@%errormessage%@AE@%%@EH@%%@NL@%
  9649. %@NL@%
  9650.                The specified file could not be opened. The C run-time error%@NL@%
  9651.                message indicates the nature of the problem.%@NL@%
  9652. %@NL@%
  9653. %@CR:MSEcE055@%%@4@%%@AB@%Cannot open%@AE@% %@AI@%file%@AE@%%@AB@%:%@AE@% %@AI@%errormessage%@AE@%%@EH@%%@NL@%
  9654. %@NL@%
  9655.                The specified file could not be opened. The C run-time error%@NL@%
  9656.                message indicates the nature of the problem.%@NL@%
  9657. %@NL@%
  9658. %@CR:MSEcE056@%%@4@%%@AB@%Cannot open PRN:%@AE@% %@AI@%file%@AE@%%@EH@%%@NL@%
  9659. %@NL@%
  9660.                The editor could not locate or access a printer port to print%@NL@%
  9661.                %@AI@%file%@AE@%.%@NL@%
  9662. %@NL@%
  9663. %@CR:MSEcE057@%%@4@%%@AB@%Cannot read%@AE@% %@AI@%file%@AE@%%@EH@%%@NL@%
  9664. %@NL@%
  9665.                A %@AI@%file%@AE@% to be read was located but could not be read.%@NL@%
  9666. %@NL@%
  9667. %@CR:MSEcE058@%%@4@%%@AB@%Cannot save to directory:%@AE@% %@AI@%directory%@AE@%%@EH@%%@NL@%
  9668. %@NL@%
  9669.                You attempted to save to a directory that has the read-only%@NL@%
  9670.                attribute.%@NL@%
  9671. %@NL@%
  9672. %@CR:MSEcE059@%%@4@%%@AB@%Cannot unlink file%@AE@% %@AI@%file%@AE@%%@AB@%:%@AE@% %@AI@%messagetext%@AE@%%@EH@%%@NL@%
  9673. %@NL@%
  9674.                The temporary file used for printing could not be deleted.%@NL@%
  9675.                The %@AI@%file%@AE@% placeholder is the name of the file, and %@AI@%messagetext%@AE@%%@NL@%
  9676.                is a C run-time error message.%@NL@%
  9677. %@NL@%
  9678. %@CR:MSEcE060@%%@4@%%@AB@%Cannot write on PRN:%@AE@% %@AI@%file%@AE@%%@EH@%%@NL@%
  9679. %@NL@%
  9680.                The editor was unable to output the specified file to the%@NL@%
  9681.                printer.%@NL@%
  9682. %@NL@%
  9683. %@CR:MSEcE061@%%@4@%%@AB@%Cannot write printer intermediate file%@AE@%%@EH@%%@NL@%
  9684. %@NL@%
  9685.                OS/2 only. The editor was unable to write to the intermediate%@NL@%
  9686.                file used for printer queuing.%@NL@%
  9687. %@NL@%
  9688. %@CR:MSEcE062@%%@4@%%@AB@%Changed directory to%@AE@% %@AI@%file%@AE@%%@EH@%%@NL@%
  9689. %@NL@%
  9690.                The %@AI@%Setfile%@AE@% command successfully changed the current%@NL@%
  9691.                directory.%@NL@%
  9692. %@NL@%
  9693. %@CR:MSEcE063@%%@4@%%@AB@%Changed drive to%@AE@% %@AI@%file%@AE@%%@EH@%%@NL@%
  9694. %@NL@%
  9695.                The %@AI@%Setfile%@AE@% command successfully changed the current drive.%@NL@%
  9696. %@NL@%
  9697. %@CR:MSEcE064@%%@4@%%@AB@%Command could not be executed -%@AE@% %@AI@%command%@AE@%%@EH@%%@NL@%
  9698. %@NL@%
  9699.                You passed a system-level command line that could not be%@NL@%
  9700.                executed to the %@AI@%Shell%@AE@% or %@AI@%Compile%@AE@% command. This command line%@NL@%
  9701.                is displayed in the message as %@AI@%command%@AE@%.%@NL@%
  9702. %@NL@%
  9703. %@CR:MSEcE065@%%@4@%%@AB@%Command failed to begin,%@AE@% %@AI@%messagetext%@AE@%%@EH@%%@NL@%
  9704. %@NL@%
  9705.                OS/2 only. A background compilation could not begin for the%@NL@%
  9706.                reason stated in %@AI@%messagetext%@AE@%.%@NL@%
  9707. %@NL@%
  9708. %@CR:MSEcE066@%%@4@%%@AB@%Compilation complete - return code is%@AE@% %@AI@%number%@AE@%%@EH@%%@NL@%
  9709. %@NL@%
  9710.                DOS or real mode only. A compilation has completed with the%@NL@%
  9711.                return code shown. A nonzero return code usually indicates an%@NL@%
  9712.                error.%@NL@%
  9713. %@NL@%
  9714. %@CR:MSEcE067@%%@4@%%@AB@%Compile Action%@AE@% %@AI@%number%@AE@%%@AB@%: Internal Error%@AE@%%@EH@%%@NL@%
  9715. %@NL@%
  9716.                The editor detected an internal error in the way it analyzed%@NL@%
  9717.                a regular expression. Please note the circumstances of this%@NL@%
  9718.                error and notify Microsoft Corporation by following the%@NL@%
  9719.                directions in the Microsoft Product Assistance Request form%@NL@%
  9720.                at the back of one of your manuals.%@NL@%
  9721. %@NL@%
  9722. %@CR:MSEcE068@%%@4@%%@AB@%Compile failed to begin,%@AE@% %@AI@%file%@AE@%%@AB@% -%@AE@% %@AI@%messagetext%@AE@%%@EH@%%@NL@%
  9723. %@NL@%
  9724.                OS/2 only. The %@AI@%Compile%@AE@% command could not execute the command%@NL@%
  9725.                line that it was given for the reason stated in %@AI@%messagetext%@AE@%.%@NL@%
  9726. %@NL@%
  9727. %@CR:MSEcE069@%%@4@%%@AB@%Compile list full, try later%@AE@%%@EH@%%@NL@%
  9728. %@NL@%
  9729.                OS/2 only. You tried to execute too many compilations at%@NL@%
  9730.                once. The limit to the number that can be queued (that is,%@NL@%
  9731.                waiting to execute) is 16.%@NL@%
  9732. %@NL@%
  9733. %@CR:MSEcE070@%%@4@%%@AB@%Cross-device link%@AE@%%@EH@%%@NL@%
  9734. %@NL@%
  9735.                The editor encountered an internal error. Please note the%@NL@%
  9736.                circumstances of this error and notify Microsoft Corporation%@NL@%
  9737.                by following the directions in the Microsoft Product%@NL@%
  9738.                Assistance Request form at the back of one of your manuals.%@NL@%
  9739. %@NL@%
  9740. %@CR:MSEcE071@%%@4@%%@AB@%Delete current contents of compile log?%@AE@%%@EH@%%@NL@%
  9741. %@NL@%
  9742.                OS/2 only. The compile log still contains the results of a%@NL@%
  9743.                previous compilation. Type Y to delete the contents before%@NL@%
  9744.                starting another compilation.%@NL@%
  9745. %@NL@%
  9746. %@CR:MSEcE072@%%@4@%%@AB@%Do you want to delete this file from the current window?%@AE@%%@EH@%%@NL@%
  9747. %@NL@%
  9748.                You gave the %@AI@%Arg%@AE@% %@AI@%Refresh%@AE@% command, which removes the file from%@NL@%
  9749.                the current window. Type Y to remove the file, or N to%@NL@%
  9750.                continue editing the file.%@NL@%
  9751. %@NL@%
  9752. %@CR:MSEcE073@%%@4@%%@AB@%Do you want to replace this occurrence (Yes/No/All/Quit) :%@AE@%%@EH@%%@NL@%
  9753. %@NL@%
  9754.                The %@AI@%Qreplace%@AE@% function has found an occurrence of the search%@NL@%
  9755.                string and is prompting you for confirmation before%@NL@%
  9756.                substituting the replacement string. Type Y to make the%@NL@%
  9757.                replacement, N to avoid replacement, A to proceed with making%@NL@%
  9758.                replacements without confirmation, or Q to quit the %@AI@%Qreplace%@AE@%%@NL@%
  9759.                function.%@NL@%
  9760. %@NL@%
  9761. %@CR:MSEcE074@%%@4@%%@AB@%Do you want to reread this file?%@AE@%%@EH@%%@NL@%
  9762. %@NL@%
  9763.                You invoked the %@AI@%Refresh%@AE@% function. Type Y to discard the most%@NL@%
  9764.                recent edits and reread the file from disk. Type any other%@NL@%
  9765.                character to cancel the function.%@NL@%
  9766. %@NL@%
  9767. %@CR:MSEcE075@%%@4@%%@AB@%Do you want to save this file as%@AE@% %@AI@%filename%@AE@%%@AB@%?%@AE@%%@EH@%%@NL@%
  9768. %@NL@%
  9769.                You gave the %@AI@%Arg%@AE@% %@AI@%Arg%@AE@% %@AI@%textarg%@AE@% %@AI@%Setfile%@AE@% command, which saves the%@NL@%
  9770.                current file under a new file name. Type Y to proceed with%@NL@%
  9771.                the save or any other character to cancel the command.%@NL@%
  9772. %@NL@%
  9773. %@CR:MSEcE076@%%@4@%%@AB@%Empty replacement string, confirm:%@AE@%%@EH@%%@NL@%
  9774. %@NL@%
  9775.                The %@AI@%Replace%@AE@% or %@AI@%Qreplace%@AE@% function has been invoked with an%@NL@%
  9776.                empty replacement string. Type Y to confirm or any other%@NL@%
  9777.                character to cancel. Confirming an empty replacement string%@NL@%
  9778.                means that the editor simply deletes each occurrence of the%@NL@%
  9779.                search string that it finds.%@NL@%
  9780. %@NL@%
  9781. %@CR:MSEcE077@%%@4@%%@AB@%error on scratch file.%@AE@%%@EH@%%@NL@%
  9782. %@NL@%
  9783.                The drive on which the scratch (temporary) file resides is%@NL@%
  9784.                full. Exit the editor, change the setting of the TMP%@NL@%
  9785.                environment variable to a directory on a different drive, or%@NL@%
  9786.                free up space on the drive listed in TMP.%@NL@%
  9787. %@NL@%
  9788. %@CR:MSEcE078@%%@4@%%@AB@%EstimateAction%@AE@% %@AI@%number%@AE@%%@AB@%: Internal Error%@AE@%%@EH@%%@NL@%
  9789. %@NL@%
  9790.                The editor detected an internal error in the way it analyzed%@NL@%
  9791.                a regular expression. Please note the circumstances of this%@NL@%
  9792.                error and notify Microsoft Corporation by following the%@NL@%
  9793.                directions in the Microsoft Product Assistance Request form%@NL@%
  9794.                at the back of one of your manuals.%@NL@%
  9795. %@NL@%
  9796. %@CR:MSEcE079@%%@4@%%@AB@%Exec format error%@AE@%%@EH@%%@NL@%
  9797. %@NL@%
  9798.                You attempted to load an extension module that does not have%@NL@%
  9799.                the correct format for this version of the editor. Rewrite%@NL@%
  9800.                the extension, relink, and recompile.%@NL@%
  9801. %@NL@%
  9802. %@CR:MSEcE080@%%@4@%%@AB@%File%@AE@% %@AI@%file%@AE@%%@AB@% is dirty, do you want to save it?%@AE@%%@EH@%%@NL@%
  9803. %@NL@%
  9804.                You are trying to exit without saving a file that has been%@NL@%
  9805.                altered since it was last saved. If you answer N, the changes%@NL@%
  9806.                will be lost.%@NL@%
  9807. %@NL@%
  9808. %@CR:MSEcE081@%%@4@%%@AB@%File has been deleted%@AE@%%@EH@%%@NL@%
  9809. %@NL@%
  9810.                The current file has been deleted by a program other than the%@NL@%
  9811.                editor, another process running under OS/2, another computer%@NL@%
  9812.                on the network, or a shelled or compiled program.%@NL@%
  9813. %@NL@%
  9814. %@CR:MSEcE082@%%@4@%%@AB@%File to edit:%@AE@%%@EH@%%@NL@%
  9815. %@NL@%
  9816.                You started the editor without specifying a file, and there%@NL@%
  9817.                is no previously edited file. Enter a file name or press%@NL@%
  9818.                ENTER to exit back to the operating-system level.%@NL@%
  9819. %@NL@%
  9820. %@CR:MSEcE083@%%@4@%%@AB@%Flushing%@AE@% %@AI@%file%@AE@%%@AB@% from memory%@AE@%%@EH@%%@NL@%
  9821. %@NL@%
  9822.                The specified %@AI@%file%@AE@% has been cleared from memory.%@NL@%
  9823. %@NL@%
  9824. %@CR:MSEcE084@%%@4@%%@AB@%Illegal Extension Interface Called%@AE@%%@EH@%%@NL@%
  9825. %@NL@%
  9826.                An extension function attempted to call a low-level function%@NL@%
  9827.                that is not supported by this version of the editor. Consult%@NL@%
  9828.                Chapters 8%@BO:   3fbeb@% and 9%@BO:   50fea@% for a list of low-level functions%@NL@%
  9829.                supported by the editor.%@NL@%
  9830. %@NL@%
  9831. %@CR:MSEcE085@%%@4@%%@AB@%Illegal setting%@AE@%%@EH@%%@NL@%
  9832. %@NL@%
  9833.                You attempted to set a switch to an invalid setting.%@NL@%
  9834. %@NL@%
  9835. %@CR:MSEcE086@%%@4@%%@AB@%Internal Error: RE error%@AE@% %@AI@%number%@AE@%%@AB@%, line%@AE@% %@AI@%number%@AE@%%@EH@%%@NL@%
  9836. %@NL@%
  9837.                The editor detected an internal error in the way it analyzed%@NL@%
  9838.                a regular expression. Please note the circumstances of this%@NL@%
  9839.                error and notify Microsoft Corporation by following the%@NL@%
  9840.                directions in the Microsoft Product Assistance Request form%@NL@%
  9841.                at the back of one of your manuals.%@NL@%
  9842. %@NL@%
  9843. %@CR:MSEcE087@%%@4@%%@AB@%Invalid argument%@AE@%%@EH@%%@NL@%
  9844. %@NL@%
  9845.                The function just invoked does not accept the argument given.%@NL@%
  9846.                Try reentering the command using a valid argument.%@NL@%
  9847. %@NL@%
  9848. %@CR:MSEcE088@%%@4@%%@AB@%Invalid drive%@AE@%%@EH@%%@NL@%
  9849. %@NL@%
  9850.                You attempted to execute a command with a drive letter not%@NL@%
  9851.                recognized by your system. Use a different drive letter.%@NL@%
  9852. %@NL@%
  9853. %@CR:MSEcE089@%%@4@%%@AB@%Invalid pattern%@AE@%%@EH@%%@NL@%
  9854. %@NL@%
  9855.                You specified a regular-expression search command but gave a%@NL@%
  9856.                search string that is not a valid regular expression. Check%@NL@%
  9857.                the syntax rules for regular expressions and reenter.%@NL@%
  9858. %@NL@%
  9859. %@CR:MSEcE090@%%@4@%%@AB@%Invalid replacement pattern%@AE@%%@EH@%%@NL@%
  9860. %@NL@%
  9861.                You specified a regular-expression search and replace command%@NL@%
  9862.                but gave an invalid replacement string. Check the syntax%@NL@%
  9863.                rules for regular-expression replacement strings and reenter.%@NL@%
  9864. %@NL@%
  9865. %@CR:MSEcE091@%%@4@%%@AB@%Invoke: "%@AE@%%@AI@%command%@AE@%%@AB@%" (y/n)?%@AE@%%@EH@%%@NL@%
  9866. %@NL@%
  9867.                You attempted to overwrite a file on disk that has the%@NL@%
  9868.                read-only attribute set, and the %@AB@%readonly%@AE@% switch has been%@NL@%
  9869.                assigned a command. The editor asks you for confirmation%@NL@%
  9870.                before executing this command.%@NL@%
  9871. %@NL@%
  9872. %@CR:MSEcE092@%%@4@%%@AB@%Kill background compile?%@AE@%%@EH@%%@NL@%
  9873. %@NL@%
  9874.                OS/2 only. You gave the %@AI@%Arg Arg Meta Compile%@AE@% command, which%@NL@%
  9875.                kills a background compilation after prompting for%@NL@%
  9876.                confirmation. Type Y to terminate the compilation or any%@NL@%
  9877.                other key to cancel the command.%@NL@%
  9878. %@NL@%
  9879. %@CR:MSEcE093@%%@4@%%@AB@%Line%@AE@% %@AI@%linenumber%@AE@%%@AB@% too long%@AE@%%@EH@%%@NL@%
  9880. %@NL@%
  9881.                The indicated line exceeds the maximum of 251 characters. The%@NL@%
  9882.                editor ignores edits that exceed this limit.%@NL@%
  9883. %@NL@%
  9884. %@CR:MSEcE094@%%@4@%%@AB@%line%@AE@% %@AI@%linenumber%@AE@%%@AB@% too long; replacement skipped%@AE@%%@EH@%%@NL@%
  9885. %@NL@%
  9886.                The replacement requested would have caused the indicated%@NL@%
  9887.                line to be greater than the maximum line length, so the%@NL@%
  9888.                replacement was not performed.%@NL@%
  9889. %@NL@%
  9890. %@CR:MSEcE095@%%@4@%%@AB@%List Error: '%@AE@%%@AI@%listmacro%@AE@%%@AB@%' does not exist%@AE@%%@EH@%%@NL@%
  9891. %@NL@%
  9892.                The specified list macro did not exist. You may have mistyped%@NL@%
  9893.                its name or used the wrong syntax.%@NL@%
  9894. %@NL@%
  9895. %@CR:MSEcE096@%%@4@%%@AB@%List Error: Nested too deeply at '%@AE@%%@AI@%macroname%@AE@%%@AB@%'%@AE@%%@EH@%%@NL@%
  9896. %@NL@%
  9897.                Macros may be nested no more than 20 deep. You tried to%@NL@%
  9898.                execute a macro that has more than 20 nesting levels; the%@NL@%
  9899.                %@AI@%macroname%@AE@% placeholder indicates the macro which tried to call%@NL@%
  9900.                a macro at the 21st level.%@NL@%
  9901. %@NL@%
  9902. %@CR:MSEcE097@%%@4@%%@AB@%M internal error -%@AE@% %@AI@%file%@AE@%%@AB@%, continue?%@AE@%%@EH@%%@NL@%
  9903. %@NL@%
  9904.                The editor encountered an internal error. Please note the%@NL@%
  9905.                circumstances of this error and notify Microsoft Corporation%@NL@%
  9906.                by following the directions in the Microsoft Product%@NL@%
  9907.                Assistance Request form at the back of one of your manuals.%@NL@%
  9908. %@NL@%
  9909. %@CR:MSEcE098@%%@4@%%@AB@%macro%@AE@% %@AI@%file%@AE@%%@AB@% is in use%@AE@%%@EH@%%@NL@%
  9910. %@NL@%
  9911.                A macro attempted to redefine itself during execution (by%@NL@%
  9912.                using the %@AI@%Assign%@AE@% command), or a macro called a second macro%@NL@%
  9913.                that attempted to redefine the first macro.%@NL@%
  9914. %@NL@%
  9915. %@CR:MSEcE099@%%@4@%%@AB@%Macros nested too deep%@AE@%%@EH@%%@NL@%
  9916. %@NL@%
  9917.                You created a macro that used too many levels of nesting. A%@NL@%
  9918.                macro is nested when it is executed inside another macro.%@NL@%
  9919.                Macros can be nested to 20 levels.%@NL@%
  9920. %@NL@%
  9921. %@CR:MSEcE100@%%@4@%%@AB@%Mapped line%@AE@% %@AI@%number%@AE@%%@AB@% too long%@AE@%%@EH@%%@NL@%
  9922. %@NL@%
  9923.                You used the %@AI@%Environment%@AE@% function to replace the names of%@NL@%
  9924.                environment variables in a text string with their actual%@NL@%
  9925.                values; the resulting string was greater than 251 characters.%@NL@%
  9926. %@NL@%
  9927. %@CR:MSEcE101@%%@4@%%@AB@%Math argument%@AE@%%@EH@%%@NL@%
  9928. %@NL@%
  9929.                The editor encountered an internal error. Please note the%@NL@%
  9930.                circumstances of this error and notify Microsoft Corporation%@NL@%
  9931.                by following the directions in the Microsoft Product%@NL@%
  9932.                Assistance Request form at the back of one of your manuals.%@NL@%
  9933. %@NL@%
  9934. %@CR:MSEcE102@%%@4@%%@AB@%mGetCmd called with no macros in effect%@AE@%%@EH@%%@NL@%
  9935. %@NL@%
  9936.                The editor encountered an internal error. Please note the%@NL@%
  9937.                circumstances of this error and notify Microsoft Corporation%@NL@%
  9938.                by following the directions in the Microsoft Product%@NL@%
  9939.                Assistance Request form at the back of one of your manuals.%@NL@%
  9940. %@NL@%
  9941. %@CR:MSEcE103@%%@4@%%@AB@%missing ':' in%@AE@% %@AI@%string%@AE@%%@EH@%%@NL@%
  9942. %@NL@%
  9943.                You gave an argument to the %@AI@%Assign%@AE@% command without including%@NL@%
  9944.                an assignment symbol (:).%@NL@%
  9945. %@NL@%
  9946. %@CR:MSEcE104@%%@4@%%@AB@%Missing key assignment for '%@AE@%%@AI@%function%@AE@%%@AB@%'%@AE@%%@EH@%%@NL@%
  9947. %@NL@%
  9948.                You attempted to assign the given %@AI@%function%@AE@% to a keystroke but%@NL@%
  9949.                did not enter a keystroke name.%@NL@%
  9950. %@NL@%
  9951. %@CR:MSEcE105@%%@4@%%@AB@%New file name:%@AE@%%@EH@%%@NL@%
  9952. %@NL@%
  9953.                You attempted to overwrite a file on disk that has the%@NL@%
  9954.                read-only attribute set, and the %@AB@%readonly%@AE@% switch has not been%@NL@%
  9955.                assigned a command. The editor asks for a new file name under%@NL@%
  9956.                which to save the file so your edits are not lost. Respond%@NL@%
  9957.                with the name of a file that can be overwritten.%@NL@%
  9958. %@NL@%
  9959. %@CR:MSEcE106@%%@4@%%@AB@%Next file is%@AE@% %@AI@%file%@AE@%%@AB@%...%@AE@%%@EH@%%@NL@%
  9960. %@NL@%
  9961.                You invoked the %@AI@%Setfile%@AE@% function, and the editor is now%@NL@%
  9962.                loading the given file.%@NL@%
  9963. %@NL@%
  9964. %@CR:MSEcE107@%%@4@%%@AB@%no alternate file%@AE@%%@EH@%%@NL@%
  9965. %@NL@%
  9966.                You gave the %@AI@%Setfile%@AE@% command file with no arguments, but%@NL@%
  9967.                there was no alternate file to load. The %@AI@%Setfile%@AE@% command with%@NL@%
  9968.                no arguments normally switches to the previous file.%@NL@%
  9969. %@NL@%
  9970. %@CR:MSEcE108@%%@4@%%@AB@%No command to repeat%@AE@%%@EH@%%@NL@%
  9971. %@NL@%
  9972.                You executed the %@AI@%Repeat%@AE@% function to repeat the previous%@NL@%
  9973.                function, but no previous function had been executed.%@NL@%
  9974. %@NL@%
  9975. %@CR:MSEcE109@%%@4@%%@AB@%No compile command known%@AE@%%@EH@%%@NL@%
  9976. %@NL@%
  9977.                You executed %@AI@%Arg textarg Compile%@AE@%, but there was no%@NL@%
  9978.                corresponding %@AB@%extmake:text%@AE@% definition.%@NL@%
  9979. %@NL@%
  9980. %@CR:MSEcE110@%%@4@%%@AB@%No compile command known for .%@AE@%%@AI@%ext%@AE@%%@EH@%%@NL@%
  9981. %@NL@%
  9982.                No %@AI@%extmake%@AE@% definition has been created for the extension of%@NL@%
  9983.                the file you are currently editing.%@NL@%
  9984. %@NL@%
  9985. %@CR:MSEcE111@%%@4@%%@AB@%No compile command known for extension%@AE@% %@AI@%file%@AE@%%@EH@%%@NL@%
  9986. %@NL@%
  9987.                You invoked the %@AI@%Arg Compile%@AE@% command, which uses the extension%@NL@%
  9988.                of the current file, but the %@AB@%extmake%@AE@% switch has no setting%@NL@%
  9989.                for this file extension. Before invoking %@AI@%Arg Compile%@AE@%, make%@NL@%
  9990.                the assignment%@NL@%
  9991. %@NL@%
  9992.                %@AB@%extmake:%@AE@% %@AI@%ext%@AE@% %@AI@%command-line%@AE@%%@NL@%
  9993. %@NL@%
  9994.                in which %@AI@%ext%@AE@% is the extension of the current file.%@NL@%
  9995. %@NL@%
  9996. %@CR:MSEcE112@%%@4@%%@AB@%No compile in progress%@AE@%%@EH@%%@NL@%
  9997. %@NL@%
  9998.                You executed a %@AI@%Compile%@AE@% command without arguments, which%@NL@%
  9999.                returns the current compilation status. No compilation was in%@NL@%
  10000.                progress.%@NL@%
  10001. %@NL@%
  10002. %@CR:MSEcE113@%%@4@%%@AB@%No-Edit file may not be modified%@AE@%%@EH@%%@NL@%
  10003. %@NL@%
  10004.                You attempted to execute an editing command that would change%@NL@%
  10005.                a No-Edit file. No-Edit files cannot be modified, even in%@NL@%
  10006.                memory.%@NL@%
  10007. %@NL@%
  10008. %@CR:MSEcE114@%%@4@%%@AB@%No matching files%@AE@%%@EH@%%@NL@%
  10009. %@NL@%
  10010.                You invoked the %@AI@%Setfile%@AE@% function with a string containing the%@NL@%
  10011.                wildcards ? or *, but no file names matched this string.%@NL@%
  10012. %@NL@%
  10013. %@CR:MSEcE115@%%@4@%%@AB@%No more compilation messages%@AE@%%@EH@%%@NL@%
  10014. %@NL@%
  10015.                The %@AI@%Compile%@AE@% function was given with no arguments. This%@NL@%
  10016.                function moves the cursor to the next error message. However,%@NL@%
  10017.                there are no further error messages.%@NL@%
  10018. %@NL@%
  10019. %@CR:MSEcE116@%%@4@%%@AB@%No search string specified%@AE@%%@EH@%%@NL@%
  10020. %@NL@%
  10021.                You invoked %@AI@%Psearch%@AE@% or %@AI@%Msearch%@AE@% without a search string, and%@NL@%
  10022.                there is no previously defined search string to use as a%@NL@%
  10023.                default. Use an argument the first time you use %@AI@%Psearch%@AE@% or%@NL@%
  10024.                %@AI@%Msearch%@AE@%.%@NL@%
  10025. %@NL@%
  10026. %@CR:MSEcE117@%%@4@%%@AB@%No space left on device%@AE@%%@EH@%%@NL@%
  10027. %@NL@%
  10028.                You attempted to save a file to a device (usually a disk%@NL@%
  10029.                drive) that has no room left. Execute a shell and make room%@NL@%
  10030.                on the drive, or else save to a different device.%@NL@%
  10031. %@NL@%
  10032. %@CR:MSEcE118@%%@4@%%@AB@%No such file or directory%@AE@%%@EH@%%@NL@%
  10033. %@NL@%
  10034.                You attempted to use the %@AI@%Setfile%@AE@% function to change to a file%@NL@%
  10035.                or directory that does not exist.%@NL@%
  10036. %@NL@%
  10037. %@CR:MSEcE119@%%@4@%%@AB@%No unbalanced characters found%@AE@%%@EH@%%@NL@%
  10038. %@NL@%
  10039.                You invoked the %@AI@%Pbal%@AE@% function, but there are no unbalanced%@NL@%
  10040.                braces, brackets, or parentheses.%@NL@%
  10041. %@NL@%
  10042. %@CR:MSEcE120@%%@4@%%@AB@%No-Execute Record Mode - Press%@AE@% %@AI@%keystroke%@AE@%%@AB@% to resume normal editing%@AE@%%@EH@%%@NL@%
  10043. %@NL@%
  10044.                You have completed the special macro recording function (%@AI@%Meta%@AE@%%@NL@%
  10045.                %@AI@%Record%@AE@%) that records the macro without executing the%@NL@%
  10046.                keystrokes. This message reminds you that the editor is not%@NL@%
  10047.                hung. You may continue normal editing after pressing the%@NL@%
  10048.                specified key.%@NL@%
  10049. %@NL@%
  10050. %@CR:MSEcE121@%%@4@%%@AB@%Not enough core%@AE@%%@EH@%%@NL@%
  10051. %@NL@%
  10052.                The editor encountered an internal error. Please note the%@NL@%
  10053.                circumstances of this error and notify Microsoft Corporation%@NL@%
  10054.                by following the directions in the Microsoft Product%@NL@%
  10055.                Assistance Request form at the back of one of your manuals.%@NL@%
  10056. %@NL@%
  10057. %@CR:MSEcE122@%%@4@%%@AB@%Not enough free memory%@AE@%%@EH@%%@NL@%
  10058. %@NL@%
  10059.                DOS or real mode only. The editor was unable to allocate%@NL@%
  10060.                enough memory for all the files that were opened and was%@NL@%
  10061.                unable to recover. Normally, the editor recovers from lack of%@NL@%
  10062.                memory by closing files if it can. Terminate the editing%@NL@%
  10063.                session immediately.%@NL@%
  10064. %@NL@%
  10065. %@CR:MSEcE123@%%@4@%%@AB@%Not enough memory for pattern%@AE@%%@EH@%%@NL@%
  10066. %@NL@%
  10067.                You specified a regular-expression pattern too complicated%@NL@%
  10068.                for the editor to implement. Specify a simpler pattern.%@NL@%
  10069. %@NL@%
  10070. %@CR:MSEcE124@%%@4@%%@AB@%not enough memory on exec%@AE@%%@EH@%%@NL@%
  10071. %@NL@%
  10072.                OS/2 only. You gave a %@AI@%Compile%@AE@% or %@AI@%Shell%@AE@% command that could not%@NL@%
  10073.                be executed.%@NL@%
  10074. %@NL@%
  10075. %@CR:MSEcE125@%%@4@%%@AB@%Not enough room for macro%@AE@% %@AI@%macroname%@AE@%%@EH@%%@NL@%
  10076. %@NL@%
  10077.                You defined 1,024 macros and cannot add another. To reduce%@NL@%
  10078.                the number of macros, exit the editor and restart.%@NL@%
  10079. %@NL@%
  10080. %@CR:MSEcE126@%%@4@%%@AB@%Not supported by video display%@AE@%%@EH@%%@NL@%
  10081. %@NL@%
  10082.                You attempted to assign the %@AB@%height%@AE@% switch to a value not%@NL@%
  10083.                supported by the video adapter card. Only the following%@NL@%
  10084.                values are supported: 23 for CGA and monochrome; 23 and 41%@NL@%
  10085.                for EGA; and 23, 41, and 48 for VGA.%@NL@%
  10086. %@NL@%
  10087. %@CR:MSEcE127@%%@4@%%@AB@%Nothing to ReDo%@AE@%%@EH@%%@NL@%
  10088. %@NL@%
  10089.                You have repeated the last command in the editing command%@NL@%
  10090.                list; there are no more commands that can be repeated.%@NL@%
  10091. %@NL@%
  10092. %@CR:MSEcE128@%%@4@%%@AB@%Nothing to UnDo%@AE@%%@EH@%%@NL@%
  10093. %@NL@%
  10094.                You have reversed every editing command that remains in the%@NL@%
  10095.                UnDo list; there are no more editing commands to reverse.%@NL@%
  10096. %@NL@%
  10097. %@CR:MSEcE129@%%@4@%%@AB@%Out of disk space for VM swap file - recovering%@AE@%%@EH@%%@NL@%
  10098. %@NL@%
  10099.                DOS or real mode only. An insufficient amount of space was%@NL@%
  10100.                available for swapping. Exit the editor and reset the TMP%@NL@%
  10101.                environment variable to a disk drive with more space, if%@NL@%
  10102.                possible.%@NL@%
  10103. %@NL@%
  10104. %@CR:MSEcE130@%%@4@%%@AB@%Out of far memory - recovering%@AE@%%@EH@%%@NL@%
  10105. %@NL@%
  10106.                The editor has insufficient memory to support all the files%@NL@%
  10107.                open and is now trying to recover memory so that no%@NL@%
  10108.                information is lost.%@NL@%
  10109. %@NL@%
  10110. %@CR:MSEcE131@%%@4@%%@AB@%Out of local heap - recovering%@AE@%%@EH@%%@NL@%
  10111. %@NL@%
  10112.                The editor has insufficient memory to support all the files%@NL@%
  10113.                open and is now trying to recover memory so that no%@NL@%
  10114.                information is lost.%@NL@%
  10115. %@NL@%
  10116. %@CR:MSEcE132@%%@4@%%@AB@%Out of local memory%@AE@%%@EH@%%@NL@%
  10117. %@NL@%
  10118.                DOS or real mode only. The editor was unable to allocate%@NL@%
  10119.                enough memory for all the files that were opened and was%@NL@%
  10120.                unable to recover. Normally, the editor recovers from lack of%@NL@%
  10121.                memory by closing files if it can. Terminate the editing%@NL@%
  10122.                session and do not open as many files at the same time.%@NL@%
  10123. %@NL@%
  10124. %@CR:MSEcE133@%%@4@%%@AB@%Out of space on%@AE@% %@AI@%device%@AE@%%@EH@%%@NL@%
  10125. %@NL@%
  10126.                You attempted to save a file to a %@AI@%device%@AE@% (usually a disk%@NL@%
  10127.                drive) with no room left. Create free space on the drive, or%@NL@%
  10128.                else save to a different device.%@NL@%
  10129. %@NL@%
  10130. %@CR:MSEcE134@%%@4@%%@AB@%Packed file is corrupt%@AE@%%@EH@%%@NL@%
  10131. %@NL@%
  10132.                DOS or real mode only. You used the %@AI@%Shell%@AE@% or %@AI@%Compile%@AE@% function%@NL@%
  10133.                to execute a corrupted packed file.%@NL@%
  10134. %@NL@%
  10135. %@CR:MSEcE135@%%@4@%%@AB@%Permission denied%@AE@%%@EH@%%@NL@%
  10136. %@NL@%
  10137.                You attempted to write to a locked file.%@NL@%
  10138. %@NL@%
  10139. %@CR:MSEcE136@%%@4@%%@AB@%Please strike any key to continue%@AE@%%@EH@%%@NL@%
  10140. %@NL@%
  10141.                The %@AI@%Shell%@AE@% command has terminated, and the editor is ready to%@NL@%
  10142.                continue the normal editing session.%@NL@%
  10143. %@NL@%
  10144. %@CR:MSEcE137@%%@4@%%@AB@%Press any key...%@AE@%%@EH@%%@NL@%
  10145. %@NL@%
  10146.                The editor has completed some operation and is waiting for%@NL@%
  10147.                you to press a key before resuming the editing session.%@NL@%
  10148. %@NL@%
  10149. %@CR:MSEcE138@%%@4@%%@AB@%Print list full, try later%@AE@%%@EH@%%@NL@%
  10150. %@NL@%
  10151.                OS/2 only. There is no space in the printing queue for%@NL@%
  10152.                another file. Wait, then submit your print request again.%@NL@%
  10153. %@NL@%
  10154. %@CR:MSEcE139@%%@4@%%@AB@%Printing%@AE@% %@AI@%file%@AE@%%@AB@%... Press Esc to abort%@AE@%%@EH@%%@NL@%
  10155. %@NL@%
  10156.                Your print request has been accepted. Press ESC to cancel the%@NL@%
  10157.                printing.%@NL@%
  10158. %@NL@%
  10159. %@CR:MSEcE140@%%@4@%%@AB@%Printing:%@AE@% %@AI@%file%@AE@%%@EH@%%@NL@%
  10160. %@NL@%
  10161.                The specified %@AI@%file%@AE@% will be printed.%@NL@%
  10162. %@NL@%
  10163. %@CR:MSEcE141@%%@4@%%@AB@%Query search string:%@AE@%%@EH@%%@NL@%
  10164. %@NL@%
  10165.                You invoked the %@AI@%Qreplace%@AE@% function. Enter a new search string,%@NL@%
  10166.                press ENTER (or invoke the %@AI@%Emacsnewl%@AE@% function) to accept the%@NL@%
  10167.                old search string, or invoke %@AI@%Cancel%@AE@% to exit.%@NL@%
  10168. %@NL@%
  10169. %@CR:MSEcE142@%%@4@%%@AB@%Queued: '%@AE@%%@AI@%file%@AE@%%@AB@%'%@AE@%%@EH@%%@NL@%
  10170. %@NL@%
  10171.                OS/2 only. You gave a new compile command before the last%@NL@%
  10172.                compilation was complete. The editor will not spawn more than%@NL@%
  10173.                one compilation at a time but can hold up to 16 compile%@NL@%
  10174.                commands to be executed sequentially.%@NL@%
  10175. %@NL@%
  10176. %@CR:MSEcE143@%%@4@%%@AB@%RE emulator stack overflow%@AE@%%@EH@%%@NL@%
  10177. %@NL@%
  10178.                The editor encountered an internal error while evaluating a%@NL@%
  10179.                regular expression. Please note the circumstances of this%@NL@%
  10180.                error and notify Microsoft Corporation by following the%@NL@%
  10181.                directions in the Microsoft Product Assistance Request form%@NL@%
  10182.                at the back of one of your manuals.%@NL@%
  10183. %@NL@%
  10184. %@CR:MSEcE144@%%@4@%%@AB@%RemoveFile can't find file%@AE@%%@EH@%%@NL@%
  10185. %@NL@%
  10186.                An extension module passed a nonexistent file to the%@NL@%
  10187.                %@AB@%RemoveFile%@AE@% low-level function.%@NL@%
  10188. %@NL@%
  10189. %@CR:MSEcE145@%%@4@%%@AB@%Removing file%@AE@% %@AI@%filename%@AE@%%@EH@%%@NL@%
  10190. %@NL@%
  10191.                The %@AB@%RemoveFile%@AE@% low-level function has removed a file buffer%@NL@%
  10192.                from memory. This is not an error unless you need to have the%@NL@%
  10193.                file open for editing.%@NL@%
  10194. %@NL@%
  10195. %@CR:MSEcE146@%%@4@%%@AB@%Replace string:%@AE@%%@EH@%%@NL@%
  10196. %@NL@%
  10197.                You invoked the %@AI@%Replace%@AE@% function. Enter a new replacement%@NL@%
  10198.                string, press ENTER (or invoke the %@AI@%Emacsnewl%@AE@% function) to%@NL@%
  10199.                accept the old replacement string, or invoke %@AI@%Cancel%@AE@% to exit.%@NL@%
  10200. %@NL@%
  10201. %@CR:MSEcE147@%%@4@%%@AB@%Replace this occurrence (Yes/No/All/Quit):%@AE@%%@EH@%%@NL@%
  10202. %@NL@%
  10203.                You executed the %@AI@%Qreplace%@AE@% function, which prompts for the%@NL@%
  10204.                replacement rather than performing the replacement%@NL@%
  10205.                automatically. You can choose not to replace the text, to%@NL@%
  10206.                replace the text for this occurrence only, to replace all%@NL@%
  10207.                following occurrences, or to quit the %@AI@%Qreplace%@AE@% function.%@NL@%
  10208. %@NL@%
  10209. %@CR:MSEcE148@%%@4@%%@AB@%Resource deadlock would occur%@AE@%%@EH@%%@NL@%
  10210. %@NL@%
  10211.                The editor encountered an internal error. Please note the%@NL@%
  10212.                circumstances of this error and notify Microsoft Corporation%@NL@%
  10213.                by following the directions in the Microsoft Product%@NL@%
  10214.                Assistance Request form at the back of one of your manuals.%@NL@%
  10215. %@NL@%
  10216. %@CR:MSEcE149@%%@4@%%@AB@%Result too large%@AE@%%@EH@%%@NL@%
  10217. %@NL@%
  10218.                The editor encountered an internal error. Please note the%@NL@%
  10219.                circumstances of this error and notify Microsoft Corporation%@NL@%
  10220.                by following the directions in the Microsoft Product%@NL@%
  10221.                Assistance Request form at the back of one of your manuals.%@NL@%
  10222. %@NL@%
  10223. %@CR:MSEcE150@%%@4@%%@AB@%run-time error%@AE@%%@EH@%%@NL@%
  10224. %@NL@%
  10225.                The editor encountered an internal error. Please note the%@NL@%
  10226.                circumstances of this error and notify Microsoft Corporation%@NL@%
  10227.                by following the directions in the Microsoft Product%@NL@%
  10228.                Assistance Request form at the back of one of your manuals.%@NL@%
  10229. %@NL@%
  10230. %@CR:MSEcE151@%%@4@%%@AB@%Save all remaining changed files (Y/N)?%@AE@%%@EH@%%@NL@%
  10231. %@NL@%
  10232.                This prompt appears when there are one or more changed files%@NL@%
  10233.                in addition to the file you were working on when you%@NL@%
  10234.                attempted to exit. If you respond Y, all the remaining%@NL@%
  10235.                changed files will be saved. If you respond N, you will be%@NL@%
  10236.                prompted about saving each file individually.%@NL@%
  10237. %@NL@%
  10238. %@CR:MSEcE152@%%@4@%%@AB@%Save file%@AE@% %@AI@%file%@AE@%%@AB@% before flushing (y/n/p)%@AE@%%@EH@%%@NL@%
  10239. %@NL@%
  10240.                The editor is running low on memory and needs to remove file%@NL@%
  10241.                buffers. No saved files are available for removal, and the%@NL@%
  10242.                editor must remove unsaved files. Type Y to save changes to%@NL@%
  10243.                %@AI@%file%@AE@% before it is removed, or N to remove %@AI@%file%@AE@% without saving%@NL@%
  10244.                changes. Type P to save all files that have unsaved changes.%@NL@%
  10245.                Invoke the %@AI@%Cancel%@AE@% function to prevent %@AI@%file%@AE@% from being%@NL@%
  10246.                removed. This last option causes the editor to try to remove%@NL@%
  10247.                a different %@AI@%file%@AE@% if one is available.%@NL@%
  10248. %@NL@%
  10249. %@CR:MSEcE153@%%@4@%%@AB@%Saving%@AE@% %@AI@%file%@AE@%%@AB@% ...%@AE@%%@EH@%%@NL@%
  10250. %@NL@%
  10251.                You invoked the %@AI@%Setfile%@AE@% function, and the editor is now%@NL@%
  10252.                saving %@AI@%file%@AE@%.%@NL@%
  10253. %@NL@%
  10254. %@CR:MSEcE154@%%@4@%%@AB@%Search string:%@AE@%%@EH@%%@NL@%
  10255. %@NL@%
  10256.                You invoked the %@AI@%Replace%@AE@% function. Enter a new search string,%@NL@%
  10257.                press ENTER (or invoke the %@AI@%Emacsnewl%@AE@% function) to accept the%@NL@%
  10258.                old search string, or invoke %@AI@%Cancel%@AE@% to exit.%@NL@%
  10259. %@NL@%
  10260. %@CR:MSEcE155@%%@4@%%@AB@%Source file not found:%@AE@% %@AI@%file%@AE@%%@EH@%%@NL@%
  10261. %@NL@%
  10262.                The %@AI@%Arg%@AE@% %@AI@%Compile%@AE@% command was invoked but could not find one of%@NL@%
  10263.                the files specified. Reset the %@AB@%extmake%@AE@% switch so that%@NL@%
  10264.                compilations can run successfully.%@NL@%
  10265. %@NL@%
  10266. %@CR:MSEcE156@%%@4@%%@AB@%Spawn failed on%@AE@% %@AI@%command%@AE@%%@AB@% -%@AE@% %@AI@%messagetext%@AE@%%@EH@%%@NL@%
  10267. %@NL@%
  10268.                The %@AI@%Shell%@AE@% or %@AI@%Compile%@AE@% function was given a command that could%@NL@%
  10269.                not be executed for the reason given in %@AI@%messagetext%@AE@%.%@NL@%
  10270. %@NL@%
  10271. %@CR:MSEcE157@%%@4@%%@AB@%Swapping file%@AE@% %@AI@%file%@AE@%%@AB@% already exists.%@AE@%%@EH@%%@NL@%
  10272. %@NL@%
  10273.                DOS or real mode only. When you started the editor, the%@NL@%
  10274.                virtual-memory swapping file already existed. (On start-up,%@NL@%
  10275.                the editor assumes that this file has been deleted.) Delete%@NL@%
  10276.                %@AI@%file%@AE@% and restart the editor.%@NL@%
  10277. %@NL@%
  10278. %@CR:MSEcE158@%%@4@%%@AB@%Testing VM error at%@AE@% %@AI@%address%@AE@%%@AB@% error on scratch file. This usually indicates a%@AE@%%@EH@%%@NL@%
  10279. %@AB@%full-disk on the scratch file device. Please attempt to free some space on%@AE@%%@NL@%
  10280. %@AB@%it.%@AE@%%@NL@%
  10281. %@NL@%
  10282.                The editor encountered an internal error. Please note the%@NL@%
  10283.                circumstances of this error and notify Microsoft Corporation%@NL@%
  10284.                by following the directions in the Microsoft Product%@NL@%
  10285.                Assistance Request form at the back of one of your manuals.%@NL@%
  10286. %@NL@%
  10287. %@CR:MSEcE159@%%@4@%%@AB@%This program cannot be run in DOS mode.%@AE@%%@EH@%%@NL@%
  10288. %@NL@%
  10289.                OS/2 only. You invoked the %@AI@%Shell%@AE@% or %@AI@%Compile%@AE@% command, which%@NL@%
  10290.                can be run in real mode only (DOS or 3.%@AI@%x%@AE@% compatibility box).%@NL@%
  10291. %@NL@%
  10292. %@CR:MSEcE160@%%@4@%%@AB@%Too many open files%@AE@%%@EH@%%@NL@%
  10293. %@NL@%
  10294.                The editor tried to open more files at the operating-system%@NL@%
  10295.                level, but the system cannot open any more files. Typically,%@NL@%
  10296.                this error occurs when an extension opens many files, or the%@NL@%
  10297.                FILES setting in CONFIG.SYS is too small. Increase the FILES%@NL@%
  10298.                setting in CONFIG.SYS if this setting is not already at the%@NL@%
  10299.                system maximum, then reboot. (This maximum is 20 in most%@NL@%
  10300.                versions of DOS.)%@NL@%
  10301. %@NL@%
  10302. %@CR:MSEcE161@%%@4@%%@AB@%Too many windows%@AE@%%@EH@%%@NL@%
  10303. %@NL@%
  10304.                You tried to open more than eight windows, which is the%@NL@%
  10305.                maximum number supported by the editor.%@NL@%
  10306. %@NL@%
  10307. %@CR:MSEcE162@%%@4@%%@AB@%Unable to create pipe:%@AE@%%@EH@%%@NL@%
  10308. %@NL@%
  10309.                OS/2 only. This message appears only on start-up. The editor%@NL@%
  10310.                cannot generate the pipes it needs for background compiling%@NL@%
  10311.                and printing. These features will not be available during the%@NL@%
  10312.                current editing session. This problem is probably the result%@NL@%
  10313.                of a lack of memory or file handles.%@NL@%
  10314. %@NL@%
  10315. %@CR:MSEcE163@%%@4@%%@AB@%Unable to open swapping file%@AE@% %@AI@%file%@AE@%%@AB@% -%@AE@% %@AI@%messagetext%@AE@%%@EH@%%@NL@%
  10316. %@NL@%
  10317.                DOS or real mode only. When you started the editor, it was%@NL@%
  10318.                unable to recreate the virtual-memory swapping file. Make%@NL@%
  10319.                sure your TMP environment variable lists an accessible%@NL@%
  10320.                location.%@NL@%
  10321. %@NL@%
  10322. %@CR:MSEcE164@%%@4@%%@AB@%Unable to read TOOLS.INI%@AE@%%@EH@%%@NL@%
  10323. %@NL@%
  10324.                The editor could not read the TOOLS.INI file upon start-up.%@NL@%
  10325.                Make sure that the TOOLS.INI file read permission is in the%@NL@%
  10326.                proper format.%@NL@%
  10327. %@NL@%
  10328. %@CR:MSEcE165@%%@4@%%@AB@%Unable to recover - abort now?%@AE@%%@EH@%%@NL@%
  10329. %@NL@%
  10330.                The editor has run out of memory and exhausted all possible%@NL@%
  10331.                roads to recovery. (The editor takes a number of measures to%@NL@%
  10332.                recover memory before it reports this error.) If you have%@NL@%
  10333.                files you need to save, type N to save them now before the%@NL@%
  10334.                editor terminates. Otherwise, type Y to terminate%@NL@%
  10335.                immediately.%@NL@%
  10336. %@NL@%
  10337. %@CR:MSEcE166@%%@4@%%@AB@%Unable to set up compile pipe%@AE@%%@EH@%%@NL@%
  10338. %@NL@%
  10339.                OS/2 only. The editor encountered an internal error. Please%@NL@%
  10340.                note the circumstances of this error and notify Microsoft%@NL@%
  10341.                Corporation by following the directions in the Microsoft%@NL@%
  10342.                Product Assistance Request form at the back of one of your%@NL@%
  10343.                manuals.%@NL@%
  10344. %@NL@%
  10345. %@CR:MSEcE167@%%@4@%%@AB@%Unable to start compile thread%@AE@%%@EH@%%@NL@%
  10346. %@NL@%
  10347.                OS/2 only. The editor encountered an internal error. Please%@NL@%
  10348.                note the circumstances of this error and notify Microsoft%@NL@%
  10349.                Corporation by following the directions in the Microsoft%@NL@%
  10350.                Product Assistance Request form at the back of one of your%@NL@%
  10351.                manuals.%@NL@%
  10352. %@NL@%
  10353. %@CR:MSEcE168@%%@4@%%@AB@%Unable to start Idle thread%@AE@%%@EH@%%@NL@%
  10354. %@NL@%
  10355.                OS/2 only. The editor encountered an internal error. Please%@NL@%
  10356.                note the circumstances of this error and notify Microsoft%@NL@%
  10357.                Corporation by following the directions in the Microsoft%@NL@%
  10358.                Product Assistance Request form at the back of one of your%@NL@%
  10359.                manuals.%@NL@%
  10360. %@NL@%
  10361. %@CR:MSEcE169@%%@4@%%@AB@%Unable to start printing thread%@AE@%%@EH@%%@NL@%
  10362. %@NL@%
  10363.                OS/2 only. The editor encountered an internal error. Please%@NL@%
  10364.                note the circumstances of this error and notify Microsoft%@NL@%
  10365.                Corporation by following the directions in the Microsoft%@NL@%
  10366.                Product Assistance Request form at the back of one of your%@NL@%
  10367.                manuals.%@NL@%
  10368. %@NL@%
  10369. %@CR:MSEcE170@%%@4@%%@AB@%Unknown error%@AE@%%@EH@%%@NL@%
  10370. %@NL@%
  10371.                The editor encountered an internal error. Please note the%@NL@%
  10372.                circumstances of this error and notify Microsoft Corporation%@NL@%
  10373.                by following the directions in the Microsoft Product%@NL@%
  10374.                Assistance Request form at the back of one of your manuals.%@NL@%
  10375. %@NL@%
  10376. %@CR:MSEcE171@%%@4@%%@AB@%unknown function%@AE@% %@AI@%name%@AE@%%@EH@%%@NL@%
  10377. %@NL@%
  10378.                You attempted to execute a macro-definition list containing%@NL@%
  10379.                an undefined function or macro name. Make sure that %@AI@%name%@AE@% is%@NL@%
  10380.                defined before appearing in a macro or as an argument to%@NL@%
  10381.                %@AI@%Execute%@AE@%.%@NL@%
  10382. %@NL@%
  10383. %@CR:MSEcE172@%%@4@%%@AB@%Unsupported video mode.  Please change modes and restart.%@AE@%%@EH@%%@NL@%
  10384. %@NL@%
  10385.                You started the editor in an unrecognized video mode. Please%@NL@%
  10386.                exit the editor and reset the operating system video mode.%@NL@%
  10387. %@NL@%
  10388. %@CR:MSEcE173@%%@4@%%@AB@%VM: Alloc  Free%@AE@%%@EH@%%@NL@%
  10389. %@NL@%
  10390.                OS/2 only. The editor encountered an internal error. Please%@NL@%
  10391.                note the circumstances of this error and notify Microsoft%@NL@%
  10392.                Corporation by following the directions in the Microsoft%@NL@%
  10393.                Product Assistance Request form at the back of one of your%@NL@%
  10394.                manuals.%@NL@%
  10395. %@NL@%
  10396. %@CR:MSEcE174@%%@4@%%@AB@%Warning: continuation character on last line!%@AE@%%@EH@%%@NL@%
  10397. %@NL@%
  10398.                The last line from the appropriate section of TOOLS.INI ended%@NL@%
  10399.                in a continuation character but there was no following line.%@NL@%
  10400. %@NL@%
  10401. %@CR:MSEcE175@%%@4@%%@AB@%Window too small to split%@AE@%%@EH@%%@NL@%
  10402. %@NL@%
  10403.                You attempted to create a window smaller than 5 lines or 5%@NL@%
  10404.                columns. Choose a different cursor position to split the%@NL@%
  10405.                window.%@NL@%
  10406. %@NL@%
  10407. %@CR:MSEcE176@%%@4@%%@AB@%You have more files to edit. Are you sure you want to exit? (y/n):%@AE@%%@EH@%%@NL@%
  10408. %@NL@%
  10409.                You specified more than one file when you started the editor,%@NL@%
  10410.                but you are quitting without having edited all of them. Type%@NL@%
  10411.                Y to exit or N to continue editing.%@NL@%
  10412. %@NL@%
  10413. %@CR:MSEcE177@%%@4@%%@AB@%You have unsaved files.  Are you sure you want to exit? (y/n):%@AE@%%@EH@%%@NL@%
  10414. %@NL@%
  10415.                You gave the %@AI@%Meta Exit%@AE@% command, and the editor has detected%@NL@%
  10416.                at least one file open with unsaved changes. Type Y to exit%@NL@%
  10417.                without saving, or any other key to continue editing.%@NL@%
  10418. %@NL@%
  10419. %@NL@%
  10420. %@NL@%
  10421. %@CR:MSEg0000@%%@1@%%@AB@%Glossary%@AE@%%@EH@%%@NL@%
  10422. ───────────────────────────────────────────────────────────────────────────%@NL@%
  10423. %@NL@%
  10424. %@CR:MSEg0001@%%@4@%This glossary defines terms in this manual used in a technical or unique%@EH@%
  10425. way.%@NL@%
  10426. %@NL@%
  10427. %@CR:MSEgD001@%%@4@%%@AB@%Arg%@AE@%%@EH@%%@NL@%
  10428.   A function modifier that introduces an argument or an editing function.
  10429.   The argument may be of any type and is passed to the next function as
  10430.   input. For example, the command %@AI@%Arg textarg Copy%@AE@% passes the argument
  10431.   %@AI@%textarg%@AE@% to the function %@AI@%Copy%@AE@%.%@NL@%
  10432. %@NL@%
  10433. %@CR:MSEgD002@%%@4@%%@AB@%argument%@AE@%%@EH@%%@NL@%
  10434.   An input to a function. The Microsoft Editor uses two classes of
  10435.   arguments: cursor-movement arguments and text arguments. Cursor-movement
  10436.   arguments (%@AI@%boxarg%@AE@%, %@AI@%linearg%@AE@%, and %@AI@%streamarg%@AE@%) specify a range of characters
  10437.   on the screen. Text arguments (%@AI@%markarg%@AE@%, %@AI@%numarg%@AE@%, and %@AI@%textarg%@AE@%) are typed in
  10438.   directly. Arguments are introduced by using the %@AI@%Arg%@AE@% function.%@NL@%
  10439. %@NL@%
  10440. %@CR:MSEgD003@%%@4@%%@AB@%assignment%@AE@%%@EH@%%@NL@%
  10441.   %@AI@%See%@AE@% "function assignment."%@NL@%
  10442. %@NL@%
  10443. %@CR:MSEgD004@%%@4@%%@AB@%box mode%@AE@%%@EH@%%@NL@%
  10444.   The editing mode that lets you highlight cursor-movement arguments as
  10445.   rectangular areas of text.%@NL@%
  10446. %@NL@%
  10447. %@CR:MSEgD005@%%@4@%%@AB@%boxarg%@AE@%%@EH@%%@NL@%
  10448.   A rectangular area on the screen, defined by the two opposite corners: the
  10449.   initial cursor position and the current cursor position. The editor must
  10450.   be in box mode, and the two cursor positions must be on separate rows and
  10451.   separate columns. A %@AI@%boxarg%@AE@% is generated by invoking the %@AI@%Arg%@AE@% function and
  10452.   then moving the cursor to a new location.%@NL@%
  10453. %@NL@%
  10454. %@CR:MSEgD006@%%@4@%%@AB@%buffer%@AE@%%@EH@%%@NL@%
  10455.   An area in memory in which a copy of the file is kept and changed as you
  10456.   edit. This buffer is copied to disk when you do a save operation.%@NL@%
  10457. %@NL@%
  10458. %@CR:MSEgD007@%%@4@%%@AB@%C extension%@AE@%%@EH@%%@NL@%
  10459.   A C-language module that defines new editing functions and switches. %@AI@%See%@AE@%
  10460.   Chapter 8%@BO:   3fbeb@%.%@NL@%
  10461. %@NL@%
  10462. %@CR:MSEgD008@%%@4@%%@AB@%Clipboard%@AE@%%@EH@%%@NL@%
  10463.   A pseudo file that holds text selected with the %@AI@%Copy%@AE@%, %@AI@%Ldelete%@AE@%, or %@AI@%Sdelete%@AE@%
  10464.   functions. You can use the %@AI@%Paste%@AE@% function to insert text from the
  10465.   Clipboard into a file.%@NL@%
  10466. %@NL@%
  10467. %@CR:MSEgD009@%%@4@%%@AB@%configuration%@AE@%%@EH@%%@NL@%
  10468.   A description of the specific assignments of functions to keys. For
  10469.   example, a BRIEF configuration implies that the Microsoft Editor uses keys
  10470.   similar to those that the BRIEF editor uses to invoke similar functions.%@NL@%
  10471. %@NL@%
  10472. %@CR:MSEgD010@%%@4@%%@AB@%cursor%@AE@%%@EH@%%@NL@%
  10473.   The blinking white underline character that defines current position. When
  10474.   you type characters into the file, they appear at the cursor position.%@NL@%
  10475. %@NL@%
  10476. %@CR:MSEgD011@%%@4@%%@AB@%default%@AE@%%@EH@%%@NL@%
  10477.   A setting assumed by the editor until you specify otherwise. The Microsoft
  10478.   Editor uses two categories of default settings: function assignments and
  10479.   switches.%@NL@%
  10480. %@NL@%
  10481. %@CR:MSEgD012@%%@4@%%@AB@%dialog line%@AE@%%@EH@%%@NL@%
  10482.   The line just above the status line. The dialog line reports editor
  10483.   messages. You enter text arguments on this line.%@NL@%
  10484. %@NL@%
  10485. %@CR:MSEgD013@%%@4@%%@AB@%emacs%@AE@%%@EH@%%@NL@%
  10486.   A popular mainframe editor from which the functions %@AI@%Emacscdel%@AE@% and
  10487.   %@AI@%Emacsnewl%@AE@% were taken.%@NL@%
  10488. %@NL@%
  10489. %@CR:MSEgD014@%%@4@%%@AB@%file history%@AE@%%@EH@%%@NL@%
  10490.   A list of the most recently edited files, including any files currently
  10491.   open for editing. The file history is displayed in the <information-file>
  10492.   pseudo file.%@NL@%
  10493. %@NL@%
  10494. %@CR:MSEgD015@%%@4@%%@AB@%function assignment%@AE@%%@EH@%%@NL@%
  10495.   A method of assigning an editor function to a specific keystroke so that
  10496.   pressing the keystroke invokes the function. Use the %@AI@%Arg%@AE@%%@AI@%textarg Assign%@AE@%
  10497.   command to make an assignment for a single editing session, or you can
  10498.   enter the assignment in the TOOLS.INI file so that it may be used during
  10499.   any editing session. %@AI@%See%@AE@% Chapter 6%@BO:   28e3a@%.%@NL@%
  10500. %@NL@%
  10501. %@CR:MSEgD016@%%@4@%%@AB@%graphic%@AE@%%@EH@%%@NL@%
  10502.   %@AI@%See%@AE@% "literal."%@NL@%
  10503. %@NL@%
  10504. %@CR:MSEgD017@%%@4@%%@AB@%initial cursor position%@AE@%%@EH@%%@NL@%
  10505.   The position the cursor is in when the %@AI@%Arg%@AE@% function is invoked.%@NL@%
  10506. %@NL@%
  10507. %@CR:MSEgD018@%%@4@%%@AB@%insert mode%@AE@%%@EH@%%@NL@%
  10508.   An input mode that inserts rather than replaces characters in the file as
  10509.   they are entered.%@NL@%
  10510. %@NL@%
  10511. %@CR:MSEgD019@%%@4@%%@AB@%linearg%@AE@%%@EH@%%@NL@%
  10512.   A range of complete lines, including all the lines from the initial cursor
  10513.   position to the current cursor position. The editor must be in box mode.
  10514.   You define a %@AI@%linearg%@AE@% by invoking the %@AI@%Arg%@AE@% function (pressing ALT+A), then
  10515.   moving the cursor to a different line but same column as the initial
  10516.   cursor position.%@NL@%
  10517. %@NL@%
  10518. %@CR:MSEgD020@%%@4@%%@AB@%literal%@AE@%%@EH@%%@NL@%
  10519.   The corresponding ASCII value of a keystroke.  When a keystroke is
  10520.   considered literal or graphic, pressing the key causes the editor to place
  10521.   the corresponding value in a file.%@NL@%
  10522. %@NL@%
  10523. %@CR:MSEgD021@%%@4@%%@AB@%macro%@AE@%%@EH@%%@NL@%
  10524.   A function made up of arguments and previously defined functions. For
  10525.   example, you can create a macro that contains a set of repeatedly
  10526.   performed functions and assign the macro to a keystroke. Those functions
  10527.   can be carried out much more quickly and simply by invoking the macro. %@AI@%See%@AE@%
  10528.   Chapter 6%@BO:   28e3a@%.%@NL@%
  10529. %@NL@%
  10530. %@CR:MSEgD022@%%@4@%%@AB@%markarg%@AE@%%@EH@%%@NL@%
  10531.   A special type of %@AI@%textarg%@AE@% that has been previously defined to be a
  10532.   marker──that is, it is associated with a particular position in the file.%@NL@%
  10533. %@NL@%
  10534. %@CR:MSEgD023@%%@4@%%@AB@%marker%@AE@%%@EH@%%@NL@%
  10535.   A name assigned to a cursor position in a file so that this position can
  10536.   be referred to within a command by using this name. For example, the %@AI@%Arg%@AE@%
  10537.   %@AI@%markarg Copy%@AE@% command selects the text between the cursor position and the
  10538.   marker position. A marker is assigned using the %@AI@%Arg Arg textarg Mark%@AE@%
  10539.   command.%@NL@%
  10540. %@NL@%
  10541. %@CR:MSEgD024@%%@4@%%@AB@%Meta%@AE@%%@EH@%%@NL@%
  10542.   A function that modifies other functions so they perform differently. The
  10543.   effect of %@AI@%Meta%@AE@% varies with each function.%@NL@%
  10544. %@NL@%
  10545. %@CR:MSEgD025@%%@4@%%@AB@%nested macro%@AE@%%@EH@%%@NL@%
  10546.   A macro executed by another macro.%@NL@%
  10547. %@NL@%
  10548. %@CR:MSEgD026@%%@4@%%@AB@%numarg%@AE@%%@EH@%%@NL@%
  10549.   A numerical value you enter on the dialog line, which is passed to a
  10550.   function. A %@AI@%numarg%@AE@% is introduced by the %@AI@%Arg%@AE@% function.%@NL@%
  10551. %@NL@%
  10552. %@CR:MSEgD027@%%@4@%%@AB@%overtype mode%@AE@%%@EH@%%@NL@%
  10553.   The input mode that replaces characters at the cursor position instead of
  10554.   inserting them. Unlike insert mode, this mode does not preserve existing
  10555.   text at the cursor position.%@NL@%
  10556. %@NL@%
  10557. %@CR:MSEgD028@%%@4@%%@AB@%pseudo file%@AE@%%@EH@%%@NL@%
  10558.   A file kept in memory that does not correspond to a disk file. The name of
  10559.   a pseudo file is always enclosed in angle brackets (%@AB@%<>%@AE@%). You can create
  10560.   your pseudo files for fast saving of temporary information. In addition,
  10561.   the editor creates several pseudo files of its own and gives them special
  10562.   meaning. %@AI@%See%@AE@% Chapter 4%@BO:   120e2@%.%@NL@%
  10563. %@NL@%
  10564. %@CR:MSEgD029@%%@4@%%@AB@%recorded macro%@AE@%%@EH@%%@NL@%
  10565.   A macro you create with the %@AI@%Record%@AE@% function. The %@AI@%Record%@AE@% function turns
  10566.   record mode on and off. All actions you execute while in record mode are
  10567.   by default assigned to the RECORDVALUE macro. %@AI@%See%@AE@% Chapter 6%@BO:   28e3a@%.%@NL@%
  10568. %@NL@%
  10569. %@CR:MSEgD030@%%@4@%%@AB@%regular expression%@AE@%%@EH@%%@NL@%
  10570.   A pattern specifying a set of one or more character strings to search for.
  10571.   It may be a simple string or a more complex arrangement of characters and
  10572.   special symbols that specify a variety of strings to be matched. %@AI@%See%@AE@%
  10573.   Chapter 5%@BO:   206bc@%.%@NL@%
  10574. %@NL@%
  10575. %@CR:MSEgD031@%%@4@%%@AB@%return value%@AE@%%@EH@%%@NL@%
  10576.   A value returned by an editing function. The value may be true or false,
  10577.   depending on whether the function was successful. This value can be used
  10578.   to create complex macros that perform differently depending upon the
  10579.   results of individual functions within the macro. %@AI@%See%@AE@% Chapter 6%@BO:   28e3a@%.%@NL@%
  10580. %@NL@%
  10581. %@CR:MSEgD032@%%@4@%%@AB@%short name%@AE@%%@EH@%%@NL@%
  10582.   A file name without a path or file extension. The %@AI@%Setfile%@AE@% and %@AI@%Paste%@AE@%
  10583.   functions can take a short name as input and search for a full-length file
  10584.   name in the file history that contains the short name.%@NL@%
  10585. %@NL@%
  10586. %@CR:MSEgD033@%%@4@%%@AB@%status line%@AE@%%@EH@%%@NL@%
  10587.   The bottom line of the screen. This line contains useful information about
  10588.   the current editing session.%@NL@%
  10589. %@NL@%
  10590. %@CR:MSEgD034@%%@4@%%@AB@%stream mode%@AE@%%@EH@%%@NL@%
  10591.   The editing mode that lets you highlight cursor-movement arguments as
  10592.   continuous streams of text, rather than rectangular areas.%@NL@%
  10593. %@NL@%
  10594. %@CR:MSEgD035@%%@4@%%@AB@%streamarg%@AE@%%@EH@%%@NL@%
  10595.   The contiguous stream of characters between two positions──the initial
  10596.   cursor position and the new cursor position. The editor must be in stream
  10597.   mode. You define a %@AI@%streamarg%@AE@% by invoking %@AI@%Arg%@AE@%, moving the cursor to any new
  10598.   location, and then invoking %@AI@%Sinsert%@AE@% or %@AI@%Sdelete%@AE@%.%@NL@%
  10599. %@NL@%
  10600. %@CR:MSEgD036@%%@4@%%@AB@%switch%@AE@%%@EH@%%@NL@%
  10601.   A variable that modifies the way the editor performs. The Microsoft Editor
  10602.   uses three kinds of switches: Boolean switches, which turn a certain
  10603.   editor feature on or off; numeric switches, which specify numeric
  10604.   constants; and text switches, which specify a string of characters. %@AI@%See%@AE@%
  10605.   Chapter 7%@BO:   3396c@%.%@NL@%
  10606. %@NL@%
  10607. %@CR:MSEgD037@%%@4@%%@AB@%tag%@AE@%%@EH@%%@NL@%
  10608.   An identifier enclosed in brackets (%@AB@%[]%@AE@%) that marks the beginning of a
  10609.   section in the TOOLS.INI file. For example, unless you rename the editor,
  10610.   the principal section for editor settings starts at the [M] tag. %@AI@%See%@AE@%
  10611.   Chapter 7%@BO:   3396c@%.%@NL@%
  10612. %@NL@%
  10613. %@CR:MSEgD038@%%@4@%%@AB@%textarg%@AE@%%@EH@%%@NL@%
  10614.   A string of text that you enter on the dialog line after invoking the %@AI@%Arg%@AE@%
  10615.   function. The text that you enter is passed as input to the next function.%@NL@%
  10616. %@NL@%
  10617. %@CR:MSEgD039@%%@4@%%@AB@%TOOLS.INI%@AE@%%@EH@%%@NL@%
  10618.   A file that contains initialization information for the Microsoft Editor
  10619.   and other programs. The file is divided into sections with the use of
  10620.   tags. These sections can be loaded automatically when the editor is
  10621.   started or by command from within the editor. %@AI@%See%@AE@% Chapter 7%@BO:   3396c@%.%@NL@%
  10622. %@NL@%
  10623. %@CR:MSEgD040@%%@4@%%@AB@%window%@AE@%%@EH@%%@NL@%
  10624.   An area on the screen used to display part of a file. Unless a file is
  10625.   extremely small, it is impossible to see all of it on the screen at once.
  10626.   Therefore you see a portion of the file through the main editing window at
  10627.   any one time. It is possible to see any part of the file by moving or
  10628.   scrolling this window. The Microsoft Editor allows you to open multiple
  10629.   windows on the screen, using the %@AI@%Window%@AE@% function, for viewing different
  10630.   parts of the same file or different files.%@NL@%
  10631. %@NL@%
  10632. %@NL@%
  10633. %@CR:MSEINDEX@%%@1@%%@AB@%Index%@AE@%%@EH@%%@NL@%
  10634. ───────────────────────────────────────────────────────────────────────────%@NL@%
  10635. %@NL@%
  10636. %|F parameter%@BO:   3ab6d@%%@NL@%
  10637. %s parameter%@BO:   3ab6d@%%@NL@%
  10638. %@NL@%
  10639. %@2@%%@AB@%A%@AE@%%@EH@%%@NL@%
  10640. ───────────────────────────────────────────────────────────────────────────%@NL@%
  10641.  %@NL@%
  10642. Abandoning edits%@BO:   128e1@%%@NL@%
  10643. AddFile function%@BO:   51608@%%@NL@%
  10644. Adding lines%@BO:   16a0d@%%@NL@%
  10645. Arg function%@BO:    9154@%%@BO:   60c4c@%%@NL@%
  10646. Argcompile function%@BO:   60c4c@%%@NL@%
  10647. Arguments%@NL@%
  10648.      canceling%@BO:    9512@%%@NL@%
  10649.      cmdTable flags%@BO:   435cc@%%@NL@%
  10650.      cursor-movement type%@NL@%
  10651.           boxarg%@BO:   115ce@%%@BO:   1698d@%%@NL@%
  10652.           defined%@BO:    e83e@%%@NL@%
  10653.           linearg%@BO:   11355@%%@NL@%
  10654.           streamarg%@BO:   11a23@%%@NL@%
  10655.      introducing%@BO:    9154@%%@BO:    d6ea@%%@NL@%
  10656.      text type%@NL@%
  10657.           defined%@BO:    e83e@%%@NL@%
  10658.           markarg%@BO:    fa9b@%%@NL@%
  10659.           numarg%@BO:    f671@%%@BO:   17134@%%@NL@%
  10660.           textarg%@BO:    fec9@%%@NL@%
  10661. Arrow keys%@BO:    6026@%%@NL@%
  10662. askexit switch%@BO:   7225b@%%@NL@%
  10663. askrtn switch%@BO:   7225b@%%@NL@%
  10664. Assign command%@BO:   3b6af@%%@NL@%
  10665. Assign function%@BO:   2a35a@%%@BO:   2ae71@%%@BO:   33a2a@%%@BO:   60c4c@%%@NL@%
  10666. Assign pseudo file%@BO:   1406a@%%@BO:   2b1a0@%%@NL@%
  10667. Assignments%@NL@%
  10668.      functions%@BO:   2a304@%%@NL@%
  10669.      keystrokes%@BO:   29ab0@%%@NL@%
  10670.      macros%@BO:   2e15e@%%@NL@%
  10671.      switches and functions contrasted%@BO:   34590@%%@NL@%
  10672. Automatic command execution at start-up%@BO:   3e9db@%%@NL@%
  10673. autosave switch%@BO:   7225b@%%@NL@%
  10674. Autostart macro%@BO:   3e9db@%%@NL@%
  10675.  %@NL@%
  10676. %@2@%%@AB@%B%@AE@%%@EH@%%@NL@%
  10677. ───────────────────────────────────────────────────────────────────────────%@NL@%
  10678.  %@NL@%
  10679. backslash (\), regular expressions%@NL@%
  10680.      M 1.0 syntax%@BO:   24908@%%@NL@%
  10681. backslash, regular expressions%@BO:   21940@%%@NL@%
  10682. Backtab function%@BO:   60c4c@%%@NL@%
  10683. backup switch%@BO:   7225b@%%@NL@%
  10684. BadArg function%@BO:   51d7a@%%@NL@%
  10685. Base names, inserting into text%@BO:   17957@%%@NL@%
  10686. Begfile function%@BO:   15b0c@%%@BO:   60c4c@%%@NL@%
  10687. Beginning of file, moving to%@BO:   15b0c@%%@NL@%
  10688. Beginning of line, moving to%@BO:    88cf@%%@BO:   14d77@%%@NL@%
  10689. Begline function%@BO:   60c4c@%%@NL@%
  10690. Block operations%@NL@%
  10691.      moving%@BO:    a0da@%%@NL@%
  10692.      copying%@BO:   16fbc@%%@NL@%
  10693.      deleting%@BO:    9512@%%@BO:    a018@%%@BO:   16340@%%@NL@%
  10694.      inserting%@BO:    8b05@%%@BO:   16340@%%@NL@%
  10695.      merging%@BO:   13355@%%@BO:   17ec6@%%@NL@%
  10696.      moving%@BO:    9bb3@%%@NL@%
  10697.      multiple files%@BO:   1f605@%%@NL@%
  10698.      replacing%@BO:   19804@%%@NL@%
  10699.      searching%@BO:   19804@%%@NL@%
  10700. Blocks of text, large%@BO:   16b40@%%@NL@%
  10701. Boolean switches%@BO:   34391@%%@NL@%
  10702. Bottom of file, moving to%@BO:   15bca@%%@NL@%
  10703. Box mode%@BO:   10bc4@%%@NL@%
  10704. BOXARG argument type%@BO:   494fa@%%@NL@%
  10705. boxarg, argument type%@BO:   115ce@%%@NL@%
  10706. BOXARG, cmdTable flag%@BO:   435cc@%%@NL@%
  10707. BOXSTR, cmdTable flag%@BO:   435cc@%%@NL@%
  10708. Boxstream function%@BO:   10f81@%%@BO:   60c4c@%%@NL@%
  10709. Brackets (\lb\rb), finding%@BO:   5d2a3@%%@NL@%
  10710.  %@NL@%
  10711. %@2@%%@AB@%C%@AE@%%@EH@%%@NL@%
  10712. ───────────────────────────────────────────────────────────────────────────%@NL@%
  10713.  %@NL@%
  10714. C extensions%@NL@%
  10715.      compiling and linking%@BO:   4a7bb@%%@NL@%
  10716.      defined%@BO:   3fc94@%%@NL@%
  10717.      editing functions, low level%@NL@%
  10718.           Addfile%@BO:   46852@%%@NL@%
  10719.           AddFile%@BO:   51608@%%@NL@%
  10720.           BadArg%@BO:   51d7a@%%@NL@%
  10721.           CopyBox%@BO:   5238e@%%@NL@%
  10722.           CopyLine%@BO:   52d82@%%@NL@%
  10723.           CopyStream%@BO:   5376c@%%@NL@%
  10724.           DelBox%@BO:   53fde@%%@NL@%
  10725.           DelFile%@BO:   546d9@%%@NL@%
  10726.           DelLine%@BO:   54cad@%%@NL@%
  10727.           DelStream%@BO:   55335@%%@NL@%
  10728.           Display%@BO:   55abb@%%@NL@%
  10729.           DoMessage%@BO:   55f94@%%@NL@%
  10730.           fExecute%@BO:   563e5@%%@NL@%
  10731.           FileLength%@BO:   56b4d@%%@NL@%
  10732.           FileNameToHandle%@BO:   4655f@%%@BO:   49f36@%%@BO:   57001@%%@NL@%
  10733.           FileRead%@BO:   577dc@%%@NL@%
  10734.           FileWrite%@BO:   57f2d@%%@NL@%
  10735.           GetCursor%@BO:   505ed@%%@BO:   58886@%%@NL@%
  10736.           GetLine%@BO:   49e97@%%@BO:   58d95@%%@NL@%
  10737.           KbHook%@BO:   595af@%%@NL@%
  10738.           KbUnHook%@BO:   598b1@%%@NL@%
  10739.           MoveCur%@BO:   59ead@%%@NL@%
  10740.           pFileToTop%@BO:   5a4d2@%%@NL@%
  10741.           PutLine%@BO:   4a1fe@%%@NL@%
  10742.           Putline%@BO:   505ed@%%@NL@%
  10743.           PutLine%@BO:   5a976@%%@NL@%
  10744.           ReadChar%@BO:   5b0be@%%@NL@%
  10745.           ReadCmd%@BO:   5ba9c@%%@NL@%
  10746.           RemoveFile%@BO:   5be9e@%%@NL@%
  10747.           Replace%@BO:   5c466@%%@NL@%
  10748.           SetKey%@BO:   5cc35@%%@NL@%
  10749.      editing%@BO:   44a45@%%@NL@%
  10750.      functions, declaring%@BO:   41b89@%%@BO:   42a57@%%@NL@%
  10751.      guidelines for creating%@BO:   415be@%%@NL@%
  10752.      loading%@BO:   40dcc@%%@BO:   4b8c3@%%@NL@%
  10753.      programming%@BO:   3fc94@%%@NL@%
  10754.      sample program%@BO:   4d33a@%%@NL@%
  10755.      steps for development%@BO:   409a9@%%@BO:   40dcc@%%@NL@%
  10756.      switches, declaring%@BO:   41b89@%%@BO:   41eff@%%@NL@%
  10757.      types, function%@BO:   4319b@%%@NL@%
  10758. C library functions%@BO:   4fad5@%%@NL@%
  10759. Cancel function%@BO:    94b9@%%@BO:   60c4c@%%@NL@%
  10760. Cancelling arguments%@BO:    9512@%%@NL@%
  10761. carat (^), regular expressions%@NL@%
  10762.      M 1.0 syntax%@BO:   24908@%%@NL@%
  10763.      UNIX syntax%@BO:   21940@%%@NL@%
  10764. Carriage return%@NL@%
  10765.      Emacsnewl function%@BO:   5d2a3@%%@NL@%
  10766.      Newline function%@BO:   5f038@%%@NL@%
  10767. case switch%@BO:   7225b@%%@NL@%
  10768. Cdelete function%@BO:   60c4c@%%@NL@%
  10769. Clipboard pseudo file%@BO:   1406a@%%@NL@%
  10770. Closing a window%@BO:   1f027@%%@NL@%
  10771. cmdTable flags%@NL@%
  10772.      (table)%@BO:   435cc@%%@NL@%
  10773.      arguments%@BO:   435cc@%%@NL@%
  10774. cmdTable, described%@BO:   42aa3@%%@NL@%
  10775. Color switches%@NL@%
  10776.      errcolor%@BO:   368ed@%%@NL@%
  10777.      fgcolor%@BO:   35acc@%%@BO:   35d72@%%@NL@%
  10778.      hgcolor%@BO:   368ed@%%@NL@%
  10779.      infcolor%@BO:   368ed@%%@NL@%
  10780.      selcolor%@BO:   368ed@%%@NL@%
  10781.      stacolor%@BO:   368ed@%%@NL@%
  10782.      wdcolor%@BO:   368ed@%%@NL@%
  10783. Colors. %@AI@%See%@AE@% Setting screen colors%@NL@%
  10784. Command line%@BO:    bc2e@%%@NL@%
  10785. Commands, Assign%@BO:   3b6af@%%@NL@%
  10786. Comments%@BO:   3dbb2@%%@NL@%
  10787. Compile function%@BO:   1bf47@%%@BO:   60c4c@%%@NL@%
  10788. Compile pseudo file%@BO:   1406a@%%@NL@%
  10789. Compilers supported%@BO:   1d97e@%%@NL@%
  10790. Compiling%@NL@%
  10791.      compilers, invoking%@BO:   1c335@%%@NL@%
  10792.      editor, with%@BO:   1bf47@%%@NL@%
  10793.      error output%@BO:   1d528@%%@NL@%
  10794.      extensions%@BO:   4ab20@%%@NL@%
  10795.      utilities, invoking%@BO:   1c564@%%@NL@%
  10796. Conditional macros%@BO:   320fc@%%@NL@%
  10797. Configuring the editor%@NL@%
  10798.      switches, with%@BO:   33a2a@%%@NL@%
  10799.      TOOLS.INI file, with%@BO:   3b535@%%@NL@%
  10800. Context-sensitive Help%@BO:    b59d@%%@NL@%
  10801. Copy function%@BO:   16fbc@%%@BO:   60c4c@%%@NL@%
  10802. CopyBox function%@BO:   5238e@%%@NL@%
  10803. Copying%@BO:   16f75@%%@NL@%
  10804. CopyLine function%@BO:   52d82@%%@NL@%
  10805. CopyStream function%@BO:   5376c@%%@NL@%
  10806. Curdate function%@BO:   17957@%%@BO:   60c4c@%%@NL@%
  10807. Curday function%@BO:   17957@%%@BO:   60c4c@%%@NL@%
  10808. Curfile function%@BO:   17957@%%@BO:   60c4c@%%@NL@%
  10809. Curfileext function%@BO:   17957@%%@BO:   60c4c@%%@NL@%
  10810. Curfilenam function%@BO:   17957@%%@BO:   60c4c@%%@NL@%
  10811. Cursor-movement type arguments%@NL@%
  10812.      boxarg%@BO:   115ce@%%@BO:   1698d@%%@NL@%
  10813.      defined%@BO:    e83e@%%@NL@%
  10814.      linearg%@BO:   11355@%%@NL@%
  10815.      streamarg%@BO:   11a23@%%@NL@%
  10816. Cursor%@NL@%
  10817.      displaying position of%@BO:   353da@%%@NL@%
  10818.      initial position%@BO:   10988@%%@NL@%
  10819.      movement%@NL@%
  10820.           backtab%@BO:   5d2a3@%%@BO:   60c4c@%%@NL@%
  10821.           down%@BO:   5d2a3@%%@BO:   60c4c@%%@NL@%
  10822.           left%@BO:   5d2a3@%%@BO:   60c4c@%%@NL@%
  10823.           macros, in%@BO:   2f78b@%%@NL@%
  10824.           right%@BO:   5d2a3@%%@BO:   60c4c@%%@NL@%
  10825.           tab%@BO:   5d2a3@%%@BO:   5f038@%%@NL@%
  10826.           up%@BO:   5d2a3@%%@BO:   60c4c@%%@NL@%
  10827. CURSORFUNC, cmdTable flag%@BO:   435cc@%%@NL@%
  10828. Curtime function%@BO:   17957@%%@BO:   60c4c@%%@NL@%
  10829. Customizing editor%@NL@%
  10830.      assignments%@BO:   29476@%%@NL@%
  10831.      %@AI@%See also%@AE@% C extensions%@NL@%
  10832.      described%@BO:   292f2@%%@NL@%
  10833.      macros%@BO:   2ccc4@%%@NL@%
  10834.      TOOLS.INI, using%@BO:   2b024@%%@NL@%
  10835. %@NL@%
  10836. %@2@%%@AB@%D%@AE@%%@EH@%%@NL@%
  10837. ───────────────────────────────────────────────────────────────────────────%@NL@%
  10838. %@NL@%
  10839. Date, inserting into text%@BO:   17957@%%@BO:   60c4c@%%@NL@%
  10840. Day, inserting into text%@BO:   17957@%%@BO:   60c4c@%%@NL@%
  10841. Default, TOOLS.INI, using to set%@BO:   3b535@%%@NL@%
  10842. DelBox function%@BO:   53fde@%%@NL@%
  10843. Delete function%@BO:    8e12@%%@BO:    9da7@%%@BO:   16414@%%@BO:   60c4c@%%@NL@%
  10844. Deleting%@NL@%
  10845.      canceling deletion%@BO:    9512@%%@NL@%
  10846.      lines%@BO:    9da7@%%@NL@%
  10847.      text%@BO:   162ea@%%@NL@%
  10848.      words%@BO:    8e12@%%@NL@%
  10849. DelFile function%@BO:   546d9@%%@NL@%
  10850. DelLine function%@BO:   54cad@%%@NL@%
  10851. DelStream function%@BO:   55335@%%@NL@%
  10852. Direction keys%@BO:    6026@%%@BO:   14957@%%@NL@%
  10853. Disabling keystrokes%@BO:   2bbd2@%%@NL@%
  10854. Discarding edits%@BO:   128e1@%%@NL@%
  10855. Display function%@BO:   55abb@%%@NL@%
  10856. displaycursor switch%@BO:   7225b@%%@NL@%
  10857. Displaying the cursor%@BO:   353da@%%@NL@%
  10858. Document conventions%@BO:    5f30@%%@NL@%
  10859. dollar sign ($), regular expressions%@NL@%
  10860.      M 1.0 syntax%@BO:   24908@%%@NL@%
  10861.      UNIX syntax%@BO:   21940@%%@NL@%
  10862. DoMessage function%@BO:   55f94@%%@NL@%
  10863. DOS environment variable. %@AI@%See%@AE@% Environment variable%@NL@%
  10864. DOS shell. %@AI@%See%@AE@% Shell function%@NL@%
  10865. DOS wildcards%@BO:    c693@%%@BO:   135c3@%%@NL@%
  10866. DOS-specific initialization%@BO:   3ce83@%%@NL@%
  10867. Down function%@BO:   15095@%%@BO:   60c4c@%%@NL@%
  10868. Drawing window borders, color%@BO:   368ed@%%@NL@%
  10869. Dynamic compile log%@BO:   1e543@%%@NL@%
  10870. %@NL@%
  10871. %@2@%%@AB@%E%@AE@%%@EH@%%@NL@%
  10872. ───────────────────────────────────────────────────────────────────────────%@NL@%
  10873. %@NL@%
  10874. Editing%@NL@%
  10875.      copying%@BO:   16fbc@%%@NL@%
  10876.      deleting%@NL@%
  10877.           cancelling deletion%@BO:    9512@%%@NL@%
  10878.           lines%@BO:    9da7@%%@NL@%
  10879.           text%@BO:   162ea@%%@NL@%
  10880.           words%@BO:    8e12@%%@NL@%
  10881.      exiting andsaving%@BO:    af34@%%@NL@%
  10882.      inserting%@BO:    8b05@%%@BO:   162ea@%%@BO:   16340@%%@NL@%
  10883.      merging%@BO:   13355@%%@NL@%
  10884.      moving%@NL@%
  10885.           text%@BO:    9bb3@%%@BO:    a0da@%%@BO:   16f75@%%@NL@%
  10886.           through files%@BO:   14909@%%@BO:   15d4c@%%@NL@%
  10887.      multiple files%@BO:   1f605@%%@NL@%
  10888.      overtype mode%@BO:    85e5@%%@NL@%
  10889.      pasting%@BO:    a0da@%%@BO:   17ec6@%%@NL@%
  10890.      replacing%@BO:    85e5@%%@BO:   197b4@%%@BO:   19804@%%@BO:   1b205@%%@NL@%
  10891.      scrolling%@NL@%
  10892.           control%@BO:   1527e@%%@NL@%
  10893.           edge of screen%@BO:   1503c@%%@NL@%
  10894.           page%@BO:   155e1@%%@NL@%
  10895.           switches%@BO:   356ce@%%@NL@%
  10896.           %@AI@%See also%@AE@% Switches
  10897.      search and replace%@BO:   197b4@%%@NL@%
  10898.      searching%@BO:    a3e8@%%@BO:   19804@%%@BO:   1a2e0@%%@BO:   26c13@%%@NL@%
  10899.      starting editor%@BO:    7746@%%@NL@%
  10900.      text arguments%@BO:    f20b@%%@NL@%
  10901.      windows%@BO:   1ec4c@%%@NL@%
  10902. editreadonly switch%@BO:   7225b@%%@NL@%
  10903. Edits, discarding%@BO:   128e1@%%@NL@%
  10904. Emacsdel function%@BO:   60c4c@%%@NL@%
  10905. Emacsnewl function%@BO:   60c4c@%%@NL@%
  10906. End of file, moving to%@BO:   15bca@%%@NL@%
  10907. End of line, moving to%@BO:   14957@%%@NL@%
  10908. Endfile function%@BO:   15bca@%%@BO:   60c4c@%%@NL@%
  10909. Endline function%@BO:   60c4c@%%@NL@%
  10910. entab switch%@BO:   38b68@%%@BO:   7225b@%%@NL@%
  10911. enterinsmode switch%@BO:   7225b@%%@NL@%
  10912. Environment function%@BO:   60c4c@%%@NL@%
  10913. Environment variable%@NL@%
  10914.      loading a file, used for%@BO:   138ea@%%@NL@%
  10915.      merging a file, used for%@BO:   13ab0@%%@NL@%
  10916.      switch settings, in%@BO:   3b101@%%@NL@%
  10917.      switches,used with%@BO:   3b262@%%@NL@%
  10918. errcolor switch%@BO:   35c03@%%@BO:   368ed@%%@BO:   7225b@%%@NL@%
  10919. Error messages%@BO:   76d41@%%@NL@%
  10920. Error output%@BO:   1d4d9@%%@NL@%
  10921. errprompt switch%@BO:   7225b@%%@NL@%
  10922. Execute function%@BO:   17c17@%%@BO:   2ffe3@%%@BO:   60c4c@%%@NL@%
  10923. Execution of commands at start-up%@BO:   3e9db@%%@NL@%
  10924. Exit function%@BO:   60c4c@%%@NL@%
  10925. Exiting and saving%@BO:    af34@%%@NL@%
  10926. Exiting without saving%@BO:   128e1@%%@NL@%
  10927. Exiting%@NL@%
  10928.      completely%@BO:   60c4c@%%@NL@%
  10929.      Help%@BO:    b9ae@%%@NL@%
  10930.      moving to next file, and%@BO:   128e1@%%@NL@%
  10931. EXP.EXE file%@BO:   76ad7@%%@NL@%
  10932. Expressions%@NL@%
  10933.      predefined regular%@BO:   2885d@%%@NL@%
  10934.      regular%@BO:   20760@%%@NL@%
  10935.      tagged%@BO:   231bc@%%@BO:   23b94@%%@BO:   27441@%%@BO:   27df8@%%@NL@%
  10936. EXT.H file%@BO:   4055d@%%@BO:   4162e@%%@NL@%
  10937. Extensions, file%@BO:   3d62e@%%@NL@%
  10938. Extensions. %@AI@%See%@AE@% C extensions%@NL@%
  10939. EXTHDR.OBJ file%@BO:   4055d@%%@BO:   40dcc@%%@NL@%
  10940. EXTHDRP.OBJ file%@BO:   4055d@%%@BO:   40dcc@%%@NL@%
  10941. extmake switch%@BO:   7225b@%%@NL@%
  10942. %@NL@%
  10943. %@2@%%@AB@%F%@AE@%%@EH@%%@NL@%
  10944. ───────────────────────────────────────────────────────────────────────────%@NL@%
  10945. %@NL@%
  10946. fExecute function%@BO:   563e5@%%@NL@%
  10947. fgcolor switch%@BO:   35acc@%%@BO:   7225b@%%@NL@%
  10948. File extensions%@NL@%
  10949.      inserting into text%@BO:   17957@%%@NL@%
  10950.      syntax%@BO:   3d62e@%%@NL@%
  10951. File history. %@AI@%See%@AE@% Information-file pseudo-file%@NL@%
  10952. File markers%@NL@%
  10953.      commands%@BO:   1839c@%%@NL@%
  10954.      defined%@BO:   1839c@%%@NL@%
  10955.      functions used with%@BO:   18cab@%%@NL@%
  10956. File name, inserting into text%@BO:   17957@%%@NL@%
  10957. File operations%@BO:   127d4@%%@NL@%
  10958. File position, displaying%@BO:   353da@%%@NL@%
  10959. File-list pseudo file%@BO:   1406a@%%@NL@%
  10960. FileLength function%@BO:   56b4d@%%@NL@%
  10961. FileNameToHandle function%@BO:   4655f@%%@BO:   57001@%%@NL@%
  10962. FileRead function%@BO:   577dc@%%@NL@%
  10963. Files%@NL@%
  10964.      EXTHDR.OBJ%@BO:   4055d@%%@NL@%
  10965.      EXP.EXE%@BO:   76ad7@%%@NL@%
  10966.      EXT.H%@BO:   4055d@%%@NL@%
  10967.      EXTHDR.OBJ%@BO:   40dcc@%%@NL@%
  10968.      EXTHDRP.OBJ%@BO:   4055d@%%@BO:   40dcc@%%@NL@%
  10969.      loading%@BO:    c38d@%%@NL@%
  10970.      M.EXE%@BO:    7792@%%@BO:    bc2e@%%@BO:   40a36@%%@NL@%
  10971.      M.TMP%@BO:   1f901@%%@NL@%
  10972.      MEP.EXE%@BO:    bc2e@%%@NL@%
  10973.      multiple%@BO:   1f30c@%%@NL@%
  10974.      SKEL.C%@BO:   4055d@%%@NL@%
  10975.      TOOLS.INI%@NL@%
  10976.           comments%@BO:   3dbb2@%%@NL@%
  10977.           defined%@BO:   33be7@%%@NL@%
  10978.           line continuation%@BO:   3dea7@%%@NL@%
  10979.           sample%@BO:   3b535@%%@NL@%
  10980.           structure%@BO:   3c086@%%@NL@%
  10981.      UNDEL.EXE%@BO:   76895@%%@NL@%
  10982. filetab switch%@BO:   38b68@%%@BO:   7225b@%%@NL@%
  10983. FileWrite function%@BO:   57f2d@%%@NL@%
  10984. Function assignments%@NL@%
  10985.      graphic%@BO:   2c0ab@%%@NL@%
  10986.      keys, numeric-keypad%@BO:    6026@%%@BO:   2a5d3@%%@NL@%
  10987.      making%@BO:   2a304@%%@NL@%
  10988.      removing%@BO:   2bbd2@%%@NL@%
  10989.      viewing%@BO:   2b13c@%%@NL@%
  10990. Functions, C library%@BO:   4fad5@%%@NL@%
  10991. Functions%@NL@%
  10992.      AddFile%@BO:   51608@%%@NL@%
  10993.      Arg%@BO:    9154@%%@BO:   60c4c@%%@NL@%
  10994.      Argcompile%@BO:   60c4c@%%@NL@%
  10995.      Assign%@BO:   2a35a@%%@BO:   2ae71@%%@BO:   33a2a@%%@BO:   60c4c@%%@NL@%
  10996.      assignment of%@BO:   2a304@%%@NL@%
  10997.      Backtab%@BO:   60c4c@%%@NL@%
  10998.      BadArg%@BO:   51d7a@%%@NL@%
  10999.      Begfile%@BO:   15b0c@%%@BO:   60c4c@%%@NL@%
  11000.      Begline%@BO:   60c4c@%%@NL@%
  11001.      Boxstream%@BO:   10f81@%%@BO:   60c4c@%%@NL@%
  11002.      Cancel%@BO:    94b9@%%@BO:   60c4c@%%@NL@%
  11003.      Cdelete%@BO:   60c4c@%%@NL@%
  11004.      Compile%@BO:   1c290@%%@BO:   60c4c@%%@NL@%
  11005.      Copy%@BO:   16f75@%%@NL@%
  11006.      copy%@BO:   16fbc@%%@NL@%
  11007.      Copy%@BO:   60c4c@%%@NL@%
  11008.      CopyBox%@BO:   5238e@%%@NL@%
  11009.      CopyLine%@BO:   52d82@%%@NL@%
  11010.      CopyStream%@BO:   5376c@%%@NL@%
  11011.      Curdate%@BO:   17957@%%@BO:   60c4c@%%@NL@%
  11012.      Curday%@BO:   17957@%%@BO:   60c4c@%%@NL@%
  11013.      Curfile%@BO:   17957@%%@BO:   60c4c@%%@NL@%
  11014.      Curfileext%@BO:   17957@%%@BO:   60c4c@%%@NL@%
  11015.      Curfilenam%@BO:   17957@%%@BO:   60c4c@%%@NL@%
  11016.      Curtime%@BO:   17957@%%@BO:   60c4c@%%@NL@%
  11017.      declaring%@BO:   44a45@%%@NL@%
  11018.      defined%@BO:    70bc@%%@NL@%
  11019.      DelBox%@BO:   53fde@%%@NL@%
  11020.      Delete%@BO:    8e12@%%@BO:    9da7@%%@BO:   16414@%%@BO:   60c4c@%%@NL@%
  11021.      DelFile%@BO:   546d9@%%@NL@%
  11022.      DelLine%@BO:   54cad@%%@NL@%
  11023.      DelStream%@BO:   55335@%%@NL@%
  11024.      Display%@BO:   55abb@%%@NL@%
  11025.      DoMessage%@BO:   55f94@%%@NL@%
  11026.      Down%@BO:   15095@%%@BO:   60c4c@%%@NL@%
  11027.      Emacscdel%@BO:   60c4c@%%@NL@%
  11028.      Emacsnewl%@BO:   60c4c@%%@NL@%
  11029.      Endfile%@BO:   15bca@%%@BO:   60c4c@%%@NL@%
  11030.      Endline%@BO:   60c4c@%%@NL@%
  11031.      Environment%@BO:   60c4c@%%@NL@%
  11032.      Execute%@BO:   60c4c@%%@NL@%
  11033.      Exit%@BO:   60c4c@%%@NL@%
  11034.      fExecute%@BO:   563e5@%%@NL@%
  11035.      FileLength%@BO:   56b4d@%%@NL@%
  11036.      FileNameToHandle%@BO:   4655f@%%@BO:   57001@%%@NL@%
  11037.      FileRead%@BO:   577dc@%%@NL@%
  11038.      FileWrite%@BO:   57f2d@%%@NL@%
  11039.      GetCursor%@BO:   58886@%%@NL@%
  11040.      GetLine%@BO:   49e97@%%@BO:   58d95@%%@NL@%
  11041.      Graphic%@BO:   2c71f@%%@NL@%
  11042.      Home%@BO:   60c4c@%%@NL@%
  11043.      Information%@BO:   1f605@%%@BO:   60c4c@%%@NL@%
  11044.      Initialize%@BO:   3e7ee@%%@BO:   60c4c@%%@NL@%
  11045.      Insert%@BO:   60c4c@%%@NL@%
  11046.      Insertmode%@BO:    8b05@%%@BO:   60c4c@%%@NL@%
  11047.      KbHook%@BO:   595af@%%@NL@%
  11048.      KbUnHook%@BO:   598b1@%%@NL@%
  11049.      Lastselect%@BO:   110d1@%%@BO:   60c4c@%%@NL@%
  11050.      Lasttext%@BO:    f570@%%@BO:   60c4c@%%@NL@%
  11051.      Ldelete%@BO:   16a0d@%%@BO:   2f8ae@%%@BO:   60c4c@%%@NL@%
  11052.      Left%@BO:   15095@%%@BO:   60c4c@%%@NL@%
  11053.      Linsert%@BO:   16a0d@%%@BO:   60c4c@%%@NL@%
  11054.      Mark%@BO:   15d4c@%%@BO:   185f6@%%@BO:   60c4c@%%@NL@%
  11055.      Message%@BO:   60c4c@%%@NL@%
  11056.      Meta%@BO:   60c4c@%%@NL@%
  11057.      Mgrep%@BO:   60c4c@%%@NL@%
  11058.      Mgreplist%@BO:   1ab64@%%@NL@%
  11059.      Mlines%@BO:   60c4c@%%@NL@%
  11060.      MoveCur%@BO:   59ead@%%@NL@%
  11061.      Mpage%@BO:   154eb@%%@BO:   60c4c@%%@NL@%
  11062.      Mpara%@BO:   60c4c@%%@NL@%
  11063.      Mreplace%@BO:   60c4c@%%@NL@%
  11064.      Msearch%@BO:   19d88@%%@BO:   60c4c@%%@NL@%
  11065.      Mword%@BO:   15d4c@%%@BO:   60c4c@%%@NL@%
  11066.      Newline%@BO:   60c4c@%%@NL@%
  11067.      Nextmsg%@BO:   60c4c@%%@NL@%
  11068.      Noedit%@BO:   60c4c@%%@NL@%
  11069.      Paste%@BO:    a0da@%%@BO:   174fa@%%@BO:   60c4c@%%@NL@%
  11070.      Pbal%@BO:   60c4c@%%@NL@%
  11071.      pFileToTop%@BO:   5a4d2@%%@NL@%
  11072.      Plines%@BO:   60c4c@%%@NL@%
  11073.      Ppage%@BO:   154eb@%%@BO:   60c4c@%%@NL@%
  11074.      Ppara%@BO:   60c4c@%%@NL@%
  11075.      Print%@BO:   1fcd8@%%@BO:   60c4c@%%@NL@%
  11076.      Psearch%@BO:   19804@%%@BO:   60c4c@%%@NL@%
  11077.      PutLine%@BO:   4a1fe@%%@BO:   5a976@%%@NL@%
  11078.      Pword%@BO:   15d4c@%%@BO:   60c4c@%%@NL@%
  11079.      Qreplace%@BO:   1ba49@%%@BO:   60c4c@%%@NL@%
  11080.      Quote%@BO:   2c5a6@%%@BO:   60c4c@%%@NL@%
  11081.      ReadChar%@BO:   5b0be@%%@NL@%
  11082.      ReadCmd%@BO:   5ba9c@%%@NL@%
  11083.      Record%@BO:   2d29c@%%@BO:   60c4c@%%@NL@%
  11084.      Refresh%@BO:   128e1@%%@BO:   60c4c@%%@NL@%
  11085.      RemoveFile%@BO:   5be9e@%%@NL@%
  11086.      Repeat%@BO:   60c4c@%%@NL@%
  11087.      Replace%@NL@%
  11088.           editing function%@BO:   1b205@%%@BO:   60c4c@%%@NL@%
  11089.           extension function%@BO:   5c466@%%@NL@%
  11090.      Restcur%@BO:   19402@%%@BO:   2f9b5@%%@BO:   60c4c@%%@NL@%
  11091.      Right%@BO:   15095@%%@BO:   60c4c@%%@NL@%
  11092.      Saveall%@BO:   60c4c@%%@NL@%
  11093.      Savecur%@BO:   19402@%%@BO:   2ade8@%%@BO:   2f9b5@%%@BO:   60c4c@%%@NL@%
  11094.      Sdelete%@BO:   2f5d4@%%@BO:   60c4c@%%@NL@%
  11095.      Searchall%@BO:   1a791@%%@BO:   60c4c@%%@NL@%
  11096.      Setfile%@BO:   1356e@%%@BO:   1f360@%%@BO:   60c4c@%%@NL@%
  11097.      SetKey%@BO:   5cc35@%%@NL@%
  11098.      Setwindow%@BO:   60c4c@%%@NL@%
  11099.      Shell%@BO:   60c4c@%%@NL@%
  11100.      Sinsert%@BO:   60c4c@%%@NL@%
  11101.      Tab%@BO:   5f038@%%@BO:   60c4c@%%@NL@%
  11102.      Tell%@BO:   2b9eb@%%@BO:   2d034@%%@BO:   60c4c@%%@NL@%
  11103.      Unassigned%@BO:   2bc22@%%@NL@%
  11104.      Undo%@BO:    964e@%%@BO:   60c4c@%%@NL@%
  11105.      Up%@BO:   15095@%%@BO:   60c4c@%%@NL@%
  11106.      Whenloaded%@BO:   40dcc@%%@BO:   41dbb@%%@BO:   44776@%%@NL@%
  11107.      Window%@BO:   1eea0@%%@BO:   60c4c@%%@NL@%
  11108. %@NL@%
  11109. %@2@%%@AB@%G%@AE@%%@EH@%%@NL@%
  11110. ───────────────────────────────────────────────────────────────────────────%@NL@%
  11111. %@NL@%
  11112. GetCursor function%@BO:   58886@%%@NL@%
  11113. GetLine function%@BO:   49e97@%%@BO:   58d95@%%@NL@%
  11114. Graphic function%@BO:   2c71f@%%@NL@%
  11115. %@NL@%
  11116. %@2@%%@AB@%H%@AE@%%@EH@%%@NL@%
  11117. ───────────────────────────────────────────────────────────────────────────%@NL@%
  11118. %@NL@%
  11119. Height of screen%@BO:   3a3f0@%%@NL@%
  11120. height switch%@BO:   3a3f0@%%@BO:   7225b@%%@NL@%
  11121. Help function%@BO:    b16a@%%@NL@%
  11122. Help, configuring%@BO:   3eb8b@%%@NL@%
  11123. helpboldcolor switch%@BO:   7225b@%%@NL@%
  11124. helpfiles switch%@BO:   7225b@%%@NL@%
  11125. helpitalcolor switch%@BO:   7225b@%%@NL@%
  11126. helpundcolor switch%@BO:   7225b@%%@NL@%
  11127. helpwarncolor switch%@BO:   7225b@%%@NL@%
  11128. helpwindow switch%@BO:   7225b@%%@NL@%
  11129. helpwindow switches%@BO:   3756d@%%@NL@%
  11130. hgcolor switch%@BO:   35c03@%%@BO:   368ed@%%@BO:   7225b@%%@NL@%
  11131. Highlighting%@BO:   10251@%%@BO:   10988@%%@NL@%
  11132. hike switch%@BO:   7225b@%%@NL@%
  11133. Home function%@BO:   60c4c@%%@NL@%
  11134. horizontal scrolling%@BO:   3596c@%%@NL@%
  11135. hscroll switch%@BO:   3596c@%%@BO:   7225b@%%@NL@%
  11136. %@NL@%
  11137. %@2@%%@AB@%I%@AE@%%@EH@%%@NL@%
  11138. ───────────────────────────────────────────────────────────────────────────%@NL@%
  11139. %@NL@%
  11140. infcolor switch%@BO:   35c03@%%@BO:   368ed@%%@BO:   7225b@%%@NL@%
  11141. Information function%@BO:   1f605@%%@BO:   60c4c@%%@NL@%
  11142. Information-file pseudo file%@BO:   1406a@%%@NL@%
  11143. Initial cursor position%@BO:   10988@%%@NL@%
  11144. Initialization file. %@AI@%See%@AE@% TOOLS.INI file%@NL@%
  11145. Initialize function%@BO:   3e7ee@%%@BO:   60c4c@%%@NL@%
  11146. Initializing editor%@BO:   3b535@%%@NL@%
  11147. Insert function%@BO:   60c4c@%%@NL@%
  11148. Insert mode%@BO:    85e5@%%@NL@%
  11149. Inserting%@NL@%
  11150.      another file%@BO:   128e1@%%@BO:   1f30c@%%@NL@%
  11151.      lines%@BO:    e090@%%@BO:   16a0d@%%@NL@%
  11152.      program output%@BO:   17f5c@%%@NL@%
  11153.      spaces%@BO:    e090@%%@NL@%
  11154.      text%@BO:    8b05@%%@BO:   162ea@%%@NL@%
  11155. Insertmode, setting on start-up%@BO:   7225b@%%@NL@%
  11156. Insertmode%@NL@%
  11157.      function%@BO:    8b05@%%@BO:   60c4c@%%@NL@%
  11158.      macro%@BO:   329d5@%%@NL@%
  11159. Installing editor%@BO:    7792@%%@NL@%
  11160. %@NL@%
  11161. %@2@%%@AB@%K%@AE@%%@EH@%%@NL@%
  11162. ───────────────────────────────────────────────────────────────────────────%@NL@%
  11163. %@NL@%
  11164. KbHook function%@BO:   595af@%%@NL@%
  11165. KbUnHook function%@BO:   598b1@%%@NL@%
  11166. KEEPMETA, cmdTable flag%@BO:   435cc@%%@NL@%
  11167. keyboard switch%@BO:   7225b@%%@NL@%
  11168. Keys, numeric-keypad%@BO:    6026@%%@BO:   2a5d3@%%@NL@%
  11169. Keystrokes%@NL@%
  11170.      default%@BO:   5f038@%%@NL@%
  11171.      disabling%@BO:   2bbd2@%%@NL@%
  11172.      function assignments%@BO:   29ab0@%%@NL@%
  11173.      macros%@BO:   2e15e@%%@NL@%
  11174.      making literal%@BO:   2c0ab@%%@NL@%
  11175.      recognized by editor%@BO:   2c100@%%@NL@%
  11176. %@NL@%
  11177. %@2@%%@AB@%L%@AE@%%@EH@%%@NL@%
  11178. ───────────────────────────────────────────────────────────────────────────%@NL@%
  11179. %@NL@%
  11180. Languages, customizing files for%@BO:   3d7b3@%%@NL@%
  11181. Large blocks of text, marking%@BO:   16b40@%%@NL@%
  11182. Lastselect function%@BO:   110d1@%%@BO:   60c4c@%%@NL@%
  11183. Lasttext function%@BO:    f570@%%@BO:   60c4c@%%@NL@%
  11184. Ldelete function%@BO:   16a0d@%%@BO:   2f8ae@%%@BO:   60c4c@%%@NL@%
  11185. Leaving Help%@BO:    b9ae@%%@NL@%
  11186. Left function%@BO:   15095@%%@BO:   60c4c@%%@NL@%
  11187. Library functions, C%@BO:   4fad5@%%@NL@%
  11188. Line continuation%@BO:   3dea7@%%@NL@%
  11189. Line number, moving to%@BO:   1884d@%%@NL@%
  11190. linearg, argument type%@BO:   11355@%%@NL@%
  11191. LINEARG, argument type%@BO:   4858c@%%@NL@%
  11192. LINEARG, cmdTable flag%@BO:   435cc@%%@NL@%
  11193. Linking extensions%@BO:   4ab20@%%@NL@%
  11194. Linsert function%@BO:   16a0d@%%@BO:   60c4c@%%@NL@%
  11195. List of assignments%@BO:   1406a@%%@NL@%
  11196. Literal keystrokes%@NL@%
  11197.      defined%@BO:   2c1d8@%%@NL@%
  11198.      defining keys as%@BO:   2c0ab@%%@NL@%
  11199. load switch%@BO:   40dcc@%%@BO:   7225b@%%@NL@%
  11200. Loading%@NL@%
  11201.      extensions%@BO:   40dcc@%%@BO:   4b8c3@%%@NL@%
  11202.      files%@BO:    c38d@%%@BO:   13355@%%@NL@%
  11203. %@NL@%
  11204. %@2@%%@AB@%M%@AE@%%@EH@%%@NL@%
  11205. ───────────────────────────────────────────────────────────────────────────%@NL@%
  11206. %@NL@%
  11207. M 1.0 syntax, regular expression%@BO:   24293@%%@NL@%
  11208. M 1.0 syntax%@NL@%
  11209.      regular expressions%@BO:   20eeb@%%@NL@%
  11210. M.EXE file%@BO:    7792@%%@BO:    bc2e@%%@BO:   40a36@%%@NL@%
  11211. M.TMP file%@BO:   1f901@%%@NL@%
  11212. Macros%@NL@%
  11213.      autostart%@BO:   3e9db@%%@NL@%
  11214.      conditional operations%@BO:   320fc@%%@NL@%
  11215.      defining%@BO:   2ccc4@%%@NL@%
  11216.      entering%@BO:   2def3@%%@NL@%
  11217.      handling prompts%@BO:   30928@%%@NL@%
  11218.      insertmode%@BO:   329d5@%%@NL@%
  11219.      lists%@BO:   2eac6@%%@NL@%
  11220.      mgreplist%@BO:   1ad57@%%@NL@%
  11221.      record and playback%@BO:   2d29c@%%@NL@%
  11222.      RECORDVALUE%@BO:   2d4c0@%%@NL@%
  11223.      references to other macros%@BO:   30352@%%@NL@%
  11224. Mark function%@BO:   15d4c@%%@BO:   185f6@%%@BO:   60c4c@%%@NL@%
  11225. markarg, argument type%@BO:    fa9b@%%@NL@%
  11226. MARKARG, cmdTable flag%@BO:   435cc@%%@NL@%
  11227. markfile switch%@BO:   192a8@%%@BO:   7225b@%%@NL@%
  11228. Marking large amounts of text%@BO:   16b40@%%@NL@%
  11229. Matching%@NL@%
  11230.      maximal%@BO:   26d87@%%@NL@%
  11231.      method%@BO:   26bc3@%%@NL@%
  11232.      minimal%@BO:   26d87@%%@NL@%
  11233. MEP.EXE file%@BO:    7792@%%@NL@%
  11234. Merging%@BO:   13355@%%@BO:   17ec6@%%@NL@%
  11235. Message function%@BO:   60c4c@%%@NL@%
  11236. Messages%@BO:   76d41@%%@NL@%
  11237. Meta function%@BO:   60c4c@%%@NL@%
  11238. Mgrep function%@BO:   60c4c@%%@NL@%
  11239. Mgreplist%@NL@%
  11240.      function%@BO:   1ab64@%%@NL@%
  11241.      macro%@BO:   1ad57@%%@NL@%
  11242. Mlines function%@BO:   60c4c@%%@NL@%
  11243. Mode%@NL@%
  11244.      box%@BO:   10bc4@%%@NL@%
  11245.      stream%@BO:   10bc4@%%@NL@%
  11246. MODIFIES, cmdTable flag%@BO:   435cc@%%@NL@%
  11247. MoveCur function%@BO:   59ead@%%@NL@%
  11248. Moving cursor. %@AI@%See%@AE@% Cursor movement%@NL@%
  11249. Moving%@NL@%
  11250.      backward one paragraph%@BO:   15d4c@%%@NL@%
  11251.      backward one word%@BO:   15d4c@%%@NL@%
  11252.      beginning of line, to%@BO:    88cf@%%@BO:   14d77@%%@NL@%
  11253.      between windows%@BO:   1eea0@%%@NL@%
  11254.      end of file, to%@BO:   15bca@%%@NL@%
  11255.      end of line, to%@BO:   14957@%%@NL@%
  11256.      file markers, using%@BO:   1839c@%%@NL@%
  11257.      files, through%@BO:   14909@%%@BO:   15d4c@%%@NL@%
  11258.      forward one paragraph%@BO:   15d4c@%%@NL@%
  11259.      Help, through%@BO:    b81a@%%@NL@%
  11260.      line numbers, to%@BO:   1884d@%%@NL@%
  11261.      text%@BO:    9bb3@%%@NL@%
  11262.      top of file, to%@BO:   15b0c@%%@NL@%
  11263.      window down%@BO:   60c4c@%%@NL@%
  11264.      window up%@BO:   60c4c@%%@NL@%
  11265. Mpage function%@BO:   154eb@%%@BO:   60c4c@%%@NL@%
  11266. Mpara function%@BO:   15d4c@%%@BO:   60c4c@%%@NL@%
  11267. Mreplace function%@BO:   60c4c@%%@NL@%
  11268. Msearch function%@BO:   19d88@%%@BO:   60c4c@%%@NL@%
  11269. Multiple files%@BO:   1f30c@%%@NL@%
  11270. Mword function%@BO:   15d4c@%%@BO:   60c4c@%%@NL@%
  11271. %@NL@%
  11272. %@2@%%@AB@%N%@AE@%%@EH@%%@NL@%
  11273. ───────────────────────────────────────────────────────────────────────────%@NL@%
  11274. %@NL@%
  11275. Newline function%@BO:   60c4c@%%@NL@%
  11276.      %@AI@%See Also%@AE@% Emacsnewl function%@NL@%
  11277. Nextmsg function%@BO:   1dc62@%%@BO:   60c4c@%%@NL@%
  11278. NOARG, cmdTable flag%@BO:   435cc@%%@NL@%
  11279. Noedit function%@BO:   60c4c@%%@NL@%
  11280. noise switch%@BO:   7225b@%%@NL@%
  11281. NULLARG, cmdTable flag%@BO:   435cc@%%@NL@%
  11282. NULLEOL, cmdTable flag%@BO:   435cc@%%@NL@%
  11283. NULLEOW, cmdTable flag%@BO:   435cc@%%@NL@%
  11284. numarg, argument type%@BO:    f671@%%@BO:   17134@%%@NL@%
  11285. NUMARG, cmdTable flag%@BO:   435cc@%%@NL@%
  11286. Numeric switches%@BO:   3421c@%%@NL@%
  11287. Numeric-keypad keys%@BO:    6026@%%@BO:   2a5d3@%%@NL@%
  11288. %@NL@%
  11289. %@2@%%@AB@%O%@AE@%%@EH@%%@NL@%
  11290. ───────────────────────────────────────────────────────────────────────────%@NL@%
  11291. %@NL@%
  11292. Options, command line%@BO:    bc2e@%%@NL@%
  11293. OS/2-specific initialization%@BO:   3ce83@%%@NL@%
  11294. OS/2. %@AI@%See%@AE@% Protected mode%@NL@%
  11295. Overtype mode%@BO:    85e5@%%@NL@%
  11296. %@NL@%
  11297. %@2@%%@AB@%P%@AE@%%@EH@%%@NL@%
  11298. ───────────────────────────────────────────────────────────────────────────%@NL@%
  11299. %@NL@%
  11300. Page%@NL@%
  11301.      moving down by%@BO:   154eb@%%@NL@%
  11302.      moving up by%@BO:   154eb@%%@NL@%
  11303. Paragraph%@NL@%
  11304.      moving backward by%@BO:   15d4c@%%@NL@%
  11305.      moving forward by%@BO:   15d4c@%%@NL@%
  11306. Paste function%@BO:    a0da@%%@BO:   17ec6@%%@BO:   60c4c@%%@NL@%
  11307. Pbal function%@BO:   60c4c@%%@NL@%
  11308. pFileToTop function%@BO:   5a4d2@%%@NL@%
  11309. Plines function%@BO:   60c4c@%%@NL@%
  11310. Position of cursor, displaying%@BO:   353da@%%@NL@%
  11311. Ppage function%@BO:   154eb@%%@BO:   60c4c@%%@NL@%
  11312. Ppara function%@BO:   15d4c@%%@BO:   60c4c@%%@NL@%
  11313. Predefined regular expressions%@BO:   2885d@%%@NL@%
  11314. Print function%@BO:   1fcd8@%%@BO:   60c4c@%%@NL@%
  11315. printcmd switch%@BO:   7225b@%%@NL@%
  11316. Programming languages. %@AI@%See%@AE@% Languages, customizing files for%@NL@%
  11317. Prompts, handling within macros%@BO:   30928@%%@NL@%
  11318. Protected mode%@NL@%
  11319.      creating extensions for%@BO:   4b1b6@%%@NL@%
  11320.      dynamic compile log%@BO:   1e917@%%@NL@%
  11321. Psearch function%@BO:   19804@%%@BO:   60c4c@%%@NL@%
  11322. Pseudo files%@BO:   13c6b@%%@NL@%
  11323. PutLine function%@BO:   4a1fe@%%@BO:   5a976@%%@NL@%
  11324. Pword function%@BO:   15d4c@%%@BO:   60c4c@%%@NL@%
  11325. %@NL@%
  11326. %@2@%%@AB@%Q%@AE@%%@EH@%%@NL@%
  11327. ───────────────────────────────────────────────────────────────────────────%@NL@%
  11328. %@NL@%
  11329. Qreplace function%@BO:   1b205@%%@BO:   60c4c@%%@NL@%
  11330. question mark (?), regular expressions%@NL@%
  11331.      M 1.0 syntax%@BO:   24908@%%@NL@%
  11332. Quitting. %@AI@%See%@AE@% Exiting%@NL@%
  11333. Quote function%@BO:   2c5a6@%%@BO:   60c4c@%%@NL@%
  11334. %@NL@%
  11335. %@2@%%@AB@%R%@AE@%%@EH@%%@NL@%
  11336. ───────────────────────────────────────────────────────────────────────────%@NL@%
  11337. %@NL@%
  11338. ReadChar function%@BO:   5b0be@%%@NL@%
  11339. ReadCmd function%@BO:   5ba9c@%%@NL@%
  11340. Reading from files%@BO:   17e67@%%@NL@%
  11341. readonly switch%@BO:   7225b@%%@NL@%
  11342. realtabs switch%@BO:   38064@%%@BO:   38b68@%%@BO:   7225b@%%@NL@%
  11343. Record function%@BO:   2d29c@%%@BO:   60c4c@%%@NL@%
  11344. Record pseudo file%@BO:   1406a@%%@NL@%
  11345. Recording a macro%@BO:   2d29c@%%@NL@%
  11346. RECORDVALUE macro%@BO:   2d4c0@%%@NL@%
  11347. Redoing a command%@BO:    9a45@%%@NL@%
  11348. Refresh function%@BO:   128e1@%%@BO:   60c4c@%%@NL@%
  11349. Regular expressions%@NL@%
  11350.      defined%@BO:   20760@%%@NL@%
  11351.      M 1.0 syntax%@BO:   20eeb@%%@BO:   24293@%%@NL@%
  11352.      predefined%@BO:   2885d@%%@NL@%
  11353.      searching%@BO:   1a2e0@%%@BO:   208bc@%%@NL@%
  11354.      special characters and%@BO:   21754@%%@BO:   2473c@%%@NL@%
  11355.      tagged%@BO:   231bc@%%@BO:   23b94@%%@BO:   27441@%%@BO:   27df8@%%@NL@%
  11356.      UNIX syntax%@BO:   20eeb@%%@NL@%
  11357. Reinitializing, TOOLS.INI%@BO:   3b6af@%%@NL@%
  11358. RemoveFile function%@BO:   5be9e@%%@NL@%
  11359. Repeat function%@BO:   60c4c@%%@NL@%
  11360. Repeating%@NL@%
  11361.      cursor-movement arguments%@BO:   110d1@%%@NL@%
  11362.      on-screen arguments%@BO:   110d1@%%@NL@%
  11363.      text arguments%@BO:    f570@%%@NL@%
  11364. Replace function%@BO:   1b205@%%@BO:   5c466@%%@BO:   60c4c@%%@NL@%
  11365. Replacing%@NL@%
  11366.      forward%@BO:   19804@%%@BO:   1b205@%%@NL@%
  11367.      overtype mode%@BO:    85e5@%%@NL@%
  11368.      repeated%@BO:   26c13@%%@NL@%
  11369.      search and replace%@BO:   197b4@%%@NL@%
  11370. Restcur function%@BO:   19402@%%@BO:   2f9b5@%%@BO:   60c4c@%%@NL@%
  11371. Right function%@BO:   15095@%%@BO:   60c4c@%%@NL@%
  11372. rmargin switch%@BO:   7225b@%%@NL@%
  11373. %@NL@%
  11374. %@2@%%@AB@%S%@AE@%%@EH@%%@NL@%
  11375. ───────────────────────────────────────────────────────────────────────────%@NL@%
  11376. %@NL@%
  11377. Saveall function%@BO:   60c4c@%%@NL@%
  11378. Savecur function%@BO:   19402@%%@BO:   2ade8@%%@BO:   2f9b5@%%@BO:   60c4c@%%@NL@%
  11379. savescreen switch%@BO:   7225b@%%@NL@%
  11380. Saving%@NL@%
  11381.      cursor position%@BO:   19402@%%@NL@%
  11382.      exiting, without%@BO:   128e1@%%@NL@%
  11383. Screen%@NL@%
  11384.      height%@BO:   3a3f0@%%@NL@%
  11385.      setting colors%@NL@%
  11386.           background and foreground%@BO:   35acc@%%@NL@%
  11387.           error messages%@BO:   368ed@%%@NL@%
  11388.           foreground and background%@BO:   35acc@%%@NL@%
  11389.           in TOOLS.INI file[TOOLS.INI]%@BO:   3ce83@%%@NL@%
  11390.           status line%@BO:   368ed@%%@NL@%
  11391.           text%@BO:   368ed@%%@NL@%
  11392.           user-selected text%@BO:   368ed@%%@NL@%
  11393.      windows%@BO:   1ebfe@%%@NL@%
  11394. Scrolling%@NL@%
  11395.      control%@BO:   1527e@%%@NL@%
  11396.      controlling with switches%@BO:   356ce@%%@NL@%
  11397.      %@AI@%See also%@AE@% Switches%@NL@%
  11398.      direction keys, using%@BO:   1503c@%%@NL@%
  11399.      horizontal%@BO:   1503c@%%@NL@%
  11400.      page%@BO:   155e1@%%@NL@%
  11401.      vertical%@BO:   1503c@%%@NL@%
  11402.      window down%@BO:   60c4c@%%@NL@%
  11403.      window up%@BO:   60c4c@%%@NL@%
  11404. Sdelete function%@BO:   2f5d4@%%@BO:   60c4c@%%@NL@%
  11405. Search-and-Replace functions%@BO:   197b4@%%@BO:   1b205@%%@NL@%
  11406. Searchall function%@BO:   1a791@%%@BO:   60c4c@%%@NL@%
  11407. Searching a series of files%@BO:   1ad57@%%@NL@%
  11408. Searching%@NL@%
  11409.      forward%@BO:    a3e8@%%@BO:   19804@%%@BO:   1a2e0@%%@NL@%
  11410.      patterns, for%@BO:   1a2e0@%%@NL@%
  11411.      regular expressions, with [regular expressions]%@BO:   208bc@%%@NL@%
  11412.      repeated%@BO:    aa58@%%@BO:   26c13@%%@NL@%
  11413. searchwrap switch%@BO:   7225b@%%@NL@%
  11414. selcolor switch%@BO:   368ed@%%@BO:   7225b@%%@NL@%
  11415. Setfile function%@BO:   1356e@%%@BO:   1f360@%%@BO:   60c4c@%%@NL@%
  11416. SetKey function%@BO:   5cc35@%%@NL@%
  11417. Setting screen colors%@NL@%
  11418.      background and foreground%@BO:   35acc@%%@NL@%
  11419.      error messages%@BO:   368ed@%%@NL@%
  11420.      foreground and background%@BO:   35a6f@%%@NL@%
  11421.      highlighted text%@BO:   368ed@%%@NL@%
  11422.      in TOOLS.INI file[TOOLS.INI]%@BO:   3ce83@%%@NL@%
  11423.      status line%@BO:   368ed@%%@NL@%
  11424.      text%@BO:   368ed@%%@NL@%
  11425.      user-selected text%@BO:   368ed@%%@NL@%
  11426. Setting up%@NL@%
  11427.      editor%@BO:    7792@%%@NL@%
  11428.      Help%@BO:   3eb8b@%%@NL@%
  11429. Setwindow function%@BO:   60c4c@%%@NL@%
  11430. Shell function%@BO:   135c3@%%@BO:   60c4c@%%@NL@%
  11431. Short name, in extensions%@BO:   13b58@%%@BO:   46722@%%@NL@%
  11432. shortnames switch%@BO:   7225b@%%@NL@%
  11433. Sinsert function%@BO:   60c4c@%%@NL@%
  11434. SKEL.C file%@BO:   4055d@%%@NL@%
  11435. SKEL.DEF file%@BO:   4b6c7@%%@NL@%
  11436. snow switch%@BO:   7225b@%%@NL@%
  11437. softcr switch%@BO:   7225b@%%@NL@%
  11438. stacolor switch%@BO:   35c03@%%@BO:   368ed@%%@BO:   7225b@%%@NL@%
  11439. Start-up, execution of commands at%@BO:   3e9db@%%@NL@%
  11440. Starting%@NL@%
  11441.      editor%@BO:    7746@%%@BO:    bc2e@%%@NL@%
  11442.      Help%@BO:    b45a@%%@NL@%
  11443. Status line, fields, described%@BO:    c7e2@%%@NL@%
  11444. Stream mode%@BO:   10bc4@%%@NL@%
  11445. STREAMARG, argument type%@BO:   48c88@%%@NL@%
  11446. STREAMARG, cmdTable flag%@BO:   435cc@%%@NL@%
  11447. streamarg%@NL@%
  11448.      argument type%@BO:   11a23@%%@NL@%
  11449. SwiDesc structure types%@BO:   421fa@%%@BO:   42880@%%@NL@%
  11450. swiTable%@BO:   41f4a@%%@NL@%
  11451. Switches%@NL@%
  11452.      askexit%@BO:   7225b@%%@NL@%
  11453.      askrtn%@BO:   7225b@%%@NL@%
  11454.      autosave%@BO:   7225b@%%@NL@%
  11455.      backup%@BO:   7225b@%%@NL@%
  11456.      case%@BO:   7225b@%%@NL@%
  11457.      defined%@BO:   33a2a@%%@NL@%
  11458.      displaycursor%@BO:   7225b@%%@NL@%
  11459.      editreadonly%@BO:   7225b@%%@NL@%
  11460.      entab%@BO:   38b68@%%@BO:   7225b@%%@NL@%
  11461.      enterinsmode%@BO:   7225b@%%@NL@%
  11462.      errcolor%@BO:   35c03@%%@BO:   368ed@%%@BO:   7225b@%%@NL@%
  11463.      errprompt%@BO:   7225b@%%@NL@%
  11464.      extmake%@BO:   7225b@%%@NL@%
  11465.      fgcolor%@BO:   35acc@%%@BO:   7225b@%%@NL@%
  11466.      filetab%@BO:   38b68@%%@BO:   7225b@%%@NL@%
  11467.      height%@BO:   7225b@%%@NL@%
  11468.      helpboldcolor%@BO:   7225b@%%@NL@%
  11469.      helpfiles%@BO:   7225b@%%@NL@%
  11470.      helpitalcolor%@BO:   7225b@%%@NL@%
  11471.      helpundcolor%@BO:   7225b@%%@NL@%
  11472.      helpwarncolor%@BO:   7225b@%%@NL@%
  11473.      helpwindow%@BO:   3756d@%%@BO:   7225b@%%@NL@%
  11474.      hgcolor%@BO:   35c03@%%@BO:   368ed@%%@BO:   7225b@%%@NL@%
  11475.      hike%@BO:   7225b@%%@NL@%
  11476.      hscroll%@BO:   3596c@%%@BO:   7225b@%%@NL@%
  11477.      in extensions%@BO:   41eff@%%@NL@%
  11478.      infcolor%@BO:   35c03@%%@BO:   368ed@%%@BO:   7225b@%%@NL@%
  11479.      keyboard%@BO:   7225b@%%@NL@%
  11480.      load%@BO:   40dcc@%%@BO:   7225b@%%@NL@%
  11481.      markfile%@BO:   192a8@%%@BO:   7225b@%%@NL@%
  11482.      noise%@BO:   7225b@%%@NL@%
  11483.      printcmd%@BO:   7225b@%%@NL@%
  11484.      readonly%@BO:   7225b@%%@NL@%
  11485.      realtabs%@BO:   38064@%%@BO:   38b68@%%@BO:   7225b@%%@NL@%
  11486.      rmargin%@BO:   7225b@%%@NL@%
  11487.      savescreen%@BO:   7225b@%%@NL@%
  11488.      scrolling and%@BO:   356ce@%%@NL@%
  11489.      searchwrap%@BO:   7225b@%%@NL@%
  11490.      selcolor%@BO:   368ed@%%@BO:   7225b@%%@NL@%
  11491.      setting screen color and%@BO:   35acc@%%@NL@%
  11492.      shortnames%@BO:   7225b@%%@NL@%
  11493.      snow%@BO:   7225b@%%@NL@%
  11494.      softcr%@BO:   7225b@%%@NL@%
  11495.      special syntax for%@BO:   3a7a5@%%@NL@%
  11496.      stacolor%@BO:   35c03@%%@BO:   368ed@%%@BO:   7225b@%%@NL@%
  11497.      tabalign%@BO:   38b68@%%@BO:   7225b@%%@NL@%
  11498.      tabdisp%@BO:   38718@%%@BO:   7225b@%%@NL@%
  11499.      tabstops%@BO:   38b68@%%@BO:   7225b@%%@NL@%
  11500.      tmpsav%@BO:   7225b@%%@NL@%
  11501.      traildisp%@BO:   3a1ab@%%@BO:   7225b@%%@NL@%
  11502.      trailspace%@BO:   39e2f@%%@BO:   7225b@%%@NL@%
  11503.      undelcount%@BO:   7225b@%%@NL@%
  11504.      undocount%@BO:    964e@%%@BO:   7225b@%%@NL@%
  11505.      unixre%@BO:   7225b@%%@NL@%
  11506.      viewonly%@BO:   7225b@%%@NL@%
  11507.      vscroll%@BO:   356ce@%%@BO:   7225b@%%@NL@%
  11508.      wdcolor%@BO:   368ed@%%@BO:   7225b@%%@NL@%
  11509.      width%@BO:   7225b@%%@NL@%
  11510.      wordwrap%@BO:   7225b@%%@NL@%
  11511. System requirements%@BO:    4be3@%%@NL@%
  11512. System-specific initialization%@BO:   3ce83@%%@NL@%
  11513. %@NL@%
  11514. %@2@%%@AB@%T%@AE@%%@EH@%%@NL@%
  11515. ───────────────────────────────────────────────────────────────────────────%@NL@%
  11516. %@NL@%
  11517. Tab function%@BO:   60c4c@%%@NL@%
  11518. tabalign switch%@BO:   38b68@%%@BO:   7225b@%%@NL@%
  11519. tabdisp switch%@BO:   38718@%%@BO:   7225b@%%@NL@%
  11520. Tables%@NL@%
  11521.      cmdTable%@BO:   40dcc@%%@BO:   42aa3@%%@NL@%
  11522.      swiTable%@BO:   41f4a@%%@NL@%
  11523. Tabs%@NL@%
  11524.      meaning within editor%@BO:   38b68@%%@NL@%
  11525.      reading from files%@BO:   38b68@%%@NL@%
  11526.      setting with switches%@BO:   38afc@%%@NL@%
  11527.      writing to disk%@BO:   38b68@%%@NL@%
  11528. tabstops switch%@BO:   38b68@%%@BO:   7225b@%%@NL@%
  11529. Tagged expressions%@BO:   231bc@%%@BO:   23b94@%%@BO:   27441@%%@BO:   27df8@%%@NL@%
  11530. Tags%@BO:   3c8ac@%%@NL@%
  11531. Tell function%@BO:   2b9eb@%%@BO:   2d034@%%@BO:   60c4c@%%@NL@%
  11532. Terminating sessions. %@AI@%See%@AE@% Exiting%@NL@%
  11533. Text arguments, editing%@BO:    f20b@%%@NL@%
  11534. Text switches%@BO:   3421c@%%@BO:   3a7a5@%%@NL@%
  11535. Text type arguments%@NL@%
  11536.      defined%@BO:    e83e@%%@NL@%
  11537.      markarg%@BO:    fa9b@%%@NL@%
  11538.      numarg%@BO:    e9d0@%%@BO:   17134@%%@NL@%
  11539.      textarg%@BO:    fec9@%%@NL@%
  11540. TEXTARG, argument type%@BO:   47d36@%%@NL@%
  11541. TEXTARG, cmdTable flag%@BO:   435cc@%%@NL@%
  11542. tmpsav switch%@BO:   7225b@%%@NL@%
  11543. TOOLS.INI file%@NL@%
  11544.      comments%@BO:   3dbb2@%%@NL@%
  11545.      defined%@BO:   33be7@%%@NL@%
  11546.      dividing into sections%@BO:   3c902@%%@NL@%
  11547.      line continuation%@BO:   3dea7@%%@NL@%
  11548.      reinitializing%@BO:   3b6af@%%@NL@%
  11549.      sample%@BO:   3b535@%%@NL@%
  11550.      structure%@BO:   3c086@%%@NL@%
  11551.      using tags in%@BO:   3c15b@%%@BO:   3c902@%%@NL@%
  11552. Top of file, moving to%@BO:   15b0c@%%@NL@%
  11553. traildisp switch%@BO:   3a1ab@%%@BO:   7225b@%%@NL@%
  11554. Trailing space%@BO:   39cc2@%%@NL@%
  11555. trailspace switch%@BO:   39e2f@%%@BO:   7225b@%%@NL@%
  11556. Translate. %@AI@%See%@AE@% Search-and-Replace functions%@NL@%
  11557. %@NL@%
  11558. %@2@%%@AB@%U%@AE@%%@EH@%%@NL@%
  11559. ───────────────────────────────────────────────────────────────────────────%@NL@%
  11560. %@NL@%
  11561. Unassigned function%@BO:   2bc22@%%@NL@%
  11562. UNDEL.EXE file%@BO:   76895@%%@NL@%
  11563. undelcount switch%@BO:   7225b@%%@NL@%
  11564. Undo function%@BO:    964e@%%@BO:   60c4c@%%@NL@%
  11565. undocount switch%@BO:    964e@%%@BO:   7225b@%%@NL@%
  11566. UNIX syntax, regular expression%@BO:   213b3@%%@NL@%
  11567. unixre switch%@BO:   7225b@%%@NL@%
  11568. Up function%@BO:   15095@%%@BO:   60c4c@%%@NL@%
  11569. %@NL@%
  11570. %@2@%%@AB@%V%@AE@%%@EH@%%@NL@%
  11571. ───────────────────────────────────────────────────────────────────────────%@NL@%
  11572. %@NL@%
  11573. Vertical scrolling%@BO:   356ce@%%@NL@%
  11574. Video modes supported%@BO:   3a514@%%@NL@%
  11575. Video-specific initialization%@BO:   3ce83@%%@NL@%
  11576. Viewing%@NL@%
  11577.      current assignments%@BO:   1406a@%%@NL@%
  11578.      function assignments%@BO:   2b13c@%%@NL@%
  11579. viewonly switch%@BO:   7225b@%%@NL@%
  11580. vscroll switch%@BO:   356ce@%%@BO:   7225b@%%@NL@%
  11581. %@NL@%
  11582. %@2@%%@AB@%W%@AE@%%@EH@%%@NL@%
  11583. ───────────────────────────────────────────────────────────────────────────%@NL@%
  11584. %@NL@%
  11585. wdcolor switch%@BO:   368ed@%%@BO:   7225b@%%@NL@%
  11586. Whenloaded function%@BO:   40dcc@%%@BO:   44776@%%@NL@%
  11587. width switch%@BO:   7225b@%%@NL@%
  11588. Wildcards%@NL@%
  11589.      DOS%@BO:    c693@%%@BO:   135c3@%%@NL@%
  11590.      regular expressions%@BO:   21940@%%@BO:   24908@%%@NL@%
  11591. Window function%@BO:   1eea0@%%@BO:   60c4c@%%@NL@%
  11592. WINDOWFUNC, cmdTable flag%@BO:   435cc@%%@NL@%
  11593. Windows%@NL@%
  11594.      closing%@BO:   1f027@%%@NL@%
  11595.      creating%@BO:   1f027@%%@NL@%
  11596.      moving%@NL@%
  11597.           between%@BO:   1eea0@%%@NL@%
  11598.           down%@BO:   60c4c@%%@NL@%
  11599.           up%@BO:   60c4c@%%@NL@%
  11600. Word, moving forward by%@BO:   15d4c@%%@NL@%
  11601. Word%@NL@%
  11602.      moving backward by%@BO:   15d4c@%%@NL@%
  11603. wordwrap switch%@BO:   7225b@%%@NL@%
  11604. %@NL@%
  11605. %@NL@%
  11606.