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 @%%@AB@%Topic                                Chapter or Section%@AE@%Using the editor right away          Chapter 2%@BO:    7023@%, "Edit Now"Starting the editor using options    Section 2.5%@BO:    bc2e@%, "The Microsoftand file names                       Editor's Command Line"Entering arguments to editing        Chapter 3%@BO:    d239@%, "Command Syntax"functionsUsing the most common editing        Chapter 4%@BO:   120e2@%, "A Survey of thecommands, including file             Editor's Commands"operations, compiling, andwindowsUsing regular expressions with       Chapter 5%@BO:   206bc@%, "Regular Expressions"the editorCustomizing the editor by            Chapter 6%@BO:   28e3a@%, "Function Assignmentschanging function-to-key             and Macros," and Chapter 7%@BO:   3396c@%,assignments and basic conditions,    "Switches, Assignments, and thesuch as screen colors                TOOLS.INI File"Writing new editing functions in     Chapter 8%@BO:   3fbeb@%, "Programming CC or assembly language               Extensions," and Chapter 9%@BO:   50fea@%,                                     "C-Extension Functions"Getting quick reference to           Appendix A, "Reference Tables,"commands and switches                and the indexUsing the accompanying utilities:    Appendix B, "Support Programs forUNDEL and EXP                        the Microsoft Editor"%@TE:   32   1434  2 37 39 @%
  394. %@NL@%
  395. %@NL@%
  396. %@CR:MSE14000@%%@2@%%@AB@%1.4  Introducing the Microsoft(R) Editor%@AE@%%@EH@%%@NL@%
  397. %@NL@%
  398. %@CR:MSE14001@%%@4@%You'll find the Microsoft Editor easy to use once you understand the%@EH@%
  399. function-argument model it uses for executing commands. Each command
  400. consists of a function that may or may not be given input in the form of an
  401. "argument."%@NL@%
  402. %@NL@%
  403. %@CR:MSE14002@%%@4@%The Microsoft Editor uses a "reverse Polish" command structure. That is, you%@EH@%
  404. specify the argument first, then give the command function. For example, if
  405. you want to load a file, you first specify the file name, then invoke the
  406. file loading function.%@NL@%
  407. %@NL@%
  408. %@CR:MSE14003@%%@4@%All Microsoft Editor functions work in this fashion. This arrangement is%@EH@%
  409. different from that of conventional editors where you would choose the file
  410. loading function first, then specify the desired file. This "argument first,
  411. function second" sequence gives the Microsoft Editor unique advantages:%@NL@%
  412. %@NL@%
  413. %@CR:MSE14004@%  ■  A single function can process different types of arguments, such as%@NL@%
  414.      high-lighted blocks of text, a word or number typed on the dialog line,%@NL@%
  415.      or the word at the current cursor position. Almost all functions work%@NL@%
  416.      with all data types, so there aren't too many arbitrary details to%@NL@%
  417.      memorize.%@NL@%
  418. %@NL@%
  419.   ■  It's easy to write macros because almost every action can be expressed%@NL@%
  420.      as a function name. Macros are likewise easy to understand──you won't%@NL@%
  421.      have trouble understanding another person's macro, or a macro %@AI@%you%@AE@% wrote%@NL@%
  422.      six months ago.%@NL@%
  423. %@NL@%
  424. %@CR:MSE14005@%%@4@%Function names follow a consistent pattern. For example, functions that%@EH@%
  425. involve forward movement usually start with P (for "plus"). Functions that
  426. involve backward movement usually start with M (for "minus").%@NL@%
  427. %@NL@%
  428. %@CR:MSE14006@%%@4@%Before using the Microsoft Editor, run the installation program for your%@EH@%
  429. Microsoft language product. The installation program sets up the powerful
  430. on-line Help, which provides on-line information for editing functions and
  431. the standard C library. It is recommended that you select the default
  432. keystroke configuration in order to work through the early chapters of this
  433. manual.%@NL@%
  434. %@NL@%
  435. ───────────────────────────────────────────────────────────────────────────%@NL@%
  436. %@AI@%NOTE%@AE@%%@NL@%
  437.    If you choose to customize the Microsoft Editor during installation, its%@NL@%
  438.    function-key assignments will match those of BRIEF(R), Epsilon(TM), or%@NL@%
  439.    the Microsoft "Quick" Environment. This book describes the uncustomized%@NL@%
  440.    version of the Microsoft Editor, so the commands described will not%@NL@%
  441.    always match those on your version of the editor.%@NL@%
  442. ───────────────────────────────────────────────────────────────────────────%@NL@%
  443. %@NL@%
  444. %@NL@%
  445. %@CR:MSE15000@%%@2@%%@AB@%1.5  Document Conventions%@AE@%%@EH@%%@NL@%
  446. %@NL@%
  447. %@CR:MSE15001@%%@4@%The following document conventions are used throughout this manual and apply%@EH@%
  448. in particular to syntax displays for commands and switches:%@NL@%
  449. %@CR:MSE15002@%%@NL@%
  450. %@TH:   78   4027  3 31 45 @%%@AB@%Example of%@AE@%%@AB@%Convention                     Description%@AE@%%@AB@%AddFile%@AE@%                        Boldface type always marks                               standard features of programming                               languages (keywords, operators,                               and functions) and editor                               switches.%@AS@%$INIT: tools.ini%@AE@%               This font is used to indicate all                               example programs, user input, and                               screen output.%@AI@%placeholders%@AE@%                   Words in italics indicate a                               Microsoft Editor function, a                               field, or a general kind of                               information; you must supply the                               particular value. For example, %@AI@%%@AE@%                               %@AI@%numarg%@AE@% represents a numerical                               argument that you type in from                               the keyboard. You could type in a                               number, such as %@AS@%15%@AE@%, but you would                               not type in the word%@AB@%%@AE@%"%@AI@%numarg%@AE@%"                               itself.Repeating elements...          Three dots following an item                               indicate more items having the                               same form may appear.%@AS@%Program %@AE@%                       A column of three dots tells you%@AS@%    . %@AE@%                         part of a program has been%@AS@%    . %@AE@%                         intentionally omitted.%@AS@%    .%@AE@%%@AS@%Fragment%@AE@%SHIFT                          Names of keys on the keyboard                               appear in small capital letters.                               Notice that a plus (+) indicates                               a combination of keys. For                               example, CTRL+E means to hold                               down the CTRL key while pressing                               the E key.                               The names of the keys in this                               manual correspond to the key                               names printed on the IBM Personal                               Computer keyboard. If you are                               using a different machine, these                               keys may have slightly different                               names.                               The cursor-movement keys                               (sometimes called "arrow" keys)                               located on the numeric keypad to                               the right of the main keypad are                               called the DIRECTION keys.                               Individual DIRECTION keys are                               called either by the direction of                               the arrow on the key top (LEFT,                               RIGHT, UP, DOWN) or the name on                               the key top (PGUP, PGDN).                               Some of the Microsoft Editor's                               functions use the +, -, or number                               keys on the numeric keypad rather                               than the ones on the top row of                               the main keyboard. At each                               instance, the text notes the use                               of keys from the numeric keypad.                               The carriage-return key,                               sometimes unnamed but marked with                               a bent arrow, is called the ENTER                               key."Commands"                     The first time a new term is                               defined, it is enclosed in                               quotation marks.%@TE:   78   4027  3 31 45 @%
  451. %@NL@%
  452. %@NL@%
  453. %@CR:MSE20000@%%@1@%%@AB@%Chapter 2  Edit Now%@AE@%%@EH@%%@NL@%
  454. ───────────────────────────────────────────────────────────────────────────%@NL@%
  455. %@NL@%
  456. %@CR:MSE20001@%%@4@%This chapter shows you how to use the Microsoft Editor right away by%@EH@%
  457. focusing on the functions you need to create a simple text file. "Functions"
  458. are built-in editing capabilities you invoke to perform actions. Most of the
  459. chapter consists of a tutorial that uses a specific example and features the
  460. following functions:%@NL@%
  461. %@NL@%
  462. %@CR:MSE20002@%%@AB@%Function                              Default Keystroke%@AE@%%@NL@%
  463. %@NL@%
  464. Cursor movement                       DIRECTION keys, HOME, END%@NL@%
  465. %@NL@%
  466. %@AI@%Insertmode%@AE@%                            INS%@NL@%
  467. %@AI@%Delete%@AE@%                                DEL%@NL@%
  468. %@AI@%Arg%@AE@% (introduce argument)              ALT+A%@NL@%
  469. %@AI@%Cancel%@AE@%                                ESC%@NL@%
  470. %@AI@%Undo%@AE@%                                  ALT+BKSP%@NL@%
  471. %@AI@%Paste%@AE@%                                 SHIFT+INS%@NL@%
  472. %@AI@%Psearch%@AE@% (forward search)              F3%@NL@%
  473. %@AI@%Linsert%@AE@% (insert new line)             CTRL+N%@NL@%
  474. %@AI@%Exit%@AE@%                                  F8%@NL@%
  475. %@AI@%Help%@AE@%                                  F1%@NL@%
  476. %@NL@%
  477. %@CR:MSE20003@%%@4@%You can use this tutorial either by starting the editor and typing in each%@EH@%
  478. command as shown, or you can simply read along. Because the results are
  479. explained at each stage, you can get a good understanding of the editor just
  480. by reading.%@NL@%
  481. %@NL@%
  482. %@CR:MSE20004@%%@4@%The chapter ends by presenting the complete command line for the editor with%@EH@%
  483. all the possible options you may use, a complete list of items on the status
  484. line, and some hints for learning the editor.%@NL@%
  485. %@NL@%
  486. %@NL@%
  487. %@CR:MSE21000@%%@2@%%@AB@%2.1  Starting the Editor%@AE@%%@EH@%%@NL@%
  488. %@NL@%
  489. %@CR:MSE21001@%%@4@%Copy the file M.EXE into your current directory or a directory listed in the%@EH@%
  490. PATH environment variable. To run the editor in OS/2 protected mode, copy
  491. the file MEP.EXE. (You may want to rename the file as M.EXE.) Then start the
  492. editor with this command:%@NL@%
  493. %@NL@%
  494.      %@AS@%M NEW.TXT%@AE@%%@NL@%
  495. %@NL@%
  496. %@CR:MSE21002@%%@4@%The Microsoft Editor responds by asking if you want to create a new file%@EH@%
  497. with this name. Press %@AS@%Y%@AE@% to indicate yes. The editor creates the file and
  498. places it in the current directory. You are now ready to enter text.%@NL@%
  499. %@NL@%
  500. ───────────────────────────────────────────────────────────────────────────%@NL@%
  501. %@AI@%NOTE%@AE@%%@NL@%
  502.    If the editor cannot start correctly, it reports an error message. If you%@NL@%
  503.    receive an error message on start-up, consult the list of error messages%@NL@%
  504.    in Appendix C%@BO:   76d41@%. This list of error messages provides explanations,%@NL@%
  505.    along with suggestions for solving the problem.%@NL@%
  506. ───────────────────────────────────────────────────────────────────────────%@NL@%
  507. %@NL@%
  508. %@CR:MSE21003@%%@4@%When you want to exit, press %@AS@%F8%@AE@%. Whenever you want to save your work without%@EH@%
  509. exiting, type the following keystrokes:%@NL@%
  510. %@NL@%
  511.      %@AS@%ALT+A  ALT+A  F2%@AE@%%@NL@%
  512. %@NL@%
  513. %@NL@%
  514. %@CR:MSE22000@%%@2@%%@AB@%2.2  The Microsoft Editor's Screen%@AE@%%@EH@%%@NL@%
  515. %@NL@%
  516. %@CR:MSE22001@%%@4@%When starting the editor with a new file, you see a blank screen, as shown%@EH@%
  517. in Figure 2.1%@FN@%
  518. Figure 2.1 is found on page 9 in the printed version of this guide.%@EF@% below.%@NL@%
  519. %@NL@%
  520. %@CR:MSE22002@%%@4@%The cursor first appears at the upper-left corner of the screen. Even though%@EH@%
  521. the file is empty, you can use the DIRECTION keys──denoted as UP, DOWN,
  522. LEFT, and RIGHT──to move the cursor anywhere on the screen. (The DIRECTION
  523. keys are the arrow keys on the numeric keypad. Newer keyboards may have an
  524. additional set of arrow keys to the left of the numeric keypad.) Try
  525. experimenting with cursor movement.%@NL@%
  526. %@NL@%
  527. ───────────────────────────────────────────────────────────────────────────%@NL@%
  528. %@AI@%NOTE%@AE@%%@NL@%
  529.    The DIRECTION keys on the numeric keypad do not respond unless NUMLOCK is%@NL@%
  530.    off. Press the NUMLOCK key to toggle the numeric keypad lock on and off.%@NL@%
  531. ───────────────────────────────────────────────────────────────────────────%@NL@%
  532. %@NL@%
  533. %@CR:MSE22003@%%@4@%The next-to-bottom line is called the "dialog line," which is reserved for%@EH@%
  534. displaying messages from the editor and letting you enter text arguments.
  535. The bottom line is called the "status line." It always displays the
  536. following fields:%@NL@%
  537. %@NL@%
  538. %@CR:MSE22004@%%@AB@%Field                       Description%@AE@%%@NL@%
  539. %@NL@%
  540. %@AS@%c:\m\new.txt%@AE@%                File name, with complete path%@NL@%
  541. %@NL@%
  542. %@AS@%(text)%@AE@%                      Type of file%@NL@%
  543. %@NL@%
  544. %@AS@%Length=1%@AE@%                    Length of file, in number of lines (minimum%@NL@%
  545.                             value is 1)%@NL@%
  546. %@NL@%
  547. %@AS@%Window=(1,1)%@AE@%                Window or cursor position%@NL@%
  548. %@NL@%
  549. %@NL@%
  550. %@CR:MSE22005@%%@4@%The field %@AS@%Window=(1,1)%@AE@% indicates that the upper-left corner of the screen%@EH@%
  551. corresponds to the first row and column of the file. As you scroll through
  552. files larger then one screen, the numbers in this field change. See Section
  553. 7.2.1%@BO:   34f56@%, "Changing Start-Up Conditions," to learn how to alter this field
  554. so that it displays cursor position instead of window position.%@NL@%
  555. %@NL@%
  556. %@NL@%
  557. %@CR:MSE23000@%%@2@%%@AB@%2.3  Sample Session%@AE@%%@EH@%%@NL@%
  558. %@NL@%
  559. %@CR:MSE23001@%%@4@%Once the Microsoft Editor is started, you can enter text immediately. Simply%@EH@%
  560. start typing and press ENTER when you want to begin a new line. By default,
  561. the editor starts in "overtype" mode, which means that anything you type
  562. replaces the text at the cursor position.The editor also has an "insert"
  563. mode for adding new material without replacing the current text. Insert mode
  564. is explained in the next section.%@NL@%
  565. %@NL@%
  566. %@CR:MSE23002@%%@4@%To begin, type in the following text. There are some intentional errors%@EH@%
  567. you'll correct in a few moments.%@NL@%
  568. %@NL@%
  569.      It's mind over matter.%@NL@%
  570.      What is mind?%@NL@%
  571.      No mat matter.%@NL@%
  572.      Wh is matter?%@NL@%
  573.      Mever mind.%@AH@% %@AE@%%@NL@%
  574. %@NL@%
  575. %@CR:MSE23003@%%@4@%The third, fourth, and fifth lines have errors near the beginning of each%@EH@%
  576. line. To get to the beginning of the fifth line, you can press the LEFT key
  577. until you move to the beginning of the line. However, you can get there
  578. faster by pressing the HOME key. This key moves the cursor to the first
  579. nonblank character in the line.%@NL@%
  580. %@NL@%
  581. %@CR:MSE23004@%%@4@%Now move the cursor to the beginning of the fifth line and correct the error%@EH@%
  582. by typing the letter %@AS@%N%@AE@%:%@NL@%
  583. %@NL@%
  584.      N%@AH@%e%@AE@%ver mind.%@NL@%
  585. %@NL@%
  586. %@NL@%
  587. %@CR:MSE23100@%%@3@%%@AB@%2.3.1  Inserting Text with the Insertmode Function%@AE@%%@EH@%%@NL@%
  588. %@NL@%
  589. %@CR:MSE23101@%%@4@%To insert text in this example, move the cursor to the third position in the%@EH@%
  590. fourth line:%@NL@%
  591. %@NL@%
  592.      Wh%@AH@% %@AE@%is matter?%@NL@%
  593. %@NL@%
  594. %@CR:MSE23102@%%@4@%The letters %@AS@%at%@AE@% need to be inserted at the end of the first word. Press the%@EH@%
  595. INS key to invoke the %@AI@%Insertmode%@AE@% function, which toggles between overtype
  596. and insert mode. You'll see the word %@AS@%insert%@AE@% appear at the end of the status
  597. line. Type the letters %@AS@%at%@AE@% to produce the following line:%@NL@%
  598. %@NL@%
  599.      What%@AH@% %@AE@%is matter?%@NL@%
  600. %@NL@%
  601. %@CR:MSE23103@%%@4@%To return to overtype mode, press INS again.%@EH@%%@NL@%
  602. %@NL@%
  603. %@NL@%
  604. %@CR:MSE23200@%%@3@%%@AB@%2.3.2  Removing Text with the Delete Function%@AE@%%@EH@%%@NL@%
  605. %@NL@%
  606. %@CR:MSE23201@%%@4@%So far, you've used editing functions to replace old text and insert new%@EH@%
  607. text. The third line requires text deletion, so move the cursor to the
  608. beginning of the second word in the third line:%@NL@%
  609. %@NL@%
  610.      No %@AH@%m%@AE@%at matter.%@NL@%
  611. %@NL@%
  612. %@CR:MSE23202@%%@4@%Invoke the %@AI@%Delete%@AE@% function by pressing the DEL key. Each time you press the%@EH@%
  613. DEL key, the character at the cursor position is erased.%@NL@%
  614. %@NL@%
  615. %@CR:MSE23203@%%@4@%It is inconvenient to delete a large amount of text one character at a time.%@EH@%
  616. The %@AI@%Delete%@AE@% function can also remove blocks of text that are specified as
  617. arguments. The next section explains deleting a large block of text.%@NL@%
  618. %@NL@%
  619. %@NL@%
  620. %@CR:MSE23300@%%@3@%%@AB@%2.3.3  Using the Arg Function to Specify Text%@AE@%%@EH@%%@NL@%
  621. %@NL@%
  622. %@CR:MSE23301@%%@4@%The %@AI@%Arg%@AE@% function is assigned to ALT+A; hold down the ALT key and press A to%@EH@%
  623. invoke it. The %@AI@%Arg%@AE@% function does nothing by itself. Rather, it tells the
  624. editor that you are about to introduce an argument that another function
  625. will operate on. (An "argument" is input, such as text or highlighted
  626. characters.)%@NL@%
  627. %@NL@%
  628. %@CR:MSE23302@%%@4@%In this example you'll use the %@AI@%Arg%@AE@% function to highlight the group of%@EH@%
  629. characters you wish to delete. After pressing ALT+A, move the cursor to the
  630. beginning of the third word, as shown in Figure 2.2%@FN@%
  631. Figure 2.2 is found on page 11 in the printed version of this guide.%@EF@% below. Now press DEL,
  632. and the high-lighted characters are removed.%@NL@%
  633. %@NL@%
  634. %@NL@%
  635. %@CR:MSE23400@%%@3@%%@AB@%2.3.4  Canceling and Undoing Commands%@AE@%%@EH@%%@NL@%
  636. %@NL@%
  637. %@CR:MSE23401@%%@4@%If you pressed ALT+A at the wrong time but did not complete the command you%@EH@%
  638. were typing, you can cancel the argument by pressing the ESC key. This
  639. key-stroke invokes the %@AI@%Cancel%@AE@% function. The %@AI@%Cancel%@AE@% function lets you start a
  640. command sequence over again.%@NL@%
  641. %@NL@%
  642. %@CR:MSE23402@%%@4@%If you complete an incorrect command, reverse it by pressing ALT+BKSP (hold%@EH@%
  643. down the ALT key and then press the backspace key). This keystroke invokes
  644. the %@AI@%Undo%@AE@% function. If you invoke %@AI@%Undo%@AE@% again, it reverses the next-to-last
  645. editing command. Invoke %@AI@%Undo%@AE@% a third time, and it reverses the
  646. second-to-last editing command, and so on. The number of commands that the
  647. editor remembers is controlled by the %@AB@%undocount%@AE@% switch. The default number
  648. of commands remembered is 10. See Chapter 7%@BO:   3396c@%, "Switches, Assignments, and
  649. the TOOLS.INI File," for information on how to set switches.%@NL@%
  650. %@NL@%
  651. %@CR:MSE23403@%%@4@%The %@AI@%Meta%@AE@% function (F9) is a prefix, similar to %@AI@%r%@AE@%%@AI@% Arg%@AE@%, which reverses or%@EH@%
  652. alters the effect of a function. You can cancel the effect of the %@AI@%Undo%@AE@%
  653. function with the command sequence %@AI@%Meta%@AE@%%@AI@%Undo%@AE@%:%@NL@%
  654. %@NL@%
  655.      %@AS@%F9 ALT+BKSP%@AE@%%@NL@%
  656. %@NL@%
  657. %@CR:MSE23404@%%@4@%This variation on the %@AI@%Undo%@AE@% function is often called "Redo." If you undo a%@EH@%
  658. series of commands, you can recall each of these commands by using %@AI@%Meta Undo%@AE@%
  659. repeatedly. %@AI@%Undo%@AE@% walks backward through the history of the file (it restores
  660. an earlier state); %@AI@%Meta Undo%@AE@% walks forward.%@NL@%
  661. %@NL@%
  662. %@NL@%
  663. %@CR:MSE23500@%%@3@%%@AB@%2.3.5  Using Delete to Move Text%@AE@%%@EH@%%@NL@%
  664. %@NL@%
  665. %@CR:MSE23501@%%@4@%The %@AI@%Delete%@AE@% function can be used to move text as well as delete it. The last%@EH@%
  666. text deleted is placed on the "Clipboard." The Clipboard holds text selected
  667. by either the %@AI@%Copy%@AE@% or %@AI@%Delete%@AE@% function. Pressing SHIFT+INS invokes the %@AI@%Paste%@AE@%
  668. function, which inserts the contents of the Clipboard into the file at the
  669. present cursor position.%@NL@%
  670. %@NL@%
  671. %@CR:MSE23502@%%@4@%In this section, %@AI@%Delete%@AE@% will be used to move two complete lines of text.%@EH@%
  672. Consider the current text:%@NL@%
  673. %@NL@%
  674.      It's mind over matter.%@NL@%
  675.      What is mind?%@NL@%
  676.      No matter.%@NL@%
  677.      What is matter?%@NL@%
  678.      Never mind.%@NL@%
  679. %@NL@%
  680. %@CR:MSE23503@%%@4@%Move the cursor to the beginning of the fourth line. Select the bottom two%@EH@%
  681. lines by pressing ALT+A and then pressing the DOWN key twice. You should see
  682. the bottom two lines highlighted, as shown in Figure 2.3%@FN@%
  683. Figure 2.3 is found on page 13 in the printed version of this guide.%@EF@% below.%@NL@%
  684. %@NL@%
  685. %@CR:MSE23504@%%@4@%Now invoke the %@AI@%Delete%@AE@% function by pressing DEL. The two lines disappear. The%@EH@%
  686. %@AI@%Delete%@AE@% function deletes the characters you highlight.%@NL@%
  687. %@NL@%
  688. %@CR:MSE23505@%%@4@%Having deleted a block of characters, you are ready to use the %@AI@%Paste%@AE@%%@EH@%
  689. function (SHIFT+INS) to insert the deleted text at a new location. Move the
  690. cursor to the beginning of the top line and press SHIFT+INS. You should see
  691. the following text:%@NL@%
  692. %@NL@%
  693.      What is matter?%@NL@%
  694.      Never mind.%@NL@%
  695.      It's mind over matter.%@NL@%
  696.      What is mind?%@NL@%
  697.      No matter.%@NL@%
  698. %@NL@%
  699. %@CR:MSE23506@%%@4@%You can change the shape of the highlighted region by using the %@AI@%Boxstream%@AE@%%@EH@%
  700. function (CTRL+B), which changes the region into a rectangular area. See
  701. Chapter 3%@BO:    d239@% for more information.%@NL@%
  702. %@NL@%
  703. %@NL@%
  704. %@CR:MSE23600@%%@3@%%@AB@%2.3.6  Finding Strings with the Psearch Function%@AE@%%@EH@%%@NL@%
  705. %@NL@%
  706. %@CR:MSE23601@%%@4@%The %@AI@%Psearch%@AE@% function takes different kinds of arguments but performs the%@EH@%
  707. same general operation with each──searching for a string of text. The term
  708. %@AI@%Psearch%@AE@% stands for "plus search," and means the same thing as "forward
  709. search." This function, which is assigned to the F3 key, takes both text
  710. arguments and cursor-movement arguments. You can ask the editor to locate
  711. the next occurrence of the word %@AS@%mind%@AE@% by typing the word in as a text
  712. argument. Move the cursor to the beginning of the file, then try the
  713. following sequence of keystrokes:%@NL@%
  714. %@NL@%
  715. %@CR:MSE23602@%  1. Press ALT+A%@NL@%
  716.   2. Type the following text: %@AS@%mind%@AE@%%@NL@%
  717.   3. Press F3%@NL@%
  718. %@NL@%
  719. %@CR:MSE23603@%%@4@%As you type the word, it appears on the dialog line──the line just above the%@EH@%
  720. status line at the bottom of the screen. As soon as you press ALT+A and type
  721. the first character, the prompt %@AS@%Arg:%@AE@% appears on the dialog line. You can
  722. retype  characters on the dialog line by pressing BKSP (the backspace key).%@NL@%
  723. %@NL@%
  724. %@CR:MSE23604@%%@4@%You can achieve the same result by moving the cursor to the beginning of the%@EH@%
  725. word %@AS@%mind%@AE@% on the screen, then highlighting the word with the following
  726. sequence of keystrokes:%@NL@%
  727. %@NL@%
  728.      %@AS@%ALT+A RIGHT RIGHT RIGHT RIGHT F3%@AE@%%@NL@%
  729. %@NL@%
  730. %@CR:MSE23606@%%@4@%An even easier way of selecting the word is to give the keystroke sequence%@EH@%
  731. ALT+A F3, which selects the word at the current cursor location. This word
  732. (all characters up to the first blank or new-line character) becomes the
  733. search string.%@NL@%
  734. %@NL@%
  735. %@CR:MSE23607@%%@4@%Often when you use the %@AI@%Psearch%@AE@% function, you want to look repeatedly for%@EH@%
  736. some text string. To search for the text string most recently specified,
  737. press F3 by itself.%@NL@%
  738. %@NL@%
  739. %@NL@%
  740. %@CR:MSE23700@%%@3@%%@AB@%2.3.7  Inserting Spaces and Lines%@AE@%%@EH@%%@NL@%
  741. %@NL@%
  742. %@CR:MSE23701@%%@4@%You'll sometimes need to insert blank lines. There are two ways to do this:%@EH@%%@NL@%
  743. %@NL@%
  744. %@CR:MSE23702@%  1. Press ENTER. When insert mode is on, pressing ENTER inserts a new-line%@NL@%
  745.      character. (Recall that you turn insert mode on and off by pressing%@NL@%
  746.      INS.) Any text to the right of the cursor moves down into the newly%@NL@%
  747.      created line.%@NL@%
  748. %@NL@%
  749.   2. Invoke %@AI@%Linsert%@AE@% (line insert) by pressing CTRL+N. Regardless of cursor%@NL@%
  750.      position, the %@AI@%Linsert%@AE@% function inserts a blank line directly above the%@NL@%
  751.      current line.%@NL@%
  752. %@NL@%
  753. %@CR:MSE23703@%%@4@%%@AI@%Linsert%@AE@% also accepts an argument. Invoke %@AI@%Arg%@AE@% (ALT+A), move the cursor, and%@EH@%
  754. then invoke %@AI@%Linsert%@AE@% (CTRL+N). %@AI@%Linsert%@AE@% inserts as many blank spaces in front
  755. of the highlighted area as the number of characters you highlighted.%@NL@%
  756. %@NL@%
  757. %@NL@%
  758. %@CR:MSE23800@%%@3@%%@AB@%2.3.8  Exiting the Editor%@AE@%%@EH@%%@NL@%
  759. %@NL@%
  760. %@CR:MSE23801@%%@4@%Press F8 to leave the editor. The F8 key sequence invokes the %@AI@%Exit%@AE@% function,%@EH@%
  761. which automatically saves any changes you have made to the file and exits.
  762. The sequence F9 F8 exits without saving, and the sequence ALT+A ALT+A F2
  763. saves your most recent changes to the file without exiting.%@NL@%
  764. %@NL@%
  765. %@CR:MSE23802@%%@4@%See Section 4.1%@BO:   125dc@%, "Basic File Operations," for more information on%@EH@%
  766. loading and saving files.%@NL@%
  767. %@NL@%
  768. %@NL@%
  769. %@CR:MSE24000@%%@2@%%@AB@%2.4  Getting Help%@AE@%%@EH@%%@NL@%
  770. %@NL@%
  771. %@CR:MSE24001@%%@4@%One of the outstanding features of the editor is on-line Help. On-line Help%@EH@%
  772. displays the information you need directly on the screen without your having
  773. to exit the editor. You can quickly get information about any editing
  774. function.%@NL@%
  775. %@NL@%
  776. %@CR:MSE24002@%%@4@%To use the basic on-line Help, you must first run the installation procedure%@EH@%
  777. for the editor and follow all directions. The setup program for this
  778. Microsoft language product should install the editor for you. Installing the
  779. editor is important because it copies the Help files to your directories and
  780. properly configures the editor's initialization file, TOOLS.INI.%@NL@%
  781. %@NL@%
  782. %@NL@%
  783. %@CR:MSE24100@%%@3@%%@AB@%2.4.1  Starting On-Line Help%@AE@%%@EH@%%@NL@%
  784. %@NL@%
  785. %@CR:MSE24101@%%@4@%Press SHIFT+F1 to bring up the first Help screen. On-line Help is largely%@EH@%
  786. self-explanatory. The first screen gives a list of the basic Help commands
  787. and provides access to other parts of the Help system.%@NL@%
  788. %@NL@%
  789. %@CR:MSE24102@%%@4@%Press F1 for context-sensitive Help. "Context-sensitive Help" displays a%@EH@%
  790. Help screen for the word at the current cursor position. The entire word is
  791. used──even if the cursor is in the middle of the word. If the cursor is on a
  792. space, the Help system uses the word immediately preceding the space. Thus
  793. you can type a word, press F1, and get Help for that word.%@NL@%
  794. %@NL@%
  795. %@CR:MSE24103@%%@4@%The editor searches through its list of Help files for a screen%@EH@%
  796. corresponding to the word at the cursor position. If no screen exists for
  797. the topic, the editor displays the first Help screen.%@NL@%
  798. %@NL@%
  799. %@NL@%
  800. %@CR:MSE24200@%%@3@%%@AB@%2.4.2  Moving through On-Line Help%@AE@%%@EH@%%@NL@%
  801. %@NL@%
  802. %@CR:MSE24201@%%@4@%The first Help screen explains how to move between Help screens on different%@EH@%
  803. topics. To move around within a Help topic, use the same keys (DIRECTION
  804. keys, HOME, END, F3) that you use to move through a file. You can use PGUP
  805. and PGDN  to move up or down a page at a time.%@NL@%
  806. %@NL@%
  807. %@NL@%
  808. %@CR:MSE24300@%%@3@%%@AB@%2.4.3  Leaving On-Line Help%@AE@%%@EH@%%@NL@%
  809. %@NL@%
  810. %@CR:MSE24301@%%@4@%By default, the editor splits the screen into two windows when you bring up%@EH@%
  811. a Help screen. You can move between windows by pressing F6. Moving from the
  812. Help window to the editing window lets you continue editing while still
  813. viewing Help information. To close the Help window, press ESC.%@NL@%
  814. %@NL@%
  815. %@CR:MSE24302@%%@4@%Section 7.2.5%@BO:   370ae@%, "Changing the Look and Feel of Help," explains how to%@EH@%
  816. use Help without splitting the screen. If you use this technique, you leave
  817. Help by press-ing F2 or ESC.%@NL@%
  818. %@NL@%
  819. %@NL@%
  820. %@CR:MSE25000@%%@2@%%@AB@%2.5  The Microsoft Editor's Command Line%@AE@%%@EH@%%@NL@%
  821. %@NL@%
  822. %@CR:MSE25001@%%@4@%Use the following command line to start up the editor (the options are case%@EH@%
  823. sensitive):%@NL@%
  824. %@NL@%
  825.      M «/D» «/e %@AI@%command%@AE@%» «/t» «%@AI@%files%@AE@%»%@NL@%
  826. %@NL@%
  827. %@CR:MSE25002@%%@4@%Begin the command line with the base of the editor's actual file name. For%@EH@%
  828. example, if you are using the protected-mode version, the editor's file name
  829. is MEP.EXE. (However, you can rename this file to M.EXE.)%@NL@%
  830. %@NL@%
  831. %@CR:MSE25003@%%@4@%The /D option prevents the editor from examining TOOLS.INI for%@EH@%
  832. initialization settings (see Chapter 7%@BO:   3396c@%, "Switches, Assignments, and the
  833. TOOLS.INI File," for more information).%@NL@%
  834. %@NL@%
  835. %@CR:MSE25004@%%@4@%The /e option enables you to specify a command upon start-up. The %@AI@%command%@AE@%%@EH@%
  836. argument is a string that follows the same syntax rules as those given for
  837. macros in Chapter 6%@BO:   28e3a@%, "Function Assignments and Macros." If %@AI@%command%@AE@% contains
  838. a space, the entire string should be enclosed in quotation marks. To
  839. represent embedded quotation marks, precede each quotation mark by a
  840. backslash (\"). To represent a literal backslash, use two backslashes (\\).
  841. For example, the system-level command%@NL@%
  842. %@NL@%
  843.      M /e "arg \"search \\\" string\" psearch" FILE.TXT%@NL@%
  844. %@NL@%
  845. %@CR:MSE25005@%%@4@%causes the editor to start up and execute the following command:%@EH@%%@NL@%
  846. %@NL@%
  847.      arg "search \" string" psearch%@NL@%
  848. %@NL@%
  849. %@CR:MSE25006@%%@4@%The /t option specifies that the names of any files following this option%@EH@%
  850. are not retained in the editor's information file when the session
  851. terminates. When you use the %@AI@%Information%@AE@% command at the next editing session
  852. to list the most recently edited files, these names will not appear.%@NL@%
  853. %@NL@%
  854. %@CR:MSE25007@%%@4@%If a single %@AI@%file%@AE@% is specified, the editor attempts to load the file. If the%@EH@%
  855. file does not yet exist, the editor asks you if you want to create the file.
  856. If you type Y (yes), the editor creates the file. If you type another
  857. character, the editor does not create the file, but loads the most recently
  858. edited file or (if no files have been previously edited) exits.%@NL@%
  859. %@NL@%
  860. %@CR:MSE25008@%%@4@%If multiple %@AI@%files%@AE@% are specified, the first file is loaded; then, when you%@EH@%
  861. invoke the %@AI@%Exit%@AE@% function, the editor saves the current file and loads the
  862. next file in the list. If no %@AI@%files%@AE@% are specified, the editor attempts to
  863. load the file you were editing when you last exited the editor.%@NL@%
  864. %@NL@%
  865. %@CR:MSE25009@%%@4@%You can specify multiple %@AI@%files%@AE@% by either typing in different file names%@EH@%
  866. explicitly or by using the DOS wildcard characters, ? and *. For example,
  867. the following command line causes the editor to load every file in the
  868. current directory with a .TXT extension:%@NL@%
  869. %@NL@%
  870.      M *.txt%@NL@%
  871. %@NL@%
  872. %@CR:MSE2500A@%%@4@%On start-up, the status line displays at least four fields. The status line%@EH@%
  873. can display up to thirteen fields. The first four fields listed below are
  874. always displayed:%@NL@%
  875. %@NL@%
  876. %@CR:MSE2500B@%  1. Name of the file being edited.%@NL@%
  877. %@NL@%
  878.   2. Type of file (based on extension).%@NL@%
  879. %@NL@%
  880.   3. The length of the file in lines.%@NL@%
  881. %@NL@%
  882.   4. Cursor position or window position of upper-left corner.%@NL@%
  883. %@NL@%
  884.   5. The word %@AS@%modified%@AE@% if the file has been changed.%@NL@%
  885. %@NL@%
  886.   6. The letters %@AS@%NL%@AE@% if no carriage returns were found when the file was%@NL@%
  887.      loaded (that is, if the file did not contain carriage returns to denote%@NL@%
  888.      the end of each line, but used only line feeds).%@NL@%
  889. %@NL@%
  890.   7. The word %@AS@%insert%@AE@% if you are in insert mode.%@NL@%
  891. %@NL@%
  892.   8. The word %@AS@%meta%@AE@% if you have invoked the %@AI@%Meta%@AE@% function.%@NL@%
  893. %@NL@%
  894.   9. The word %@AS@%No-Edit%@AE@% if the file cannot be changed at any time during the%@NL@%
  895.      editing session. Some of the internal files created by the editor, such%@NL@%
  896.      as <information> and <assign>, fall into this category.%@NL@%
  897. %@NL@%
  898.  1    . The word %@AS@%RO-File%@AE@% if the file has the read-only attribute. (This%@NL@%
  899.      attribute is set outside of the editor.) The file can be modified, but%@NL@%
  900.      after being modified, it can be saved only under a different file name.%@NL@%
  901. %@NL@%
  902.  11. The word %@AS@%cancel%@AE@% if you recently invoked the %@AI@%Cancel%@AE@% function.%@NL@%
  903. %@NL@%
  904.  12. The letters %@AS@%BC%@AE@% if a background compilation is in progress under OS/2%@NL@%
  905.      protected mode (or %@AS@%XX%@AE@% if the background compilation failed to begin).%@NL@%
  906. %@NL@%
  907.  13. The letters %@AS@%REC%@AE@% while a macro is being recorded.%@NL@%
  908. %@NL@%
  909. %@NL@%
  910. %@CR:MSE26000@%%@2@%%@AB@%2.6  Hints for Using the Editor%@AE@%%@EH@%%@NL@%
  911. %@NL@%
  912. %@CR:MSE26001@%%@CR:MSE26002@%%@4@%Here are two hints to keep in mind as you learn to use the editor:%@EH@%%@NL@%
  913. %@NL@%
  914. %@CR:MSE26003@%  1. The Microsoft Editor names functions in a consistent way. Section 3.2%@BO:    df64@%,%@NL@%
  915.      "Naming Conventions for Functions," explains the conventions. Table A.1%@NL@%
  916.      lists editing functions by category.%@NL@%
  917. %@NL@%
  918.   2. If you forget which keystroke is associated with a function, use%@NL@%
  919.      on-line Help for quick reference. If Help is installed, you can get%@NL@%
  920.      function assignments by pressing SHIFT+F1 and then choosing the Current%@NL@%
  921.      Assignments screen. If Help is not installed, pressing F1 takes you%@NL@%
  922.      directly to this screen.%@NL@%
  923. %@NL@%
  924. %@NL@%
  925. %@CR:MSE30000@%%@1@%%@AB@%Chapter 3  Command Syntax%@AE@%%@EH@%%@NL@%
  926. ───────────────────────────────────────────────────────────────────────────%@NL@%
  927. %@NL@%
  928. %@CR:MSE30001@%%@4@%If you've worked through Chapter 2%@BO:    7023@%, you have seen the flexibility of%@EH@%
  929. Microsoft Editor commands. Many of the functions accept a variety of
  930. arguments──text arguments, cursor-movement arguments──or no argument at all.
  931. This chapter describes each argument type in detail. The chapter also
  932. presents the syntax and naming conventions used throughout the manual.%@NL@%
  933. %@NL@%
  934. %@CR:MSE30002@%%@4@%Topics are covered in the following order:%@EH@%%@NL@%
  935. %@NL@%
  936. %@CR:MSE30003@%  ■  Entering a command%@NL@%
  937.   ■  Function naming conventions%@NL@%
  938.   ■  Argument types%@NL@%
  939.   ■  Text arguments (%@AI@%numarg, markarg, textarg%@AE@%)%@NL@%
  940.   ■  Highlighting a text argument%@NL@%
  941.   ■  Cursor-movement arguments (%@AI@%streamarg, linearg, boxarg%@AE@%)%@NL@%
  942. %@NL@%
  943. %@NL@%
  944. %@CR:MSE31000@%%@2@%%@AB@%3.1  Entering a Command%@AE@%%@EH@%%@NL@%
  945. %@NL@%
  946. %@CR:MSE31001@%%@4@%Commands take two basic forms. You can invoke a function by itself, or you%@EH@%
  947. can introduce an argument and then invoke a function.%@NL@%
  948. %@NL@%
  949. %@CR:MSE31002@%%@4@%Use the %@AI@%Arg%@AE@% prefix to introduce an argument. By default, %@AI@%Arg%@AE@% is assigned to%@EH@%
  950. ALT+A (hold down the ALT key and press A). You can then type characters or
  951. move the cursor to highlight part of the screen.%@NL@%
  952. %@NL@%
  953. %@CR:MSE31003@%%@4@%Finally, invoke the function you want by pressing the corresponding%@EH@%
  954. keystroke. If you forget the keystroke, you can look it up in on-line Help.%@NL@%
  955. %@NL@%
  956. %@CR:MSE31004@%%@4@%The two basic forms of a command are summarized below:%@EH@%%@NL@%
  957. %@NL@%
  958.      %@AI@%Function%@AE@%
  959.      %@AI@%Arg argument Function%@AE@%%@NL@%
  960. %@NL@%
  961. %@CR:MSE31006@%%@4@%Some functions also let you form a command in one or more of the following%@EH@%
  962. three ways:%@NL@%
  963. %@NL@%
  964. %@CR:MSE31007@%  1. Some functions accept %@AI@%Arg%@AE@% with no argument: %@AI@%Arg%@AE@%%@AI@%Function%@AE@%.%@NL@%
  965. %@NL@%
  966.   2. Some functions accept %@AI@%Arg Arg%@AE@% (press ALT+A twice). The sequence %@AI@%Arg Arg%@AE@%%@NL@%
  967.      can introduce a function just as %@AI@%Arg%@AE@% does.%@NL@%
  968. %@NL@%
  969.   3. Some functions work differently when given the %@AI@%Meta%@AE@% prefix. You can%@NL@%
  970.      toggle %@AI@%Meta%@AE@% on and off by pressing F9. When %@AI@%Meta%@AE@% is on, the word %@AS@%meta%@AE@%%@NL@%
  971.      appears on the status line.%@NL@%
  972. %@NL@%
  973. %@CR:MSE31008@%%@4@%See Chapter 4%@BO:   120e2@%, "A Survey of the Editor's Commands," and Table A.3 for%@EH@%
  974. information on what syntax is accepted by each function.%@NL@%
  975. %@NL@%
  976. %@CR:MSE31009@%%@4@%Once you begin entering a command, you can cancel %@AI@%Arg%@AE@% and any argument by%@EH@%
  977. invoking the %@AI@%Cancel%@AE@% function (ESC). The Cancel function is also useful for
  978. clearing the dialog line.%@NL@%
  979. %@NL@%
  980. ───────────────────────────────────────────────────────────────────────────%@NL@%
  981. %@AI@%NOTE%@AE@%%@NL@%
  982.    Throughout this manual, function names are given in italics and are%@NL@%
  983.    initial capped (for example: %@AI@%Paste%@AE@%). %@AI@%Argument%@AE@% types are given in italics%@NL@%
  984.    and are lowercase (for example: %@AI@%textarg%@AE@%).%@NL@%
  985. ───────────────────────────────────────────────────────────────────────────%@NL@%
  986. %@NL@%
  987. %@NL@%
  988. %@CR:MSE32000@%%@2@%%@AB@%3.2  Naming Conventions for Functions%@AE@%%@EH@%%@NL@%
  989. %@NL@%
  990. %@CR:MSE32001@%%@4@%The Microsoft Editor follows a consistent pattern of function names.%@EH@%
  991. Function names often begin with the letters P, M, S, L, or Cur, which can
  992. have the following meanings:%@NL@%
  993. %@NL@%
  994. %@CR:MSE32002@%%@AB@%Initial Letter(s)           Usage%@AE@%%@NL@%
  995. %@NL@%
  996. %@NL@%
  997. P                           Plus. Indicates forward movement of some kind.%@NL@%
  998.                             For example, %@AI@%Psearch%@AE@% is the forward-search%@NL@%
  999.                             command, and %@AI@%Pword%@AE@% moves the cursor forward one%@NL@%
  1000.                             word.%@NL@%
  1001. %@NL@%
  1002. M                           Minus. Indicates backward movement of some kind.%@NL@%
  1003.                             For example, %@AI@%Msearch%@AE@% is the backward-search%@NL@%
  1004.                             command, and %@AI@%Mword%@AE@% moves the cursor backward one%@NL@%
  1005.                             word.%@NL@%
  1006. %@NL@%
  1007. S                           Stream. Indicates a stream-oriented,%@NL@%
  1008.                             block-of-text function. This category includes%@NL@%
  1009.                             %@AI@%Sinsert%@AE@%, which inserts spaces in the stream of%@NL@%
  1010.                             text between two cursor positions, and %@AI@%Sdelete%@AE@%,%@NL@%
  1011.                             which deletes the stream. Without an argument,%@NL@%
  1012.                             these functions insert or delete a single space.%@NL@%
  1013. %@NL@%
  1014. L                           Line. Indicates a line-and-box-oriented%@NL@%
  1015.                             function. This category includes %@AI@%Linsert%@AE@%, which%@NL@%
  1016.                             inserts spaces in the exact area highlighted on%@NL@%
  1017.                             screen, and %@AI@%Ldelete%@AE@%, which deletes it. Without%@NL@%
  1018.                             an argument, these functions insert or delete a%@NL@%
  1019.                             line.%@NL@%
  1020. %@NL@%
  1021. Cur                         Current. Indicates one of the special insertion%@NL@%
  1022.                             functions, such as %@AI@%Curdate%@AE@% (insert current date)%@NL@%
  1023.                             and %@AI@%Curfile%@AE@% (insert current file name).%@NL@%
  1024. %@NL@%
  1025. %@NL@%
  1026. %@CR:MSE33000@%%@2@%%@AB@%3.3  Argument Types%@AE@%%@EH@%%@NL@%
  1027. %@NL@%
  1028. %@CR:MSE33001@%%@4@%There are two basic ways to enter arguments: you can enter text directly as%@EH@%
  1029. part of the command (text argument), or you can use cursor movement to
  1030. highlight characters on the screen (cursor-movement argument). Each of these
  1031. two methods has several variations, as shown in the following list:%@NL@%
  1032. %@NL@%
  1033. %@CR:MSE33002@%  1. Text argument. After you invoke %@AI@%Arg%@AE@% (ALT+A), continue to type%@NL@%
  1034.      characters. These characters appear on the dialog line (the line next%@NL@%
  1035.      to the bottom of the screen). You can give three different kinds of%@NL@%
  1036.      text arguments:%@NL@%
  1037. %@NL@%
  1038.      a.   A %@AI@%numarg%@AE@%, which consists of a string of digits.%@NL@%
  1039. %@NL@%
  1040.      b.   A %@AI@%markarg%@AE@%, which is a string containing the name of a previously%@NL@%
  1041.           defined file marker.%@NL@%
  1042. %@NL@%
  1043.      c.   A %@AI@%textarg%@AE@%, which is any text argument not recognized as a %@AI@%numarg%@AE@%%@NL@%
  1044.           or %@AI@%markarg%@AE@%.%@NL@%
  1045. %@NL@%
  1046.   2. Cursor-movement argument. After you invoke %@AI@%Arg%@AE@% (ALT+A), the current%@NL@%
  1047.      cursor position is highlighted. Highlight more characters by moving the%@NL@%
  1048.      cursor to a new position. You can give three different kinds of%@NL@%
  1049.      cursor-movement arguments:%@NL@%
  1050. %@NL@%
  1051.      a.   A %@AI@%linearg%@AE@%, in which the old and new cursor positions are in%@NL@%
  1052.           different lines but the same column.%@NL@%
  1053. %@NL@%
  1054.      b.   A %@AI@%boxarg%@AE@%, in which the old and new cursor positions are in%@NL@%
  1055.           different columns.%@NL@%
  1056. %@NL@%
  1057.      c.   A %@AI@%streamarg%@AE@%, which can consist of any cursor movement.%@NL@%
  1058. %@NL@%
  1059. %@NL@%
  1060. %@CR:MSE34000@%%@2@%%@AB@%3.4  Text Arguments (numarg, markarg, textarg)%@AE@%%@EH@%%@NL@%
  1061. %@NL@%
  1062. %@CR:MSE34001@%%@4@%After you invoke %@AI@%Arg%@AE@% (ALT+A), you can enter a text argument by typing any%@EH@%
  1063. printable characters, including blank spaces. The first time you invoke %@AI@%Arg%@AE@%,
  1064. the following characters appear on the dialog line (the line next to the
  1065. bottom of the screen):%@NL@%
  1066. %@NL@%
  1067.      %@AS@%Arg [1]%@AE@%%@NL@%
  1068. %@NL@%
  1069. %@CR:MSE34002@%%@4@%If you press ALT+A again, the number in the brackets changes. Any characters%@EH@%
  1070. you type appear on the dialog line after %@AS@%Arg [1]%@AE@%.%@NL@%
  1071. %@NL@%
  1072. %@CR:MSE34003@%%@4@%When entering a text argument, you can edit, move through, or modify the%@EH@%
  1073. text argument in the following ways:%@NL@%
  1074. %@NL@%
  1075. %@CR:MSE34004@%  1. Erase a character by pressing BKSP.%@NL@%
  1076. %@NL@%
  1077.   2. Erase the character at the current cursor position with the %@AI@%Sdelete%@AE@%%@NL@%
  1078.      function (DEL).%@NL@%
  1079. %@NL@%
  1080.   3. Move back and forth nondestructively with LEFT and RIGHT. If you use%@NL@%
  1081.      RIGHT to move past the end of current input, the editor inserts the%@NL@%
  1082.      character from the corresponding position in the previous text%@NL@%
  1083.      argument.%@NL@%
  1084. %@NL@%
  1085.   4. Insert a space at the cursor position with the %@AI@%Sinsert%@AE@% function%@NL@%
  1086.      (CTRL+J).%@NL@%
  1087. %@NL@%
  1088.   5. Move to the beginning of the text with %@AI@%Begline%@AE@% (HOME) and to the end of%@NL@%
  1089.      the text with %@AI@%Endline%@AE@% (END).%@NL@%
  1090. %@NL@%
  1091.   6. Clear characters from the current cursor position to the end of the%@NL@%
  1092.      line with the %@AI@%Arg%@AE@% function (ALT+A).%@NL@%
  1093. %@NL@%
  1094. %@CR:MSE34005@%%@4@%To repeat the most recently entered text argument, invoke the %@AI@%Lasttext%@AE@%%@EH@%
  1095. function, which by default is assigned to CTRL+O. When you use %@AI@%Lasttext%@AE@%, the
  1096. %@AI@%Arg%@AE@% prefix is unnecessary.%@NL@%
  1097. %@NL@%
  1098. %@NL@%
  1099. %@CR:MSE34100@%%@3@%%@AB@%3.4.1  The numarg Type%@AE@%%@EH@%%@NL@%
  1100. %@NL@%
  1101. %@CR:MSE34101@%%@4@%A %@AI@%numarg%@AE@% is a string of digits that you enter as a text argument. Each of%@EH@%
  1102. the three following examples is a %@AI@%numarg%@AE@%:%@NL@%
  1103. %@NL@%
  1104.      %@AS@%3%@AE@%%@NL@%
  1105.      %@AS@%11%@AE@%%@NL@%
  1106.      %@AS@%45%@AE@%%@NL@%
  1107. %@NL@%
  1108. %@CR:MSE34102@%%@4@%The number must be a valid decimal integer. A %@AI@%numarg%@AE@% is evaluated as a%@EH@%
  1109. number and not as literal text. Typically, it is used to indicate a range of
  1110. lines starting with the cursor position. For example, the following command
  1111. sequence deletes 10 lines starting with the cursor position:%@NL@%
  1112. %@NL@%
  1113. %@CR:MSE34103@%  1. Invoke %@AI@%Arg%@AE@% (press ALT+A)%@NL@%
  1114. %@NL@%
  1115.   2. Type the following text: %@AS@%10%@AE@%%@NL@%
  1116. %@NL@%
  1117.   3. Invoke %@AI@%Ldelete%@AE@% (press CTRL+Y)%@NL@%
  1118. %@NL@%
  1119. %@CR:MSE34104@%%@4@%Some functions accept text arguments but do not recognize a %@AI@%numarg%@AE@%. These%@EH@%
  1120. functions treat a %@AI@%numarg%@AE@% as an ordinary %@AI@%textarg%@AE@%.%@NL@%
  1121. %@NL@%
  1122. %@NL@%
  1123. %@CR:MSE34200@%%@3@%%@AB@%3.4.2  The markarg Type%@AE@%%@EH@%%@NL@%
  1124. %@NL@%
  1125. %@CR:MSE34201@%%@4@%A %@AI@%markarg%@AE@% is a file-marker name you have previously defined with the %@AI@%Mark%@AE@%%@EH@%
  1126. function (CTRL+M). See Section 4.4%@BO:   1839c@%, "Using File Markers," for information
  1127. about %@AI@%Mark%@AE@%.%@NL@%
  1128. %@NL@%
  1129. %@CR:MSE34202@%%@4@%Once defined, you can enter the marker name as a %@AI@%markarg%@AE@%. The name is not%@EH@%
  1130. treated as literal text, but is interpreted as an actual file position. For
  1131. example, the following command sequence copies all text between the cursor
  1132. position and the file position previously marked as %@AS@%P1%@AE@%:%@NL@%
  1133. %@NL@%
  1134. %@CR:MSE34203@%  1. Invoke %@AI@%Arg%@AE@% (press ALT+A)%@NL@%
  1135. %@NL@%
  1136.   2. Enter the following text: %@AS@%P1%@AE@%%@NL@%
  1137. %@NL@%
  1138.   3. Invoke %@AI@%Copy%@AE@%(press CTRL+INS)%@NL@%
  1139. %@NL@%
  1140. %@CR:MSE34204@%%@4@%Many functions accept text arguments but do not recognize a %@AI@%markarg%@AE@%. In%@EH@%
  1141. these cases, the %@AI@%markarg%@AE@% is treated as an ordinary %@AI@%textarg%@AE@%.%@NL@%
  1142. %@NL@%
  1143. %@NL@%
  1144. %@CR:MSE34300@%%@3@%%@AB@%3.4.3  The textarg Type%@AE@%%@EH@%%@NL@%
  1145. %@NL@%
  1146. %@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@%
  1147. %@AI@%textarg%@AE@% has no special meaning; it is interpreted by the function as literal
  1148. text. For example, the following sequence finds the next occurrence of the
  1149. string %@AS@%Happy%@AE@%%@AS@%New Year%@AE@%:%@NL@%
  1150. %@NL@%
  1151. %@CR:MSE34302@%  1. Invoke %@AI@%Arg%@AE@% (press ALT+A)%@NL@%
  1152. %@NL@%
  1153.   2. Type the following: %@AS@%Happy New Year%@AE@%%@NL@%
  1154. %@NL@%
  1155.   3. Invoke %@AI@%Psearch%@AE@% (press F3)%@NL@%
  1156. %@NL@%
  1157. %@CR:MSE34303@%%@4@%A %@AI@%textarg%@AE@% can either be typed in directly or highlighted on the screen. The%@EH@%
  1158. next section describes how to highlight a text argument.%@NL@%
  1159. %@NL@%
  1160. %@NL@%
  1161. %@CR:MSE35000@%%@2@%%@AB@%3.5  Highlighting a Text Argument%@AE@%%@EH@%%@NL@%
  1162. %@NL@%
  1163. %@CR:MSE35001@%%@4@%If the text argument already appears in the editing screen, you can save%@EH@%
  1164. typing by highlighting the text. You can highlight all or part of one line;
  1165. a text argument cannot consist of multiple lines.%@NL@%
  1166. %@NL@%
  1167. %@CR:MSE35002@%%@4@%To highlight a text argument:%@EH@%%@NL@%
  1168. %@NL@%
  1169. %@CR:MSE35003@%  1. Move the cursor to the first character in the text argument.%@NL@%
  1170. %@NL@%
  1171.   2. Invoke %@AI@%Arg%@AE@% (press ALT+A).%@NL@%
  1172. %@NL@%
  1173.      The current cursor position defines the "initial cursor position." As%@NL@%
  1174.      you move the cursor, characters between the initial cursor position and%@NL@%
  1175.      the new cursor position are highlighted.%@NL@%
  1176. %@NL@%
  1177.   3. Move the cursor to the right until all the desired text is highlighted.%@NL@%
  1178. %@NL@%
  1179.   4. Invoke the desired function. The editor passes the highlighted%@NL@%
  1180.      characters to this function, just as if you had directly typed in the%@NL@%
  1181.      highlighted characters.%@NL@%
  1182. %@NL@%
  1183. %@CR:MSE35004@%%@4@%For example, the highlighted area in Figure 3.1%@EH@%%@FN@%
  1184. Figure 3.1 is found on page 25 in the printed version of this guide.%@EF@% defines the text argument
  1185. %@AS@%pascal MoveCur%@AE@%.%@NL@%
  1186. %@NL@%
  1187. %@CR:MSE35005@%%@4@%Even if the highlighted text represents a legitimate %@AI@%numarg%@AE@% or %@AI@%markarg%@AE@%, it%@EH@%
  1188. will be interpreted by the function as a straight %@AI@%textarg%@AE@%. That is, a %@AI@%numarg%@AE@%
  1189. or %@AI@%markarg%@AE@% must be typed in on the status line; it cannot be selected from
  1190. the body of text.%@NL@%
  1191. %@NL@%
  1192. %@CR:MSE35006@%%@4@%Highlighting a %@AI@%textarg%@AE@% is a special case of a cursor-movement argument. The%@EH@%
  1193. next section discusses the other kinds of cursor-movement arguments.%@NL@%
  1194. %@NL@%
  1195. %@NL@%
  1196. %@CR:MSE36000@%%@2@%%@AB@%3.6  Cursor-Movement Arguments (linearg, boxarg, streamarg)%@AE@%%@EH@%%@NL@%
  1197. %@NL@%
  1198. %@CR:MSE36001@%%@4@%You enter a cursor-movement argument by invoking %@AI@%Arg%@AE@% (ALT+A) and moving the%@EH@%
  1199. cursor. When you invoke %@AI@%Arg%@AE@%, the current cursor position is marked with a
  1200. reverse-video highlight. This position is called the "initial cursor
  1201. position." As you move the cursor, characters between the initial cursor
  1202. position and the new cursor position are highlighted.%@NL@%
  1203. %@NL@%
  1204. %@CR:MSE36002@%%@4@%When the initial and new cursor positions are on different lines, you can%@EH@%
  1205. high-light regions by one of two different modes:%@NL@%
  1206. %@NL@%
  1207. %@CR:MSE36003@%  ■  In "box mode," the editor highlights either complete lines (if the new%@NL@%
  1208.      and initial cursor position are in the same column) or rectangular%@NL@%
  1209.      areas. In box mode, you can select complete lines, or highlight,%@NL@%
  1210.      delete, and insert columns without affecting the surrounding text. In%@NL@%
  1211.      box mode, a cursor-movement argument is either a %@AI@%linearg%@AE@% or %@AI@%boxarg%@AE@%, as%@NL@%
  1212.      explained in Sections 3.6.1%@BO:   11355@% and 3.6.2%@BO:   115ce@%.%@NL@%
  1213. %@NL@%
  1214.   ■  In "stream mode," the editor highlights text the way most text editors%@NL@%
  1215.      do. The highlighted region includes all text between the two positions,%@NL@%
  1216.      according to their sequence in the file. This region is usually not%@NL@%
  1217.      rectangular. In stream mode, a cursor-movement argument is always a%@NL@%
  1218.      %@AI@%streamarg%@AE@%, as explained in Section 3.6.3%@BO:   119d6@%, "The streamarg Type."%@NL@%
  1219. %@NL@%
  1220. %@CR:MSE36004@%%@4@%By default, the editor uses stream mode. You can toggle back and forth%@EH@%
  1221. between the two modes by invoking the %@AI@%Boxstream%@AE@% function (CTRL+B). You can
  1222. even invoke %@AI@%Boxstream%@AE@% while in the middle of creating a cursor-movement
  1223. argument──doing so changes the highlighting instantly.%@NL@%
  1224. %@NL@%
  1225. %@CR:MSE36005@%%@4@%To repeat the most recently entered cursor-movement argument, invoke the %@EH@%
  1226. %@AI@%Lastselect%@AE@% function, which by default is assigned to CTRL+U. When you use
  1227. %@AI@%Lastselect%@AE@%, the %@AI@%Arg%@AE@% prefix is unnecessary.%@NL@%
  1228. %@NL@%
  1229. %@CR:MSE36006@%%@4@%If you create a cursor-movement argument and then type a character, the%@EH@%
  1230. editor removes the highlighted area and replaces it with the character
  1231. typed. A similar result occurs when you create a cursor-movement argument
  1232. and then invoke the %@AI@%Paste%@AE@% function──the highlighted area is replaced by the
  1233. contents of the Clipboard.%@NL@%
  1234. %@NL@%
  1235. %@NL@%
  1236. %@CR:MSE36100@%%@3@%%@AB@%3.6.1  The linearg Type%@AE@%%@EH@%%@NL@%
  1237. %@NL@%
  1238. %@CR:MSE36101@%%@4@%A %@AI@%linearg%@AE@% is defined when the new cursor position is in the same column but%@EH@%
  1239. on a different line from the initial cursor position. The editor must be in
  1240. box mode. The editor responds by highlighting all lines between the two
  1241. cursor positions, including the lines that the cursor positions are on. For
  1242. example, the display in Figure 3.2%@FN@%
  1243. 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
  1244. then pressing DOWN three times.%@NL@%
  1245. %@NL@%
  1246. %@NL@%
  1247. %@CR:MSE36200@%%@3@%%@AB@%3.6.2  The boxarg Type%@AE@%%@EH@%%@NL@%
  1248. %@NL@%
  1249. %@CR:MSE36201@%%@4@%A %@AI@%boxarg%@AE@% is a rectangular area on the screen. The two corners of the area%@EH@%
  1250. are determined by the initial and new cursor positions. A %@AI@%boxarg%@AE@% is defined
  1251. when the two positions are in different columns (and possibly different
  1252. lines). The editor must be in box mode.%@NL@%
  1253. %@NL@%
  1254. %@CR:MSE36202@%%@4@%After invoking %@AI@%Arg%@AE@% (ALT+A), you can move the cursor left or right. The left%@EH@%
  1255. edge of the box includes the leftmost of the two cursor positions. The right
  1256. edge of the box includes the column just to the left of other cursor
  1257. positions. The box contains parts of all lines, inclusive, between the two
  1258. positions.%@NL@%
  1259. %@NL@%
  1260. %@CR:MSE36203@%%@4@%For example, the display shown in Figure 3.3%@EH@%%@FN@%
  1261. Figure 3.3 is found on page 27 in the printed version of this manual.%@EF@% is produced by invoking %@AI@%Arg%@AE@%
  1262. and then moving the cursor 3 lines down and 16 columns over.%@NL@%
  1263. %@NL@%
  1264. %@NL@%
  1265. %@CR:MSE36300@%%@3@%%@AB@%3.6.3  The streamarg Type%@AE@%%@EH@%%@NL@%
  1266. %@NL@%
  1267. %@CR:MSE36301@%%@4@%A %@AI@%streamarg%@AE@% consists of text between the initial cursor and the new cursor%@EH@%
  1268. positions. When the editor is in stream mode, every cursor-movement argument
  1269. is a %@AI@%streamarg%@AE@%. You toggle between box and stream mode by invoking %@AI@%Boxstream%@AE@%
  1270. (CTRL+B).%@NL@%
  1271. %@NL@%
  1272. %@CR:MSE36302@%%@4@%After pressing ALT+A, you can move the cursor in any direction to create a %@EH@%
  1273. %@AI@%streamarg%@AE@%. The %@AI@%streamarg%@AE@% is shown as highlighted characters.%@NL@%
  1274. %@NL@%
  1275. %@CR:MSE36303@%%@4@%If you move the cursor forward (that is, to the right or down), the%@EH@%
  1276. %@AI@%streamarg%@AE@% includes the character at the initial cursor position. If you move
  1277. the cursor backward (that is, to the left or up), the %@AI@%streamarg%@AE@% does %@AI@%not%@AE@%
  1278. include the character at the initial cursor position; the %@AI@%streamarg%@AE@% starts
  1279. at the preceding character.%@NL@%
  1280. %@NL@%
  1281. %@CR:MSE36304@%%@4@%When a %@AI@%streamarg%@AE@% spans multiple lines, it includes some characters that a %@EH@%
  1282. %@AI@%boxarg%@AE@% does not. Specifically, a multiline %@AI@%streamarg%@AE@% includes the following:%@NL@%
  1283. %@NL@%
  1284. %@CR:MSE36305@%  1. All characters from the first cursor position to the end of the line%@NL@%
  1285. %@NL@%
  1286.   2. All characters on the lines between the two cursor positions%@NL@%
  1287. %@NL@%
  1288.   3. All characters on the line of the second cursor position, up to but not%@NL@%
  1289.      including the cursor position itself%@NL@%
  1290. %@NL@%
  1291. %@CR:MSE36306@%%@4@%For example, the display shown in Figure 3.4%@EH@%%@FN@%
  1292. Figure 3.4 is found on page 27 in the printed version of this guide.%@EF@% is produced with the same
  1293. cursor movement used in Figure 3.3, but with stream mode on.%@NL@%
  1294. %@NL@%
  1295. %@NL@%
  1296. %@CR:MSE40000@%%@1@%%@AB@%Chapter 4  A Survey of the Editor's Commands%@AE@%%@EH@%%@NL@%
  1297. ───────────────────────────────────────────────────────────────────────────%@NL@%
  1298. %@NL@%
  1299. %@CR:MSE40001@%%@4@%The Microsoft Editor has all the standard features of a programmer's editor.%@EH@%
  1300. It lets you move quickly through a file, move blocks of text, search for
  1301. strings, and handle multiple files. In addition, the Microsoft Editor allows
  1302. you to use different windows for viewing more than one file or more than one
  1303. part of the same file. The Microsoft Editor can also invoke compilers and
  1304. assemblers, then display each compilation error.%@NL@%
  1305. %@NL@%
  1306. %@CR:MSE40002@%%@4@%This chapter expands on the editing topics introduced in Chapter 2%@BO:    7023@%. For a%@EH@%
  1307. complete list of the command syntax for every function, see Appendix A%@BO:   5d119@%,
  1308. "Reference Tables." This chapter covers topics in the following order:%@NL@%
  1309. %@NL@%
  1310. %@CR:MSE40003@%  ■  Basic file operations%@NL@%
  1311.   ■  Moving through a file%@NL@%
  1312.   ■  Inserting, copying, and deleting text%@NL@%
  1313.   ■  Using file markers%@NL@%
  1314.   ■  Searching and replacing%@NL@%
  1315.   ■  Compiling%@NL@%
  1316.   ■  Using editing windows%@NL@%
  1317.   ■  Working with multiple files%@NL@%
  1318.   ■  Printing all or part of a file%@NL@%
  1319. %@NL@%
  1320. %@NL@%
  1321. %@CR:MSE41000@%%@2@%%@AB@%4.1  Basic File Operations%@AE@%%@EH@%%@NL@%
  1322. %@NL@%
  1323. %@CR:MSE41001@%%@4@%This section discusses how to work with files in general and how to use%@EH@%
  1324. internal files called "pseudo files."%@NL@%
  1325. %@NL@%
  1326. %@NL@%
  1327. %@CR:MSE41100@%%@3@%%@AB@%4.1.1  File Commands%@AE@%%@EH@%%@NL@%
  1328. %@NL@%
  1329. %@CR:MSE41101@%%@4@%File operations are basic to all work with the editor. You use file%@EH@%
  1330. operations to save your work, load in a new text file, or completely exit
  1331. from the editor.%@NL@%
  1332. %@NL@%
  1333. %@CR:MSE41102@%%@4@%Chapter 2%@BO:    7023@% described how to save the current file and exit from the editor.%@EH@%
  1334. However, the Microsoft Editor supports a number of other file operations.
  1335. The list below shows how to use some of the most common file operations:%@NL@%
  1336. %@CR:MSE41103@%%@NL@%
  1337. %@TH:   24   1333  2 42 34 @%%@AB@%Command     %@AE@%%@AB@%(and Default Keystrokes)                  Description%@AE@%%@AI@%Exit%@AE@% (F8)                                 Exits editor after saving current                                          file%@AI@%Meta Exit%@AE@% (F9  F8)                        Exits editor without saving%@AI@%Arg Arg Setfile%@AE@% (ALT+A ALT+A F2)          Saves current file without exiting%@AI@%Arg Arg textarg Setfile%@AE@%                   Saves current file under the file(ALT+A ALT+A %@AI@%textarg%@AE@% F2)                  name (%@AI@%textarg%@AE@%) without exiting%@AI@%Arg textarg Setfile%@AE@% (ALT+A %@AI@%textarg%@AE@% F2)    Loads another file (entered as                                          %@AI@%textarg%@AE@%) into the editing window%@AI@%Arg Arg textarg Paste%@AE@%                     Merges (copies) another file(ALT+A ALT+A %@AI@%textarg%@AE@% SHIFT+INS)           (entered as%@AI@%textarg%@AE@%) into current                                          file──the new file is inserted at                                          the cursor position%@AI@%Refresh%@AE@% (SHIFT+F7)                        Discards most recent changes to                                          current file and rereads file from                                          disk%@TE:   24   1333  2 42 34 @%
  1338. %@NL@%
  1339. %@NL@%
  1340. %@CR:MSE41104@%%@4@%%@AB@%Example%@AE@%%@EH@%%@NL@%
  1341. %@NL@%
  1342. %@CR:MSE41105@%%@4@%As explained in Chapter 3%@BO:    d239@%, a %@AI@%textarg%@AE@% is simply an argument you type in%@EH@%
  1343. directly. For example, to load the file SAMPLE.TXT, you would follow these
  1344. steps:%@NL@%
  1345. %@NL@%
  1346. %@CR:MSE41106@%  1. Invoke the %@AI@%Arg%@AE@% function (press ALT+A)%@NL@%
  1347.   2. Type the following file name: %@AS@%SAMPLE.TXT%@AE@%%@NL@%
  1348.   3. Invoke the %@AI@%Setfile%@AE@% function (press F2)%@NL@%
  1349. %@NL@%
  1350. %@CR:MSE41107@%%@4@%Each of the operations listed above is frequently useful, yet some should be%@EH@%
  1351. used with caution. For example, you should only exit without saving when you
  1352. have accidentally altered a file you do not want to change, or when you have
  1353. made many mistakes during the editing session. When you exit without saving,
  1354. all the work you did since the last save operation is discarded.%@NL@%
  1355. %@NL@%
  1356. %@CR:MSE41108@%%@4@%Conversely, you may wish to save without leaving the editor. This operation%@EH@%
  1357. is usually safe, unless the current file is one that should not be changed.
  1358. Saving a file writes all the changes you made out to the disk. If your
  1359. system is vulnerable to power failures or other kinds of system failure, it
  1360. is a good idea to save your work often.%@NL@%
  1361. %@NL@%
  1362. %@CR:MSE41109@%%@4@%Merging and loading a file are not the same. Merging a file copies the%@EH@%
  1363. contents of another file and inserts it into the current file. Loading a
  1364. file first saves the current file (assuming the %@AB@%autosave%@AE@% switch is on), then
  1365. restarts the editing session with a new file.%@NL@%
  1366. %@NL@%
  1367. %@CR:MSE4110A@%%@4@%The editor supports other variations of these operations described above.%@EH@%
  1368. See Table A.3, under the %@AI@%Exit%@AE@% and %@AI@%Setfile%@AE@% functions, for more information.%@NL@%
  1369. %@NL@%
  1370. %@NL@%
  1371. %@CR:MSE41200@%%@3@%%@AB@%4.1.2  Special Syntax for Setfile%@AE@%%@EH@%%@NL@%
  1372. %@NL@%
  1373. %@CR:MSE41201@%%@4@%A text argument passed to %@AI@%Setfile%@AE@% can take a number of different forms: a%@EH@%
  1374. file name, a file name with a DOS  wildcard character (* or ?), the name of
  1375. a directory, or the name of a disk drive. If the text argument is a
  1376. directory name, the editor changes the current directory. If the argument is
  1377. a drive name, the editor changes the current drive.%@NL@%
  1378. %@NL@%
  1379. %@CR:MSE41202@%%@4@%File names can be complete path names and can include environment variables%@EH@%
  1380. defined with the system-level SET command. The %@AI@%Setfile%@AE@% function interprets
  1381. an environment variables as a list of directories to search for a file. You
  1382. enter an environment variable using the syntax%@NL@%
  1383. %@NL@%
  1384.      %@AB@%$%@AE@%%@AI@%environ%@AE@%%@AB@%:%@AE@%%@AI@%filename%@AE@%%@NL@%
  1385. %@NL@%
  1386. %@CR:MSE41204@%%@4@%in which %@AI@%environ%@AE@% is the name of an environment variable. For example, the%@EH@%
  1387. following actions cause the editor to search the INIT environment variable
  1388. to find the TOOLS.INI file and load it:%@NL@%
  1389. %@NL@%
  1390. %@CR:MSE41205@%  1. Invoke the %@AI@%Arg%@AE@% function (press ALT+A)%@NL@%
  1391.   2. Type the following file name: %@AS@%$INIT:tools.ini%@AE@%%@NL@%
  1392.   3. Invoke the %@AI@%Setfile%@AE@% function (press F2)%@NL@%
  1393. %@NL@%
  1394. %@CR:MSE41206@%%@4@%You can also use the environment-variable syntax with the %@AI@%Paste%@AE@% function%@EH@%
  1395. when you use this function to merge a file.%@NL@%
  1396. %@NL@%
  1397. %@CR:MSE41207@%%@4@%Finally, you can switch to a recently edited file by using a short name. A%@EH@%
  1398. "short name" is a file name with no path or extension . The editor searches
  1399. its list of recently edited files to find a name that matches the short
  1400. name.%@NL@%
  1401. %@NL@%
  1402. %@NL@%
  1403. %@CR:MSE41300@%%@3@%%@AB@%4.1.3  Pseudo Files%@AE@%%@EH@%%@NL@%
  1404. %@NL@%
  1405. %@CR:MSE41301@%%@4@%A "pseudo file" is an internal editing file. It exists only in the%@EH@%
  1406. computer's memory and does not correspond to any disk file. The editor
  1407. treats a pseudo file just like any other file except for two important
  1408. differences:%@NL@%
  1409. %@NL@%
  1410. %@CR:MSE41302@%  1. The name of a pseudo file always appears in angle brackets (<>).%@NL@%
  1411.   2. A pseudo file may not be saved to disk under its own name.%@NL@%
  1412. %@NL@%
  1413. %@CR:MSE41303@%%@4@%Why use pseudo files? Pseudo files are useful for temporary storage. Pseudo%@EH@%
  1414. files are updated almost instantaneously because writing to RAM is much
  1415. faster than writing to disk. You can also insert the contents of a pseudo
  1416. file into the current file with the %@AI@%Paste%@AE@% command.%@NL@%
  1417. %@NL@%
  1418. %@CR:MSE41304@%%@4@%The editor creates several pseudo files of its own and gives them special%@EH@%
  1419. meaning. You can open these files just like any other with the %@AI@%Setfile%@AE@%
  1420. function.%@NL@%
  1421. %@CR:MSE41305@%%@NL@%
  1422. %@TH:   37   2148  1 28 48 @%%@AB@%Pseudo File                 Description%@AE@%<clipboard>                 Stores text selected by a copy or deletion. This                            file can be modified; the modified file is then                            inserted when you invoke %@AI@%Paste%@AE@%.                            However, if you copy or delete text while                            editing this file, the selected text is not                            saved to the Clipboard but simply discarded.<assign>                    Shows an updated list of function and switch                            assignments. You can create new function and                            switch assignments by directly modifying this                            file; however, the assignments you make must                            follow the syntax described in Chapter 6%@BO:   28e3a@%,                            "Function Assignments and Macros."<information-file>          Shows a list of files that have been previously                            edited. This file cannot be modified. Each file                            currently open for editing is listed along with                            its length in lines.<compile>                   Shows error messages from the last compilation                            executed from within the editor. If the editor                            is running under protected mode, the error                            messages are dynamically updated while the                            compilation is running.<file-list>                 Shows a list of each file specified on the                            editor's command line that has not yet been                            opened. This file cannot be modified.<record>                    Records each editing command when you record a                            macro. The file is dynamic; it changes while you                            view it. You cannot directly modify this file.                            See Chapter 6%@BO:   28e3a@%, "Function Assignments and                            Macros."%@TE:   37   2148  1 28 48 @%
  1423. %@NL@%
  1424. %@CR:MSE42000@%%@2@%%@AB@%4.2  Moving through a File%@AE@%%@EH@%%@NL@%
  1425. %@NL@%
  1426. %@CR:MSE42001@%%@4@%Chapter 2%@BO:    7023@%, "Edit Now," described how to the use DIRECTION keys to move%@EH@%
  1427. through a file one space at a time. The DIRECTION keys correspond to the
  1428. functions %@AI@%Up%@AE@%, %@AI@%Down%@AE@%, %@AI@%Right%@AE@%, and %@AI@%Left%@AE@%, to which you can assign different keys
  1429. if you wish. Chapter 2%@BO:    7023@% also presented the %@AI@%Begline%@AE@% function (HOME), which
  1430. moves the cursor to the first printable character in the current line.
  1431. Similar to the %@AI@%Begline%@AE@% function is the %@AI@%Endline%@AE@% function (END), which moves
  1432. the cursor just to the right of the last  printable character in the current
  1433. line.%@NL@%
  1434. %@NL@%
  1435. %@CR:MSE42002@%%@4@%Each of the four direction functions in the following list has a variation%@EH@%
  1436. that uses the %@AI@%Meta%@AE@% function as a prefix. Each function, when used in a
  1437. command with the %@AI@%Meta%@AE@% prefix, moves the cursor as far as possible within the
  1438. displayed screen (or window) without changing column position or causing the
  1439. screen to scroll.%@NL@%
  1440. %@NL@%
  1441. %@CR:MSE42003@%%@NL@%
  1442. %@AB@%Command     %@AE@%%@NL@%
  1443. %@AB@%(and Default Keystrokes)     Description%@AE@%%@NL@%
  1444. %@NL@%
  1445. %@AI@%Meta Up%@AE@% (F9  UP)             Moves the cursor to the top of the screen%@NL@%
  1446. %@NL@%
  1447. %@AI@%Meta Down%@AE@% (F9  DOWN)         Moves the cursor to the bottom of the screen%@NL@%
  1448. %@NL@%
  1449. %@AI@%Meta Left%@AE@% (F9  LEFT)         Moves the cursor to the left-most position on%@NL@%
  1450.                              the current line%@NL@%
  1451. %@NL@%
  1452. %@AI@%Meta Right%@AE@% (F9  RIGHT)       Moves the cursor to the right-most position on%@NL@%
  1453.                              the current line%@NL@%
  1454. %@NL@%
  1455. %@AI@%Meta Begline%@AE@% (F9  HOME)      Moves the cursor to column 1%@NL@%
  1456. %@NL@%
  1457. %@NL@%
  1458. %@CR:MSE42100@%%@3@%%@AB@%4.2.1  Scrolling at the Screen's Edge%@AE@%%@EH@%%@NL@%
  1459. %@NL@%
  1460. %@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@%
  1461. scrolling. The screen (or current window) can scroll in all four
  1462. directions. Although the editor does not wrap lines that are wider than the
  1463. screen, you can have lines of text that are up to 250 characters wide. Use
  1464. the DIRECTION keys to scroll right and left when your text lines are wider
  1465. than the screen or current window.%@NL@%
  1466. %@NL@%
  1467. %@CR:MSE42102@%%@4@%Unlike some editors, the Microsoft Editor does not automatically scroll by%@EH@%
  1468. only one column or one line. Instead, the internal switches %@AB@%hscroll%@AE@%
  1469. (horizontal-scroll) and %@AB@%vscroll%@AE@% (vertical-scroll) control how fast the
  1470. editor scrolls. For example, if %@AB@%vscroll%@AE@% is set to 7, the editor advances the
  1471. screen position seven lines when you attempt to move the cursor off the
  1472. bottom of the screen. See Chapter 7%@BO:   3396c@% for more information on these switches.%@NL@%
  1473. %@NL@%
  1474. %@NL@%
  1475. %@CR:MSE42200@%%@3@%%@AB@%4.2.2  Scrolling a Page at a Time%@AE@%%@EH@%%@NL@%
  1476. %@NL@%
  1477. %@CR:MSE42201@%%@4@%The editor provides the %@AI@%Ppage%@AE@% (PGDN) and %@AI@%Mpage%@AE@% (PGUP) functions to move%@EH@%
  1478. through a file more quickly than you can by using the DIRECTION keys to move
  1479. one line or one column at a time.%@NL@%
  1480. %@NL@%
  1481. %@CR:MSE42202@%%@4@%The term "page" is defined as the amount of text that can be displayed in%@EH@%
  1482. the current window or screen. To advance one page forward through a file,
  1483. invoke the function %@AI@%Ppage%@AE@% (PGDN), which stands for "plus page."%@NL@%
  1484. %@NL@%
  1485. %@CR:MSE42203@%%@4@%The function %@AI@%Mpage%@AE@% (PGUP), which stands for "minus page," is the inverse of%@EH@%
  1486. %@AI@%Ppage%@AE@%, and it moves back through the file one page at a time.%@NL@%
  1487. %@NL@%
  1488. ───────────────────────────────────────────────────────────────────────────%@NL@%
  1489. %@AI@%NOTE%@AE@%%@NL@%
  1490.    In Version 1.0 of the editor, the %@AI@%Ppage%@AE@% and %@AI@%Mpage%@AE@% functions took%@NL@%
  1491.    arguments. You can use them to help build a cursor-movement argument;%@NL@%
  1492.    they do not cancel the current argument. The editor also provides two new%@NL@%
  1493.    functions──%@AI@%Begfile%@AE@% and %@AI@%Endfile%@AE@%──that move to the beginning and end of the%@NL@%
  1494.    file. The next section describes these functions.%@NL@%
  1495. ───────────────────────────────────────────────────────────────────────────%@NL@%
  1496. %@NL@%
  1497. %@NL@%
  1498. %@CR:MSE42300@%%@3@%%@AB@%4.2.3  Moving to the Top or Bottom of the File%@AE@%%@EH@%%@NL@%
  1499. %@NL@%
  1500. %@CR:MSE42301@%%@4@%The %@AI@%Begfile%@AE@% and %@AI@%Endfile%@AE@% functions provide the fastest cursor movement.%@EH@%%@NL@%
  1501. %@NL@%
  1502. %@CR:MSE42302@%%@4@%To move the cursor to the beginning of the file, invoke the %@AI@%Begfile%@AE@% function%@EH@%
  1503. by pressing CTRL+UP (the up-arrow key on the numeric keypad).%@NL@%
  1504. %@NL@%
  1505. %@CR:MSE42303@%%@4@%To move the cursor to the end of the file, invoke the %@AI@%Endfile%@AE@% function by%@EH@%
  1506. pressing CTRL+DOWN (the down-arrow key on the numeric keypad).%@NL@%
  1507. %@NL@%
  1508. %@NL@%
  1509. %@CR:MSE42400@%%@3@%%@AB@%4.2.4  Other File-Navigation Functions%@AE@%%@EH@%%@NL@%
  1510. %@NL@%
  1511. %@CR:MSE42401@%%@4@%The following functions are useful for moving through a file:%@EH@%%@NL@%
  1512. %@NL@%
  1513. %@CR:MSE42402@%%@AB@%Function     %@AE@%%@NL@%
  1514. %@AB@%(and Default Keystrokes)    Description%@AE@%%@NL@%
  1515. %@NL@%
  1516. %@AI@%Pword%@AE@%  (CTRL+RIGHT)         Moves the cursor forward (plus) one word%@NL@%
  1517. %@NL@%
  1518. %@AI@%Mword%@AE@% (CTRL+LEFT)           Moves the cursor backward (minus) one word%@NL@%
  1519. %@NL@%
  1520. %@AI@%Ppara%@AE@%                       Moves the cursor forward (plus) one paragraph%@NL@%
  1521. %@NL@%
  1522. %@AI@%Mpara%@AE@%                       Moves the cursor backward (minus) one paragraph%@NL@%
  1523. %@NL@%
  1524. %@AI@%Mark%@AE@% (CTRL+M)               Defines or moves to a marker, or moves to a%@NL@%
  1525.                             specified line number%@NL@%
  1526. %@NL@%
  1527. %@CR:MSE42403@%%@4@%With the %@AI@%Mark%@AE@% function, you can define a marker or move to a marker. Markers%@EH@%
  1528. constitute a special topic that is discussed in Section 4.4%@BO:   1839c@%, "Using File
  1529. Markers."%@NL@%
  1530. %@NL@%
  1531. %@NL@%
  1532. %@CR:MSE43000@%%@2@%%@AB@%4.3  Inserting, Copying, and Deleting Text%@AE@%%@EH@%%@NL@%
  1533. %@NL@%
  1534. %@CR:MSE43001@%%@4@%You may often need to move, copy, or delete blocks of text. The Microsoft%@EH@%
  1535. Editor is particularly powerful because it provides a variety of ways to
  1536. define a block of characters.%@NL@%
  1537. %@NL@%
  1538. %@CR:MSE43002@%%@4@%For example, you can delete a highlighted box, a range of lines, or a stream%@EH@%
  1539. of text between any two file positions. Sections 4.3.1%@BO:   162ea@%-4.3.4 discuss how to
  1540. work with blocks of text.%@NL@%
  1541. %@NL@%
  1542. %@NL@%
  1543. %@CR:MSE43100@%%@3@%%@AB@%4.3.1  Inserting and Deleting Text%@AE@%%@EH@%%@NL@%
  1544. %@NL@%
  1545. %@CR:MSE43101@%%@4@%Chapter 2%@BO:    7023@%, "Edit Now," described how to use the %@AI@%Paste%@AE@%, %@AI@%Insertmode%@AE@%, and%@EH@%
  1546. %@AI@%Delete%@AE@% functions to insert, move, and delete text.%@NL@%
  1547. %@NL@%
  1548. %@CR:MSE43102@%%@4@%The following list presents some of the most common commands that use the %@EH@%
  1549. %@AI@%Delete%@AE@% function:%@NL@%
  1550. %@NL@%
  1551. %@CR:MSE43103@%%@AB@%Command%@AE@%%@NL@%
  1552. %@AB@%(and Default Keystrokes)     Description%@AE@%%@NL@%
  1553. %@NL@%
  1554. %@AI@%Delete%@AE@% (DEL)                Deletes the character at the cursor position.%@NL@%
  1555.                             (This command does not join two lines of text,%@NL@%
  1556.                             even if the cursor is at the end of the line.)%@NL@%
  1557. %@NL@%
  1558. %@AI@%Arg Delete%@AE@% (ALT+A DEL)      Deletes all text from the cursor position to the%@NL@%
  1559.                             end of the line and joins the current line of%@NL@%
  1560.                             text with the next line.%@NL@%
  1561. %@NL@%
  1562. %@AI@%Arg cursor-movement%@AE@%         Deletes the highlighted area, whether it is a%@NL@%
  1563. %@AI@%Delete%@AE@% (ALT+A               %@AI@%linearg%@AE@%, %@AI@%streamarg%@AE@%, or %@AI@%boxarg%@AE@%. You can toggle%@NL@%
  1564. %@AI@%cursor-movement%@AE@% DEL)        between stream and box selection with the%@NL@%
  1565.                             %@AI@%Boxstream%@AE@% function (CTRL+B).%@NL@%
  1566. %@NL@%
  1567. %@CR:MSE43104@%%@4@%The %@AI@%Delete%@AE@% function copies all deleted text (except single-character%@EH@%
  1568. deletions) to the Clipboard. For any argument, the %@AI@%Meta Delete%@AE@% function
  1569. discards the text without copying it to the Clipboard.%@NL@%
  1570. %@NL@%
  1571. %@CR:MSE43105@%%@4@%To deal with whole lines of text, the Microsoft Editor provides the%@EH@%
  1572. following functions:%@NL@%
  1573. %@NL@%
  1574. %@CR:MSE43106@%%@AB@%Function%@AE@%%@NL@%
  1575. %@AB@%(and Default Keystrokes)    Description%@AE@%%@NL@%
  1576. %@NL@%
  1577. %@AI@%Ldelete%@AE@% (CTRL+Y)            Deletes a line of text or a %@AI@%boxarg%@AE@%%@NL@%
  1578. %@NL@%
  1579. %@AI@%Linsert%@AE@% (CTRL+N)            Inserts a line of text or a %@AI@%boxarg%@AE@%%@NL@%
  1580. %@NL@%
  1581. %@CR:MSE43107@%%@4@%You can use these functions in commands without an argument or prefix. These%@EH@%
  1582. functions also take cursor-movement arguments. They produce the same results
  1583. that %@AI@%Delete%@AE@% and %@AI@%Insert%@AE@% do, but they always act as if the editor were in box
  1584. mode.%@NL@%
  1585. %@NL@%
  1586. ───────────────────────────────────────────────────────────────────────────%@NL@%
  1587. %@AI@%NOTE%@AE@%%@NL@%
  1588.    When you want to delete or copy large areas of text, you may find the%@NL@%
  1589.    DIRECTION keys move too slowly. However, you can define a highlighted%@NL@%
  1590.    area with any cursor-movement function that does not take an argument.%@NL@%
  1591.    Mpage (PGUP) and Ppage (PGDN) can be used this way. The Ppara and Mpara%@NL@%
  1592.    functions can also be used this way, but they do not have default key%@NL@%
  1593.    assignments.%@NL@%
  1594. %@NL@%
  1595.    To delete large amounts of text, you can also use a markarg or a numarg%@NL@%
  1596.    with a delete function. See Table A.3 for more information.%@NL@%
  1597. ───────────────────────────────────────────────────────────────────────────%@NL@%
  1598. %@NL@%
  1599. %@NL@%
  1600. %@CR:MSE43200@%%@3@%%@AB@%4.3.2  Copying Text%@AE@%%@EH@%%@NL@%
  1601. %@NL@%
  1602. %@CR:MSE43201@%%@4@%To copy text without first deleting it, use the %@AI@%Copy%@AE@% function (CTRL+INS),%@EH@%
  1603. which copies a range of text into the <clipboard> pseudo file. Text in the
  1604. Clipboard is then inserted into the file when you invoke the %@AI@%Paste%@AE@% function.
  1605. The following list presents different commands that use the %@AI@%Copy%@AE@% function:%@NL@%
  1606. %@NL@%
  1607. %@CR:MSE43202@%%@AB@%Command     %@AE@%%@NL@%
  1608. %@AB@%(and Default Keystrokes)             Description%@AE@%%@NL@%
  1609. %@NL@%
  1610. %@AI@%Arg cursor-movementCopy%@AE@%              Copies the highlighted area into the%@NL@%
  1611. (ALT+A %@AI@%cursor-movement%@AE@% CTRL+INS)     Clipboard.%@NL@%
  1612. %@NL@%
  1613. %@AI@%Arg numarg Copy%@AE@%                      Copies the specified number of lines%@NL@%
  1614. (ALT+A %@AI@%numarg%@AE@% CTRL+INS)              into the Clipboard, beginning with the%@NL@%
  1615.                                      line that the cursor is on.%@NL@%
  1616. %@NL@%
  1617. %@AI@%Arg markarg Copy%@AE@%                     Copies the text between the specified%@NL@%
  1618. (ALT+A %@AI@%markarg%@AE@% CTRL+INS)             marker and the cursor into the%@NL@%
  1619.                                      Clipboard. The shape of this region%@NL@%
  1620.                                      changes depending on whether the editor%@NL@%
  1621.                                      is in box or stream mode.%@NL@%
  1622. %@NL@%
  1623. %@CR:MSE43203@%%@4@%The %@AI@%Paste%@AE@% function (SHIFT+INS) is useful both for moving and copying text.%@EH@%
  1624. To move text, first delete it and then invoke %@AI@%Paste%@AE@% after moving the cursor
  1625. to the destination.%@NL@%
  1626. %@NL@%
  1627. ───────────────────────────────────────────────────────────────────────────%@NL@%
  1628. %@AI@%NOTE%@AE@%%@NL@%
  1629.    If you highlight an area on the screen and then invoke Paste, the editor%@NL@%
  1630.    deletes the highlighted area and replaces it with the contents of the%@NL@%
  1631.    Clipboard.%@NL@%
  1632. ───────────────────────────────────────────────────────────────────────────%@NL@%
  1633. %@NL@%
  1634. %@CR:MSE43204@%%@4@%See Section 4.4%@BO:   1839c@% for more information on markers.%@EH@%%@NL@%
  1635. %@NL@%
  1636. %@NL@%
  1637. %@CR:MSE43300@%%@3@%%@AB@%4.3.3  Other Insert Commands%@AE@%%@EH@%%@NL@%
  1638. %@NL@%
  1639. %@CR:MSE43301@%%@4@%The following functions insert specific items at the current cursor position%@EH@%
  1640. (each function is a complete command). These functions do not have
  1641. preassigned keys; see Chapter 6%@BO:   28e3a@%, "Function Assignments and Macros," for
  1642. information on how to assign keys to functions.%@NL@%
  1643. %@NL@%
  1644. %@CR:MSE43302@%%@AB@%Function                     Description%@AE@%%@NL@%
  1645. %@NL@%
  1646. %@AI@%Curdate%@AE@%                     Inserts current date%@NL@%
  1647. %@NL@%
  1648. %@AI@%Curday%@AE@%                      Inserts current day of the week%@NL@%
  1649. %@NL@%
  1650. %@AI@%Curfile%@AE@%                     Inserts current file name%@NL@%
  1651. %@NL@%
  1652. %@AI@%Curfileext%@AE@%                  Inserts current file extension%@NL@%
  1653. %@NL@%
  1654. %@AI@%Curfilenam%@AE@%                  Inserts base name of current file%@NL@%
  1655. %@NL@%
  1656. %@AI@%Curtime%@AE@%                     Inserts current time%@NL@%
  1657. %@NL@%
  1658. %@CR:MSE43303@%%@4@%These functions all use time of execution, rather than time of editor%@EH@%
  1659. start-up, as the current time.%@NL@%
  1660. %@NL@%
  1661. %@CR:MSE43304@%%@4@%Although the functions above are not preassigned to any keystrokes, you can%@EH@%
  1662. assign them to keystrokes by using the technique described in Chapter 6%@BO:   28e3a@%.
  1663. You can also execute a function by giving its name as input to %@AI@%Execute%@AE@% (F7).%@NL@%
  1664. %@NL@%
  1665. %@CR:MSE43305@%%@4@%For example, the following sequence inserts the date at the cursor position:%@EH@%%@NL@%
  1666. %@NL@%
  1667. %@CR:MSE43306@%  1. Invoke %@AI@%Arg%@AE@% (press ALT+A)%@NL@%
  1668.   2. Type the following string: %@AS@%curdate%@AE@%%@NL@%
  1669.   3. Invoke %@AI@%Execute%@AE@% (press F7)%@NL@%
  1670. %@NL@%
  1671. %@NL@%
  1672. %@CR:MSE43400@%%@3@%%@AB@%4.3.4  Reading a File into the Current File%@AE@%%@EH@%%@NL@%
  1673. %@NL@%
  1674. %@CR:MSE43401@%%@4@%The %@AI@%Paste%@AE@% function can be used in commands that read a file into the current%@EH@%
  1675. file, as shown below:%@NL@%
  1676. %@NL@%
  1677. %@CR:MSE43402@%
  1678. %@AB@%Command%@AE@%%@NL@%
  1679. %@AB@%(and Default Keystrokes)             Description%@AE@%%@NL@%
  1680. %@NL@%
  1681. %@AI@%Arg Arg textarg Paste%@AE@%                Reads the contents of the file%@NL@%
  1682. (ALT+A ALT+A %@AI@%textarg%@AE@% SHIFT+INS)      specified by the %@AI@%textarg%@AE@% and inserts%@NL@%
  1683.                                      these contents into the current file.%@NL@%
  1684.                                      The insertion occurs at the cursor%@NL@%
  1685.                                      position.%@NL@%
  1686. %@NL@%
  1687. %@AI@%Arg Arg %@AE@%%@AB@%!%@AE@%%@AI@%textarg Paste%@AE@%               Reads the output of the system-level%@NL@%
  1688. (ALT+A ALT+A %@AB@%!%@AE@%%@AI@%textarg%@AE@% SHIFT+INS)     command line given as the %@AI@%textarg%@AE@%. The%@NL@%
  1689.                                      output is inserted at the cursor%@NL@%
  1690.                                      position. For example, if the %@AI@%textarg%@AE@%%@NL@%
  1691.                                      is DIR, then a directory listing is%@NL@%
  1692.                                      inserted into the file.%@NL@%
  1693. %@NL@%
  1694. %@NL@%
  1695. %@CR:MSE44000@%%@2@%%@AB@%4.4  Using File Markers%@AE@%%@EH@%%@NL@%
  1696. %@NL@%
  1697. %@CR:MSE44001@%%@4@%File markers help you move back and forth through large files. Once you have%@EH@%
  1698. defined a file marker, you can move quickly to the location marked. You can
  1699. also use a file marker as input to certain commands. For example, instead of
  1700. moving the cursor to a marked location, you simply give the name of the
  1701. marker.%@NL@%
  1702. %@NL@%
  1703. %@CR:MSE44002@%%@4@%The Microsoft Editor allows you to create any number of file markers. You%@EH@%
  1704. identify each with a name consisting of alphanumeric characters.%@NL@%
  1705. %@NL@%
  1706. %@CR:MSE44003@%%@4@%Use the %@AI@%Mark%@AE@% function (CTRL+M) to create or go to a marker. The command %@AI@%Mark%@AE@%%@EH@%
  1707. (CTRL+M with no argument) takes you back to the beginning of the file, just
  1708. as %@AI@%Arg Mpage%@AE@% does. The command %@AI@%Arg Mark%@AE@% (ALT+A CTRL+M) moves you back to the
  1709. previous cursor position. This last use of %@AI@%Mark%@AE@% is useful for switching back
  1710. and forth quickly between two locations.%@NL@%
  1711. %@NL@%
  1712. %@CR:MSE44004@%%@4@%Some of the most powerful uses of the %@AI@%Mark%@AE@% function involve commands with%@EH@%
  1713. arguments, as shown below:%@NL@%
  1714. %@NL@%
  1715. %@CR:MSE44005@%%@AB@%Command     %@AE@%%@NL@%
  1716. %@AB@%(and Default Keystrokes)       Description%@AE@%%@NL@%
  1717. %@NL@%
  1718. %@AI@%Arg numarg Mark%@AE@%                Moves the cursor to the line that you%@NL@%
  1719. (ALT+A %@AI@%numarg%@AE@% CTRL+M)          specify. The Microsoft Editor numbers lines%@NL@%
  1720.                                beginning with the number 1, so the first%@NL@%
  1721.                                line of the file is line 1, the second is%@NL@%
  1722.                                line 2, and so forth.%@NL@%
  1723. %@NL@%
  1724. %@AI@%Arg Arg textarg Mark%@AE@%           Defines a marker at the current location.%@NL@%
  1725. (ALT+A ALT+A %@AI@%textarg%@AE@% CTRL+M)   This command sets a marker which in turn can%@NL@%
  1726.                                be used as input to other functions.%@NL@%
  1727. %@NL@%
  1728. %@AI@%Arg textarg Mark%@AE@%               Moves the cursor directly to a marker you%@NL@%
  1729. (ALT+A %@AI@%textarg%@AE@% CTRL+M)         have already defined as a %@AI@%textarg%@AE@%.%@NL@%
  1730. %@NL@%
  1731. %@CR:MSE44006@%%@4@%The marker name may include digits, but must include at least one nondigit%@EH@%
  1732. character as well.%@NL@%
  1733. %@NL@%
  1734. %@NL@%
  1735. %@CR:MSE44100@%%@3@%%@AB@%4.4.1  Functions That Use Markers%@AE@%%@EH@%%@NL@%
  1736. %@NL@%
  1737. %@CR:MSE44101@%%@4@%The following functions also make use of markers by accepting a previously%@EH@%
  1738. defined marker name (a %@AI@%markarg%@AE@%) as an argument. These functions all use the
  1739. area in the file defined by the cursor position and the marker. This area,
  1740. in turn, is interpreted as a stream argument, or %@AI@%linearg%@AE@% or %@AI@%boxarg%@AE@%,
  1741. depending on whether the editor is in stream mode or box mode. Recall that
  1742. the %@AI@%Boxstream%@AE@% function (CTRL+B) toggles between these two modes.%@NL@%
  1743. %@NL@%
  1744. %@CR:MSE44102@%%@AB@%Function     %@AE@%%@NL@%
  1745. %@AB@%(and Default Keystrokes)    Description%@AE@%%@NL@%
  1746. %@NL@%
  1747. %@AI@%Assign%@AE@% (ALT+=)              Executes all assignment statements in the%@NL@%
  1748.                             defined area (see Chapters 6%@BO:   28e3a@% and 7%@BO:   3396c@% for more%@NL@%
  1749.                             information)%@NL@%
  1750. %@NL@%
  1751. %@AI@%Copy%@AE@% (CTRL+INS)             Copies the defined area into the Clipboard%@NL@%
  1752. %@NL@%
  1753. %@AI@%Ldelete%@AE@% (CTRL+Y)            Deletes the defined area%@NL@%
  1754. %@NL@%
  1755. %@AI@%Linsert%@AE@% (CTRL+N)            Fills the defined area with spaces%@NL@%
  1756. %@NL@%
  1757. %@AI@%Qreplace%@AE@% (CTRL+\)           Executes search and replace over the defined%@NL@%
  1758.                             area, with query for confirmation%@NL@%
  1759. %@NL@%
  1760. %@AI@%Replace%@AE@% (CTRL+L)            Executes search and replace over the defined%@NL@%
  1761.                             area%@NL@%
  1762. %@NL@%
  1763. %@CR:MSE44103@%%@4@%If you specify a marker the editor cannot find, the editor automatically%@EH@%
  1764. checks the file listed in the %@AB@%markfile%@AE@% switch. See Table A.5 for more
  1765. information on the %@AB@%markfile%@AE@% switch.%@NL@%
  1766. %@NL@%
  1767. %@NL@%
  1768. %@CR:MSE44200@%%@3@%%@AB@%4.4.2  Related Functions: Savecur and Restcur%@AE@%%@EH@%%@NL@%
  1769. %@NL@%
  1770. %@CR:MSE44201@%%@4@%The %@AI@%Savecur%@AE@% and %@AI@%Restcur%@AE@%  functions are similar to %@AI@%Mark%@AE@% but do not take%@EH@%
  1771. arguments. Use %@AI@%Savecur%@AE@% to save the current cursor position and %@AI@%Restcur%@AE@% to
  1772. return to that position later. With these two functions, you can save only
  1773. one position at a time.%@NL@%
  1774. %@NL@%
  1775. %@CR:MSE44202@%%@4@%No keys are preassigned to %@AI@%Savecur%@AE@% or %@AI@%Restcur%@AE@%. See Chapter 6%@BO:   28e3a@%, "Function%@EH@%
  1776. Assignments and Macros," for information on how to assign keys. You can also
  1777. use %@AI@%Savecur%@AE@% and %@AI@%Restcur%@AE@% by giving them as input to the %@AI@%Arg textarg Execute%@AE@%
  1778. command, in which %@AI@%textarg%@AE@% is the name of the function to execute:%@NL@%
  1779. %@NL@%
  1780. %@CR:MSE44203@%  1. Invoke %@AI@%arg%@AE@% (press ALT + A)%@NL@%
  1781.   2. Type %@AI@%Savecur%@AE@% or %@AI@%Restcur%@AE@%%@NL@%
  1782.   3. Invoke %@AI@%Execute%@AE@% (press F7)%@NL@%
  1783. %@NL@%
  1784. %@NL@%
  1785. %@CR:MSE45000@%%@2@%%@AB@%4.5  Searching and Replacing%@AE@%%@EH@%%@NL@%
  1786. %@NL@%
  1787. %@CR:MSE45001@%%@4@%The %@AI@%Psearch%@AE@% function (F3) directs the editor to conduct a forward search (a%@EH@%
  1788. "plus search") for the next occurrence of the specified string. All searches
  1789. take place from the current cursor position to the end of the file.%@NL@%
  1790. %@NL@%
  1791. %@CR:MSE45002@%%@4@%The most common uses of %@AI@%Psearch%@AE@% consist of the following commands:%@EH@%%@NL@%
  1792. %@NL@%
  1793. %@CR:MSE45003@%%@AB@%Command%@AE@%%@NL@%
  1794. %@AB@%(and Default Keystrokes)     Description%@AE@%%@NL@%
  1795. %@NL@%
  1796. %@AI@%Arg textarg Psearch%@AE@%         Directs the editor to look for the string given%@NL@%
  1797. (ALT+A %@AI@%textarg%@AE@% F3)          as %@AI@%textarg%@AE@%. The editor scrolls the screen, if%@NL@%
  1798.                             necessary, and moves the cursor to the next%@NL@%
  1799.                             occurrence of %@AI@%textarg%@AE@% in the file.%@NL@%
  1800. %@NL@%
  1801. %@AI@%Psearch%@AE@% (F3)                Directs the editor to look for the most recently%@NL@%
  1802.                             specified search string.%@NL@%
  1803. %@NL@%
  1804. %@AI@%Arg Psearch%@AE@% (ALT+A F3)      Directs the editor to take the word at the%@NL@%
  1805.                             current cursor position as the search string.%@NL@%
  1806.                             (In other words, the search string consists of%@NL@%
  1807.                             all charac-ters from the cursor to the first%@NL@%
  1808.                             blank or new line.)%@NL@%
  1809. %@NL@%
  1810. %@CR:MSE45004@%%@4@%You can search backward with %@AI@%Msearch%@AE@%  (a "minus search"). The %@AI@%Msearch%@AE@%%@EH@%
  1811. function (F4) uses syntax identical to %@AI@%Psearch%@AE@%. Backward searches take place
  1812. from the current cursor position to the beginning of the file. In addition,
  1813. %@AI@%Msearch%@AE@% with no argument assumes the same search string that was specified
  1814. with %@AI@%Psearch%@AE@%. Therefore, after searching forward for a string, you can
  1815. search backward for the same string just by pressing F4.%@NL@%
  1816. %@NL@%
  1817. %@CR:MSE45005@%%@4@%All versions of the %@AI@%Psearch%@AE@% and %@AI@%Msearch%@AE@% commands are affected by case%@EH@%
  1818. sensitivity. By default, case sensitivity is off, so the editor carries out
  1819. searches for strings without distinguishing between uppercase and lowercase
  1820. letters. How-ever, you can change this behavior by turning the %@AB@%case%@AE@% switch
  1821. on, using the syntax for switch settings explained in Chapter 7%@BO:   3396c@%, "Switches,
  1822. Assignments, and the TOOLS.INI File."%@NL@%
  1823. %@NL@%
  1824. %@CR:MSE45006@%%@4@%You can also temporarily reverse the setting of the %@AB@%case%@AE@% switch by turning%@EH@%
  1825. on the %@AI@%Meta%@AE@% prefix. Therefore, if case sensitivity is off, you can conduct a
  1826. case-sensitive search with the %@AI@%Meta%@AE@%%@AI@%Psearch%@AE@% (F9 F3) or %@AI@%Meta Msearch%@AE@% (F9 F4)
  1827. command.%@NL@%
  1828. %@NL@%
  1829. %@NL@%
  1830. %@CR:MSE45100@%%@3@%%@AB@%4.5.1  Searching for a Pattern of Text%@AE@%%@EH@%%@NL@%
  1831. %@NL@%
  1832. %@CR:MSE45101@%%@4@%The commands described above search for an exact match of the string you%@EH@%
  1833. specify. However, sometimes you may want to search for a set of different
  1834. strings: for example, any word that begins with "B" and ends with "ing."%@NL@%
  1835. %@NL@%
  1836. %@CR:MSE45102@%%@4@%You can search for a pattern of text by specifying a "regular expression." A%@EH@%
  1837. regular expression is a string that specifies a pattern of text by using
  1838. certain special characters. Chapter 5%@BO:   206bc@% describes how to specify regular
  1839. expressions.%@NL@%
  1840. %@NL@%
  1841. %@CR:MSE45103@%%@4@%The command %@AI@%Arg Arg textarg Psearch%@AE@% (ALT+A ALT+A %@AI@%textarg%@AE@% F3) searches%@EH@%
  1842. forward for a string that matches the regular expression specified as the
  1843. %@AI@%textarg%@AE@%. The command %@AI@%Arg Arg textarg Msearch%@AE@% (ALT+A ALT+A %@AI@%textarg%@AE@% F4)
  1844. searches backward for a string that matches the regular expression specified
  1845. as the %@AI@%textarg%@AE@%.%@NL@%
  1846. %@NL@%
  1847. %@CR:MSE45104@%%@4@%Regular-expression searches are affected by case sensitivity, as explained%@EH@%
  1848. in the previous section.%@NL@%
  1849. %@NL@%
  1850. %@NL@%
  1851. %@CR:MSE45200@%%@3@%%@AB@%4.5.2  Searching the File Globally%@AE@%%@EH@%%@NL@%
  1852. %@NL@%
  1853. %@CR:MSE45201@%%@4@%The %@AI@%Searchall%@AE@% function (SHIFT+F6) takes the same syntax that %@AI@%Psearch%@AE@% does,%@EH@%
  1854. but instead of finding the next occurrence of a string, the %@AI@%Searchall%@AE@%
  1855. function high-lights every string in the file that matches the search
  1856. string. For example, to highlight every occurrence of the word %@AS@%float%@AE@% in a
  1857. file, follow these steps:%@NL@%
  1858. %@NL@%
  1859. %@CR:MSE45202@%  1. Invoke %@AI@%Arg%@AE@% (press ALT+A)%@NL@%
  1860.   2. Type the following search string: %@AS@%float%@AE@%%@NL@%
  1861.   3. Invoke %@AI@%Searchall%@AE@% by pressing SHIFT+F6%@NL@%
  1862. %@NL@%
  1863. %@CR:MSE45203@%%@4@%Any action other than cursor movement removes the highlight. The color of%@EH@%
  1864. the highlight is normally different from the highlight color in
  1865. cursor-movement arguments.%@NL@%
  1866. %@NL@%
  1867. %@NL@%
  1868. %@CR:MSE45300@%%@3@%%@AB@%4.5.3  Searching a Series of Files%@AE@%%@EH@%%@NL@%
  1869. %@NL@%
  1870. %@CR:MSE45301@%%@4@%You can search a series of files without leaving the editor. The %@AI@%Mgrep%@AE@%%@EH@%
  1871. command takes the same syntax that %@AI@%Psearch%@AE@% and %@AI@%Msearch%@AE@% do. For example, the
  1872. command %@AI@%Arg Arg textarg Mgrep%@AE@% searches for a regular expression. The editor
  1873. responds to %@AI@%Mgrep%@AE@% by placing all strings found in the <compile> pseudo file.
  1874. You can look at the file by using %@AI@%Setfile%@AE@% or invoking the %@AI@%Nextmsg%@AE@% function.%@NL@%
  1875. %@NL@%
  1876. %@CR:MSE45302@%%@4@%Before using %@AI@%Mgrep%@AE@%, place the list of files to search in a macro named%@EH@%
  1877. %@AS@%mgreplist%@AE@%. This list can contain DOS wildcards and environment variables.
  1878. For example, the following steps direct %@AI@%Mgrep%@AE@% to search the following files:
  1879. the file JUNK.TXT; files that have a .C extension and are in the current
  1880. directory; and files that have a .H extension and are in any directory
  1881. listed in the INCLUDE environment varible:%@NL@%
  1882. %@NL@%
  1883. %@CR:MSE45303@%  1. Invoke %@AI@%Arg%@AE@% (press ALT+A)%@NL@%
  1884. %@NL@%
  1885.   2. Define the value of %@AS@%mgreplist%@AE@% by typing the following:%@NL@%
  1886. %@NL@%
  1887.        %@AS@%mgreplist:="JUNK.TXT *.C $INCLUDE:*.H"%@AE@%%@NL@%
  1888. %@NL@%
  1889.   3. Invoke %@AI@%Assign%@AE@% by pressing ALT+= (hold down the ALT key and press the%@NL@%
  1890.      equals sign)%@NL@%
  1891. %@NL@%
  1892. %@CR:MSE45304@%%@4@%You refer to an environment variable with the following syntax, in which%@EH@%
  1893. %@AI@%ENVAR%@AE@% is the name of the variable. The name must be entered in uppercase
  1894. characters:%@NL@%
  1895. %@NL@%
  1896.      %@AB@%$%@AE@%%@AI@%ENVAR%@AE@%%@AB@%:%@AE@%%@NL@%
  1897. %@NL@%
  1898. %@NL@%
  1899. %@CR:MSE45400@%%@3@%%@AB@%4.5.4  Search-and-Replace Functions%@AE@%%@EH@%%@NL@%
  1900. %@NL@%
  1901. %@CR:MSE45401@%%@4@%To replace repeated occurrences of one text string by another, use the%@EH@%
  1902. search-and-replace function %@AI@%Replace%@AE@% (CTRL+L). By default, the replacement
  1903. happens from the cursor position to the end of the file. However, as
  1904. described below, you can restrict the range over which the replacement
  1905. happens.%@NL@%
  1906. %@NL@%
  1907. %@CR:MSE45402@%%@4@%No matter what command syntax you use with %@AI@%Replace%@AE@%, the editor reacts by%@EH@%
  1908. prompting you for a search string and a replacement string, and then
  1909. executing the search and replace. If you have used %@AI@%Replace%@AE@% or %@AI@%Qreplace%@AE@%
  1910. ("query replace") before, the previous value of the search or replace string
  1911. appears on the dialog line. To use the string displayed, press ENTER.%@NL@%
  1912. %@NL@%
  1913. %@CR:MSE45403@%%@4@%The identical commands %@AI@%Replace%@AE@% and %@AI@%Arg Replace%@AE@% execute replacement from the%@EH@%
  1914. current cursor position to the end of the file. You can also specify a range
  1915. for the replacement by using one of the following commands:%@NL@%
  1916. %@NL@%
  1917. %@CR:MSE45404@%%@AB@%Command                     Default Keystrokes%@AE@%%@NL@%
  1918. %@NL@%
  1919. %@AI@%Arg linearg Replace%@AE@%         ALT+A %@AI@%linearg%@AE@% CTRL+L%@NL@%
  1920. %@NL@%
  1921. %@AI@%Arg numarg Replace%@AE@%          ALT+A %@AI@%numarg%@AE@% CTRL+L%@NL@%
  1922. %@NL@%
  1923. %@AI@%Arg boxarg Replace%@AE@%          ALT+A %@AI@%boxarg%@AE@% CTRL+L%@NL@%
  1924. %@NL@%
  1925. %@AI@%Arg streamarg Replace%@AE@%       ALT+A %@AI@%streamarg%@AE@% CTRL+L%@NL@%
  1926. %@NL@%
  1927. %@AI@%Arg markarg Replace%@AE@%         ALT+A %@AI@%markarg%@AE@% CTRL+L%@NL@%
  1928. %@NL@%
  1929. %@CR:MSE45405@%%@4@%If you specify a %@AI@%numarg%@AE@%, the replacement operation is limited to the%@EH@%
  1930. specified number of lines, beginning with the current line. If you specify a
  1931. %@AI@%linearg%@AE@%, %@AI@%streamarg%@AE@%, or %@AI@%boxarg%@AE@%, the replacement occurs only within the
  1932. highlighted area. If you specify a %@AI@%markarg%@AE@%, the replacement occurs in the
  1933. region of text between the cursor position and the marker. The shape of the
  1934. region changes depending on whether the editor is in box mode or stream
  1935. mode.%@NL@%
  1936. %@NL@%
  1937. %@CR:MSE45406@%%@4@%The %@AI@%Replace%@AE@% function is most efficient when you are sure you want the%@EH@%
  1938. replacement to be executed in every case. If you want to regulate how often
  1939. the replacement occurs, use %@AI@%Qreplace%@AE@% (CTRL+\). This function takes the same
  1940. syntax as %@AI@%Replace%@AE@%, but prompts you for confirmation before each replacement.
  1941. %@AI@%Qreplace%@AE@% asks you to press Y for yes, N for no, or A for all, which causes
  1942. replacement to proceed without further confirmation. Pressing Q (quit)
  1943. terminates replacement.%@NL@%
  1944. %@NL@%
  1945. %@CR:MSE45407@%%@4@%The %@AI@%Replace%@AE@% and %@AI@%Qreplace%@AE@% functions both take regular expressions as search%@EH@%
  1946. strings when you introduce the argument with %@AI@%Arg Arg%@AE@% instead of %@AI@%Arg%@AE@%. (See
  1947. Chapter 5%@BO:   206bc@% for information on regular expressions.) Otherwise, syntax is
  1948. identical, and the functions accept the same arguments.%@NL@%
  1949. %@NL@%
  1950. %@CR:MSE45408@%%@4@%Search and replacing is affected by case sensitivity, as explained in%@EH@%
  1951. Section 4.5.1.%@BO:   1a2e0@%%@NL@%
  1952. %@NL@%
  1953. %@CR:MSE45409@%%@4@%You can use the %@AI@%Mreplace%@AE@% function to execute replacements throughout a%@EH@%
  1954. series of files. See Appendix A, "Reference Tables," for more information.%@NL@%
  1955. %@NL@%
  1956. %@NL@%
  1957. %@CR:MSE46000@%%@2@%%@AB@%4.6  Compiling%@AE@%%@EH@%%@NL@%
  1958. %@NL@%
  1959. %@CR:MSE46001@%%@4@%One of the strengths of the Microsoft Editor is its capability as a%@EH@%
  1960. development environment. You can write a program and compile (or assemble)
  1961. from within the editor. If the compilation fails, you can make corrections
  1962. to the source file when you view the errors and then compile again.%@NL@%
  1963. %@NL@%
  1964. %@CR:MSE46002@%%@4@%Ordinarily, a compiler sends error messages directly to the screen while you%@EH@%
  1965. are outside the editor. When you compile from within the Microsoft Editor,
  1966. however, the error messages are displayed on the dialog line. The %@AI@%Nextmsg%@AE@%
  1967. function (SHIFT+F3) displays the error messages in sequence and positions
  1968. the cursor at the beginning of the line with the next error. You can make
  1969. corrections immediately.%@NL@%
  1970. %@NL@%
  1971. %@CR:MSE46003@%%@4@%The %@AI@%Compile%@AE@% function (CTRL+F3) appears in a variety of commands, as shown in%@EH@%
  1972. Section 4.6.1.%@BO:   1c335@%%@NL@%
  1973. %@NL@%
  1974. %@NL@%
  1975. %@CR:MSE46100@%%@3@%%@AB@%4.6.1  Invoking Compilers and Other Utilities%@AE@%%@EH@%%@NL@%
  1976. %@NL@%
  1977. %@CR:MSE46101@%%@4@%When you run the protected-mode version of the editor under OS/2,%@EH@%
  1978. compilations run in the background and the editor beeps when the compilation
  1979. is completed. (While a background compilation is running, the letters %@AS@%BP%@AE@%
  1980. appear on the status line.) When running the real-mode version of the editor
  1981. (under DOS or the OS/2 3.%@AI@%x%@AE@% compatibility box), you cannot edit again until
  1982. the compilation has completed.%@NL@%
  1983. %@NL@%
  1984. %@CR:MSE46102@%%@4@%With the Microsoft Editor's compilation capability, you can invoke any%@EH@%
  1985. program or utility and specify any command-line options. To invoke a program
  1986. directly, use one of the following commands:%@NL@%
  1987. %@NL@%
  1988. %@CR:MSE46103@%%@AB@%Command     %@AE@%%@NL@%
  1989. %@AB@%(and Default Keystrokes)             Description%@AE@%%@NL@%
  1990. %@NL@%
  1991. %@AI@%Arg Arg textarg Compile%@AE@%              Runs the system-level command described%@NL@%
  1992. (ALT+A ALT+A %@AI@%textarg%@AE@% CTRL+F3)        by %@AI@%textarg%@AE@%. Typically, this command%@NL@%
  1993.                                      runs the compiler.%@NL@%
  1994. %@NL@%
  1995. %@AI@%Arg Compile%@AE@%                          Runs a compilation according to the%@NL@%
  1996. (ALT+A CTRL+F3)                      %@AB@%extmake%@AE@% switch.%@NL@%
  1997. %@NL@%
  1998. %@AI@%Arg textarg Compile%@AE@%                  Runs a compilation according to the%@NL@%
  1999. (ALT+A CTRL+F3)                      "text" setting of the %@AB@%extmake%@AE@% switch.%@NL@%
  2000.                                      This version of the command is%@NL@%
  2001.                                      typically used with the NMAKE utility.%@NL@%
  2002. %@NL@%
  2003. %@AI@%Arg Meta Compile%@AE@%                     Kills any compilation running in the%@NL@%
  2004. (ALT+A F9 CTRL+F3)                   background after prompting for%@NL@%
  2005.                                      confirmation (OS/2 only).%@NL@%
  2006. %@NL@%
  2007. %@CR:MSE46104@%%@4@%Usually, it is more convenient to set your compile command once by setting%@EH@%
  2008. the %@AB@%extmake%@AE@% switch and giving the %@AI@%Arg Compile%@AE@% command each time you compile.%@NL@%
  2009. %@NL@%
  2010. %@CR:MSE46105@%%@4@%A "switch" is a variable that you can set to control the editor's behavior.%@EH@%
  2011. See Chapter 7%@BO:   3396c@%, "Switches, Assignments, and the TOOLS.INI File," for more
  2012. information on switches and how to set them.%@NL@%
  2013. %@NL@%
  2014. %@CR:MSE46106@%%@4@%The %@AI@%Arg Compile%@AE@% command examines the file extension of the current file and%@EH@%
  2015. executes the corresponding %@AB@%extmake%@AE@% setting. The %@AB@%extmake%@AE@% switch can have a
  2016. different setting for each file extension. The general form of an %@AB@%extmake%@AE@%
  2017. assignment is%@NL@%
  2018. %@NL@%
  2019.      %@AB@%extmake:%@AE@%%@AI@%ext command-line%@AE@%%@NL@%
  2020. %@NL@%
  2021. %@CR:MSE46108@%%@4@%in which %@AI@%ext%@AE@% is a file extension and %@AI@%command-line%@AE@% is the compile command to%@EH@%
  2022. invoke for files with this extension. For example, suppose you want to
  2023. invoke the following compile command for use with .C files:%@NL@%
  2024. %@NL@%
  2025.      cl /AL /Zi /Ox %s%@NL@%
  2026. %@NL@%
  2027. %@CR:MSE46109@%%@4@%The characters %@AS@%%s%@AE@% represent the name of the current file. To automatically%@EH@%
  2028. invoke this compile command with %@AI@%Arg Compile%@AE@%, you would first follow these
  2029. steps to set the %@AB@%extmake%@AE@% switch:%@NL@%
  2030. %@NL@%
  2031. %@CR:MSE4610A@%  1. Invoke %@AI@%Arg%@AE@% (press ALT+A)%@NL@%
  2032. %@NL@%
  2033.   2. Type the following text: %@AS@%extmake:c cl /AL /Zi /Ox %s%@AE@%%@NL@%
  2034. %@NL@%
  2035.   3. Press ALT+= to invoke %@AI@%Assign%@AE@% (hold down the ALT key and press the%@NL@%
  2036.      equals sign)%@NL@%
  2037. %@NL@%
  2038. %@CR:MSE4610B@%%@4@%The editor then invokes the desired command line whenever you give the %@AI@%Arg%@AE@%%@EH@%
  2039. %@AI@%Compile%@AE@% command and are editing a .C file.%@NL@%
  2040. %@NL@%
  2041. %@CR:MSE4610C@%%@4@%To use the %@AI@%Arg textarg Compile%@AE@% command, first set %@AB@%extmake%@AE@% with a %@AB@%text%@AE@%%@EH@%
  2042. extension:%@NL@%
  2043. %@NL@%
  2044.      %@AB@%extmake:text%@AE@% %@AI@%command-line%@AE@%%@NL@%
  2045. %@NL@%
  2046. %@CR:MSE4610E@%%@4@%If the symbol %@AS@%%s%@AE@% appears in %@AI@%command-line%@AE@%, it is replaced with the text%@EH@%
  2047. argument to %@AI@%Compile%@AE@%. For example, if %@AB@%extmake%@AE@% has the setting%@NL@%
  2048. %@NL@%
  2049.      extmake:text nmake %s%@NL@%
  2050. %@NL@%
  2051. %@CR:MSE4610F@%%@4@%and you pass the text argument %@AS@%projectx%@AE@% to the %@AI@%Compile%@AE@% function, the editor%@EH@%
  2052. executes the following system-level command:%@NL@%
  2053. %@NL@%
  2054.      nmake projectx%@NL@%
  2055. %@NL@%
  2056. %@NL@%
  2057. %@CR:MSE46200@%%@3@%%@AB@%4.6.2  Viewing Error Output%@AE@%%@EH@%%@NL@%
  2058. %@NL@%
  2059. %@CR:MSE46201@%%@4@%To generate error output that you can view from within the editor, the%@EH@%
  2060. compiler or assembler must output errors in one of the following formats:%@NL@%
  2061. %@NL@%
  2062.      %@AI@%filename row column%@AE@%%@AB@%:%@AE@%%@AI@% message%@AE@%%@NL@%
  2063.      %@AI@%filename%@AE@% %@AB@%(%@AE@%%@AI@%row%@AE@%%@AB@%,%@AE@% %@AI@%column%@AE@%%@AB@%):%@AE@% %@AI@%message%@AE@%%@NL@%
  2064.      %@AI@%filename%@AE@% %@AB@%(%@AE@%%@AI@%row%@AE@%%@AB@%):%@AE@%%@AI@%message%@AE@%%@NL@%
  2065.      %@AI@%filename%@AE@%%@AB@%:%@AE@% %@AI@%row%@AE@%%@AB@%:%@AE@% %@AI@%message%@AE@%%@NL@%
  2066.      %@AB@%"%@AE@%%@AI@%filename%@AE@%%@AB@%",%@AE@% %@AI@%row%@AE@% %@AI@%column%@AE@%%@AB@%:%@AE@% %@AI@%message%@AE@%%@NL@%
  2067. %@NL@%
  2068. %@CR:MSE46203@%%@4@%The Microsoft Editor, in turn, reads the error output directly and responds%@EH@%
  2069. by moving the cursor to each location where an error was reported while
  2070. displaying the %@AI@%message%@AE@% on the dialog line. (The method for moving between
  2071. error locations is described below.) The following programs output error
  2072. messages in a format readable by the Microsoft Editor:%@NL@%
  2073. %@NL@%
  2074. %@CR:MSE46204@%  ■  Microsoft C Optimizing Compiler%@NL@%
  2075.   ■  Microsoft Macro Assembler%@NL@%
  2076.   ■  Microsoft Pascal Compiler 4.0%@NL@%
  2077.   ■  Microsoft BASIC Compiler 6.0%@NL@%
  2078.   ■  Microsoft FORTRAN Optimizing Compiler 4.1%@NL@%
  2079. %@NL@%
  2080. ───────────────────────────────────────────────────────────────────────────%@NL@%
  2081. %@AI@%NOTE%@AE@%%@NL@%
  2082.    With the Pascal and BASIC compilers, you must use the /Z command-line%@NL@%
  2083.    option with either the PL or BC driver to generate error output that the%@NL@%
  2084.    Microsoft Editor can read. (The %@AI@%extmake%@AE@% switch, discussed in Chapter 7%@BO:   3396c@%,%@NL@%
  2085.    uses the /Z option by default.)%@NL@%
  2086. ───────────────────────────────────────────────────────────────────────────%@NL@%
  2087. %@NL@%
  2088. %@CR:MSE46205@%%@4@%When a compilation fails in real mode, the editor displays the first error%@EH@%
  2089. message and positions the cursor at the line with the error. The %@AI@%Nextmsg%@AE@%
  2090. function (SHIFT+F3) displays the next error message and repositions the
  2091. cursor at the appropriate line.  %@AI@%;Nextmsg%@AE@%%@NL@%
  2092. %@NL@%
  2093. %@CR:MSE46206@%%@4@%When a compilation fails in protected mode, the editor beeps rather than%@EH@%
  2094. interrupts your current activity. If you had previously viewed the results
  2095. of an earlier compilation, give the %@AI@%Arg Meta Nextmsg%@AE@% command (ALT+A  F9
  2096. SHIFT+F3) to advance to the current set of error messages. Then, regardless
  2097. of how many compilations you are running, press SHIFT+F3 to display the
  2098. first error message and move the cursor to the line with that error.%@NL@%
  2099. %@NL@%
  2100. %@CR:MSE46207@%%@4@%Some common ways to use the %@AI@%Nextmsg%@AE@% function are shown below:%@EH@%%@NL@%
  2101. %@NL@%
  2102. %@CR:MSE46208@%%@AB@%Command%@AE@%%@NL@%
  2103. %@AB@%(and Default Keystrokes)    Description%@AE@%%@NL@%
  2104. %@NL@%
  2105. %@AI@%Nextmsg%@AE@% (SHIFT+F3)          Moves cursor to location of next error message%@NL@%
  2106.                             and displays text of error message on the dialog%@NL@%
  2107.                             line.%@NL@%
  2108. %@NL@%
  2109. %@AI@%Arg numarg Nextmsg%@AE@%          Moves forward or backward by %@AI@% %@AE@%%@AI@%numarg%@AE@% error%@NL@%
  2110. (ALT+A %@AI@%numarg%@AE@% SHIFT+F3)     messages. For example, if %@AI@%numarg%@AE@% is %@AS@%-1%@AE@%, moves%@NL@%
  2111.                             the cursor to the previous error message.%@NL@%
  2112. %@NL@%
  2113. %@AI@%Arg Meta Nextmsg%@AE@%            OS/2 only. Advances to next set of error%@NL@%
  2114. (ALT+A A SHIFT+F3)          messages. Under OS/2, the editor maintains error%@NL@%
  2115.                             messages for all compilations. This command%@NL@%
  2116.                             directs the editor to advance to the error%@NL@%
  2117.                             messages for the subsequent compilation.%@NL@%
  2118. %@NL@%
  2119.                             This feature supports simultaneous background%@NL@%
  2120.                             compilations. No matter how many compilations%@NL@%
  2121.                             you exe-cuted, you can view every set of error%@NL@%
  2122.                             messages.%@NL@%
  2123. %@NL@%
  2124. %@NL@%
  2125. %@CR:MSE46300@%%@3@%%@AB@%4.6.3  Viewing the Dynamic-Compile Log%@AE@%%@EH@%%@NL@%
  2126. %@NL@%
  2127. %@CR:MSE46301@%%@4@%Reviewing error messages as described in the previous section is useful when%@EH@%
  2128. each error message corresponds to a location in your source file. However,
  2129. some messages (such as linker errors) do not correspond to specific lines of
  2130. code. To review these errors, as well as general compilation errors, you may
  2131. want to view the actual error-message text.%@NL@%
  2132. %@NL@%
  2133. %@CR:MSE46302@%%@4@%The editor keeps the complete error output of each compilation──including%@EH@%
  2134. output from any utilities that were invoked──in the <compile> pseudo file.
  2135. If the editor is running in real mode, you can view the <compile> pseudo
  2136. file after a compilation is complete by following these steps:%@NL@%
  2137. %@NL@%
  2138. %@CR:MSE46303@%  1. Invoke %@AI@%Arg%@AE@% (press ALT+A)%@NL@%
  2139.   2. Type the following text: %@AS@%<compile>%@AE@%%@NL@%
  2140.   3. Invoke %@AI@%Setfile%@AE@% (press F2)%@NL@%
  2141. %@NL@%
  2142. %@CR:MSE46304@%%@4@%If the editor is running in OS/2 protected mode, you can view the  error%@EH@%
  2143. output in the same manner described above. You can also view the <compile>
  2144. pseudo file as the compilation is running. Under protected mode, the
  2145. <compile> pseudo file is updated dynamically; as each error message is
  2146. produced by the compiler or utility, the editor adds the message to the end
  2147. of this file.%@NL@%
  2148. %@NL@%
  2149. %@CR:MSE46305@%%@4@%Using the techniques described in the next section, you can open <compile>%@EH@%
  2150. as a separate window. This lets you continue to edit your source file while
  2151. watching error messages appear the instant an error is detected. The command
  2152. %@AI@%Arg Meta Compile%@AE@% kills the compilation.%@NL@%
  2153. %@NL@%
  2154. %@NL@%
  2155. %@CR:MSE47000@%%@2@%%@AB@%4.7  Using Editing Windows%@AE@%%@EH@%%@NL@%
  2156. %@NL@%
  2157. %@CR:MSE47001@%%@4@%An "editing window" is a division of the screen that functions independently%@EH@%
  2158. from other portions of the screen. When you have two or more windows
  2159. present, each functions as a miniature screen. For example, one window can
  2160. view lines 5-15 while another window views lines 90-97. You can even use
  2161. windows to view two or more files simultaneously.%@NL@%
  2162. %@NL@%
  2163. %@CR:MSE47002@%%@4@%Although windows are tiled, they can view overlapping areas of text. Changes%@EH@%
  2164. and highlighting are reflected simultaneously in all windows that view the
  2165. area of altered text.%@NL@%
  2166. %@NL@%
  2167. %@CR:MSE47003@%%@4@%You can have up to eight windows on the screen and create either horizontal%@EH@%
  2168. or vertical divisions between windows. The command %@AI@%Window%@AE@% (F6 with no
  2169. arguments) moves the cursor between windows.To create or merge a window,
  2170. move the cursor to the row or column at which you want to create a new
  2171. division, and give one of the following commands:%@NL@%
  2172. %@NL@%
  2173. %@CR:MSE47004@%%@AB@%Command%@AE@%%@NL@%
  2174. %@AB@%(and Default Keystrokes)      Description%@AE@%%@NL@%
  2175. %@NL@%
  2176. %@AI@%Arg Window%@AE@%                    Creates a horizontal window (split at the%@NL@%
  2177. (ALT+A F6)                    cursor row)%@NL@%
  2178. %@NL@%
  2179. %@AI@%Arg Arg Window%@AE@%                Creates a vertical window (split at the%@NL@%
  2180. (ALT+A ALT+A F6)              cursor column)%@NL@%
  2181. %@NL@%
  2182. %@AI@%Meta Window%@AE@%                   Closes the current window by merging it with%@NL@%
  2183. (F9 F6)                       the window to the right or below%@NL@%
  2184. %@NL@%
  2185. %@CR:MSE47005@%%@4@%Each window must have a minimum of 5 lines and 10 columns. If you try to%@EH@%
  2186. create a window of a smaller size, the command fails.%@NL@%
  2187. %@NL@%
  2188. %@NL@%
  2189. %@CR:MSE48000@%%@2@%%@AB@%4.8  Working with Multiple Files%@AE@%%@EH@%%@NL@%
  2190. %@NL@%
  2191. %@CR:MSE48001@%%@4@%You can load a new file in the screen or current window with the %@AI@%Setfile%@AE@%%@EH@%
  2192. function.%@NL@%
  2193. %@NL@%
  2194. %@CR:MSE48002@%%@AB@%Command     %@AE@%%@NL@%
  2195. %@AB@%(and Default Keystrokes)     Description%@AE@%%@NL@%
  2196. %@NL@%
  2197. %@AI@%Arg textarg Setfile%@AE@%         Loads the file specified in the %@AI@%textarg%@AE@%.%@NL@%
  2198. (ALT+A %@AI@%textarg%@AE@% F2)%@NL@%
  2199. %@NL@%
  2200. %@AI@%Setfile%@AE@% (F2)                Loads the previous file. You can use %@AI@%Setfile%@AE@% to%@NL@%
  2201.                             move back and forth between two files.%@NL@%
  2202. %@NL@%
  2203. %@CR:MSE48003@%%@4@%You can also use %@AI@%Setfile%@AE@% by following these steps:%@EH@%%@NL@%
  2204. %@NL@%
  2205. %@CR:MSE48004@%  1. Bring up the information file with the %@AI@%Information%@AE@% function  (press%@NL@%
  2206.      F10).%@NL@%
  2207. %@NL@%
  2208.   2. Move the cursor to the beginning of the name of a file.%@NL@%
  2209. %@NL@%
  2210.   3. Select the file that the cursor is on by giving the command %@AI@%Arg Setfile%@AE@%%@NL@%
  2211.      (press ALT+A F2).%@NL@%
  2212. %@NL@%
  2213. %@CR:MSE48005@%%@4@%The information file contains the names of all files that you have edited%@EH@%
  2214. before, up to the limit specified by the %@AB@%tmpsav%@AE@% switch. (See Table A.5 for
  2215. more information on switches.) Active files──files that have been edited
  2216. during this session──are listed with their current lengths. This file also
  2217. tells whether the text in the Clipboard was copied in line (box) or stream
  2218. mode.%@NL@%
  2219. %@NL@%
  2220. %@CR:MSE48006@%%@4@%When an old file is reloaded, the editor remembers cursor and window%@EH@%
  2221. information from the last time you edited the file. The editor stores this
  2222. information in the file M.TMP (or MEP.TMP, if the editor is named MEP).%@NL@%
  2223. %@NL@%
  2224. %@CR:MSE48007@%%@4@%The %@AI@%Arg textarg Setfile%@AE@% command accepts wild-card characters (%@AB@%?%@AE@% matches any%@EH@%
  2225. character and %@AB@%*%@AE@% matches any string) in the %@AI@%textarg%@AE@%. The command responds by
  2226. displaying a list of files that match the %@AI@%textarg%@AE@%. You can then select a
  2227. file by using the steps outlined above. For example, the following sequence
  2228. causes the editor to list all files with a .C extension:%@NL@%
  2229. %@NL@%
  2230. %@CR:MSE48008@%  1. Invoke the %@AI@%Arg%@AE@% function (press ALT+A)%@NL@%
  2231.   2. Type the following: %@AS@%*.c%@AE@%%@NL@%
  2232.   3. Invoke the %@AI@%Setfile%@AE@% function (press F2)%@NL@%
  2233. %@NL@%
  2234. %@NL@%
  2235. %@CR:MSE49000@%%@2@%%@AB@%4.9  Printing a File%@AE@%%@EH@%%@NL@%
  2236. %@NL@%
  2237. %@CR:MSE49001@%%@4@%You can print a file without leaving the Microsoft Editor. You can also%@EH@%
  2238. print a highlighted area or a series of files. Use the %@AI@%Print%@AE@% function
  2239. (CTRL+F8) to perform each of these actions:%@NL@%
  2240. %@NL@%
  2241. %@CR:MSE49002@%%@AB@%Command%@AE@%%@NL@%
  2242. %@AB@%(and Default Keystrokes)          Description%@AE@%%@NL@%
  2243. %@NL@%
  2244. %@AI@%Print%@AE@% (CTRL+F8)                   Prints all of the current file.%@NL@%
  2245. %@NL@%
  2246. %@AI@%Arg cursor-movement Print%@AE@%         Prints the highlighted area.%@NL@%
  2247. (ALT+A %@AI@%cursor-movement%@AE@% CTRL+F8)%@NL@%
  2248. %@NL@%
  2249. %@AI@%Arg textarg Print%@AE@%                 Prints the file or files specified in%@NL@%
  2250. (ALT+A %@AI@%textarg%@AE@% CTRL+F8)           %@AI@%textarg%@AE@%. If there is more than one file,%@NL@%
  2251.                                   separate them with a space.%@NL@%
  2252. %@NL@%
  2253. %@CR:MSE49003@%%@4@%By default, the %@AI@%Print%@AE@% function responds by sending the specified output to%@EH@%
  2254. the LPT1 device. However, you can specify a different print command by
  2255. setting the %@AB@%printcmd%@AE@% switch.%@NL@%
  2256. %@NL@%
  2257. %@CR:MSE49004@%%@4@%For example, suppose you want to print a file by using the following%@EH@%
  2258. command:%@NL@%
  2259. %@NL@%
  2260.      COPY %s LPT2%@NL@%
  2261. %@NL@%
  2262. %@CR:MSE49005@%%@4@%The characters %@AS@%%s%@AE@% represent the file name (in the case of highlighted%@EH@%
  2263. regions, the editor creates a temporary file). To invoke this command each
  2264. time you use the %@AI@%Print%@AE@% function, you first follow these steps to set the
  2265. %@AB@%printcmd%@AE@% switch:%@NL@%
  2266. %@NL@%
  2267. %@CR:MSE49006@%  1. Invoke %@AI@%Arg%@AE@% (press ALT+A)%@NL@%
  2268. %@NL@%
  2269.   2. Type the following text: %@AS@%printcmd:COPY %s LPT2%@AE@%%@NL@%
  2270. %@NL@%
  2271.   3. Press ALT+= to invoke %@AI@%Assign%@AE@% (hold down the ALT key and type the equals%@NL@%
  2272.      sign)%@NL@%
  2273. %@NL@%
  2274. %@CR:MSE49007@%%@4@%When printing from within the protected-mode editor under OS/2, the printing%@EH@%
  2275. occurs as a background operation and %@AS@%BP%@AE@% is displayed at the lower-right-hand
  2276. corner of the screen. The <print> pseudo file maintains a log of the printed
  2277. output.%@NL@%
  2278. %@NL@%
  2279. ───────────────────────────────────────────────────────────────────────────%@NL@%
  2280. %@AI@%NOTE%@AE@%%@NL@%
  2281.    A "switch" is a variable you can set to control the editor's behavior.%@NL@%
  2282.    See Chapter 7%@BO:   3396c@%, "Switches, Assignments, and the TOOLS.INI File," for more%@NL@%
  2283.    information on switches and how to set them.%@NL@%
  2284. ───────────────────────────────────────────────────────────────────────────%@NL@%
  2285. %@NL@%
  2286. %@NL@%
  2287. %@CR:MSE50000@%%@1@%%@AB@%Chapter 5  Regular Expressions%@AE@%%@EH@%%@NL@%
  2288. ───────────────────────────────────────────────────────────────────────────%@NL@%
  2289. %@NL@%
  2290. %@CR:MSE50001@%%@4@%A "regular expression" is a special search string that matches a %@AI@%pattern%@AE@% of%@EH@%
  2291. text rather than a specific sequence of characters. With regular
  2292. expressions, you can search for such targets as every five-digit number, or
  2293. every string in quotes, without having to specify the exact text to search
  2294. for.%@NL@%
  2295. %@NL@%
  2296. %@CR:MSE50002@%%@4@%In a regular expression, certain characters lose their literal meaning,%@EH@%
  2297. becoming symbols or placeholders that specify the text pattern you want to
  2298. match. In a regular expression such as %@AS@%a[123]%@AE@%, the %@AS@%a%@AE@% is still the literal
  2299. character "a". The brackets, however, are not search targets. Rather, they
  2300. enclose a set of characters, any one of which is a match. Therefore, the
  2301. regular expression %@AS@%a[123]%@AE@% matches any of these strings:%@NL@%
  2302. %@NL@%
  2303.      %@AS@%a1%@AE@%%@NL@%
  2304.      %@AS@%a2%@AE@%%@NL@%
  2305.      %@AS@%a3%@AE@%%@NL@%
  2306. %@NL@%
  2307. %@CR:MSE50004@%%@4@%The Microsoft Editor supports two versions of regular-expression syntax:%@EH@%
  2308. UNIX(R) and M 1.0. The UNIX syntax provides compatibility with the syntax
  2309. used by programming utilities for the UNIX and XENIX(R) operating systems
  2310. and CodeView(R). M 1.0 syntax does not provide this compatibility; however,
  2311. it offers more power.%@NL@%
  2312. %@NL@%
  2313. %@CR:MSE50005@%%@4@%This chapter examines three aspects of regular-expression syntax:%@EH@%%@NL@%
  2314. %@NL@%
  2315. %@CR:MSE50006@%  ■  Choosing the syntax%@NL@%
  2316.   ■  Using UNIX syntax%@NL@%
  2317.   ■  Using M 1.0 syntax%@NL@%
  2318. %@NL@%
  2319. %@CR:MSE50007@%%@4@%You can use regular expressions with the search functions (%@AI@%Psearch%@AE@%, %@AI@%Msearch%@AE@%,%@EH@%
  2320. %@AI@%Replace%@AE@%, and %@AI@%Qreplace%@AE@%). Each of these functions recognizes a regular
  2321. expression (rather than an ordinary text string) when you use %@AI@%Arg Arg%@AE@% to
  2322. introduce the string.%@NL@%
  2323. %@NL@%
  2324. %@NL@%
  2325. %@CR:MSE51000@%%@2@%%@AB@%5.1  Choosing the Syntax%@AE@%%@EH@%%@NL@%
  2326. %@NL@%
  2327. %@CR:MSE51001@%%@4@%The Microsoft Editor supports two forms of regular-expression syntax: the%@EH@%
  2328. M 1.0 form and the UNIX standard. If you know the UNIX standard, you can use
  2329. it immediately. However, the slightly different M 1.0 syntax of the
  2330. Microsoft Editor is more powerful.%@NL@%
  2331. %@NL@%
  2332. %@CR:MSE51002@%%@4@%By default, the editor recognizes the UNIX syntax for regular expressions.%@EH@%
  2333. To use the M 1.0 syntax instead, follow these steps:%@NL@%
  2334. %@NL@%
  2335. %@CR:MSE51003@%  1. Invoke %@AI@%Arg%@AE@% (press ALT+A)%@NL@%
  2336.   2. Type the following: %@AS@%unixre:no%@AE@%%@NL@%
  2337.   3. Invoke %@AI@%Assign%@AE@% (press ALT+=)%@NL@%
  2338. %@NL@%
  2339. %@CR:MSE51004@%%@4@%To enable the standard UNIX syntax, follow the same steps but type %@AS@%unixre:%@AE@%%@EH@%
  2340. instead of %@AS@%unixre:no%@AE@%.%@NL@%
  2341. %@NL@%
  2342. %@CR:MSE51005@%%@4@%If you would like the editor to run automatically in M 1.0 mode, rather than%@EH@%
  2343. having to manually invoke the %@AI@%Assign%@AE@% function, add a %@AS@%unixre:no%@AE@% entry to the
  2344. TOOLS.INI file. See Chapter 7%@BO:   3396c@%, "Switches, Assignments, and the TOOLS.INI
  2345. File," for more information.%@NL@%
  2346. %@NL@%
  2347. %@NL@%
  2348. %@CR:MSE52000@%%@2@%%@AB@%5.2  UNIX(R) Regular-Expression Syntax%@AE@%%@EH@%%@NL@%
  2349. %@NL@%
  2350. %@CR:MSE52001@%%@4@%The UNIX regular-expression syntax is compatibile with UNIX utilities and%@EH@%
  2351. CodeView. By default, the editor uses UNIX syntax for regular expressions.
  2352. The M 1.0 syntax offers the same capabilities as the UNIX syntax, plus a few
  2353. additional features.%@NL@%
  2354. %@NL@%
  2355. %@NL@%
  2356. %@CR:MSE52100@%%@3@%%@AB@%5.2.1  UNIX Regular Expressions as Simple Strings%@AE@%%@EH@%%@NL@%
  2357. %@NL@%
  2358. %@CR:MSE52101@%%@4@%The power of regular expressions comes from the use of the special%@EH@%
  2359. characters and character sequences listed below. A regular expression that
  2360. does not contain these special characters or character sequences acts as a
  2361. literal text string:%@NL@%
  2362. %@NL@%
  2363.      %@AB@%\(  \)  [  ]  !  .  ^  $  *%@AE@%%@NL@%
  2364. %@NL@%
  2365. %@CR:MSE52103@%%@4@%For example, the regular expression %@AS@%match me precisely%@AE@% matches only a%@EH@%
  2366. literal occurrence of itself because it contains no special characters.%@NL@%
  2367. %@NL@%
  2368. %@NL@%
  2369. %@CR:MSE52200@%%@3@%%@AB@%5.2.2  UNIX Special Characters%@AE@%%@EH@%%@NL@%
  2370. %@NL@%
  2371. %@CR:MSE52201@%%@4@%The UNIX operators offer the standard pattern-matching capabilities found in%@EH@%
  2372. many other editors and utilities that use regular expressions.%@NL@%
  2373. %@NL@%
  2374. %@CR:MSE52202@%%@4@%The list below describes the special characters that have a simple usage.%@EH@%
  2375. The term %@AI@%class%@AE@% has a special meaning defined below. All other characters
  2376. should be interpreted literally.%@NL@%
  2377. %@NL@%
  2378. %@CR:MSE52203@%%@AB@%Expression                  Description%@AE@%%@NL@%
  2379. %@NL@%
  2380. %@AB@%\%@AE@%                           Escape. Causes the editor to ignore the special%@NL@%
  2381.                             meaning of the next character. For example, the%@NL@%
  2382.                             expression %@AS@%\.%@AE@% matches %@AS@%.%@AE@% in the text file; the%@NL@%
  2383.                             expression %@AS@%\^%@AE@% matches %@AS@% %@AE@%%@AS@%^%@AE@%; and the expression %@AS@%\\%@AE@%%@NL@%
  2384.                             matches %@AS@%\%@AE@%.%@NL@%
  2385. %@NL@%
  2386. %@AB@%.%@AE@%                           Wildcard. Matches any single character. For%@NL@%
  2387.                             example, the expression %@AS@%a.a%@AE@% matches %@AS@%aaa%@AE@%, %@AS@%aBa%@AE@%,%@NL@%
  2388.                             and %@AS@%a1a%@AE@%, but not %@AS@%aBBBa%@AE@%.%@NL@%
  2389. %@NL@%
  2390. %@AB@%^%@AE@%                           Beginning of line. For example, %@AS@%^The%@AE@% matches the%@NL@%
  2391.                             word %@AS@%The%@AE@% only when it occurs at the beginning of%@NL@%
  2392.                             a line.%@NL@%
  2393. %@NL@%
  2394. %@AB@%$%@AE@%                           End of line. For example, %@AS@%end$%@AE@% matches the word %@AS@%%@AE@%%@NL@%
  2395.                             %@AS@%end%@AE@% only when it occurs at the end of a line.%@NL@%
  2396. %@NL@%
  2397. %@AB@%[%@AE@%%@AI@%class%@AE@%%@AB@%]%@AE@%                     Character class. Matches any one character in%@NL@%
  2398.                             the class. Use a dash (%@AB@%-%@AE@%) to specify a%@NL@%
  2399.                             contiguous range of ASCII values. For example,%@NL@%
  2400.                             %@AS@%[a-zA-Z0-9]%@AE@% matches any letter or digit, and%@NL@%
  2401.                             %@AS@%[abc] %@AE@%%@AS@%%@AE@% matches %@AS@%a%@AE@%, %@AS@%b%@AE@%, or %@AS@%c%@AE@%.%@NL@%
  2402. %@NL@%
  2403. %@AB@%[^%@AE@%%@AI@%class%@AE@%%@AB@%]%@AE@%                    Inverse of character class. Matches any%@NL@%
  2404.                             character not specified in the class.%@NL@%
  2405. %@NL@%
  2406. %@CR:MSE52204@%%@4@%The special characters with more complex usage are described in the%@EH@%
  2407. following list. The expression %@AI@%X%@AE@% is a placeholder representing a regular
  2408. expression that is either a single character, a group of characters enclosed
  2409. in brackets (%@AB@%[]%@AE@%), or the regular-expression delimiters %@AB@%\(%@AE@% and %@AB@%\)%@AE@%. The letter
  2410. %@AI@%n%@AE@% represents a one-digit number.%@NL@%
  2411. %@NL@%
  2412. %@CR:MSE52205@%%@AB@%Expression                  Description%@AE@%%@NL@%
  2413. %@NL@%
  2414. %@AI@%X%@AE@%%@AB@%*%@AE@%                          Repeat operator. Matches zero or more%@NL@%
  2415.                             occurrences of %@AI@%X%@AE@%. For example, the regular%@NL@%
  2416.                             expression %@AS@%ba*b%@AE@% matches %@AS@%baaab%@AE@%, %@AS@%bab%@AE@%, and %@AS@%bb%@AE@%. This%@NL@%
  2417.                             operator always matches as many characters as%@NL@%
  2418.                             possible.%@NL@%
  2419. %@NL@%
  2420. %@AB@%\(%@AE@% ... %@AB@%\)%@AE@%                   Tagged expression. A marked substring which you%@NL@%
  2421.                             can refer to elsewhere in the search string, or%@NL@%
  2422.                             in a replacement string, as %@AB@%\%@AE@%%@AI@%n%@AE@%. When a tagged%@NL@%
  2423.                             expression is referred to in a search string,%@NL@%
  2424.                             the editor finds text with the tagged expression%@NL@%
  2425.                             repeated. When a tagged expression is referred%@NL@%
  2426.                             to in a replacement string, the editor reuses%@NL@%
  2427.                             part of the text it is replacing.%@NL@%
  2428. %@NL@%
  2429.                             The exact use of tags is explained in Sections%@NL@%
  2430.                             5.2.4%@BO:   231bc@% and 5.2.5%@BO:   23b94@%. Characters falling between %@NL@%
  2431.                             %@AB@%\(%@AE@% and %@AB@%\)%@AE@% are treated as a group.%@NL@%
  2432. %@NL@%
  2433. %@AB@%\%@AE@%%@AI@%n%@AE@%                          Reference to the characters matched by a tagged%@NL@%
  2434.                             expression. The number %@AI@%n%@AE@% indicates which%@NL@%
  2435.                             expression. The first tagged expression is%@NL@%
  2436.                             represented as %@AB@%\%@AE@%1, the second as %@AB@%\%@AE@%2, and so%@NL@%
  2437.                             on.%@NL@%
  2438. %@NL@%
  2439. %@CR:MSE52206@%%@4@%The procedure below uses some of the special characters presented in this%@EH@%
  2440. section. To find the next occurrence of a number (that is, a string of
  2441. digits) beginning with a digit 1 or 2, perform the following sequence of
  2442. keystrokes:%@NL@%
  2443. %@NL@%
  2444. %@CR:MSE52207@%  1. Invoke %@AI@%Arg%@AE@% twice (press ALT+A twice)%@NL@%
  2445.   2. Type the following characters: %@AS@%[12][0-9]*%@AE@%%@NL@%
  2446.   3. Invoke %@AI@%Psearch%@AE@% (press F3)%@NL@%
  2447. %@NL@%
  2448. %@NL@%
  2449. %@CR:MSE52300@%%@3@%%@AB@%5.2.3  Combining UNIX Special Characters%@AE@%%@EH@%%@NL@%
  2450. %@NL@%
  2451. %@CR:MSE52301@%%@4@%Special characters are most powerful when used in combination. For example,%@EH@%
  2452. the wildcard (%@AS@%.%@AE@%) and repeat (%@AS@%*%@AE@%) characters are often used together:%@NL@%
  2453. %@NL@%
  2454.      %@AS@%.*%@AE@%%@NL@%
  2455. %@NL@%
  2456. %@CR:MSE52302@%%@4@%The expression above means "match any string of characters." Although this%@EH@%
  2457. expression is not useful by itself, it is quite useful when part of a larger
  2458. expression. For example,%@NL@%
  2459. %@NL@%
  2460.      %@AS@%B.*ing%@AE@%%@NL@%
  2461. %@NL@%
  2462. %@CR:MSE52303@%%@4@%means "match any string beginning with %@AS@%B%@AE@% and ending with %@AS@%ing%@AE@%".%@EH@%%@NL@%
  2463. %@NL@%
  2464. %@CR:MSE52304@%%@4@%In cases where a single character is surrounded by two operators, regular%@EH@%
  2465. expressions are interpreted from left to right. For example, suppose the
  2466. following is part of a regular expression:%@NL@%
  2467. %@NL@%
  2468.      %@AS@%\1*%@AE@%%@NL@%
  2469. %@NL@%
  2470. %@CR:MSE52305@%%@4@%In the expression above, the repeat operator (%@AS@%*%@AE@%) applies to the characters%@EH@%
  2471. %@AS@%\1%@AE@% as a single unit.%@NL@%
  2472. %@NL@%
  2473. %@CR:MSE52306@%%@4@%If you want the repeat operator to apply to a group, enclose the group%@EH@%
  2474. inside the symbols %@AB@%\%@AE@%( and %@AB@%\%@AE@%). These characters tag an expression (as
  2475. explained in the next section) and are useful for treating a series of
  2476. characters as a group.%@NL@%
  2477. %@NL@%
  2478. %@NL@%
  2479. %@CR:MSE52400@%%@3@%%@AB@%5.2.4  Tagged Expressions in the UNIX Search String%@AE@%%@EH@%%@NL@%
  2480. %@NL@%
  2481. %@CR:MSE52401@%%@4@%A "tagged expression" is a substring delimited by the symbols %@AB@%\%@AE@% (and %@AB@%\%@AE@%). You%@EH@%
  2482. can enter any regular-expression characters between these delimiters. Tagged
  2483. expressions are used to specify text patterns that contain repeated elements
  2484. and to mark a string for reuse.%@NL@%
  2485. %@NL@%
  2486. %@CR:MSE52402@%%@4@%The editor first searches for a character string that matches the entire%@EH@%
  2487. regular expression. It then tags each substring specified in a tagged
  2488. expression. Up to nine substrings at a time may be tagged.%@NL@%
  2489. %@NL@%
  2490. %@CR:MSE52403@%%@4@%Once a tagged expression has been matched, you can refer to the specific%@EH@%
  2491. string of characters that matched that expression. Use the syntax%@NL@%
  2492. %@NL@%
  2493.      %@AS@%\%@AE@%%@AI@%n%@AE@%%@NL@%
  2494. %@NL@%
  2495. %@CR:MSE52405@%%@4@%in which %@AI@%n%@AE@% is a number that selects the expression. The symbol %@AS@%\1%@AE@%%@EH@%
  2496. represents the first tagged expression, the symbol %@AB@%\%@AE@%2 represents the second
  2497. tagged expression, and so on. The use of %@AB@%\%@AE@%%@AI@%n%@AE@% does not search for a new match
  2498. for the tagged expression. Rather, it matches only an occurrence of the same
  2499. characters that the tagged expression itself matched.%@NL@%
  2500. %@NL@%
  2501. %@CR:MSE52406@%%@4@%For example, consider the following expression:%@EH@%%@NL@%
  2502. %@NL@%
  2503.      %@AS@%\(.\)\1\1%@AE@%%@NL@%
  2504. %@NL@%
  2505. %@CR:MSE52407@%%@4@%The expression above means, "match any character, then see if it's followed%@EH@%
  2506. by two occurrences of the same character." The following strings all satisfy
  2507. this requirement:%@NL@%
  2508. %@NL@%
  2509.      %@AS@%aaa%@AE@%%@NL@%
  2510.      %@AS@%XXX%@AE@%%@NL@%
  2511.      %@AS@%111%@AE@%%@NL@%
  2512. %@NL@%
  2513. %@CR:MSE52409@%%@4@%Note that this regular expression is not equivalent to %@AS@%...%@AE@% (three wild%@EH@%
  2514. cards).  The expression %@AS@%...%@AE@% matches any three characters; the characters do
  2515. not need to be the same.%@NL@%
  2516. %@NL@%
  2517. %@CR:MSE5240A@%%@4@%The next expression is more complex:%@EH@%%@NL@%
  2518. %@NL@%
  2519.      %@AS@%\([A-Za-z]*\)==\1%@AE@%%@NL@%
  2520. %@NL@%
  2521. %@CR:MSE5240B@%%@4@%This expression means "match any number of letters, then see if the letters%@EH@%
  2522. are followed by two equals signs (%@AB@%==%@AE@%) and a repetition of the original
  2523. group." This expression matches the first two strings below but not the
  2524. third:%@NL@%
  2525. %@NL@%
  2526.      %@AS@%ABCxyz==ABCxyz%@AE@%%@NL@%
  2527.      %@AS@%i==i%@AE@%%@NL@%
  2528.      %@AS@%ABCxyz==KBCxjj%@AE@%%@NL@%
  2529. %@NL@%
  2530. %@NL@%
  2531. %@CR:MSE52500@%%@3@%%@AB@%5.2.5  Tagged Expressions in the UNIX Replacement String%@AE@%%@EH@%%@NL@%
  2532. %@NL@%
  2533. %@CR:MSE52501@%%@4@%You can refer to tagged expressions in replacement strings as well as in%@EH@%
  2534. search strings. Parts of the string to be replaced may be reused by
  2535. referring to the tagged expressions that originally matched those parts. Use
  2536. the syntax described in the previous section.%@NL@%
  2537. %@NL@%
  2538. %@CR:MSE52502@%%@4@%For example, suppose you want to find all occurrences of %@AI@%hexdigits%@AE@%%@AB@%H%@AE@% and%@EH@%
  2539. replace them with strings of the form %@AB@%16#%@AE@%%@AI@%hexdigits%@AE@%. You can search for
  2540. strings of the form %@AI@%hexdigits%@AE@%%@AB@%H%@AE@% by specifying the regular expression%@NL@%
  2541. %@NL@%
  2542.      %@AS@%\([0-9a-fA-F]*\)H%@AE@%%@NL@%
  2543. %@NL@%
  2544. %@CR:MSE52503@%%@4@%and then specifying the following replacement string:%@EH@%%@NL@%
  2545. %@NL@%
  2546.      %@AS@%16#\1%@AE@%%@NL@%
  2547. %@NL@%
  2548. %@CR:MSE52504@%%@4@%The result is that the Microsoft Editor searches for any occurrence of one%@EH@%
  2549. or more hexadecimal digits (digits 0-9 and the letters a-f) followed by the
  2550. letter %@AB@%H%@AE@%. Each matching string is replaced by a new string that consists of
  2551. the original digits (which were tagged so they could be reused) and the
  2552. prefix %@AB@%16#%@AE@%. For example, the string %@AS@%1a000H%@AE@% is replaced with the string
  2553. %@AS@%16#1a000%@AE@%.%@NL@%
  2554. %@NL@%
  2555. %@CR:MSE52505@%%@4@%Use two backslashes (%@AB@%\\%@AE@%) to represent a literal backslash (%@AB@%\%@AE@%). Within%@EH@%
  2556. replacement strings, all characters except the backslashes are literals. The
  2557. backslash is considered to be the first character of a regular-expression
  2558. reference, such as %@AS@%\4%@AE@%.%@NL@%
  2559. %@NL@%
  2560. %@NL@%
  2561. %@CR:MSE53000@%%@2@%%@AB@%5.3  M 1.0 Regular-Expression Syntax%@AE@%%@EH@%%@NL@%
  2562. %@NL@%
  2563. %@CR:MSE53001@%%@4@%The M 1.0 syntax is fully compatible with the regular-expression syntax used%@EH@%
  2564. by Version 1.0 of the Microsoft Editor. This syntax offers all the features
  2565. of UNIX regular-expression syntax (though sometimes using different
  2566. characters), plus additional features.%@NL@%
  2567. %@NL@%
  2568. %@CR:MSE53002@%%@4@%To choose M 1.0 syntax, you must set the %@AB@%unixre%@AE@% switch to off, as described%@EH@%
  2569. in Section 5.1%@BO:   20e9f@%, "Choosing the Syntax."%@NL@%
  2570. %@NL@%
  2571. %@NL@%
  2572. %@CR:MSE53100@%%@3@%%@AB@%5.3.1  M 1.0 Regular Expressions as Simple Strings%@AE@%%@EH@%%@NL@%
  2573. %@NL@%
  2574. %@CR:MSE53101@%%@4@%The power of regular expressions comes from the use of the special%@EH@%
  2575. characters listed below. A regular expression that does not contain these
  2576. special characters acts as if it were a literal text string:%@NL@%
  2577. %@NL@%
  2578.      %@AB@%\  {  }  (  )  [  ]  !  ~  :  ?  ^  $  +  *  @  #%@AE@%%@NL@%
  2579. %@NL@%
  2580. %@CR:MSE53103@%%@4@%For example, the regular expression %@AS@%match me precisely%@AE@% matches only a%@EH@%
  2581. literal occurrence of itself because it contains no special characters.%@NL@%
  2582. %@NL@%
  2583. %@NL@%
  2584. %@CR:MSE53200@%%@3@%%@AB@%5.3.2  M 1.0 Special Characters%@AE@%%@EH@%%@NL@%
  2585. %@NL@%
  2586. %@CR:MSE53201@%%@4@%The M 1.0 syntax offers a rich set of pattern-matching capabilities. Most of%@EH@%
  2587. the special characters described below have analogs in other editors and
  2588. utilities that use regular expressions.%@NL@%
  2589. %@NL@%
  2590. %@CR:MSE53202@%%@4@%The list below describes the special characters that have a simple usage.%@EH@%
  2591. The term %@AI@%class%@AE@% has a special meaning defined below. All other characters
  2592. should be interpreted literally.%@NL@%
  2593. %@NL@%
  2594. %@CR:MSE53203@%%@AB@%Expression                  Description%@AE@%%@NL@%
  2595. %@NL@%
  2596. %@AB@%\%@AE@%                           Escape. Causes the editor to ignore the special%@NL@%
  2597.                             meaning of the next character. For example, the%@NL@%
  2598.                             expression %@AS@%\?%@AE@% matches %@AS@%?%@AE@% in the text file; the%@NL@%
  2599.                             expression %@AS@%\^%@AE@% matches %@AS@% %@AE@%%@AS@%^%@AE@%; and the expression %@AS@%\\%@AE@%%@NL@%
  2600.                             matches %@AS@%\%@AE@%.%@NL@%
  2601. %@NL@%
  2602. %@AB@%?%@AE@%                           Wildcard. Matches any single character. For%@NL@%
  2603.                             example, the expression %@AS@%a?a%@AE@% matches %@AS@%aaa%@AE@%, %@AS@%aBa%@AE@%,%@NL@%
  2604.                             and %@AS@%a1a%@AE@%, but not %@AS@%aBBBa%@AE@%.%@NL@%
  2605. %@NL@%
  2606. %@AB@%^%@AE@%                           Beginning of line. For example, %@AS@%^The%@AE@% matches the%@NL@%
  2607.                             word %@AS@%The%@AE@% only when it occurs at the beginning of%@NL@%
  2608.                             a line.%@NL@%
  2609. %@NL@%
  2610. %@AB@%$%@AE@%                           End of line. For example, %@AS@%end$%@AE@% matches the word %@AS@%%@AE@%%@NL@%
  2611.                             %@AS@%end%@AE@% only when it occurs at the end of a line.%@NL@%
  2612. %@NL@%
  2613. %@AB@%[%@AE@%%@AI@%class%@AE@%%@AB@%]%@AE@%                     Character class. Matches any one character in%@NL@%
  2614.                             the class. Use a dash (%@AB@%-%@AE@%) to specify ranges. For%@NL@%
  2615.                             example, %@AS@%[a-zA-Z0-9]%@AE@% matches any character or%@NL@%
  2616.                             digit, and %@AS@%[abc]%@AE@% matches %@AS@%a%@AE@%, %@AS@%b%@AE@%, or %@AS@%c%@AE@%.%@NL@%
  2617. %@NL@%
  2618. %@AB@%[~%@AE@%%@AI@%class%@AE@%%@AB@%]%@AE@%                    Noncharacter class. Matches any character not%@NL@%
  2619.                             specified in the class.%@NL@%
  2620. %@NL@%
  2621. %@CR:MSE53204@%%@4@%The special characters with more complex usage are described in the%@EH@%
  2622. following list. The expression %@AI@%X%@AE@% is a placeholder representing a regular
  2623. expression that is either a single character or a group of characters
  2624. enclosed in parentheses (%@AB@%()%@AE@%), brackets (%@AB@%[]%@AE@%), or braces (%@AB@%{}%@AE@%). The
  2625. placeholders %@AI@%X1%@AE@%, %@AI@%X2%@AE@%, and so on, represent any regular expression.%@NL@%
  2626. %@NL@%
  2627. %@CR:MSE53205@%%@AU@%Expression                  Description%@AE@%%@NL@%
  2628. %@NL@%
  2629. %@AI@%X%@AE@%%@AB@%*%@AE@%                          Minimal matching. Matches zero or more%@NL@%
  2630.                             occurrences of %@AI@%X%@AE@%. For example: the regular%@NL@%
  2631.                             expression %@AS@%ba*b%@AE@% matches %@AS@%baaab%@AE@%, %@AS@%bab%@AE@%, and %@AS@%bb%@AE@%.%@NL@%
  2632. %@NL@%
  2633. %@AI@%X%@AE@%%@AB@%+%@AE@%                          Minimal matching plus (shorthand for %@AI@%XX%@AE@%%@AB@%*%@AE@%).%@NL@%
  2634.                             Matches one or more occurrences of %@AI@%X%@AE@%. The%@NL@%
  2635.                             regular expression %@AS@%ba+b%@AE@% matches %@AS@%baab%@AE@% and %@AS@%bab%@AE@%%@NL@%
  2636.                             but not %@AS@%bb%@AE@%.%@NL@%
  2637. %@NL@%
  2638. %@AI@%X%@AE@%%@AB@%@%@AE@%                          Maximal matching. Identical to %@AI@%X%@AE@%%@AB@%*%@AE@%, except for%@NL@%
  2639.                             differences in matching method explained in%@NL@%
  2640.                             Section 5.3.4.%@BO:   26bc3@%%@NL@%
  2641. %@NL@%
  2642. %@AI@%X%@AE@%%@AB@%#%@AE@%                          Maximal matching plus. Identical to %@AI@%X%@AE@%%@AB@%+%@AE@%, except%@NL@%
  2643.                             for differences in matching method explained in%@NL@%
  2644.                             Section 5.3.4.%@BO:   26bc3@%%@NL@%
  2645. %@NL@%
  2646. %@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@%
  2647.                             forth. It tries to match them in that order and%@NL@%
  2648.                             switches from %@AI@%Xi%@AE@% to %@AI@%Xi+1%@AE@% only if the rest of the%@NL@%
  2649.                             expression fails to match. For example, the%@NL@%
  2650.                             regular expression %@AS@%(ww!xx!xxyy)zz%@AE@% matches %@AS@%xxzz%@AE@%%@NL@%
  2651.                             on the second alternative and %@AS@%xxyyzz%@AE@% on the%@NL@%
  2652.                             third.%@NL@%
  2653. %@NL@%
  2654. %@AB@%~%@AE@%%@AI@%X%@AE@%                          Not function. Matches nothing, but checks to see%@NL@%
  2655.                             if the string matches %@AI@%X%@AE@% at this point and fails%@NL@%
  2656.                             if it does. For example, %@AS@%^~(if!while)?*$%@AE@% matches%@NL@%
  2657.                             all lines that do not begin with %@AS@%if%@AE@% or %@AS@%while%@AE@%.%@NL@%
  2658. %@NL@%
  2659. %@AI@%X%@AE@%%@AB@%^%@AE@%%@AI@%n%@AE@%                         Power function. Matches exactly %@AI@%n%@AE@% copies of %@AI@%X%@AE@%.%@NL@%
  2660.                             For example, %@AS@%w^4%@AE@% matches %@AS@%wwww%@AE@% and %@AS@%(a?)^3%@AE@% matches%@NL@%
  2661.                             %@AS@%a#aba5%@AE@%.%@NL@%
  2662. %@NL@%
  2663. %@AB@%{%@AE@%...%@AB@%}%@AE@%                       Tagged expression, which is a string of%@NL@%
  2664.                             characters you identify so that you can refer to%@NL@%
  2665.                             them elsewhere, as %@AB@%$%@AE@%%@AI@%n%@AE@%. By referring to a tagged%@NL@%
  2666.                             expression in a search string, you cause the%@NL@%
  2667.                             editor to look for patterns involving%@NL@%
  2668.                             duplication. By referring to a tagged expression%@NL@%
  2669.                             in a replacement string, you cause the editor to%@NL@%
  2670.                             reuse part of the text that it is replacing.%@NL@%
  2671. %@NL@%
  2672.                             The exact use of tags is explained in Sections%@NL@%
  2673.                             5.3.5%@BO:   27441@% and 5.3.6%@BO:   27df8@%. Characters within braces are%@NL@%
  2674.                             treated as a group.%@NL@%
  2675. %@NL@%
  2676. %@AB@%$%@AE@%%@AI@%n%@AE@%                          Reference to a previously tagged substring. The%@NL@%
  2677.                             number %@AI@%n%@AE@% indicates which substring. The first%@NL@%
  2678.                             tagged substring is represented as %@AB@%$%@AE@% 1, the%@NL@%
  2679.                             second as %@AB@%$%@AE@% 2, and so on. %@AB@%$%@AE@% 0 represents the%@NL@%
  2680.                             entire matched string.%@NL@%
  2681. %@NL@%
  2682. %@AB@%:%@AE@%%@AI@%letter%@AE@%                     Predefined string. The list of predefined%@NL@%
  2683.                             strings is given in Section 5.3.7.%@BO:   2885d@%%@NL@%
  2684. %@NL@%
  2685. %@CR:MSE53206@%%@4@%The procedure below uses some of the special characters presented in this%@EH@%
  2686. section. To find the next occurrence of a number (that is, a string of
  2687. digits) beginning with a digit 1 or 2, perform the following sequence of
  2688. keystrokes:%@NL@%
  2689. %@NL@%
  2690. %@CR:MSE53207@%  1. Invoke %@AI@%Arg%@AE@% twice(press ALT + A twice)%@NL@%
  2691.   2. Type the following characters: %@AS@%[12][0-9]*%@AE@%%@NL@%
  2692.   3. Invoke %@AI@%Psearch%@AE@% (press F3)%@NL@%
  2693. %@NL@%
  2694. %@NL@%
  2695. %@CR:MSE53300@%%@3@%%@AB@%5.3.3  Combining M 1.0 Special Characters%@AE@%%@EH@%%@NL@%
  2696. %@NL@%
  2697. %@CR:MSE53301@%%@4@%Special characters are most powerful when used in combination. For example,%@EH@%
  2698. the %@AS@%?%@AE@% and %@AS@%*%@AE@% characters are often used together:%@NL@%
  2699. %@NL@%
  2700.      %@AS@%?*%@AE@%%@NL@%
  2701. %@NL@%
  2702. %@CR:MSE53302@%%@4@%The expression above means "match any string of characters." Although this%@EH@%
  2703. expression is not useful by itself, it is quite useful when part of a larger
  2704. expression. For example,%@NL@%
  2705. %@NL@%
  2706.      %@AS@%B?*ing%@AE@%%@NL@%
  2707. %@NL@%
  2708. %@CR:MSE53303@%%@4@%means "match any characters beginning with %@AS@%B%@AE@% and ending with %@AS@%ing%@AE@%".%@EH@%%@NL@%
  2709. %@NL@%
  2710. %@CR:MSE53304@%%@4@%Many of the special characters in the previous section (such as + and *) are%@EH@%
  2711. %@AI@%operators%@AE@%; they work with other characters to form expressions. These
  2712. operators usually apply to the previous character or an expression enclosed
  2713. in braces, brackets, or parentheses. However, it is possible to find
  2714. exceptions to this rule. For example, the following expression is
  2715. meaningful:%@NL@%
  2716. %@NL@%
  2717.      %@AS@%S^2+%@AE@%%@NL@%
  2718. %@NL@%
  2719. %@CR:MSE53305@%%@4@%The plus sign (%@AS@%+%@AE@%) applies to the entire expression %@AS@%S^2%@AE@%. In effect, this%@EH@%
  2720. expression means, "match any even number of occurrences of the letter S."
  2721. Therefore, this expression means the same as this:%@NL@%
  2722. %@NL@%
  2723.      %@AS@%(S^2)+%@AE@%%@NL@%
  2724. %@NL@%
  2725. %@CR:MSE53306@%%@4@%Precedence is left to right in cases where a single character is surrounded%@EH@%
  2726. by two operators. If there is any doubt about the precedence of operators,
  2727. use parentheses.%@NL@%
  2728. %@NL@%
  2729. %@NL@%
  2730. %@CR:MSE53400@%%@3@%%@AB@%5.3.4  M 1.0 Matching Method%@AE@%%@EH@%%@NL@%
  2731. %@NL@%
  2732. %@CR:MSE53401@%%@4@%The matching method you use is significant only when you use a%@EH@%
  2733. search-and-replace function. The term "matching method" refers to the
  2734. technique used to match repeated expressions. For example, does %@AS@%a*%@AE@% match as
  2735. few or as many characters as it can? The answer depends on the matching
  2736. method. There are two matching methods:%@NL@%
  2737. %@NL@%
  2738. %@CR:MSE53402@%%@AB@%Method                      Description%@AE@%%@NL@%
  2739. %@NL@%
  2740. Minimal                     The minimal method matches as few characters as%@NL@%
  2741.                             possible in order to find a match. For example,%@NL@%
  2742.                             %@AS@%a+%@AE@% matches only the first character in %@AS@%aaaaaa%@AE@%.%@NL@%
  2743.                             However, %@AS@%ba+b%@AE@% matches the entire string%@NL@%
  2744.                             %@AS@%baaaaaab%@AE@%, since it is necessary to match every%@NL@%
  2745.                             occurrence of %@AS@%a%@AE@% in order to match both%@NL@%
  2746.                             occurrences of %@AS@%b%@AE@%.%@NL@%
  2747. %@NL@%
  2748. Maximal                     The maximal method always matches as many%@NL@%
  2749.                             characters as it can. For example, %@AS@%a#%@AE@% matches%@NL@%
  2750.                             the entire string %@AS@%aaaaaa%@AE@%.%@NL@%
  2751. %@NL@%
  2752. %@CR:MSE53403@%%@4@%The significance of these two methods may not be apparent until you use%@EH@%
  2753. search and replace. For example, if %@AS@%a+%@AE@% (minimal matching plus) is the search
  2754. string and %@AS@%EE%@AE@% is the replacement string,%@NL@%
  2755. %@NL@%
  2756.      %@AS@%aaaaa%@AE@%%@NL@%
  2757. %@NL@%
  2758. %@CR:MSE53404@%%@4@%is replaced with%@EH@%%@NL@%
  2759. %@NL@%
  2760.      %@AS@%EEEEEEEEEE%@AE@%%@NL@%
  2761. %@NL@%
  2762. %@CR:MSE53405@%%@4@%because each occurrence of %@AS@%a%@AE@% is immediately replaced by %@AS@%EE%@AE@%. However, if %@AS@%a#%@AE@%%@EH@%
  2763. (maximal matching plus) is the search string, the same string is replaced
  2764. with%@NL@%
  2765. %@NL@%
  2766.      %@AS@%EE%@AE@%%@NL@%
  2767. %@NL@%
  2768. %@CR:MSE53406@%%@4@%because the entire string %@AS@%aaaaa%@AE@% is matched at once and replaced with %@AS@%EE%@AE@%.%@EH@%%@NL@%
  2769. %@NL@%
  2770. %@NL@%
  2771. %@CR:MSE53500@%%@3@%%@AB@%5.3.5  Tagged Expressions in the M 1.0 Search String%@AE@%%@EH@%%@NL@%
  2772. %@NL@%
  2773. %@CR:MSE53501@%%@4@%A "tagged expression" is a substring delimited by curly braces (%@AB@%{ }%@AE@%). You%@EH@%
  2774. can enter any regular-expression characters between these delimiters. Tagged
  2775. expressions are used to specify text patterns that contain repeated elements
  2776. and to mark a string for reuse.%@NL@%
  2777. %@NL@%
  2778. %@CR:MSE53502@%%@4@%The editor first searches for a character string that matches the entire%@EH@%
  2779. regular expression. It then tags each substring specified in a tagged
  2780. expression. Up to nine substrings at a time may be tagged.%@NL@%
  2781. %@NL@%
  2782. %@CR:MSE53503@%%@4@%Once an expression is tagged, you can refer to the specific string of%@EH@%
  2783. characters that matched the expression. Use the syntax%@NL@%
  2784. %@NL@%
  2785.      %@AB@%$%@AE@%%@AI@%n%@AE@%%@NL@%
  2786. %@NL@%
  2787. %@CR:MSE53505@%%@4@%in which %@AI@%n%@AE@% is a number that selects the expression. The symbol %@AB@%$1%@AE@%%@EH@%
  2788. represents the first tagged expression, the symbol %@AB@%$2%@AE@% represents the second
  2789. tagged expression, and so on. The use of %@AB@%$%@AE@%%@AI@%n%@AE@% does not search for a new match
  2790. for the tagged expression. Rather, it matches only an occurrence of the same
  2791. characters that the tagged expression itself matched.%@NL@%
  2792. %@NL@%
  2793. %@CR:MSE53506@%%@4@%For example, consider the following expression:%@EH@%%@NL@%
  2794. %@NL@%
  2795.      %@AS@%{?}$1$1%@AE@%%@NL@%
  2796. %@NL@%
  2797. %@CR:MSE53507@%%@4@%The expression above means, "match any character, then see if it's followed%@EH@%
  2798. by two occurrences of the same character." The following strings all satisfy
  2799. this requirement:%@NL@%
  2800. %@NL@%
  2801.      %@AS@%aaa%@AE@%%@NL@%
  2802.      %@AS@%XXX%@AE@%%@NL@%
  2803.      %@AS@%111%@AE@%%@NL@%
  2804. %@NL@%
  2805. %@CR:MSE53509@%%@4@%Note that this regular expression is not equivalent to %@AS@%???%@AE@% (three wild%@EH@%
  2806. cards). The expression %@AS@%???%@AE@% matches any three characters; the characters do
  2807. not need to be the same.%@NL@%
  2808. %@NL@%
  2809. %@CR:MSE5350A@%%@4@%The next expression is more complex:%@EH@%%@NL@%
  2810. %@NL@%
  2811.      %@AS@%{[A-Za-z]*}==$1%@AE@%%@NL@%
  2812. %@NL@%
  2813. %@CR:MSE5350B@%%@4@%This expression means "match any number of letters, then see if the letters%@EH@%
  2814. are followed by two equals signs (%@AS@%==%@AE@%) and a repetition of the original
  2815. group." This expression matches the first two strings below but not the
  2816. third:%@NL@%
  2817. %@NL@%
  2818.      %@AS@%ABCxyz==ABCxyz%@AE@%%@NL@%
  2819.      %@AS@%i==i%@AE@%%@NL@%
  2820.      %@AS@%ABCxyz==KBCxjj%@AE@%%@NL@%
  2821. %@NL@%
  2822. %@NL@%
  2823. %@CR:MSE53600@%%@3@%%@AB@%5.3.6  Tagged Expressions in the M 1.0 Replacement String%@AE@%%@EH@%%@NL@%
  2824. %@NL@%
  2825. %@CR:MSE53601@%%@4@%You can refer to tagged expressions in replacement strings as well as in%@EH@%
  2826. search strings. Parts of the string to be replaced may be reused by
  2827. referring to the tagged expressions that originally matched those parts. Use
  2828. the syntax described in the previous section.%@NL@%
  2829. %@NL@%
  2830. %@CR:MSE53602@%%@4@%For example, suppose you want to find all occurrences of %@AI@%hexdigits%@AE@%%@AB@%H%@AE@% and%@EH@%
  2831. replace them with strings of the form %@AB@%16#%@AE@%%@AI@%hexdigits%@AE@%. You can search for
  2832. strings of the form %@AI@%hexdigits%@AE@%%@AB@%H%@AE@% by specifying the regular expression%@NL@%
  2833. %@NL@%
  2834.      %@AS@%{[0-9a-fA-F]+}H%@AE@%%@NL@%
  2835. %@NL@%
  2836. %@CR:MSE53603@%%@4@%and then specifying the following replacement string:%@EH@%%@NL@%
  2837. %@NL@%
  2838.      %@AS@%16#$1%@AE@%%@NL@%
  2839. %@NL@%
  2840. %@CR:MSE53604@%%@4@%The result is that the Microsoft Editor searches for any occurrence of one%@EH@%
  2841. or more hexadecimal digits (digits 0-9 and the letters a-f) followed by the
  2842. letter %@AB@%H%@AE@%. Each matching string is replaced by a new string that consists of
  2843. the original digits (which were tagged so they could be reused) and the
  2844. prefix %@AB@%16#%@AE@%. For example, the string %@AS@%1a000H%@AE@% is replaced with the string
  2845. %@AS@%16#1a000%@AE@%.%@NL@%
  2846. %@NL@%
  2847. %@CR:MSE53605@%%@4@%The editor recognizes six special characters──%@AB@%$  (  ,  )  -%@AE@%%@AB@%\%@AE@%──within%@EH@%
  2848. replacement strings. Each of these characters should be preceded by a
  2849. backslash (%@AB@%\%@AE@%) if you want to use a literal occurrence of one of them in a
  2850. replacement string. The %@AS@%#%@AE@% sign in the replacement string shown above is not
  2851. treated as a regular-expression character.%@NL@%
  2852. %@NL@%
  2853. %@CR:MSE53606@%%@4@%You can also use the expression%@EH@%%@NL@%
  2854. %@NL@%
  2855.      %@AB@%$(%@AE@%%@AI@%w%@AE@%%@AB@%,%@AE@%%@AI@%n%@AE@%%@AB@%)%@AE@%%@NL@%
  2856. %@NL@%
  2857. %@CR:MSE53608@%%@4@%in which %@AI@%w%@AE@% is a field length. This number can be positive or negative. A%@EH@%
  2858. negative number indicates left justification.%@NL@%
  2859. %@NL@%
  2860. %@CR:MSE53609@%%@4@%If %@AI@%w%@AE@% is greater than the length of the tagged expression, the editor right%@EH@%
  2861. justifies the tagged expression within the field and pads the field with
  2862. leading spaces. If %@AI@%w%@AE@% is greater than the length of the expression but is
  2863. preceded by a negative sign, the editor left justifies the expression and
  2864. pads the field with trailing spaces. If %@AI@%w%@AE@% is equal or less than the length
  2865. of the expression, the editor prints the whole expression but does not pad
  2866. with spaces.%@NL@%
  2867. %@NL@%
  2868. %@NL@%
  2869. %@CR:MSE53700@%%@3@%%@AB@%5.3.7  Predefined M 1.0 Regular Expressions%@AE@%%@EH@%%@NL@%
  2870. %@NL@%
  2871. %@CR:MSE53701@%%@4@%Several M 1.0 regular expressions are defined in Table 5.1%@BO:   28999@% for your%@EH@%
  2872. convenience. You can use them by entering %@AB@%:%@AE@%%@AI@%letter%@AE@% in a regular expression.%@NL@%
  2873. %@NL@%
  2874. %@CR:MSE5T100@%%@4@%%@AU@%Table 5.1  Predefined Expressions%@AE@%%@EH@%%@NL@%
  2875. %@TH:   25   1060  1 12 42 22 @%%@AB@%Letter      Meaning                                   Description%@AE@%%@AB@%:a%@AE@%          [a-zA-Z0-9]                               Alphanumeric%@AB@%:b%@AE@%          ([\t]#)                                   White space%@AB@%:c%@AE@%          [a-zA-Z]                                  Alphabetic%@AB@%:d%@AE@%          [0-9]                                     Digit%@AB@%:f%@AE@%          ([~"\[\]\:<|>+=;,.\\/]#)                  Portion of a file name%@AB@%:h%@AE@%          ([0-9a-fA-F]#)                            Hexadecimal number%@AB@%:i%@AE@%          ([a-zA-Z_$][a-zA-Z0-9_$]@)                C-language identifier%@AB@%:n%@AE@%          ([0-9]#[0-9]@![0-9]@.[0-9]#![0-9]#)       Number%@AB@%:p%@AE@%          (([a-z]\:!)(\\!)(:f(:f!)\\)@:f(.:f!))     Path%@AB@%:q%@AE@%          ("[~"]@"!'[~']@')                         Quoted string%@AB@%:w%@AE@%          ([a-zA-Z]#)                               Word%@AB@%:z%@AE@%          ([0-9]#)                                  Integer%@TE:   25   1060  1 12 42 22 @%
  2876. %@NL@%
  2877. %@NL@%
  2878. %@CR:MSE60000@%%@1@%%@AB@%Chapter 6  Function Assignments and Macros%@AE@%%@EH@%%@NL@%
  2879. ───────────────────────────────────────────────────────────────────────────%@NL@%
  2880. %@NL@%
  2881. %@CR:MSE60001@%%@4@%One of the strengths of the Microsoft Editor is you can customize it to your%@EH@%
  2882. own needs. You can change screen characteristics, select default behavior,
  2883. and specify which functions are connected to which keystrokes. You can also
  2884. create new editing functions. The editor supports four techniques for
  2885. customization, described in Section 6.1.%@BO:   292f2@%%@NL@%
  2886. %@NL@%
  2887. %@CR:MSE60002@%%@4@%This chapter discusses two of those techniques: function assignments and%@EH@%
  2888. macros. Function assignments alter the action of keystrokes. Macros are
  2889. editing commands that you create using a simple syntax. The other two
  2890. methods for customizing the editor, switch settings and C extensions, are
  2891. described in Chapters 7%@BO:   3396c@%, 8%@BO:   3fbeb@%, and 9%@BO:   50fea@%.%@NL@%
  2892. %@NL@%
  2893. %@CR:MSE60003@%%@4@%This chapter covers the following topics:%@EH@%%@NL@%
  2894. %@NL@%
  2895. %@CR:MSE60004@%  ■  Techniques for customizing the editor%@NL@%
  2896.   ■  Assigning functions to keystrokes%@NL@%
  2897.   ■  Creating macros%@NL@%
  2898. %@NL@%
  2899. %@NL@%
  2900. %@CR:MSE61000@%%@2@%%@AB@%6.1  The Four Techniques for Customizing the Editor%@AE@%%@EH@%%@NL@%
  2901. %@NL@%
  2902. %@CR:MSE61001@%%@4@%Each of the four techniques for customizing the editor has a distinct%@EH@%
  2903. purpose. Yet you can use these techniques in combination. For example, an
  2904. extension can execute a macro, and a macro can make an assignment. Each
  2905. technique is described below:%@NL@%
  2906. %@NL@%
  2907. %@CR:MSE61002@%%@AB@%Technique                   Description%@AE@%%@NL@%
  2908. %@NL@%
  2909. Function assignment         Assigns a function to a particular keystroke.%@NL@%
  2910.                             This capability lets you control the meaning of%@NL@%
  2911.                             all recognized keystrokes.%@NL@%
  2912. %@NL@%
  2913. Macro assignment            Creates a new editing command out of strings of%@NL@%
  2914.                             text and existing editing functions. Macros use%@NL@%
  2915.                             a simple syntax and can be created very fast.%@NL@%
  2916.                             Use macros when you need to quickly define a new%@NL@%
  2917.                             command or repetitive activity.%@NL@%
  2918. %@NL@%
  2919. Switch assignment           Alters a specific editor condition, for example,%@NL@%
  2920.                             screen colors, screen height, scrolling%@NL@%
  2921.                             behavior, tab behavior, and many other%@NL@%
  2922.                             conditions. These conditions are adjusted by%@NL@%
  2923.                             setting various editing "switches," as explained%@NL@%
  2924.                             in Chapter 7%@BO:   3396c@%.%@NL@%
  2925. %@NL@%
  2926. C extension                 Generates a new editing function compiled with%@NL@%
  2927.                             Microsoft C or assembled with the Macro%@NL@%
  2928.                             Assembler. Extensions take longer to create than%@NL@%
  2929.                             macros, but they run faster and are more%@NL@%
  2930.                             flexible. See Chapter 8%@BO:   3fbeb@% for more information.%@NL@%
  2931. %@NL@%
  2932. %@NL@%
  2933. %@CR:MSE62000@%%@2@%%@AB@%6.2  Assigning Functions to Keystrokes%@AE@%%@EH@%%@NL@%
  2934. %@NL@%
  2935. %@CR:MSE62001@%%@4@%A function assignment lets you alter the meaning of any keystroke. In this%@EH@%
  2936. context, a "keystroke" is any recognized function key, special key, or ALT+,
  2937. SHIFT+, or CTRL+key combination. You can also alter the meaning of
  2938. alphanumeric keys, but doing so can interfere with your ability to type
  2939. characters.%@NL@%
  2940. %@NL@%
  2941. ───────────────────────────────────────────────────────────────────────────%@NL@%
  2942. %@AI@%NOTE%@AE@%%@NL@%
  2943.    Any editing function, macro, or extension function can be assigned to a%@NL@%
  2944.    keystroke as described in this chapter.%@NL@%
  2945. ───────────────────────────────────────────────────────────────────────────%@NL@%
  2946. %@NL@%
  2947. %@CR:MSE62002@%%@4@%When a new assignment has been made, you can use that keystroke to invoke%@EH@%
  2948. the function at any time during the editing session. Take into account the
  2949. following points when assigning functions to keystrokes:%@NL@%
  2950. %@NL@%
  2951. %@CR:MSE62003@%  1. The function assignments you make during the editing session are lost%@NL@%
  2952.      when you exit the editor. See Chapter 7%@BO:   3396c@%, "Switches, Assignments, and%@NL@%
  2953.      the TOOLS.INI File," for information on making assignments that are%@NL@%
  2954.      automatically recognized in each editing session.%@NL@%
  2955. %@NL@%
  2956.      When using the assignments screen to view and alter assignments, you%@NL@%
  2957.      have the option of automatically saving your changes. See Section%@NL@%
  2958.      6.2.2%@BO:   2b13c@%, "Viewing and Changing Function Assignments," for more%@NL@%
  2959.      information.%@NL@%
  2960. %@NL@%
  2961.   2. A function can be assigned to more than one keystroke at the same time.%@NL@%
  2962. %@NL@%
  2963.   3. Each keystroke can have only one function assigned to it at any one%@NL@%
  2964.      time. Therefore, a new function assignment to a given keystroke cancels%@NL@%
  2965.      any previous meaning the keystroke may have had. Assigning the%@NL@%
  2966.      %@AI@%Unassigned%@AE@% function, as explained in Section 6.2.3%@BO:   2bbd2@%, cancels the%@NL@%
  2967.      keystroke's previous meaning without substituting a new meaning.%@NL@%
  2968. %@NL@%
  2969. %@NL@%
  2970. %@CR:MSE62100@%%@3@%%@AB@%6.2.1  Making Function Assignments%@AE@%%@EH@%%@NL@%
  2971. %@NL@%
  2972. %@CR:MSE62101@%%@4@%There are two ways to make a function assignment. You can use the %@AI@%Assign%@AE@%%@EH@%
  2973. function, or edit the assignments screen as described in the next section.%@NL@%
  2974. %@NL@%
  2975. %@CR:MSE62102@%%@4@%To assign a function to a keystroke with the %@AI@%Assign%@AE@% command, issue the %@AI@%Arg%@AE@%%@EH@%
  2976. %@AI@%textarg Assign%@AE@% command (ALT+A %@AI@%textarg%@AE@% ALT+=), where %@AI@%textarg%@AE@% uses the
  2977. following syntax:%@NL@%
  2978. %@NL@%
  2979.      %@AI@%functionname%@AE@%%@AB@%:%@AE@%%@AI@%keystroke%@AE@%%@NL@%
  2980. %@NL@%
  2981. %@CR:MSE62104@%%@4@%Here, %@AI@%keystroke%@AE@% may be any of the following:%@EH@%%@NL@%
  2982. %@NL@%
  2983. %@CR:MSE62105@%  1. Numeric keys: 0 through 9%@NL@%
  2984. %@NL@%
  2985.   2. Lowercase letter keys: a through z%@NL@%
  2986. %@NL@%
  2987.   3. Uppercase letter keys: A through Z%@NL@%
  2988. %@NL@%
  2989.   4. Function keys: F1 through F10 (F11 and F12 recognized for enhanced%@NL@%
  2990.      keyboards)%@NL@%
  2991. %@NL@%
  2992.   5. Lowercase punctuation: ` - = [ ] \ ; ' , . /%@NL@%
  2993. %@NL@%
  2994.   6. Uppercase punctuation: ~ ! @ # $ % ^ & * ( ) _ + { } | : " ?%@NL@%
  2995. %@NL@%
  2996.   7. Numeric-keypad white keys when NUMLOCK is turned off: HOME, END, LEFT,%@NL@%
  2997.      RIGHT, UP, DOWN, PGUP, PGDN, INS, and GOTO, which corresponds to the%@NL@%
  2998.      numeric-keypad 5 key.%@NL@%
  2999. %@NL@%
  3000.   8. Numeric-keypad white keys when NUMLOCK is turned on: 0 through 9. To%@NL@%
  3001.      assign a function to the 4 key on the numeric keypad, enter the%@NL@%
  3002.      following as the %@AI@%keystroke%@AE@%:%@NL@%
  3003. %@NL@%
  3004.          %@AS@%NUM4%@AE@%%@NL@%
  3005. %@NL@%
  3006.   9. Numeric-keypad gray keys: NUM-, NUM+, and NUM*%@NL@%
  3007. %@NL@%
  3008.  10. Other named keys: BKSP, TAB, ESC, SPACEBAR, and ENTER%@NL@%
  3009. %@NL@%
  3010.  11. Combinations:%@NL@%
  3011. %@NL@%
  3012.      a.   ALT+ followed by items 1, 2, 4, 5, 9, or 10%@NL@%
  3013.      b.   CTRL+ followed by items 2, 4, 7, 8, 9, or 10%@NL@%
  3014.      c.   SHIFT+ followed by items 4, 7, 8, 9, or 10%@NL@%
  3015. %@NL@%
  3016. %@CR:MSE62106@%%@4@%If you have a Tandy(R) 1000, the following additional keystrokes are%@EH@%
  3017. recognized:%@NL@%
  3018. %@NL@%
  3019. %@CR:MSE62107@%  1. Function keys: F11 and F12%@NL@%
  3020. %@NL@%
  3021.   2. CTRL+ followed by UP and DOWN%@NL@%
  3022. %@NL@%
  3023.   3. ALT+ followed by UP, DOWN, LEFT, and RIGHT%@NL@%
  3024. %@NL@%
  3025.   4. SHIFT+ followed by UP, DOWN, LEFT, and RIGHT%@NL@%
  3026. %@NL@%
  3027. %@CR:MSE62108@%%@4@%If you have a 101-key enhanced keyboard, all the keystrokes recognized for%@EH@%
  3028. the Tandy 1000 are supported, as well as the following: NUMENTER, NUM\, and
  3029. all CTRL, ALT, and SHIFT combinations of these two keys. In addition, the
  3030. enhanced keyboard has a duplicate set of item 7 above, which is not affected
  3031. by the state of NUMLOCK. All CTRL, ALT, and SHIFT combinations of these keys
  3032. are recognized.%@NL@%
  3033. %@NL@%
  3034. %@CR:MSE62109@%%@4@%%@AB@%Example%@AE@%%@EH@%%@NL@%
  3035. %@NL@%
  3036. %@CR:MSE6210A@%%@4@%For example, the function %@AI@%Savecur%@AE@% is assigned to the keystroke CTRL+B in%@EH@%
  3037. this manner:%@NL@%
  3038. %@NL@%
  3039. %@CR:MSE6210B@%  1. Invoke the %@AI@%Arg%@AE@% function (press ALT+A)%@NL@%
  3040. %@NL@%
  3041.   2. Enter the function and keystroke as the %@AI@%textarg%@AE@% by typing the%@NL@%
  3042.      following:%@NL@%
  3043. %@NL@%
  3044.          %@AS@%savecur:CTRL+W%@AE@%%@NL@%
  3045. %@NL@%
  3046.   3. Invoke the %@AI@%Assign%@AE@% function (press ALT+=)%@NL@%
  3047. %@NL@%
  3048.      Note that function names are not case-sensitive, so you can enter them%@NL@%
  3049.      as all lowercase.%@NL@%
  3050. %@NL@%
  3051. %@CR:MSE6210C@%%@4@%From this point on, pressing CTRL+W invokes the %@AI@%Savecur%@AE@% function and saves%@EH@%
  3052. the current cursor position. You can make this assignment automatic by
  3053. placing it in the TOOLS.INI file, as explained in Chapter 7%@BO:   3396c@%.%@NL@%
  3054. %@NL@%
  3055. %@NL@%
  3056. %@CR:MSE62200@%%@3@%%@AB@%6.2.2  Viewing and Changing Function Assignments%@AE@%%@EH@%%@NL@%
  3057. %@NL@%
  3058. %@CR:MSE62201@%%@4@%The <assign> pseudo file shows you what function assignments and switch%@EH@%
  3059. values are in effect at any time during the editing session. This file lists
  3060. all functions in alphabetical order along with the keys to which they are
  3061. assigned. Use any of the following methods to get to this screen:%@NL@%
  3062. %@NL@%
  3063. %@CR:MSE62202@%  ■  Press SHIFT+F1 to get the initial Help screen. Then select Current%@NL@%
  3064.      Assignments.%@NL@%
  3065. %@NL@%
  3066.   ■  Use the %@AI@%Setfile%@AE@% function (F2), giving %@AS@%<assign>%@AE@% as a text argument.%@NL@%
  3067. %@NL@%
  3068.   ■  Give the %@AI@%Assign%@AE@% command (ALT+A), entering a question mark (%@AS@%?%@AE@%) as a text%@NL@%
  3069.      argument.%@NL@%
  3070. %@NL@%
  3071. %@CR:MSE62203@%%@4@%Once you get to the assignments screen, you can scroll through the%@EH@%
  3072. information as you would through any file.  Use the %@AI@%Setfile%@AE@% function (F2) to
  3073. return to your original file.%@NL@%
  3074. %@NL@%
  3075. %@CR:MSE62204@%%@4@%You can also change assignments from within this file by following these%@EH@%
  3076. steps:%@NL@%
  3077. %@NL@%
  3078. %@CR:MSE62205@%  1. Move the cursor to the line that contains the function assignment you%@NL@%
  3079.      wish to change.%@NL@%
  3080. %@NL@%
  3081.   2. Edit the line so that it contains a new function assignment.%@NL@%
  3082. %@NL@%
  3083.   3. Move the cursor to a different line. If the assignment you entered is%@NL@%
  3084.      syntactically correct, the editor highlights the line to show that the%@NL@%
  3085.      new assignment was accepted. If the assignment was incorrect, the%@NL@%
  3086.      editor restores the line to its previous state and reports an error%@NL@%
  3087.      message.%@NL@%
  3088. %@NL@%
  3089. %@CR:MSE62206@%%@4@%You can execute a save operation while in the <assign> pseudo file by giving%@EH@%
  3090. the %@AI@%Arg Arg Setfile%@AE@% command. This command (which normally saves a file to
  3091. disk under its own name) directs the editor to write any new assignments you
  3092. have made to the TOOLS.INI file. Each time it starts, the editor
  3093. automatically recognizes function assignments placed in this file. See
  3094. Chapter 7%@BO:   3396c@%, "Switches, Assignments, and the TOOLS.INI File," for more
  3095. information about TOOLS.INI.%@NL@%
  3096. %@NL@%
  3097. %@CR:MSE62207@%%@4@%The %@AI@%Tell%@AE@% function (CTRL+T) gives you an alternative way of seeing what%@EH@%
  3098. function is assigned to any given keystroke. Give the command %@AI@%Arg Tell%@AE@%
  3099. (ALT+A CTRL+T), then enter a keystroke. The editor prints the name of the
  3100. function assigned to this keystroke on the dialog line.%@NL@%
  3101. %@NL@%
  3102. %@CR:MSE62208@%%@4@%For more information on the %@AI@%Tell%@AE@% function, see Appendix A%@BO:   5d119@%, "Reference%@EH@%
  3103. Tables."%@NL@%
  3104. %@NL@%
  3105. %@NL@%
  3106. %@CR:MSE62300@%%@3@%%@AB@%6.2.3  Disabling a Keystroke%@AE@%%@EH@%%@NL@%
  3107. %@NL@%
  3108. %@CR:MSE62301@%%@4@%To disable a keystroke so it invokes no function at all, assign the function%@EH@%
  3109. %@AI@%Unassigned%@AE@% to the keystroke. As with other function assignments, use the
  3110. %@AI@%Arg textarg Assign%@AE@% command. The argument %@AI@%textarg%@AE@% uses the following syntax:%@NL@%
  3111. %@NL@%
  3112.      %@AI@%unassigned%@AE@%%@AB@%:%@AE@%%@AI@%key%@AE@%%@NL@%
  3113. %@NL@%
  3114. %@CR:MSE62303@%%@4@%Here, %@AI@%key%@AE@% is the keystroke you want to remove.%@EH@%%@NL@%
  3115. %@NL@%
  3116. %@CR:MSE62304@%%@4@%For example, to disable the keystroke CTRL+A, perform the following steps:%@EH@%%@NL@%
  3117. %@NL@%
  3118. %@CR:MSE62305@%  1. Invoke the %@AI@%Arg%@AE@% function (press ALT+A)%@NL@%
  3119. %@NL@%
  3120.   2. Enter the function name as %@AI@%Unassigned%@AE@% and the keystroke by typing the%@NL@%
  3121.      following:%@AS@% unassigned:CTRL+A%@AE@%%@NL@%
  3122. %@NL@%
  3123.   3. Invoke the %@AI@%Assign%@AE@% function (press ALT+=)%@NL@%
  3124. %@NL@%
  3125. %@CR:MSE62306@%%@4@%After these steps are carried out, pressing CTRL+A does not invoke any%@EH@%
  3126. functions. (Disabling a keystroke is temporary if you have set the key
  3127. assignment in the TOOLS.INI file. For permanent results, change the
  3128. TOOLS.INI file.)%@NL@%
  3129. %@NL@%
  3130. %@NL@%
  3131. %@CR:MSE62400@%%@3@%%@AB@%6.2.4  Making a Keystroke Literal%@AE@%%@EH@%%@NL@%
  3132. %@NL@%
  3133. %@CR:MSE62401@%%@4@%Many text editors allow you to enter only alphanumeric characters and%@EH@%
  3134. punctuation into a file. However, the Microsoft Editor makes it easy for you
  3135. to insert special characters.%@NL@%
  3136. %@NL@%
  3137. %@CR:MSE62402@%%@4@%Each keystroke corresponds to an ASCII value. When a keystroke is considered%@EH@%
  3138. a "literal" or "graphic," pressing the key causes the editor to place the
  3139. corresponding value into the file.  For example, if you make the keystroke
  3140. CTRL+D a literal key, the editor places a character with the decimal value 4
  3141. into the file each time you press CTRL+D.%@NL@%
  3142. %@NL@%
  3143. ───────────────────────────────────────────────────────────────────────────%@NL@%
  3144. %@AI@%NOTE%@AE@%%@NL@%
  3145.    When you use a special keystroke (such as %@AI@%F1%@AE@% or %@AI@%ALT+A%@AE@%) as a literal, it%@NL@%
  3146.    loses any special meaning it would otherwise have and will not invoke a%@NL@%
  3147.    function. If the special value is one that can be printed (for example,%@NL@%
  3148.    if it is a printable extended-ASCII character), the editor displays the%@NL@%
  3149.    corresponding character on the screen.%@NL@%
  3150. ───────────────────────────────────────────────────────────────────────────%@NL@%
  3151. %@NL@%
  3152. %@CR:MSE62403@%%@4@%The Microsoft Editor provides two methods for converting a keystroke to a%@EH@%
  3153. literal character. The first method is to use the %@AI@%Quote%@AE@% function. When you
  3154. invoke the %@AI@%Quote%@AE@% function (CTRL+P),  the next key that you press──regardless
  3155. of what-ever special meaning it may otherwise have──is regarded as a literal
  3156. character.%@NL@%
  3157. %@NL@%
  3158. %@CR:MSE62404@%%@4@%The second method is to assign the %@AI@%Graphic%@AE@% function to the keystroke.  This%@EH@%
  3159. uses the same syntax as any other function assignment: %@AI@%Arg textarg Assign%@AE@%.
  3160. Assigning %@AI@%Graphic%@AE@% cancels any previous assignment to the keystroke, and
  3161. causes the editor to consider the keystroke a literal character. For
  3162. example, to insert a form-feed character in the file whenever CTRL+L is
  3163. pressed, first follow these steps:%@NL@%
  3164. %@NL@%
  3165. %@CR:MSE62405@%  1. Invoke the %@AI@%Arg%@AE@% function (press ALT+A)%@NL@%
  3166. %@NL@%
  3167.   2. Enter the function %@AI@%Graphic%@AE@% and the keystroke as the %@AI@%textarg%@AE@% by typing%@NL@%
  3168.      the following: %@AS@%graphic:CTRL+L%@AE@%%@NL@%
  3169. %@NL@%
  3170.   3. Invoke the %@AI@%Assign%@AE@% function (press ALT+=)%@NL@%
  3171. %@NL@%
  3172. %@CR:MSE62406@%%@4@%The choice between assigning the %@AI@%Graphic%@AE@% function or invoking the %@AI@%Quote%@AE@%%@EH@%
  3173. function depends on the situation. If you want to enter a special value into
  3174. the file repeatedly, it is often easier to assign the %@AI@%Graphic%@AE@% function to
  3175. the keystroke──since you only need to do it once. However, use of the %@AI@%Quote%@AE@%
  3176. function provides you with more control.%@NL@%
  3177. %@NL@%
  3178. %@CR:MSE62407@%%@4@%By default, the %@AI@%Graphic%@AE@% function is assigned to all alphanumeric characters.%@EH@%%@NL@%
  3179. %@NL@%
  3180. %@NL@%
  3181. %@CR:MSE63000@%%@2@%%@AB@%6.3  Creating Macros within the Editor%@AE@%%@EH@%%@NL@%
  3182. %@NL@%
  3183. %@CR:MSE63001@%%@4@%The fastest way to create a new editing function for the Microsoft Editor is%@EH@%
  3184. to create a macro. This editing function can be as simple as inserting a
  3185. long word or phrase, or it can involve complex operations.%@NL@%
  3186. %@NL@%
  3187. %@CR:MSE63002@%%@4@%There are two ways to create a macro. The easiest is to use the %@AI@%Record%@AE@%%@EH@%
  3188. function to automatically record a series of actions. You can also enter a
  3189. macro directly. The second method requires more knowledge of syntax, but
  3190. allows you to use sophisticated features, such as conditionals.%@NL@%
  3191. %@NL@%
  3192. %@CR:MSE63003@%%@4@%After you have used the editor for awhile, you may want to use both methods.%@EH@%
  3193. You can create a simple function by recording a macro, then increase the
  3194. macro's power by editing it directly, using the techniques described in
  3195. Sections 6.3.2%@BO:   2def3@%-6.3.8.%@NL@%
  3196. %@NL@%
  3197. %@CR:MSE63004@%%@4@%Once a macro is defined and assigned to a keystroke, you can see how the%@EH@%
  3198. macro is defined by using the %@AI@%Tell%@AE@% function. Give the %@AI@%Arg%@AE@%%@AI@%textarg Tell%@AE@%
  3199. command (ALT+A %@AI@%textarg%@AE@% CTRL+T), in which %@AI@%textarg%@AE@% is the name of the macro.
  3200. For more information on the %@AI@%Tell%@AE@% function, see Appendix A%@BO:   5d119@%, "Reference
  3201. Tables."%@NL@%
  3202. %@NL@%
  3203. %@CR:MSE63005@%%@4@%The maximum number of macros that can be defined at one time is 1,024.%@EH@%%@NL@%
  3204. %@NL@%
  3205. %@NL@%
  3206. %@CR:MSE63100@%%@3@%%@AB@%6.3.1  Recording a Macro%@AE@%%@EH@%%@NL@%
  3207. %@NL@%
  3208. %@CR:MSE63101@%%@4@%Much like a tape recorder, the %@AI@%Record%@AE@% (ALT+R) function tells the editor,%@EH@%
  3209. "make a record of all editing commands until I tell you to stop." After you
  3210. stop the recording, the editor creates a macro function consisting of all
  3211. the editing commands you just gave. When you invoke this macro, the editor
  3212. plays back these commands in the order you gave them.%@NL@%
  3213. %@NL@%
  3214. %@CR:MSE63102@%%@4@%While the editor is recording commands, the letters %@AS@%REC%@AE@% appear at the end of%@EH@%
  3215. the status line.%@NL@%
  3216. %@NL@%
  3217. %@CR:MSE63103@%%@4@%The %@AI@%Record%@AE@% function starts a recording and gives the macro the default name %@EH@%
  3218. %@AB@%recordvalue%@AE@% when the recording is done. Invoking %@AI@%Record%@AE@% again turns the
  3219. recording off.%@NL@%
  3220. %@NL@%
  3221. %@CR:MSE63104@%%@4@%The following steps are the quickest way to create a macro:%@EH@%%@NL@%
  3222. %@NL@%
  3223. %@CR:MSE63105@%  1. Invoke the %@AI@%Record%@AE@% function (ALT+R) to start the recording.%@NL@%
  3224. %@NL@%
  3225.   2. Execute the series of actions you wish to record.%@NL@%
  3226. %@NL@%
  3227.   3. Turn off the recording by invoking %@AI@%Record%@AE@% (ALT+R) again.%@NL@%
  3228. %@NL@%
  3229.   4. If %@AB@%recordvalue%@AE@% is not already assigned, assign it to a keystroke as%@NL@%
  3230.      described in Section 6.2%@BO:   29ab0@%, "Assigning Functions to Keystrokes."%@NL@%
  3231. %@NL@%
  3232. %@CR:MSE63106@%%@4@%After you complete these steps, the editor associates the new macro with the%@EH@%
  3233. keystroke that %@AB@%recordvalue%@AE@% is assigned to. Whenever you press this key, the
  3234. editor plays back the editing commands you gave in Step 2 above.%@NL@%
  3235. %@NL@%
  3236. %@CR:MSE63107@%%@4@%Other variations of the %@AI@%Record%@AE@% function are shown below:%@EH@%%@NL@%
  3237. %@NL@%
  3238. %@CR:MSE63108@%%@AB@%Command     %@AE@%%@NL@%
  3239. %@AB@%(and Default Keystrokes)    Description%@AE@%%@NL@%
  3240. %@NL@%
  3241. %@AI@%Arg textarg Record%@AE@%          Turns on a recording. When the recording is%@NL@%
  3242. (ALT+A %@AI@%textarg%@AE@% ALT+R)       finished, the macro is given the name specified%@NL@%
  3243.                             in the text argument.%@NL@%
  3244. %@NL@%
  3245. %@AI@%Meta Record%@AE@% (F9 ALT+R)      Turns on a recording in which commands you give%@NL@%
  3246.                             are recorded but not executed. This is in effect%@NL@%
  3247.                             a silent recording.%@NL@%
  3248. %@NL@%
  3249. %@AI@%Arg Arg textarg Record%@AE@%      Turns on a recording, but if the specified macro%@NL@%
  3250. (ALT+A ALT+A %@AI@%textarg%@AE@%        already exists, the editor appends editing%@NL@%
  3251. ALT+R)                      commands to the macro instead of replacing it.%@NL@%
  3252. %@NL@%
  3253. %@CR:MSE63109@%%@4@%By using the window and file commands described in Chapter 4%@BO:   120e2@%, you can open%@EH@%
  3254. a second window and load the <record> pseudo file. This file dynamically
  3255. displays the value of the current recording.%@NL@%
  3256. %@NL@%
  3257. %@CR:MSE6310A@%%@4@%By opening the <record> pseudo file in a separate window, you can watch the%@EH@%
  3258. editor record the macro as you create it. The macro writes out the actual
  3259. name of each editing command you give. As a result, the editor displays a
  3260. macro definition using the syntax described in the next section.%@NL@%
  3261. %@NL@%
  3262. %@NL@%
  3263. %@CR:MSE63200@%%@3@%%@AB@%6.3.2  Entering a Macro Directly%@AE@%%@EH@%%@NL@%
  3264. %@NL@%
  3265. %@CR:MSE63201@%%@4@%A macro is nothing more than a predefined series of functions and/or literal%@EH@%
  3266. text. This fact makes the syntax of most macros almost self-evident: you
  3267. build a macro by using the same syntax used throughout this manual. The most
  3268. advanced macros, however, use the return value of functions to alter control
  3269. flow. This special feature is presented in Section 6.3.8%@BO:   320fc@%, "Macros That Use
  3270. Conditionals."%@NL@%
  3271. %@NL@%
  3272. %@CR:MSE63202@%%@4@%To define a macro directly, follow these steps:%@EH@%%@NL@%
  3273. %@NL@%
  3274. %@CR:MSE63203@%  1. Choose a name. The name should not be a macro or function name already%@NL@%
  3275.      in use.%@NL@%
  3276. %@NL@%
  3277.   2. Enter the macro definition by using the %@AI@%Arg textarg Assign%@AE@% command%@NL@%
  3278.      (ALT+A %@AI@%textarg%@AE@% ALT+=), in which %@AI@%textarg%@AE@% has the following syntax:%@NL@%
  3279. %@NL@%
  3280.      %@AI@%macroname%@AE@%%@AB@%:=%@AE@%%@AI@%list%@AE@%%@NL@%
  3281. %@NL@%
  3282.      No spaces should separate %@AI@%macroname%@AE@% from the definition symbol (%@AB@%:=%@AE@%).%@NL@%
  3283.      The %@AI@%list%@AE@% contains function names and text strings enclosed in double%@NL@%
  3284.      quotes, as explained in the next section.%@NL@%
  3285. %@NL@%
  3286.   3. Assign the macro with the command %@AI@%Arg textarg Assign%@AE@%, in which the%@NL@%
  3287.      %@AI@%textarg%@AE@% has the following form:%@NL@%
  3288. %@NL@%
  3289.      %@AI@%macroname%@AE@%%@AB@%:%@AE@%%@AI@%keystroke%@AE@%%@NL@%
  3290. %@NL@%
  3291. %@CR:MSE63204@%%@4@%The last step is optional. If you want to build a nested macro as described%@EH@%
  3292. in Section 6.3.5%@BO:   302f6@%, only the last macro defined needs to be assigned to a
  3293. keystroke.%@NL@%
  3294. %@NL@%
  3295. %@CR:MSE63205@%%@4@%Instead of assigning a macro to a keystroke, you can execute the macro by%@EH@%
  3296. giving its name as input to the %@AI@%Execute%@AE@% function, as explained in Section
  3297. 6.3.4%@BO:   2ff89@%.%@NL@%
  3298. %@NL@%
  3299. %@CR:MSE63206@%%@4@%%@AB@%Example%@AE@%%@EH@%%@NL@%
  3300. %@NL@%
  3301. %@CR:MSE63207@%%@4@%The following sequence of actions defines a macro called %@AS@%InsPhrase%@AE@%, which%@EH@%
  3302. inserts a certain sentence. The simplest macros insert a fixed string of
  3303. text──these macros are useful because they can save you a lot of typing.
  3304. This macro is then assigned to the key CTRL+F10. After you do the following
  3305. action, the editor inserts the words "This is a sentence." at the current
  3306. cursor position, every time you press CTRL+F10.%@NL@%
  3307. %@NL@%
  3308. %@CR:MSE63208@%  1. Invoke the %@AI@%Arg%@AE@% function (press ALT+A)%@NL@%
  3309. %@NL@%
  3310.   2. Enter the macro name and definition by typing the following:%@NL@%
  3311. %@NL@%
  3312.         %@AS@%InsPhrase:="This is a sentence."%@AE@%%@NL@%
  3313. %@NL@%
  3314.   3. Invoke the %@AI@%Assign%@AE@% function (press ALT+=)%@NL@%
  3315. %@NL@%
  3316.   4. Invoke the %@AI@%Arg%@AE@% function (press ALT+A)%@NL@%
  3317. %@NL@%
  3318.   5. Assign this macro to a keystroke by typing the following:%@NL@%
  3319. %@NL@%
  3320.         %@AS@%InsPhrase:CTRL+F10%@AE@%%@NL@%
  3321. %@NL@%
  3322.   6. Invoke the %@AI@%Assign%@AE@% function (press ALT+=)%@NL@%
  3323. %@NL@%
  3324. %@NL@%
  3325. %@CR:MSE63300@%%@3@%%@AB@%6.3.3  Building the Macro List%@AE@%%@EH@%%@NL@%
  3326. %@NL@%
  3327. %@CR:MSE63301@%%@4@%Each item in a macro-definition list is either a function name or a string%@EH@%
  3328. of text. The function names are the same as used throughout this manual but
  3329. are not case sensitive. You can enter them all lowercase, all uppercase, or
  3330. any combination.%@NL@%
  3331. %@NL@%
  3332. %@CR:MSE63302@%%@4@%Each string of text must be enclosed in quotes. Embedded quote marks are%@EH@%
  3333. represented as \", and embedded backslashes are represented as \\.%@NL@%
  3334. %@NL@%
  3335. %@CR:MSE63303@%%@4@%%@AB@%Example%@AE@%%@EH@%%@NL@%
  3336. %@NL@%
  3337. %@CR:MSE63304@%%@4@%The following text arguments are all valid macro definitions:%@EH@%%@NL@%
  3338. %@NL@%
  3339.      Callfun:="x = QuadCalc(a, b, c);"%@NL@%
  3340.      Callfun2:=linsert begline "x = QuadCalc(a, b, c);"%@NL@%
  3341.      Movedown:=arg "15" plines%@NL@%
  3342.      Putcomm:=begline "/*  " endline " */"%@NL@%
  3343.      Join:=endline right arg sdelete%@NL@%
  3344.      Del3:=arg right right right ldelete%@NL@%
  3345.      Join2:=savecur endline right arg sdelete restcur%@NL@%
  3346.      endword:=arg arg "( !.!$!\\:!;!\\)!\\(!,)" psearch%@NL@%
  3347. %@NL@%
  3348. %@CR:MSE63305@%%@4@%The rest of this section examines each of these macro definitions.%@EH@%%@NL@%
  3349. %@NL@%
  3350.      Callfun:="x = QuadCalc(a, b, c);"%@NL@%
  3351. %@NL@%
  3352. %@CR:MSE63306@%%@4@%The example above defines a macro that inserts the text "x = QuadCalc(a, b,%@EH@%
  3353. c);" whenever invoked. This macro is simple, yet useful. It replaces the
  3354. typing of a phrase with a single editing function.%@NL@%
  3355. %@NL@%
  3356. %@CR:MSE63307@%%@4@%Executing this macro has the same effect as typing the phrase. The precise%@EH@%
  3357. effect of this macro therefore depends on whether insert mode is on or off.%@NL@%
  3358. %@NL@%
  3359.      Callfun2:=linsert begline "x = QuadCalc(a, b, c);"%@NL@%
  3360. %@NL@%
  3361. %@CR:MSE63308@%%@4@%The example above uses both function names and text to define a new editing%@EH@%
  3362. function. The effect of invoking this macro is precisely the same as the
  3363. effect of invoking %@AI@%Linsert%@AE@%, invoking %@AI@%Begline%@AE@%, and then typing the text
  3364. inside the quotes. The macro inserts a new line and places the text at the
  3365. beginning of this line.%@NL@%
  3366. %@NL@%
  3367.      Movedown:=arg "15" plines%@NL@%
  3368. %@NL@%
  3369. %@CR:MSE63309@%%@4@%Like the example before it, the example above uses a combination of%@EH@%
  3370. functions and a string of text. However, because the %@AI@%Arg%@AE@% function precedes
  3371. the text, the text does not appear on screen. Instead, the text becomes an
  3372. argument to the %@AI@%Plines%@AE@% function. This macro moves the window down 15 lines.%@NL@%
  3373. %@NL@%
  3374.      Putcomm:=begline "/*  " endline " */"%@NL@%
  3375. %@NL@%
  3376. %@CR:MSE6330A@%%@4@%The example above uses a combination of functions and text to insert%@EH@%
  3377. C-language comment marks at the beginning and end of a line.%@NL@%
  3378. %@NL@%
  3379.      Join:=endline right arg sdelete%@NL@%
  3380. %@NL@%
  3381. %@CR:MSE6330B@%%@4@%The example above defines a macro that joins the current line to the next%@EH@%
  3382. line. Recall that the sequence %@AI@%Arg Sdelete%@AE@% deletes all text to the right of
  3383. the cursor, then joins lines.  This macro does not delete any text. First,
  3384. it moves the cursor to the end of the line. Next, it moves one space to the
  3385. right to leave a space before the next line. It then executes %@AI@%Arg Sdelete%@AE@%.%@NL@%
  3386. %@NL@%
  3387. %@CR:MSE6330C@%%@4@%You can use the cursor-movement functions (%@AI@%Up%@AE@%, %@AI@%Down%@AE@%, %@AI@%Right%@AE@%, %@AI@%Left%@AE@%) within%@EH@%
  3388. macros.  The next macro uses these functions to build an on-screen argument.%@NL@%
  3389. %@NL@%
  3390.      Del3:=arg right right right ldelete%@NL@%
  3391. %@NL@%
  3392. %@CR:MSE6330D@%%@4@%The example above deletes three characters. The middle three arguments%@EH@%
  3393. create a cursor-movement argument that is passed to the %@AI@%Ldelete%@AE@% function.%@NL@%
  3394. %@NL@%
  3395.      Join2:=savecur endline right arg sdelete restcur%@NL@%
  3396. %@NL@%
  3397. %@CR:MSE6330E@%%@4@%The example above performs almost the same activity as the %@AS@%Join%@AE@% macro%@EH@%
  3398. presented earlier. However, this macro begins by saving the cursor position
  3399. with %@AI@%Savecur%@AE@%. After the lines are joined, the macro restores the original
  3400. cursor position by executing %@AI@%Restcur%@AE@%. This macro works even if %@AI@%Savecur%@AE@% and
  3401. %@AI@%Restcur%@AE@% have not been assigned to keystrokes.%@NL@%
  3402. %@NL@%
  3403.      endword:=arg arg "( !.!$!\\:!;!\\)!\\(!,)" psearch%@NL@%
  3404. %@NL@%
  3405. %@CR:MSE6330F@%%@4@%This last example uses the regular-expression syntax described in Chapter%@EH@%
  3406. 5%@BO:   206bc@%. The %@AI@%Arg Arg%@AE@% syntax directs the %@AI@%Psearch%@AE@% function to treat the text
  3407. argument as a regular-expression pattern. This pattern, in turn, causes the
  3408. editor to find the next space, period (.), end of line ($), colon (:),
  3409. semicolon (;), right parenthesis ()), left parenthesis ((), or comma (,).
  3410. Some characters must be preceded by a backslash (\) in order to be
  3411. interpreted literally. Furthermore, when you give a text argument inside a
  3412. macro list, you must use two backslashes in a row (\\) to indicate a single
  3413. backslash.%@NL@%
  3414. %@NL@%
  3415. %@CR:MSE6330G@%%@4@%The effect of this macro is to go to the end of the current word. By%@EH@%
  3416. rewriting the regular expression, you control what constitutes the end of a
  3417. word. This macro can be especially useful when nested inside other macros,
  3418. as described in Section 6.3.5.%@BO:   302f6@%%@NL@%
  3419. %@NL@%
  3420. %@NL@%
  3421. %@CR:MSE63400@%%@3@%%@AB@%6.3.4  Executing a Macro List Directly%@AE@%%@EH@%%@NL@%
  3422. %@NL@%
  3423. %@CR:MSE63401@%%@4@%Instead of defining a macro and then assigning it to a keystroke, you can%@EH@%
  3424. execute a macro-definition list directly, by using the %@AI@%Execute%@AE@% function.
  3425. This function, which by default is assigned to F7, takes a function name,
  3426. macro name, or macro-definition command list as a text argument.%@NL@%
  3427. %@NL@%
  3428. %@CR:MSE63402@%%@4@%For example, the following sequence finds the next occurrence of the word%@EH@%
  3429. %@AS@%fluke%@AE@%:%@NL@%
  3430. %@NL@%
  3431. %@CR:MSE63403@%  1. Invoke %@AI@%Arg%@AE@% (press ALT+A)%@NL@%
  3432.   2. Type the following string: %@AS@%arg "fluke" psearch%@AE@%%@NL@%
  3433.   3. Invoke %@AI@%Execute%@AE@% (press F7)%@NL@%
  3434. %@NL@%
  3435. %@CR:MSE63404@%%@4@%You can also give the name of a macro as input to the %@AI@%Execute%@AE@% command.%@EH@%%@NL@%
  3436. %@NL@%
  3437. %@NL@%
  3438. %@CR:MSE63500@%%@3@%%@AB@%6.3.5  Building Macros from Other Macros%@AE@%%@EH@%%@NL@%
  3439. %@NL@%
  3440. %@CR:MSE63501@%%@4@%Macros can contain references to previously defined macros.  Since a macro%@EH@%
  3441. definition must be contained on one line (except in the TOOLS.INI file,
  3442. where you can use a line-continuation character), you may need to break up a
  3443. macro definition into several smaller macros as shown in the example below.
  3444. Only the final macro definition need be assigned to a keystroke. Each of the
  3445. following lines is entered one at a time using the %@AI@%Arg textarg Assign%@AE@%
  3446. command:%@NL@%
  3447. %@NL@%
  3448.      head1:=arg "3" linsert "/************************"%@NL@%
  3449.      head2:=newline "** Routine:"%@NL@%
  3450.      head3:=newline "*************************/"%@NL@%
  3451.      header:=head1 head2 head3%@NL@%
  3452.      header:alt+h%@NL@%
  3453. %@NL@%
  3454. %@CR:MSE63502@%%@4@%The example above inserts three blank lines (by passing the argument 3 to%@EH@%
  3455. the %@AI@%Linsert%@AE@% function), and then inserts the given strings of text. The macro
  3456. is then assigned to ALT+H. This macro is an example of one that automates
  3457. the creation of comment blocks for C programs.%@NL@%
  3458. %@NL@%
  3459. ───────────────────────────────────────────────────────────────────────────%@NL@%
  3460. %@AI@%NOTE%@AE@%%@NL@%
  3461.    Nested macros are cumbersome to enter while running the editor. Usually,%@NL@%
  3462.    you'll want to enter them once in your TOOLS.INI file so that they are%@NL@%
  3463.    available automatically, as explained in Chapter 7%@BO:   3396c@%.%@NL@%
  3464. ───────────────────────────────────────────────────────────────────────────%@NL@%
  3465. %@NL@%
  3466. %@NL@%
  3467. %@CR:MSE63600@%%@3@%%@AB@%6.3.6  Handling Prompts within Macros%@AE@%%@EH@%%@NL@%
  3468. %@NL@%
  3469. %@CR:MSE63601@%%@4@%Some commands prompt the user for confirmation. For example, the %@AI@%Meta%@AE@%%@AI@%Exit%@AE@%%@EH@%
  3470. command (exit without saving) asks the user if he really wants to exit.
  3471. These questions take the answer yes (Y) or no (N).%@NL@%
  3472. %@NL@%
  3473. %@CR:MSE63602@%%@4@%By default, macros assume an answer of yes. For example, if you assigned%@EH@%
  3474. %@AI@%Meta Exit%@AE@% to a macro and then executed the macro, the editor would not
  3475. prompt for confirmation. Instead, the editor would assume an answer of yes
  3476. and proceed to exit without saving.%@NL@%
  3477. %@NL@%
  3478. %@CR:MSE63603@%%@4@%You can control the answers to prompts within macros by using the following%@EH@%
  3479. operators, each of which applies to the immediately preceding function:%@NL@%
  3480. %@NL@%
  3481. %@CR:MSE63604@%%@AB@%Operator                    Description%@AE@%%@NL@%
  3482. %@NL@%
  3483. %@AB@%<%@AE@%                           Asks the user for confirmation. (If not followed%@NL@%
  3484.                             by another %@AB@%<%@AE@% character, prompts user for all%@NL@%
  3485.                             further questions.)%@NL@%
  3486. %@NL@%
  3487. %@AB@%<Y%@AE@%                          Assumes an answer of yes.%@NL@%
  3488. %@NL@%
  3489. %@AB@%<N%@AE@%                          Assumes an answer of no.%@NL@%
  3490. %@NL@%
  3491. %@CR:MSE63605@%%@4@%You can use a series of operators. For example, consider the following%@EH@%
  3492. macro:%@NL@%
  3493. %@NL@%
  3494.      newfile:=arg "newfile.txt" setfile <y <n%@NL@%
  3495. %@NL@%
  3496. %@CR:MSE63606@%%@4@%The macro %@AS@%newfile%@AE@% assumes an answer of yes for the first prompt, and no for%@EH@%
  3497. the second. If %@AS@%newfile%@AE@% requires only one prompt, it ignores the second
  3498. operator, %@AS@%<n%@AE@%.%@NL@%
  3499. %@NL@%
  3500. %@CR:MSE63607@%%@4@%If the last prompt character that appears is %@AS@%<%@AE@%, the editor prompts the user%@EH@%
  3501. directly for all remaining yes/no questions.%@NL@%
  3502. %@NL@%
  3503. %@CR:MSE63608@%%@4@%You can use the prompt characters throughout your macro. For example:%@EH@%%@NL@%
  3504. %@NL@%
  3505.      newfile:=refresh < arg "newfile.txt" setfile <y <n <%@NL@%
  3506. %@NL@%
  3507. %@NL@%
  3508. %@CR:MSE63700@%%@3@%%@AB@%6.3.7  Macros That Take Arguments%@AE@%%@EH@%%@NL@%
  3509. %@NL@%
  3510. %@CR:MSE63701@%%@4@%Macros have no explicit syntax for accepting user-defined arguments.%@EH@%
  3511. However, if you enter an argument and then invoke a macro, the argument is
  3512. passed to the first function that accepts an argument:%@NL@%
  3513. %@NL@%
  3514.      tripleit:=copy paste paste%@NL@%
  3515. %@NL@%
  3516. %@CR:MSE63702@%%@4@%In the example above, you can invoke %@AI@%Arg%@AE@% and use cursor movement to%@EH@%
  3517. highlight an argument. Then invoke %@AS@%tripleit%@AE@%. Your highlighted argument is
  3518. passed to the %@AI@%Copy%@AE@% function, which copies the argument to the Clipboard. The
  3519. macro then executes the %@AI@%Paste%@AE@% function two times. As a result, two
  3520. additional copies of the argument are added to the file.%@NL@%
  3521. %@NL@%
  3522. %@CR:MSE63703@%%@4@%If you do not highlight an argument before invoking %@AS@%tripleit%@AE@%, the macro%@EH@%
  3523. responds by printing two more copies of the current line. By default,
  3524. %@AS@%tripleit%@AE@% works on the current line because %@AI@%Copy%@AE@% selects the current line
  3525. when no argument is given.%@NL@%
  3526. %@NL@%
  3527. %@CR:MSE63704@%%@4@%When you execute the %@AI@%Copy%@AE@% or %@AI@%Delete%@AE@% function at the beginning of a macro,%@EH@%
  3528. the highlighted argument is stored in the Clipboard. You can then load the
  3529. <clipboard> pseudo file and manipulate the argument itself, as in the
  3530. following macro:%@NL@%
  3531. %@NL@%
  3532.      addto1:=copy arg "<clipboard>" setfile%@NL@%
  3533.      addto2:=arg arg "TMP.TXT" setfile%@NL@%
  3534.      addto3:=arg "type TMP.TXT >>> BIG.TXT" shell%@NL@%
  3535.      addto4:=arg "del TMP.TXT" shell setfile%@NL@%
  3536.      addto:=addto1 addto2 addto3 addto4%@NL@%
  3537. %@NL@%
  3538. %@CR:MSE63705@%%@4@%The %@AS@%addto%@AE@% macro appends the highlighted argument to the file BIG.TXT. If you%@EH@%
  3539. do not give an argument, the macro appends the current line. The %@AS@%addto%@AE@% macro
  3540. works by executing %@AS@%addto1%@AE@%, %@AS@%addto2%@AE@%, %@AS@%addto3%@AE@%, and %@AS@%addto4%@AE@%, each of which does
  3541. some of the work of adding to the highlighted area. The following list
  3542. describes the steps of the %@AS@%addto%@AE@% macro:%@NL@%
  3543. %@NL@%
  3544. %@CR:MSE63706@%  1. Copy argument to the Clipboard, then load the <clipboard> pseudo file.%@NL@%
  3545. %@NL@%
  3546.   2. Save the contents of the current file (which is now <clipboard>) to the%@NL@%
  3547.      file TMP.TXT.%@NL@%
  3548. %@NL@%
  3549.   3. Execute a DOS shell that appends TMP.TXT to BIG.TXT.%@NL@%
  3550. %@NL@%
  3551.   4. Execute a DOS shell that deletes TMP.TXT, then use %@AI@%Setfile%@AE@% to return to%@NL@%
  3552.      the original file.%@NL@%
  3553. %@NL@%
  3554. %@CR:MSE63707@%%@4@%Another way to respond to an argument is to put the %@AI@%Replace%@AE@% function at the%@EH@%
  3555. beginning of your macro. Replacements then take place throughout the
  3556. highlighted area. For example, the following macro replaces each occurrence
  3557. of the period (.) with a blank space:%@NL@%
  3558. %@NL@%
  3559.      blankout:=replace "." newline " " newline%@NL@%
  3560. %@NL@%
  3561. %@CR:MSE63708@%%@4@%The %@AI@%Newline%@AE@% function is necessary because the %@AI@%Replace%@AE@% function prompts for%@EH@%
  3562. search-and-replace strings.%@NL@%
  3563. %@NL@%
  3564. %@CR:MSE63709@%%@4@%To use the macro above in a practical way, invoke %@AI@%Arg%@AE@% twice to enable%@EH@%
  3565. regular expressions, highlight an area of text, and then execute %@AS@%blankout%@AE@%.
  3566. Assuming that the editor is using Unix regular-expression syntax, the effect
  3567. is that each character in the highlighted area is replaced by a blank space.
  3568. The effect is different from %@AI@%Delete%@AE@% because the space occupied by the text
  3569. is not removed, simply replaced with blanks.%@NL@%
  3570. %@NL@%
  3571. ───────────────────────────────────────────────────────────────────────────%@NL@%
  3572. %@AI@%WARNING%@AE@%%@NL@%
  3573.    Using %@AI@%Arg%@AE@% twice and then executing %@AS@%blankout%@AE@% without a highlighted region%@NL@%
  3574.    replaces the rest of your file with blank spaces. Make sure you use a%@NL@%
  3575.    highlighted argument.%@NL@%
  3576. ───────────────────────────────────────────────────────────────────────────%@NL@%
  3577. %@NL@%
  3578. %@NL@%
  3579. %@CR:MSE63800@%%@3@%%@AB@%6.3.8  Macros That Use Conditionals%@AE@%%@EH@%%@NL@%
  3580. %@NL@%
  3581. %@CR:MSE63801@%%@4@%You can write macros that execute different actions depending on certain%@EH@%
  3582. conditions. These macros take advantage of function return values. A "return
  3583. value" is simply a piece of information that a function passes back after it
  3584. is executed. Editing functions always return the value TRUE (nonzero) or
  3585. FALSE (zero).%@NL@%
  3586. %@NL@%
  3587. %@CR:MSE63802@%%@4@%Each editing function has different criteria for determining what to return,%@EH@%
  3588. but usually an editing function returns TRUE if the function is successful,
  3589. or FALSE if it fails. For example, a cursor-movement function fails if the
  3590. cursor does not move.%@NL@%
  3591. %@NL@%
  3592. %@CR:MSE63803@%%@4@%Table A.4%@BO:   701fe@%, in Appendix A, gives a complete list of function return values.%@EH@%
  3593. You use these return values with the syntax described in Table 6.1%@BO:   324a9@%.%@NL@%
  3594. %@NL@%
  3595. %@CR:MSE6T100@%%@4@%%@AU@%Table 6.1  Macro Conditionals%@AE@%%@EH@%%@NL@%
  3596. %@TH:   15    844  1 18 68 @%%@AB@%Conditional       Description%@AE@%%@AB@%:>%@AE@%%@AI@%label%@AE@%           Defines a label that can be referenced by other macro                  conditionals.%@AB@%=>%@AE@%%@AI@%label%@AE@%           Causes a direct transfer to %@AI@%label%@AE@%. If %@AI@%label%@AE@% is omitted,                  then the current macro exits.%@AB@%->%@AE@%%@AI@%label%@AE@%           Causes a direct transfer to %@AI@%label%@AE@% if the previous function                  returns FALSE. If %@AI@%label%@AE@% is omitted, then the current macro                  exits on FALSE.%@AB@%+>%@AE@%%@AI@%label%@AE@%           Causes a direct transfer to %@AI@%label%@AE@% if the previous function                  returns TRUE. If %@AI@%label%@AE@% is omitted, then the current macro                  exits on TRUE.%@TE:   15    844  1 18 68 @%
  3597. %@NL@%
  3598. %@CR:MSE63804@%%@4@%The table above refers to a macro exiting. In this context, exiting a macro%@EH@%
  3599. only affects the current macro. If macro %@AS@%doall%@AE@% executes macro %@AS@%submacro%@AE@%, when
  3600. %@AS@%submacro%@AE@% exits, control returns to %@AS@%doall%@AE@%, which continues execution.%@NL@%
  3601. %@NL@%
  3602. %@CR:MSE63805@%%@4@%%@AB@%Examples%@AE@%%@EH@%%@NL@%
  3603. %@NL@%
  3604. %@CR:MSE63806@%%@4@%The first example turns insert mode on. The only function that turns insert%@EH@%
  3605. mode on or off is the %@AI@%Insertmode%@AE@% function. This function toggles between the
  3606. on and off condition, and returns the new state of insert mode:%@NL@%
  3607. %@NL@%
  3608. %@AB@%Initial state               Effect of Insertmode%@AE@%%@NL@%
  3609. %@NL@%
  3610. Off                         Turn insert mode on; return TRUE.%@NL@%
  3611. %@NL@%
  3612. On                          Turn insert mode off; return FALSE.%@NL@%
  3613. %@NL@%
  3614. %@CR:MSE63808@%%@4@%Unfortunately, testing the state of insert mode may turn insert mode off,%@EH@%
  3615. even though the goal is to leave it on. Fortunately, a conditional macro can
  3616. turn insert mode back on again as appropriate:%@NL@%
  3617. %@NL@%
  3618.      turnon:=insertmode +> insertmode%@NL@%
  3619. %@NL@%
  3620. %@CR:MSE63809@%%@4@%This macro consists of three simple steps:%@EH@%%@NL@%
  3621. %@NL@%
  3622. %@CR:MSE6380A@%  1. %@AS@%insertmode%@AE@% toggles the state of insert mode. This function returns TRUE%@NL@%
  3623.      if insert mode is now on.%@NL@%
  3624. %@NL@%
  3625.   2. The %@AS@%+>%@AE@% operator exits the macro if the last function executed returned%@NL@%
  3626.      TRUE. In this case, a return value of TRUE indicates that insert mode%@NL@%
  3627.      is now on, so the macro exits on TRUE.%@NL@%
  3628. %@NL@%
  3629.   3. If the last function returned FALSE, the macro continues to the last%@NL@%
  3630.      step, which executes %@AS@%insertmode%@AE@% again. If the macro reaches this step,%@NL@%
  3631.      insert mode was initially on but the first step turned it off. This%@NL@%
  3632.      step turns insert mode back on again.%@NL@%
  3633. %@NL@%
  3634. %@CR:MSE6380B@%%@4@%The macro defined above, %@AS@%turnon%@AE@%, is highly useful when used within nested%@EH@%
  3635. macros. Define %@AS@%turnon%@AE@% first. Then place %@AS@%turnon%@AE@% at the beginning of a macro
  3636. definition whenever the macro needs to assume that insert mode is on.%@NL@%
  3637. %@NL@%
  3638. ───────────────────────────────────────────────────────────────────────────%@NL@%
  3639. %@AI@%NOTE%@AE@%%@NL@%
  3640.    In the next chapter, you'll learn how to use the %@AI@%enterinsmode%@AE@% switch to%@NL@%
  3641.    achieve the same result as the macro defined above.%@NL@%
  3642. ───────────────────────────────────────────────────────────────────────────%@NL@%
  3643. %@NL@%
  3644. %@CR:MSE6380C@%%@4@%The next example turns insert mode on temporarily, executes the predefined%@EH@%
  3645. macro %@AS@%cmd%@AE@%, and then leaves the editor in the same state that it was in
  3646. before the macro was executed.%@NL@%
  3647. %@NL@%
  3648.      icmd:=insertmode +>on insertmode cmd => :>on cmd insertmode%@NL@%
  3649. %@NL@%
  3650. %@CR:MSE6380D@%%@4@%The macro executes the commands in the following order:%@EH@%%@NL@%
  3651. %@NL@%
  3652. %@CR:MSE6380E@%  1. %@AS@%insertmode%@AE@% toggles the state of insert mode, so if insert mode was off,%@NL@%
  3653.      it is now on, and vice versa. This function returns TRUE if insert mode%@NL@%
  3654.      is on after the function is executed, and FALSE otherwise.%@NL@%
  3655. %@NL@%
  3656.   2. %@AS@%+>on%@AE@% transfers control to the label %@AS@%on%@AE@% if the previous function%@NL@%
  3657.      returned TRUE──in other words, if insert mode is now on.%@NL@%
  3658. %@NL@%
  3659.   3. %@AS@%insertmode%@AE@% turns insert on. If the macro reaches this point, insert%@NL@%
  3660.      mode was originally on but the first step turned it off and returned%@NL@%
  3661.      FALSE. This step turns insert mode back on.%@NL@%
  3662. %@NL@%
  3663.   4. %@AS@%cmd%@AE@% executes the predefined macro.%@NL@%
  3664. %@NL@%
  3665.   5. %@AS@%=>%@AE@% exits the macro. Insert mode was on when the macro started, it is%@NL@%
  3666.      now back on, and %@AS@%cmd%@AE@% has been executed. Therefore the macro is done.%@NL@%
  3667. %@NL@%
  3668.   6. %@AS@%:>on%@AE@% defines a label. Execution transfers here directly from the item%@NL@%
  3669.      %@AS@%+>on%@AE@% if insert mode was turned on.%@NL@%
  3670. %@NL@%
  3671.   7. %@AS@%cmd%@AE@% executes the predefined macro.%@NL@%
  3672. %@NL@%
  3673.   8. %@AS@%insertmode%@AE@% turns insert mode back off. Since execution flowed through%@NL@%
  3674.      to this point, insert mode must have been off when the macro%@NL@%
  3675.      began──insert mode is turned back off now.%@NL@%
  3676. %@NL@%
  3677. %@NL@%
  3678. %@CR:MSE70000@%%@1@%%@AB@%Chapter 7  Switches, Assignments, and the TOOLS.INI File%@AE@%%@EH@%%@NL@%
  3679. ───────────────────────────────────────────────────────────────────────────%@NL@%
  3680. %@NL@%
  3681. %@CR:MSE70001@%%@4@%A "switch" is a variable that controls some condition of the editor. For%@EH@%
  3682. example, changing the %@AB@%fgcolor%@AE@% switch alters the foreground color of the
  3683. editor, and changing the %@AB@%height%@AE@% switch alters the number of lines on the
  3684. screen. Although switches come in three varieties (numeric, text, and
  3685. Boolean), all three kinds of switches can be controlled with the %@AI@%Assign%@AE@%
  3686. function.%@NL@%
  3687. %@NL@%
  3688. %@CR:MSE70002@%%@4@%Usually, the most convenient way to work with switches is to set them in the%@EH@%
  3689. initialization file, named TOOLS.INI. This file contains switch values,
  3690. function assignments, and macros for the Microsoft Editor to automatically
  3691. assume at the beginning of each session. This file can be used to initialize
  3692. settings for other products. Therefore, all the settings for the editor have
  3693. to be put under a special heading called a "tag."%@NL@%
  3694. %@NL@%
  3695. %@CR:MSE70003@%%@4@%If you are interested in using TOOLS.INI right away to make the editor%@EH@%
  3696. automatically start up with your own function assignments and macros, turn
  3697. to Section 7.4%@BO:   3b535@%, "Sample TOOLS.INI File."%@NL@%
  3698. %@NL@%
  3699. %@CR:MSE70004@%%@4@%This chapter covers the following topics:%@EH@%%@NL@%
  3700. %@NL@%
  3701. %@CR:MSE70005@%  ■  Syntax for switch settings%@NL@%
  3702.   ■  Using switches to configure the editor%@NL@%
  3703.   ■  Special syntax for text switches%@NL@%
  3704.   ■  Sample TOOLS.INI file%@NL@%
  3705.   ■  The structure of the TOOLS.INI file%@NL@%
  3706.   ■  Configuring on-line Help%@NL@%
  3707. %@NL@%
  3708. %@NL@%
  3709. %@CR:MSE71000@%%@2@%%@AB@%7.1  Syntax for Switch Settings%@AE@%%@EH@%%@NL@%
  3710. %@NL@%
  3711. %@CR:MSE71001@%%@4@%To change the behavior of the editor, set a switch with the %@AI@%Assign%@AE@% function%@EH@%
  3712. or in the TOOLS.INI file. You set a switch differently depending on the type
  3713. of the switch. Each switch is one of three types: numeric, text, or Boolean.%@NL@%
  3714. %@NL@%
  3715. %@CR:MSE71002@%%@4@%To set a numeric or text switch, give the assignment%@EH@%%@NL@%
  3716. %@NL@%
  3717.      %@AI@%switch%@AE@%%@AB@%:%@AE@%%@AI@%value%@AE@%%@NL@%
  3718. %@NL@%
  3719. %@CR:MSE71004@%%@4@%in which %@AI@%switch%@AE@% is the name of the switch and %@AI@%value%@AE@% is either a string of%@EH@%
  3720. digits (in the case of a numeric switch), or any string of text (in the case
  3721. of a text switch). Most numeric switches use decimal digits. However, the
  3722. color switches use hexadecimal digits, as described in Section 7.2.3%@BO:   35a6f@%.%@NL@%
  3723. %@NL@%
  3724. %@CR:MSE71005@%%@4@%Boolean switches can be off or on. To turn a Boolean switch on, give either%@EH@%
  3725. of the following assignments:%@NL@%
  3726. %@NL@%
  3727.      %@AI@%switch%@AE@%%@AB@%:%@AE@%%@NL@%
  3728.      %@AI@%switch%@AE@%%@AB@%:yes%@AE@%%@NL@%
  3729. %@NL@%
  3730. %@CR:MSE71007@%%@4@%To turn a Boolean switch off, prefix the letters %@AB@%no%@AE@% to the assignment or%@EH@%
  3731. type %@AB@%no%@AE@% after the colon:%@NL@%
  3732. %@NL@%
  3733.      %@AB@%no%@AE@%%@AI@%switch%@AE@%%@AB@%:%@AE@%%@NL@%
  3734.      %@AI@%switch%@AE@%%@AB@%:no%@AE@%%@NL@%
  3735. %@NL@%
  3736. %@CR:MSE71009@%%@4@%A switch assignment looks similar to a function assignment.  However, a%@EH@%
  3737. switch assignment has a different effect. A function assignment changes the
  3738. meaning of a keystroke, whereas a switch assignment alters a basic
  3739. condition, such as screen color.%@NL@%
  3740. %@NL@%
  3741. %@CR:MSE7100A@%%@4@%%@AB@%Examples%@AE@%%@EH@%%@NL@%
  3742. %@NL@%
  3743. %@CR:MSE7100B@%%@4@%The following examples show a numeric, text, and four Boolean assignments,%@EH@%
  3744. respectively:%@NL@%
  3745. %@NL@%
  3746.      tabstops:8%@NL@%
  3747.      backup:none%@NL@%
  3748.      case:%@NL@%
  3749.      nocase:%@NL@%
  3750.      case:yes%@NL@%
  3751.      case:no%@NL@%
  3752. %@NL@%
  3753. %@CR:MSE7100C@%%@4@%You could make any of these assignments by placing them in the TOOLS.INI%@EH@%
  3754. file, or by using the %@AI@%Arg textarg Assign%@AE@% command. For example, to set
  3755. %@AB@%tabstops%@AE@% to 8, follow these steps:%@NL@%
  3756. %@NL@%
  3757. %@CR:MSE7100D@%  1. Invoke the %@AI@%Arg%@AE@% function (press ALT+A)%@NL@%
  3758.   2. Type the following switch assignment: %@AS@%tabstops:8%@AE@%%@NL@%
  3759.   3. Invoke the %@AI@%Assign%@AE@% function (press ALT+= )%@NL@%
  3760. %@NL@%
  3761. ───────────────────────────────────────────────────────────────────────────%@NL@%
  3762. %@AI@%NOTE%@AE@%%@NL@%
  3763.    Some text switches recognize special characters. These characters are%@NL@%
  3764.    never required, but can be convenient. See Section 7.3%@BO:   3a7a5@%, "Special Syntax%@NL@%
  3765.    for Text Switches," for more information.%@NL@%
  3766. ───────────────────────────────────────────────────────────────────────────%@NL@%
  3767. %@NL@%
  3768. %@NL@%
  3769. %@CR:MSE72000@%%@2@%%@AB@%7.2  Using Switches to Configure the Editor%@AE@%%@EH@%%@NL@%
  3770. %@NL@%
  3771. %@CR:MSE72001@%%@4@%This section explains how to use some of the more common switches. You can%@EH@%
  3772. follow the instructions to get a feel for how to adjust conditions within
  3773. the editor. For example, you may want to change screen colors, screen
  3774. height, or tab behavior. Sections 7.4%@BO:   3b535@% and 7.5%@BO:   3c086@% explain how to make these
  3775. settings automatic by placing them in the TOOLS.INI file.%@NL@%
  3776. %@NL@%
  3777. %@CR:MSE72002@%%@4@%Sections 7.2.1%@BO:   34f56@%-7.2.8 cover the following topics:%@EH@%%@NL@%
  3778. %@NL@%
  3779. %@CR:MSE72003@%  ■  Changing start-up conditions%@NL@%
  3780.   ■  Changing scrolling behavior%@NL@%
  3781.   ■  Setting screen colors with %@AB@%fgcolor%@AE@%%@NL@%
  3782.   ■  Setting colors for other parts of the screen%@NL@%
  3783.   ■  Changing the look and feel of Help%@NL@%
  3784.   ■  Controlling use of tabs%@NL@%
  3785.   ■  Changing how the editor handles trailing spaces%@NL@%
  3786.   ■  Changing screen height%@NL@%
  3787. %@NL@%
  3788. %@NL@%
  3789. %@CR:MSE72100@%%@3@%%@AB@%7.2.1  Changing Start-Up Conditions%@AE@%%@EH@%%@NL@%
  3790. %@NL@%
  3791. %@CR:MSE72101@%%@4@%By default, the editor starts with insert mode off and status line%@EH@%
  3792. displaying window position (rather than cursor position). To start with
  3793. insert mode on, place the following statement in the [M] section of your
  3794. TOOLS.INI file:%@NL@%
  3795. %@NL@%
  3796.      enterinsmode:%@NL@%
  3797. %@NL@%
  3798. %@CR:MSE72102@%%@4@%You can also set this switch by executing these steps:%@EH@%%@NL@%
  3799. %@NL@%
  3800. %@CR:MSE72103@%  1. Invoke the %@AI@%Arg%@AE@% function (press ALT+A)%@NL@%
  3801.   2. Type the following switch assignment: %@AS@%enterinsmode:%@AE@%%@NL@%
  3802.   3. Invoke the %@AI@%Assign%@AE@% function (press ALT+=)%@NL@%
  3803. %@NL@%
  3804. %@CR:MSE72104@%%@4@%Setting this switch while in an editing session turns insert mode on%@EH@%
  3805. regardless of the current state of insert mode.%@NL@%
  3806. %@NL@%
  3807. %@CR:MSE72105@%%@4@%The status line at the bottom of the screen displays window position by%@EH@%
  3808. default. The window position gives the file coordinates (by line and column)
  3809. of the top left corner. To change this field so that it displays cursor
  3810. position instead, follow these steps:%@NL@%
  3811. %@NL@%
  3812. %@CR:MSE72106@%  1. Invoke the %@AI@%Arg%@AE@% function (press ALT+A)%@NL@%
  3813.   2. Type the following switch assignment: %@AS@%displaycursor:%@AE@%%@NL@%
  3814.   3. Invoke the %@AI@%Assign%@AE@% function (press ALT+=)%@NL@%
  3815. %@NL@%
  3816. %@CR:MSE72107@%%@4@%The editor numbers rows and columns beginning with the number one. Cursor%@EH@%
  3817. position is (1,1) when the cursor is at the very beginning of the file.%@NL@%
  3818. %@NL@%
  3819. %@CR:MSE72108@%%@4@%The %@AB@%enterinsmode%@AE@% and %@AB@%displaycursor%@AE@% switches are both examples of Boolean%@EH@%
  3820. switches. To turn these switches off, follow the directions above but
  3821. precede the switch with the word %@AB@%no%@AE@%.%@NL@%
  3822. %@NL@%
  3823. %@NL@%
  3824. %@CR:MSE72200@%%@3@%%@AB@%7.2.2  Changing Scrolling Behavior%@AE@%%@EH@%%@NL@%
  3825. %@NL@%
  3826. %@CR:MSE72201@%%@4@%Two switches control scrolling behavior in the Microsoft Editor: %@AB@%vscroll%@AE@% and%@EH@%
  3827. %@AB@%hscroll%@AE@%. Each time you attempt to move the cursor off the top or bottom of
  3828. the screen, the editor moves the editing window up or down a certain
  3829. distance. This distance is set by the value of %@AB@%vscroll%@AE@%.%@NL@%
  3830. %@NL@%
  3831. %@CR:MSE72202@%%@4@%For smooth vertical scrolling, set %@AB@%vscroll%@AE@% to 1:%@EH@%%@NL@%
  3832. %@NL@%
  3833. %@CR:MSE72203@%  1. Invoke the %@AI@%Arg%@AE@% function (press ALT+A)%@NL@%
  3834.   2. Type the following switch assignment: %@AS@%vscroll:1%@AE@%%@NL@%
  3835.   3. Invoke the %@AI@%Assign%@AE@% function (press ALT+=)%@NL@%
  3836. %@NL@%
  3837. %@CR:MSE72204@%%@4@%For smooth horizontal scrolling, set %@AB@%hscroll%@AE@% to 1. Give the %@AI@%Arg textarg%@AE@%%@EH@%
  3838. %@AI@%Assign%@AE@% command (ALT+A %@AI@%textarg%@AE@% ALT+=), in which %@AI@%textarg%@AE@% is %@AS@%hscroll:1%@AE@%.%@NL@%
  3839. %@NL@%
  3840. %@NL@%
  3841. %@CR:MSE72300@%%@3@%%@AB@%7.2.3  Setting Screen Colors with fgcolor%@AE@%%@EH@%%@NL@%
  3842. %@NL@%
  3843. %@CR:MSE72301@%%@4@%The %@AB@%fgcolor%@AE@% switch controls the most important screen colors: background%@EH@%
  3844. and foreground colors of editing windows. The background color is the
  3845. primary color of a region of the screen. The foreground color is the color
  3846. of characters that appear in this region.%@NL@%
  3847. %@NL@%
  3848. %@CR:MSE72302@%%@4@%The %@AB@%fgcolor%@AE@% switch uses one numeric value to control both background and%@EH@%
  3849. foreground colors. The other color switches (%@AB@%errcolor%@AE@%, %@AB@%hgcolor%@AE@%, %@AB@%infcolor%@AE@%,
  3850. and %@AB@%stacolor%@AE@%) all work in the same way: each sets a background and
  3851. foreground color according to a single numeric value.%@NL@%
  3852. %@NL@%
  3853. %@CR:MSE72303@%%@4@%The editor reads a color switch as a two-digit hexadecimal number. The first%@EH@%
  3854. digit sets the background color; the second sets the foreground color. Table
  3855. 7.1%@BO:   35f29@% states the digits that correspond to each color.%@NL@%
  3856. %@NL@%
  3857. %@CR:MSE72304@%%@4@%In the case of background colors, the digits 8-F correspond to the digits%@EH@%
  3858. 0-7, except that they make the foreground text blink on and off.%@NL@%
  3859. %@NL@%
  3860. %@CR:MSE7T100@%%@4@%%@AU@%Table 7.1  Colors and Numeric Values%@AE@%%@EH@%%@NL@%
  3861. %@TH:   33    504  1 24 52 @%%@AB@%Color                   Value%@AE@%Black                   0Blue                    1Green                   2Cyan                    3Red                     4Magenta                 5Brown                   6Light Gray              7Dark Gray               8Light Blue              9Light Green             ALight Cyan              BLight Red               CLight Magenta           DLight Yellow            EWhite                   F%@TE:   33    504  1 24 52 @%
  3862. %@NL@%
  3863. %@CR:MSE72305@%%@4@%Each two-digit number describes some combination of background and%@EH@%
  3864. foreground colors. The list below gives a few examples:%@NL@%
  3865. %@NL@%
  3866. %@CR:MSE72306@%%@AB@%Number                      Meaning%@AE@%%@NL@%
  3867. %@NL@%
  3868. 17                          Blue (1) background, light gray (7) foreground%@NL@%
  3869. %@NL@%
  3870. 07                          Black (0) background, light gray (7) foreground%@NL@%
  3871. %@NL@%
  3872. 2F                          Green (2) background, white (F) foreground%@NL@%
  3873. %@NL@%
  3874. 24                          Green (2) background, red (4) foreground%@NL@%
  3875. %@NL@%
  3876. ───────────────────────────────────────────────────────────────────────────%@NL@%
  3877. %@AI@%NOTE%@AE@%%@NL@%
  3878.    Only color adapter cards support all the colors listed above. If you have%@NL@%
  3879.    a monochrome adapter or monochrome monitor, the only colors available are%@NL@%
  3880.    white (F), black (0), and light gray (7). All other colors are treated as%@NL@%
  3881.    white.%@NL@%
  3882. ───────────────────────────────────────────────────────────────────────────%@NL@%
  3883. %@NL@%
  3884. %@CR:MSE72307@%%@4@%%@AB@%Example%@AE@%%@EH@%%@NL@%
  3885. %@NL@%
  3886. %@CR:MSE72308@%%@4@%At any time during the editing session, you can set new screen colors%@EH@%
  3887. (although to set these colors permanently, you should use TOOLS.INI). To set
  3888. a blue background with a light gray foreground, execute the following steps:%@NL@%
  3889. %@NL@%
  3890. %@CR:MSE72309@%  1. Invoke the %@AI@%Arg%@AE@% function (press ALT+A)%@NL@%
  3891.   2. Type the following switch assignment: %@AS@%fgcolor:17%@AE@%%@NL@%
  3892.   3. Invoke the %@AI@%Assign%@AE@% function (press ALT+=)%@NL@%
  3893. %@NL@%
  3894. %@NL@%
  3895. %@CR:MSE72400@%%@3@%%@AB@%7.2.4  Setting Colors for Other Parts of the Screen%@AE@%%@EH@%%@NL@%
  3896. %@NL@%
  3897. %@CR:MSE72401@%%@4@%All color switches interpret digits in the same way. However, each color%@EH@%
  3898. switch controls a different region of the screen, as described in the list
  3899. below:%@NL@%
  3900. %@CR:MSE72402@%%@NL@%
  3901. %@TH:   26   1482  2 28 48 @%%@AB@%Switch                      Description%@AE@%%@AB@%errcolor%@AE@%                    Controls the colors used to display error                            messages on the dialog line.%@AB@%hgcolor%@AE@%                     Controls the colors in a region of text                            highlighted by a search command.%@AB@%infcolor%@AE@%                    Controls the colors used for informative text:                            messages (other than error messages) that the                            editor displays on the dialog line, as well as                            strings to be replaced that are located by                            %@AI@%Qreplace%@AE@%. The editor displays messages after                            executing an operation, such as saving a file or                            loading a new file. These colors provide the                            default background for the dialog line, and also                            control the color of "insert" and "meta" when                            they appear on the status line.%@AB@%selcolor%@AE@%                    Controls the color of text that the user                            highlights as a cursor-movement argument.%@AB@%stacolor%@AE@%                    Controls the colors of most items on the status                            line.%@AB@%wdcolor%@AE@%                     Controls the color used to draw window borders.%@TE:   26   1482  2 28 48 @%
  3902. %@NL@%
  3903. %@CR:MSE72403@%%@4@%The following procedure sets a black (0) background for error messages,%@EH@%
  3904. combined with a red (4) foreground. Error messages will appear in red
  3905. letters against a black background:%@NL@%
  3906. %@NL@%
  3907. %@CR:MSE72404@%  1. Invoke the %@AI@%Arg%@AE@% function (press ALT+A)%@NL@%
  3908.   2. Type the following switch assignment: %@AS@%errcolor:04%@AE@%%@NL@%
  3909.   3. Invoke the %@AI@%Assign%@AE@% function (press ALT+=)%@NL@%
  3910. %@NL@%
  3911. %@NL@%
  3912. %@CR:MSE72500@%%@3@%%@AB@%7.2.5  Changing the Look and Feel of Help%@AE@%%@EH@%%@NL@%
  3913. %@NL@%
  3914. %@CR:MSE72501@%%@4@%The information in this section applies only to systems configured to use%@EH@%
  3915. the powerful Microsoft Help engine. If Help is not installed when you press
  3916. SHIFT+F1, a message appears saying that you have not installed Help yet. Run
  3917. the installation program for your Microsoft language, or follow the
  3918. directions in Section 7.6%@BO:   3eb8b@%, "Configuring On-Line Help."%@NL@%
  3919. %@NL@%
  3920. %@CR:MSE72502@%%@4@%By default, Help splits the screen and displays Help information in a%@EH@%
  3921. separate window. This behavior has the advantage of letting you view both
  3922. the current file and Help information at the same time. You can move the
  3923. cursor between windows by pressing F6. You can also copy examples from the
  3924. Help window and paste them into an editing window.%@NL@%
  3925. %@NL@%
  3926. %@CR:MSE72503@%%@4@%You can change the behavior of Help so that it does not split the screen.%@EH@%
  3927. Instead, Help will save the current file (if the %@AB@%autosave%@AE@% switch is on) and
  3928. load Help information into the current editing window. This behavior has the
  3929. advantage of using more room to display Help information.%@NL@%
  3930. %@NL@%
  3931. %@CR:MSE72504@%%@4@%The split-screen behavior is controlled by the %@AB@%helpwindow%@AE@% switch. This%@EH@%
  3932. switch is a Boolean switch; it can be either on or off. Turning the switch
  3933. off prevents the editor from splitting the screen to display Help
  3934. information:%@NL@%
  3935. %@NL@%
  3936. %@CR:MSE72505@%  1. Invoke %@AI@%Arg%@AE@% (press ALT+A)%@NL@%
  3937. %@NL@%
  3938.   2. Type the following switch assignment: %@AS@%nohelpwindow:%@AE@%%@NL@%
  3939. %@NL@%
  3940.   3. Invoke the %@AI@%Assign%@AE@% function (press ALT+=)%@NL@%
  3941. %@NL@%
  3942. %@CR:MSE72506@%%@4@%Conversely, to turn the split-screen behavior back on, give the %@AI@%Arg textarg%@AE@%%@EH@%
  3943. %@AI@%Assign%@AE@% command, in which %@AI@%textarg%@AE@% is %@AS@%helpwindow:%@AE@%.%@NL@%
  3944. %@NL@%
  3945. ───────────────────────────────────────────────────────────────────────────%@NL@%
  3946. %@AI@%NOTE%@AE@%%@NL@%
  3947.    When %@AI@%helpwindow%@AE@% is on, use the %@AI@%Cancel%@AE@% function (ESC) to close the Help%@NL@%
  3948.    window. When %@AI@%helpwindow%@AE@% is off, use the %@AI@%Cancel%@AE@% function (ESC) to return%@NL@%
  3949.    to the previous file.%@NL@%
  3950. ───────────────────────────────────────────────────────────────────────────%@NL@%
  3951. %@NL@%
  3952. %@CR:MSE72507@%%@4@%You can also control the colors used in the Help window. The writer of a%@EH@%
  3953. help file can designate text as foreground, bold, italicized, underlined, or
  3954. as warning text. You cannot change these designations. However, you can
  3955. easily change the choice of colors used to illustrate each kind of text:%@NL@%
  3956. %@NL@%
  3957. %@CR:MSE72508@%%@AB@%Switch                      Meaning%@AE@%%@NL@%
  3958. %@NL@%
  3959. %@AB@%fgcolor%@AE@%                     Foreground color, which controls the color of%@NL@%
  3960.                             normal text. This switch also controls the%@NL@%
  3961.                             foreground color of editing windows.%@NL@%
  3962. %@NL@%
  3963. %@AB@%helpboldcolor%@AE@%               Color of text designated as bold.%@NL@%
  3964. %@NL@%
  3965. %@AB@%helpitalcolor%@AE@%               Color of text designated as italicized.%@NL@%
  3966. %@NL@%
  3967. %@AB@%helpundcolor%@AE@%                Color of text designated as underlined.%@NL@%
  3968. %@NL@%
  3969. %@AB@%helpwarncolor%@AE@%               Color of text used for a "warning" note. Also%@NL@%
  3970.                             controls color of highlighted cross-references.%@NL@%
  3971. %@NL@%
  3972. %@CR:MSE72509@%%@4@%All of the switches above are set the same way the %@AB@%fgcolor%@AE@% switch is, as%@EH@%
  3973. explained in Section 7.2.3.%@BO:   35a6f@%%@NL@%
  3974. %@NL@%
  3975. %@NL@%
  3976. %@CR:MSE72600@%%@3@%%@AB@%7.2.6  Controlling Use of Tabs%@AE@%%@EH@%%@NL@%
  3977. %@NL@%
  3978. %@CR:MSE72601@%%@4@%The Microsoft Editor provides two basic ways of working with tab characters:%@EH@%
  3979. you can either treat tabs as real characters, or you can have the editor
  3980. convert each tab into a series of spaces. This behavior is controlled by the
  3981. %@AB@%realtabs%@AE@% switch.%@NL@%
  3982. %@NL@%
  3983. %@CR:MSE72602@%%@4@%The %@AB@%realtabs%@AE@% switch is a Boolean switch that by default is on, causing the%@EH@%
  3984. editor to treat each tab (ASCII 9) as an independent character. Unlike other
  3985. characters, a tab may correspond to several positions on the screen. If you
  3986. place the cursor on a tab character and press RIGHT, the cursor jumps to the
  3987. next tab column. Tab columns occur at regular intervals, as determined by
  3988. the %@AB@%filetab%@AE@% switch.%@NL@%
  3989. %@NL@%
  3990. %@CR:MSE72603@%%@4@%As you add and delete characters, the editor maintains the tab-column%@EH@%
  3991. alignment of the text.%@NL@%
  3992. %@NL@%
  3993. %@CR:MSE72604@%%@4@%Whether or not %@AB@%realtabs%@AE@% is on, the %@AI@%Tab%@AE@% function is simply a movement%@EH@%
  3994. function, and it does not insert tabs into a file. To use the TAB key to
  3995. directly insert tabs, put the following assignment in your TOOLS.INI file,
  3996. or give it as input to the %@AI@%Assign%@AE@% command:%@NL@%
  3997. %@NL@%
  3998.      graphic:tab%@NL@%
  3999. %@NL@%
  4000. %@CR:MSE72605@%%@4@%This assignment makes the TAB key a graphic character. Each time you press%@EH@%
  4001. TAB, you directly place an actual tab character into the file.%@NL@%
  4002. %@NL@%
  4003. %@CR:MSE72606@%%@4@%If you turn the %@AB@%realtabs%@AE@% switch off, the Microsoft Editor translates tab%@EH@%
  4004. characters into spaces. This behavior only affects the individual lines that
  4005. you modify. If you read a file but make no changes, the tab-to-space
  4006. conversion does not alter the file on disk, even if you execute a save
  4007. operation.%@NL@%
  4008. %@NL@%
  4009. %@CR:MSE72607@%%@4@%The editor may also convert spaces to tabs, according to the setting of the%@EH@%
  4010. %@AB@%entab%@AE@% switch, described below. This behavior also only affects the
  4011. individual lines that you modify.%@NL@%
  4012. %@NL@%
  4013. %@CR:MSE72608@%%@4@%The %@AB@%tabdisp%@AE@% switch is useful for viewing the effect of writing to a disk%@EH@%
  4014. file. If you set %@AB@%tabdisp%@AE@% to a number other than 0 or 32, the editor shows
  4015. you which spaces will be compressed into a tab character at the next write
  4016. to the disk file. All such spaces are displayed as the ASCII equivalent of
  4017. the value of %@AB@%tabdisp%@AE@%.%@NL@%
  4018. %@NL@%
  4019. %@CR:MSE72609@%%@4@%If %@AB@%realtabs%@AE@% is on, each position in a tab field displays this same%@EH@%
  4020. character.%@NL@%
  4021. %@NL@%
  4022. %@CR:MSE7260A@%%@4@%For example, the following steps set %@AB@%tabdisp%@AE@% to 249:%@EH@%%@NL@%
  4023. %@NL@%
  4024. %@CR:MSE7260B@%  1. Invoke %@AI@%Arg%@AE@% (press ALT+A)%@NL@%
  4025.   2. Type the following switch assignment: %@AS@%tabdisp:249%@AE@%%@NL@%
  4026.   3. Invoke the %@AI@%Assign%@AE@% function (press ALT+=)%@NL@%
  4027. %@NL@%
  4028. %@CR:MSE7260C@%%@4@%After you carry out these steps, the editor displays the ASCII equivalent of%@EH@%
  4029. 249 in place of each position in a tab field.%@NL@%
  4030. %@NL@%
  4031. %@CR:MSE7260D@%%@4@%The following list describes the meaning of the four tab-handling switches:%@EH@%%@NL@%
  4032. %@CR:MSE7260E@%%@NL@%
  4033. %@TH:   67   4383 02 28 48 @%%@AB@%Switch                      Description%@AE@%%@AB@%realtabs%@AE@%                    Controls whether or not tabs are treated as real                            characters, as described above. If on, tab                            columns are aligned according to the %@AB@%filetab%@AE@%                            switch. If %@AB@%realtabs%@AE@% is off, every tab read is                            treated as a series of spaces, according to the                            %@AB@%filetab%@AE@% switch.%@AB@%entab%@AE@%                       Controls the extent to which the editor converts                            a series of tabs and spaces to tabs when saving                            a file. Only the lines you modify during the                            editing session are affected by space-to-tab                            conversion.                            A value of 0 means the editor does not replace                            spaces by tabs. A value of 1 (the default) means                            the editor can replace a series of tabs and                            spaces by tabs when the spaces fall outside of                            quoted strings. A value of 2 means all series of                            tabs and spaces can be replaced by tabs.                            The %@AB@%entab%@AE@% switch determines what kind of                            space-to-tab replacements are possible. Whether                            a replacement is made in any given case depends                            on the position of the spaces, and on the                            %@AB@%filetab%@AE@% switch, described next.%@AB@%filetab%@AE@%                     Controls the physical (disk-file) meaning of tab                            characters. If %@AB@%realtabs%@AE@% is on, the %@AB@%filetab%@AE@%                            switch determines tab alignment. If%@AB@%realtabs%@AE@% is                            off, the %@AB@%filetab%@AE@% switch determines how the                            editor translates tab characters to spaces when                            a line of text is modified. If %@AB@%entab%@AE@% is set to 1                            or 2, %@AB@%filetab%@AE@% also determines how the editor                            translates spaces to tabs when you save the file                            to disk. (Only modified lines are affected.)                            The value of the switch gives the number of                            spaces associated with each tab column. For                            example, the setting "filetab:4" assumes a tab                            column every 4 positions on each line. Every                            time the editor finds a tab character (ASCII 9),                            it loads the buffer with the number of spaces                            necessary to get to the next tab column. The                            default value of %@AB@%filetab%@AE@% is 8.%@AB@%tabalign%@AE@%                    If %@AB@%realtabs%@AE@% and %@AB@%tabalign%@AE@% are both set, the                            cursor automatically moves to the first column                            position of a tab character when it is placed                            anywhere within a tab character. Cursor movement                            corresponds to the actual characters in the                            file.                            When not set (the default), the cursor may be                            placed anywhere in any column of a tab                            character. If a character is typed at this                            position, sufficient leading blanks will be                            inserted to assure that the character actually                            appears in this column position. Cursor movement                            is independent of the actual characters in the                            file.%@AB@%tabstops%@AE@%                    Determines the size of columns associated with                            the %@AI@%Tab%@AE@% and %@AI@%Backtab%@AE@% cursor-movement functions.                            It has no affect on actual tab characters. The                            default value of %@AB@%tabstops%@AE@% is 4.%@TE:   67   4383 02 28 48 @%
  4034. %@NL@%
  4035. %@CR:MSE72700@%%@3@%%@AB@%7.2.7  Changing How the Editor Handles Trailing Spaces%@AE@%%@EH@%%@NL@%
  4036. %@NL@%
  4037. %@CR:MSE72701@%%@4@%A "trailing space" is a space character located to the right of the last%@EH@%
  4038. printable character on a line. A trailing space is normally invisible. By
  4039. default, the editor deletes all trailing spaces on each line you modify.%@NL@%
  4040. %@NL@%
  4041. %@CR:MSE72702@%%@4@%However, you can change this behavior by resetting the value of the%@EH@%
  4042. %@AB@%trailspace%@AE@% switch. This switch is Boolean switch; it can be either on or
  4043. off. To turn this switch on, give the %@AI@%Arg textarg Assign%@AE@% command (ALT+A
  4044. %@AI@%textarg%@AE@% ALT+=), in which %@AS@%trailspace:%@AE@% is the %@AI@%textarg%@AE@%. When you wish to turn
  4045. this switch off, give the %@AI@%Arg textarg Assign%@AE@% command, in which %@AS@%notrailspace:%@AE@%
  4046. is the %@AI@%textarg%@AE@%.%@NL@%
  4047. %@NL@%
  4048. %@CR:MSE72703@%%@4@%When this switch is on, any space you type at the end of a line remains in%@EH@%
  4049. the file as a trailing space. You can verify the existence of trailing
  4050. spaces by invoking the %@AI@%Endline%@AE@% function (press END). If the cursor moves
  4051. past the last printable character when you invoke %@AI@%Endline%@AE@%, the line contains
  4052. trailing spaces.%@NL@%
  4053. %@NL@%
  4054. %@CR:MSE72704@%%@4@%To display trailing spaces, set the %@AB@%traildisp%@AE@% switch to a number greater%@EH@%
  4055. than 0. The editor displays the ASCII-character equivalent of the number you
  4056. choose, in place of each trailing space. For example, invoke the %@AI@%Arg textarg%@AE@%
  4057. %@AI@%Assign%@AE@% command in which %@AI@%textarg%@AE@% is %@AS@%traildisp:1%@AE@%.%@NL@%
  4058. %@NL@%
  4059. %@CR:MSE72705@%%@4@%The example above displays the ASCII equivalent of the number 1 in place of%@EH@%
  4060. each trailing space. To restore normal display, set %@AB@%traildisp%@AE@% back to 0.%@NL@%
  4061. %@NL@%
  4062. %@NL@%
  4063. %@CR:MSE72800@%%@3@%%@AB@%7.2.8  Changing Screen Height%@AE@%%@EH@%%@NL@%
  4064. %@NL@%
  4065. %@CR:MSE72801@%%@4@%Change the screen height by setting the %@AB@%height%@AE@% switch. This switch takes%@EH@%
  4066. only a few values that are limited by the kind of graphics adapter card you
  4067. are using:%@NL@%
  4068. %@NL@%
  4069. %@CR:MSE72802@%%@AB@%Graphics Card               Legal Values%@AE@%%@NL@%
  4070. %@NL@%
  4071. CGA or monochrome           23  (25-line mode)%@NL@%
  4072. %@NL@%
  4073. EGA                         23  (25-line mode) 41  (43-line mode)%@NL@%
  4074. %@NL@%
  4075. VGA                         23  (25-line mode) 41  (43-line mode) 48%@NL@%
  4076.                             (50-line mode)%@NL@%
  4077. %@NL@%
  4078. %@CR:MSE72803@%%@4@%Note that you assign to %@AB@%height%@AE@% a number two less than the desired mode. That%@EH@%
  4079. is because %@AB@%height%@AE@% refers to the height of the editing window, not the full
  4080. screen. (Two lines at the bottom of the screen are reserved for dialog and
  4081. status.)%@NL@%
  4082. %@NL@%
  4083. %@NL@%
  4084. %@CR:MSE73000@%%@2@%%@AB@%7.3  Special Syntax for Text Switches%@AE@%%@EH@%%@NL@%
  4085. %@NL@%
  4086. %@CR:MSE73001@%%@4@%The following text switches recognize special characters for referring to%@EH@%
  4087. file names or directories:%@NL@%
  4088. %@NL@%
  4089. %@CR:MSE73002@%  ■  %@AB@%extmake%@AE@%, which can be repeatedly assigned to different compilation%@NL@%
  4090.      commands%@NL@%
  4091. %@NL@%
  4092.   ■  %@AB@%readonly%@AE@%, which gives a system-level command, executed whenever you%@NL@%
  4093.      attempt to overwrite a read-only file%@NL@%
  4094. %@NL@%
  4095.   ■  %@AB@%load%@AE@%, which loads a C extension as described in Chapter 8%@BO:   3fbeb@%%@NL@%
  4096. %@NL@%
  4097.   ■  %@AB@%markfile%@AE@%, which loads file markers from a specially prepared file%@NL@%
  4098. %@NL@%
  4099.   ■  %@AB@%helpfiles%@AE@%, which specifies which .HLP files should be used by on-line%@NL@%
  4100.      Help%@NL@%
  4101. %@NL@%
  4102. %@CR:MSE73003@%%@4@%This syntax presented in the next two sections is never required, but is%@EH@%
  4103. provided for convenience.%@NL@%
  4104. %@NL@%
  4105. %@NL@%
  4106. %@CR:MSE73100@%%@3@%%@AB@%7.3.1  Special Syntax for extmake and readonly%@AE@%%@EH@%%@NL@%
  4107. %@NL@%
  4108. %@CR:MSE73101@%%@4@%The text switches %@AB@%extmake%@AE@% and %@AB@%readonly%@AE@% each interpret the following%@EH@%
  4109. characters as the name of the current file:%@NL@%
  4110. %@NL@%
  4111.      %@AB@%%s%@AE@%%@NL@%
  4112. %@NL@%
  4113. %@CR:MSE73103@%%@4@%You can also use a more comprehensive syntax that lets you specify drive,%@EH@%
  4114. file name, base name, or file extension. The syntax consists of the
  4115. characters%@NL@%
  4116. %@NL@%
  4117.      %@AB@%%|%@AE@%%@AI@%letters%@AE@%%@AB@%F%@AE@%%@NL@%
  4118. %@NL@%
  4119. %@CR:MSE73105@%%@4@%where %@AI@%letters%@AE@% consists of any of the following: p for path, d for drive, f%@EH@%
  4120. for file base name, or e for file extension. For example, if you are editing
  4121. the file c:\dir1\sample.c, and you make the switch assignment%@NL@%
  4122. %@NL@%
  4123.      extmake:c cl /Fod:%|pfF %|dfeF%@NL@%
  4124. %@NL@%
  4125. %@CR:MSE73106@%%@4@%then each time you give the command %@AI@%Arg Compilation%@AE@%, the editor performs the%@EH@%
  4126. following system-level command:%@NL@%
  4127. %@NL@%
  4128.      cl /Fod:\dir1\sample c:sample.c%@NL@%
  4129. %@NL@%
  4130. %@CR:MSE73107@%%@4@%The expression %@AS@%%s%@AE@% is equivalent to %@AS@%%|feF%@AE@% except that the former is only%@EH@%
  4131. accepted once in each assignment, whereas the latter can appear any number
  4132. of times in the %@AB@%extmake%@AE@% switch assignment. The expression %@AS@%%|F%@AE@% is equivalent
  4133. to %@AS@%%|dpfeF%@AE@%.%@NL@%
  4134. %@NL@%
  4135. %@NL@%
  4136. %@CR:MSE73200@%%@3@%%@AB@%7.3.2  Special Syntax for load, markfile, and helpfiles%@AE@%%@EH@%%@NL@%
  4137. %@NL@%
  4138. %@CR:MSE73201@%%@4@%The %@AB@%load%@AE@%, %@AB@%markfile%@AE@%, and %@AB@%helpfiles%@AE@% switches each search for a file. These%@EH@%
  4139. switches can also take the syntax%@NL@%
  4140. %@NL@%
  4141.      %@AB@%$%@AE@%%@AI@%environ%@AE@%%@AB@%:%@AE@%%@NL@%
  4142. %@NL@%
  4143. %@CR:MSE73203@%%@4@%in which %@AI@%environ%@AE@% is the name of an environment variable recognized by the%@EH@%
  4144. operating system. The editor will search directories listed in the
  4145. environment variable to find the file. Environment variables are created
  4146. with the system-level SET command. See your operating-system documentation
  4147. for more information on the SET command.%@NL@%
  4148. %@NL@%
  4149. %@CR:MSE73204@%%@4@%For example, the following assignment causes the editor to search%@EH@%
  4150. directories in the INIT environment variable for the file MARKERS.DAT:%@NL@%
  4151. %@NL@%
  4152.      markfile:$INIT:markers.dat%@NL@%
  4153. %@NL@%
  4154. %@CR:MSE73205@%%@4@%Note that the environment variable should be entered in uppercase letters.%@EH@%%@NL@%
  4155. %@NL@%
  4156. %@NL@%
  4157. %@CR:MSE74000@%%@2@%%@AB@%7.4  Sample TOOLS.INI File%@AE@%%@EH@%%@NL@%
  4158. %@NL@%
  4159. %@CR:MSE74001@%%@4@%Each time you start the editor, it checks the [M] section of the TOOLS.INI%@EH@%
  4160. file for any function assignments, switch assignments, and macro definitions
  4161. you have placed there. (However, the editor may check a different section if
  4162. the editor is not named M.EXE.)%@NL@%
  4163. %@NL@%
  4164. %@CR:MSE74002@%%@4@%You can change these settings at any time during the editing session by%@EH@%
  4165. using the %@AI@%Assign%@AE@% command. However, using TOOLS.INI is more convenient for
  4166. settings you want to use every time. Use TOOLS.INI to make the editor
  4167. automatically start up with all the screen colors, tab behavior, function
  4168. assignments, and special editing functions you want to make available for
  4169. all editing sessions.%@NL@%
  4170. %@NL@%
  4171. %@CR:MSE74003@%%@4@%The editor loads settings from TOOLS.INI when it starts and when you invoke%@EH@%
  4172. the %@AI@%Initialize%@AE@% function (SHIFT+F8) during the editing session. By giving a
  4173. text argument, you can also use %@AI@%Initialize%@AE@% to load specific sections within
  4174. TOOLS.INI.%@NL@%
  4175. %@NL@%
  4176. ───────────────────────────────────────────────────────────────────────────%@NL@%
  4177. %@AI@%NOTE%@AE@%%@NL@%
  4178.    The editor checks the directories listed in the INIT environment variable%@NL@%
  4179.    for the location of the TOOLS.INI file. For example, if the TOOLS.INI%@NL@%
  4180.    file is in the directory %@AI@%C:\BIN%@AE@%, place the following statement in your%@NL@%
  4181.    AUTOEXEC.BAT file: %@AS@%SET INIT=C:\BIN.%@AE@%%@NL@%
  4182. ───────────────────────────────────────────────────────────────────────────%@NL@%
  4183. %@NL@%
  4184. %@CR:MSE74004@%%@4@%The example below shows a sample TOOLS.INI file. The next section explains%@EH@%
  4185. each section of this file in depth. Note that text following the semicolon
  4186. (;) is a comment.%@NL@%
  4187. %@NL@%
  4188.      [M MEP]                       %@AI@%; Settings for both M and MEP%@AE@%%@NL@%
  4189. %@NL@%
  4190.              enterinsmode:         %@AI@%; Start up in insert mode%@AE@%%@NL@%
  4191.              backup:none           %@AI@%; Perform no backup%@AE@%%@NL@%
  4192.              displaycursor:        %@AI@%; Display cursor on status line%@AE@%%@NL@%
  4193.              fgcolor:17            %@AI@%; Set primary and error colors%@AE@%%@NL@%
  4194.              errcolor:04%@NL@%
  4195. %@NL@%
  4196.              join:=savecur endline right arg sdelete savecur   %@AI@%; Macro%@AE@%%@NL@%
  4197. %@NL@%
  4198.              savecur:ctrl+f5       %@AI@%; Assignments to keys%@AE@%%@NL@%
  4199.              restcur:ctrl+f6%@NL@%
  4200.              join:alt+j%@NL@%
  4201. %@NL@%
  4202.      [M-C MEP-C]                   %@AI@%; C specific section - enable with Initialize%@AE@%%@NL@%
  4203. %@NL@%
  4204.              tabstops:3            %@AI@%; Tab columns 3 wide within editor%@AE@%%@NL@%
  4205.              case:                 %@AI@%; Case-sensitive searches%@AE@%%@NL@%
  4206. %@NL@%
  4207.      [NMAKE]%@NL@%
  4208. %@NL@%
  4209.      #  This is a comment line recognized by NMAKE%@NL@%
  4210. %@NL@%
  4211. %@NL@%
  4212. %@CR:MSE75000@%%@2@%%@AB@%7.5  The Structure of the TOOLS.INI File%@AE@%%@EH@%%@NL@%
  4213. %@NL@%
  4214. %@CR:MSE75001@%%@4@%To create a TOOLS.INI file for the editor, you need to follow a few simple%@EH@%
  4215. rules:%@NL@%
  4216. %@NL@%
  4217. %@CR:MSE75002@%  1. You must precede your editor settings by a tag, or they will not be%@NL@%
  4218.      recognized. A "tag" is a heading within the TOOLS.INI file that divides%@NL@%
  4219.      the file into sections.%@NL@%
  4220. %@NL@%
  4221.      For example, you can use tags to create a section for the editor ([M]%@NL@%
  4222.      or [MEP], unless you have renamed the editor) and a section for another%@NL@%
  4223.      utility such as NMAKE, which looks for a section headed by the [NMAKE]%@NL@%
  4224.      tag. Each utility has its own syntax for interpreting TOOLS.INI%@NL@%
  4225.      statements, but all utilities must recognize tags. See the %@AI@%Microsoft%@AE@%%@NL@%
  4226.      %@AI@%CodeView and Utilities User's Guide%@AE@% for more information on NMAKE.%@NL@%
  4227. %@NL@%
  4228.   2. A semicolon (%@AB@%;%@AE@%) indicates that all text from the semicolon to the end%@NL@%
  4229.      of the line is a comment, and is ignored by the editor. To mark the%@NL@%
  4230.      beginning of a comment, a semicolon must either appear at the beginning%@NL@%
  4231.      of a line or be preceded by a space.%@NL@%
  4232. %@NL@%
  4233.   3. All macro definitions, function assignments, and switch assignments use%@NL@%
  4234.      exactly the same syntax used with the %@AI@%Assign%@AE@% command.%@NL@%
  4235. %@NL@%
  4236.      However, you do not invoke %@AI@%Arg%@AE@% or %@AI@%Assign%@AE@%; simply enter the assignment%@NL@%
  4237.      itself. (See the sample TOOLS.INI file for clarification.)%@NL@%
  4238. %@NL@%
  4239.   4. You can use the backslash (%@AB@%\%@AE@%) as a line-continuation character to%@NL@%
  4240.      continue  statements too long for one line. The backslash must be%@NL@%
  4241.      preceded by a space and can be followed only by trailing spaces and an%@NL@%
  4242.      optional comment. Normally, you should precede the backslash by two%@NL@%
  4243.      spaces.%@NL@%
  4244. %@NL@%
  4245. %@CR:MSE75003@%%@4@%The next few sections explain each part of the file──tags, comments, and%@EH@%
  4246. assignments.%@NL@%
  4247. %@NL@%
  4248. %@NL@%
  4249. %@CR:MSE75100@%%@3@%%@AB@%7.5.1  Creating Sections with Tags%@AE@%%@EH@%%@NL@%
  4250. %@NL@%
  4251. %@CR:MSE75101@%%@4@%Tags divide the TOOLS.INI file into sections.  All statements are associated%@EH@%
  4252. only with the tag they immediately follow. This feature allows programs
  4253. other than the Microsoft Editor to use this file for configuration
  4254. information. The most common way to use a tag is to simply include all
  4255. assignments and macro definitions after an M or MEP tag (depending on the
  4256. name of the editor):%@NL@%
  4257. %@NL@%
  4258.      [M]%@NL@%
  4259. %@NL@%
  4260. %@CR:MSE75103@%%@4@%When you run the Microsoft Editor under DOS 2.%@AI@%x%@AE@%, the editor always responds%@EH@%
  4261. to the tag [M]. Otherwise, the tag should use the base file name of the
  4262. editor. If the editor is named MEP.EXE, use the tag [MEP]. Use [M MEP] if
  4263. you have both M.EXE and MEP.EXE.%@NL@%
  4264. %@NL@%
  4265. ───────────────────────────────────────────────────────────────────────────%@NL@%
  4266. %@AI@%IMPORTANT%@AE@%%@NL@%
  4267.    The name you use for the main editor tag should appear in all other%@NL@%
  4268.    editor tags as well. For example, if the main editor tag is [EDIT]%@NL@%
  4269.    (because you renamed the editor to EDIT.EXE), all editor tags should%@NL@%
  4270.    begin with the word EDIT. Instead of using [M-3.20], you would use%@NL@%
  4271.    [EDIT-3.20].%@NL@%
  4272. ───────────────────────────────────────────────────────────────────────────%@NL@%
  4273. %@NL@%
  4274. %@CR:MSE75104@%%@4@%When the Microsoft Editor is started, the tagged sections are loaded in the%@EH@%
  4275. following order:%@NL@%
  4276. %@NL@%
  4277. %@CR:MSE75105@%  1. Information used for all editing sessions.%@NL@%
  4278. %@NL@%
  4279.      All of the statements in the [M] section are loaded. Remember to use a%@NL@%
  4280.      different tag if you rename the editor.%@NL@%
  4281. %@NL@%
  4282.   2. Information specific to the operating system.%@NL@%
  4283. %@NL@%
  4284.      Depending upon the operating system you are running, one of the%@NL@%
  4285.      following tagged sections is loaded (if present):%@NL@%
  4286. %@NL@%
  4287.        ■  [M-3.20] (MS-DOS)%@NL@%
  4288.        ■  [M-10.0] (OS/2 protected mode)%@NL@%
  4289.        ■  [M-10.0R] (OS/2 real mode)%@NL@%
  4290. %@NL@%
  4291.      With the DOS or OS/2 version tag, you should insert the version number%@NL@%
  4292.      you are using. (OS/2 1.10 uses the tag 10.10.) You can combine%@NL@%
  4293.      operating-system tags by grouping them together within the brackets:%@NL@%
  4294. %@NL@%
  4295.           [M-3.20 M-3.30]                      %@AI@%; For DOS versions%@AE@%%@NL@%
  4296.           [MEP-10.0 MEP-10.10]                 %@AI@%; For OS/2 versions%@AE@%%@NL@%
  4297.           [M-3.20 M-3.30 M-10.0R M-10.10R]     %@AI@%; For real mode%@AE@%%@NL@%
  4298. %@NL@%
  4299.   3. Information specific to the display.%@NL@%
  4300. %@NL@%
  4301.      Depending on the video display you are using, one of the following%@NL@%
  4302.      tagged sections is loaded (if present):%@NL@%
  4303. %@NL@%
  4304.        ■  [M-mono]%@NL@%
  4305.        ■  [M-cga]%@NL@%
  4306.        ■  [M-ega]%@NL@%
  4307.        ■  [M-vga]%@NL@%
  4308. %@NL@%
  4309.      You can also put statements for setting the screen dimensions and%@NL@%
  4310.      colors in these tagged sections.%@NL@%
  4311. %@NL@%
  4312.      All tags can be combined so one section of statements applies to more%@NL@%
  4313.      than one tag:%@NL@%
  4314. %@NL@%
  4315.         %@AS@%[M-mono M-cga MEP-mono MEP-cga]%@AE@%%@NL@%
  4316. %@NL@%
  4317.      The example above begins a section that is loaded if your computer has%@NL@%
  4318.      either a monochrome adapter or a CGA adapter.%@NL@%
  4319. %@NL@%
  4320. %@CR:MSE75106@%%@4@%You can also create a tag with statements specific to a file extension. The%@EH@%
  4321. form is%@NL@%
  4322. %@NL@%
  4323.      [M-%@AI@%.ext%@AE@%]%@NL@%
  4324. %@NL@%
  4325. %@CR:MSE75107@%%@4@%where .%@AI@%ext%@AE@% is an extension of up to three characters. Whenever you load a%@EH@%
  4326. new file, or switch to editing a different file, the editor automatically
  4327. searches TOOLS.INI for a tag that matches the new file extension. If it
  4328. finds a matching tag, the statements following that tag are executed. If
  4329. not, the existing configuration is retained.%@NL@%
  4330. %@NL@%
  4331. %@CR:MSE75108@%%@4@%This feature can be used to create operating environments that are specific%@EH@%
  4332. to a particular type of text file or programming language. For example, the
  4333. tag %@AS@%[M-.FOR]%@AE@% could precede a set of statements for editing .FOR (FORTRAN)
  4334. files:  a blue background, the right margin at column 72, and tabs set every
  4335. three columns. C-language files with the .C extension could have their own
  4336. set of statements following a %@AS@%[M-.C]%@AE@% tag: a magenta background, the right
  4337. margin at column 128, and tabs set every five columns.%@NL@%
  4338. %@NL@%
  4339. %@CR:MSE7510A@%%@4@%You can also use a tag to create a special section that is loaded manually%@EH@%
  4340. with the %@AI@%Arg textarg Initialize%@AE@% command. These tags use the following
  4341. syntax:%@NL@%
  4342. %@NL@%
  4343.      [M-%@AI@%textarg%@AE@%]%@NL@%
  4344. %@NL@%
  4345. %@CR:MSE7510C@%%@4@%This feature lets you make special key assignments, load rarely used macros,%@EH@%
  4346. or switch the operating environment to a special configuration, only when
  4347. required.%@NL@%
  4348. %@NL@%
  4349. %@NL@%
  4350. %@CR:MSE75200@%%@3@%%@AB@%7.5.2  Using Comments%@AE@%%@EH@%%@NL@%
  4351. %@NL@%
  4352. %@CR:MSE75201@%%@4@%The Microsoft Editor considers text from a semicolon (;) to the end of a%@EH@%
  4353. line to be a comment. Comments are for documentation purposes only and are
  4354. ignored by the editor.%@NL@%
  4355. %@NL@%
  4356. %@CR:MSE75202@%%@4@%To be considered part of a comment, the semicolon must either appear at the%@EH@%
  4357. beginning of a line or else be preceded by a space. Thus, in the following
  4358. line, the first semicolon is considered part of a command, and the second
  4359. begins a comment:%@NL@%
  4360. %@NL@%
  4361.      extmake:asm masm /Zi /MX %s; %@AI@%; "Compile" setting for MASM%@AE@%%@NL@%
  4362. %@NL@%
  4363. %@CR:MSE75203@%%@4@%Semicolons inside a quoted string do not begin a comment.%@EH@%%@NL@%
  4364. %@NL@%
  4365. %@NL@%
  4366. %@CR:MSE75300@%%@3@%%@AB@%7.5.3  Line Continuation%@AE@%%@EH@%%@NL@%
  4367. %@NL@%
  4368. %@CR:MSE75301@%%@4@%Use the backslash (%@AB@%\%@AE@%) to continue a long macro definition to the next line.%@EH@%
  4369. To be interpreted as the line-continuation character, the backslash must be
  4370. preceded by a space. It should be the last character on the line except for
  4371. spaces and comments. The editor does not interpret the backslash as the
  4372. line-continuation char-acter in the following statement:%@NL@%
  4373. %@NL@%
  4374.      qreplace:ctrl+\%@NL@%
  4375. %@NL@%
  4376. %@CR:MSE75302@%%@4@%The following statement illustrates valid use of line continuation:%@EH@%%@NL@%
  4377. %@NL@%
  4378.      findswitch:=psearch ->skip arg mark :>skip arg "<assign>"  \%@NL@%
  4379.                  setfile begfile psearch%@NL@%
  4380. %@NL@%
  4381. %@CR:MSE75303@%%@4@%Note that the backslash should be followed by at least two spaces, unless%@EH@%
  4382. you want the end of one line to be concatenated without a break to the
  4383. beginning of the next. In the example above, two spaces are necessary to
  4384. prevent the editor from viewing %@AS@%"<assign>"setfile%@AE@% as one item.%@NL@%
  4385. %@NL@%
  4386. %@CR:MSE75304@%%@4@%You can use line continuation to extend a single assignment statement over%@EH@%
  4387. several lines.%@NL@%
  4388. %@NL@%
  4389. %@NL@%
  4390. %@CR:MSE75400@%%@3@%%@AB@%7.5.4  Assignments and Macros%@AE@%%@EH@%%@NL@%
  4391. %@NL@%
  4392. %@CR:MSE75401@%%@4@%Function assignments, switch assignments, and macro definitions all use the%@EH@%
  4393. same syntax within the TOOLS.INI file as they do with the %@AI@%Arg textarg Assign%@AE@%
  4394. command. The only difference is you do not need to invoke the %@AI@%Arg%@AE@% or %@AI@%Assign%@AE@%
  4395. functions.%@NL@%
  4396. %@NL@%
  4397. %@CR:MSE75402@%%@4@%The TOOLS.INI file is convenient for defining complicated macros, especially%@EH@%
  4398. nested macros. By placing macro definitions in the TOOLS.INI file, you can
  4399. view how you wrote a macro. Furthermore, you can easily modify a macro that
  4400. doesn't work correctly by loading the TOOLS.INI file, making changes to your
  4401. macro definitions, and reinitializing.%@NL@%
  4402. %@NL@%
  4403. %@CR:MSE75403@%%@4@%If you customized your copy of the Microsoft Editor when you installed it, a%@EH@%
  4404. special TOOLS.INI was created that contains the special key assignments.
  4405. This TOOLS.INI file also contains a number of useful macros from the
  4406. TOOLS.PRE file. You may want to study TOOLS.PRE to see how macros are
  4407. entered and which macros might be useful to you.%@NL@%
  4408. %@NL@%
  4409. %@CR:MSE75404@%%@4@%Use the %@AI@%Initialize%@AE@% function (SHIFT+F8) to reload your TOOLS.INI settings.%@EH@%
  4410. When you give the %@AI@%Initialize%@AE@% function a %@AI@%textarg%@AE@%, it attempts to use settings
  4411. from the following section:%@NL@%
  4412. %@NL@%
  4413.      [M-%@AI@%textarg%@AE@%]%@NL@%
  4414. %@NL@%
  4415. %@CR:MSE75406@%%@4@%However, when you invoke %@AI@%Initialize%@AE@% with no argument, the editor reloads%@EH@%
  4416. settings in the TOOLS.INI file in the same way that it does on start-up.%@NL@%
  4417. %@NL@%
  4418. %@CR:MSE75407@%%@4@%You can create a macro to be executed whenever the editor starts up. Simply%@EH@%
  4419. define a macro and assign it the name %@AS@%autostart%@AE@%. For example, when you place
  4420. the following macro in the [M] section of the TOOLS.INI file, the editor
  4421. transfers to the Clipboard and returns, thus making the Clipboard the
  4422. previous file:%@NL@%
  4423. %@NL@%
  4424.      autostart:=arg "<clipboard>" setfile setfile%@NL@%
  4425. %@NL@%
  4426. %@NL@%
  4427. %@CR:MSE76000@%%@2@%%@AB@%7.6  Configuring On-Line Help%@AE@%%@EH@%%@NL@%
  4428. %@NL@%
  4429. %@CR:MSE76001@%%@4@%The installation program for your Microsoft language is the recommended%@EH@%
  4430. method for configuring on-line Help. The procedure varies, depending on
  4431. whether you use OS/2 (supporting protected mode and real mode) or DOS (real
  4432. mode only).%@NL@%
  4433. %@NL@%
  4434. %@CR:MSE76002@%  1. If you are running under DOS or real-mode OS/2 only, copy the M.HLP and%@NL@%
  4435.      MHELP.MXT files to any directory specified in the PATH environment%@NL@%
  4436.      variable in your AUTOEXEC.BAT file (DOS) or STARTUP.CMD file (OS/2).%@NL@%
  4437. %@NL@%
  4438.   2. If you are running under protected-mode OS/2 only, copy the M.HLP and%@NL@%
  4439.      MHELP.PXT files to any directory specified in the PATH environment%@NL@%
  4440.      variable. Also copy MSHELP.DLL to any directory listed in the LIBPATH%@NL@%
  4441.      variable in the CONFIG.SYS file. MHELP.DLL is an extension to the%@NL@%
  4442.      editor. MSHELP.DLL is a support library that implements the standard%@NL@%
  4443.      Microsoft Help engine.%@NL@%
  4444. %@NL@%
  4445.   3. If you are setting up for both real- and protected-mode OS/2, perform%@NL@%
  4446.      both the preceding steps.%@NL@%
  4447. %@NL@%
  4448. %@CR:MSE76003@%%@4@%Other Microsoft products include .HLP files that the Microsoft Editor can%@EH@%
  4449. read. If you want to add additional .HLP files to Help, you need to include
  4450. the following tagged section in your TOOLS.INI file:%@NL@%
  4451. %@NL@%
  4452.      [M-MHELP.MXT MEP-MHELP.MXT]%@NL@%
  4453.      helpfiles:%@AI@%path%@AE@%\%@AI@%file.hlp%@AE@%%@NL@%
  4454. %@NL@%
  4455. %@CR:MSE76004@%%@4@%in which %@AI@%path%@AE@% is the directory of the Help file. The tag [M-MHELP.MXT%@EH@%
  4456. MEP-MHELP.MXT] is the heading for the section in the TOOLS.INI file executed
  4457. whenever Help is loaded. If this section is missing, the editor looks for
  4458. the file M.HLP in your PATH directories. To install more than one Help file,
  4459. you must have this tagged section in TOOLS.INI.%@NL@%
  4460. %@NL@%
  4461. %@CR:MSE76005@%%@4@%Whenever you use context-sensitive Help, the editor searches the files%@EH@%
  4462. specified in the %@AB@%helpfiles%@AE@% switch in the order listed. The search is slower
  4463. if the topics you most often inquire about are in files at the end of the
  4464. list. You can alter the %@AB@%helpfiles%@AE@% switch at any time with the %@AI@%Assign%@AE@%
  4465. command.%@NL@%
  4466. %@NL@%
  4467. %@NL@%
  4468. %@CR:MSE76100@%%@3@%%@AB@%7.6.1  Controlling Search Order%@AE@%%@EH@%%@NL@%
  4469. %@NL@%
  4470. %@CR:MSE76101@%%@4@%Context-sensitive Help searches all the Help files for the selected topic.%@EH@%
  4471. The order in which files are searched is important. Two different Help files
  4472. may have an entry for the same topic. Furthermore, searching the appropriate
  4473. file first speeds up Help.%@NL@%
  4474. %@NL@%
  4475. %@CR:MSE76102@%%@4@%You can use the file extension of the current file to change the order in%@EH@%
  4476. which .HLP files are searched. Precede files specified in the %@AB@%helpfiles%@AE@%
  4477. switch by a file extension and a colon (:):%@NL@%
  4478. %@NL@%
  4479.      helpfiles: M.HLP .BAS:QB.HLP .C.H:C.HLP .ASM:OS2.HLP%@NL@%
  4480. %@NL@%
  4481. %@CR:MSE76103@%%@4@%In the example above, Help searches QB.HLP first when the current file has a%@EH@%
  4482. .BAS extension, C.HLP when the current file has a .C or .H extension, and
  4483. OS2.HLP when the current file has a .ASM extension. In all cases, all of the
  4484. files listed are searched before Help concludes it cannot find a topic.%@NL@%
  4485. %@NL@%
  4486. %@NL@%
  4487. %@CR:MSE76200@%%@3@%%@AB@%7.6.2  Default Help File Search%@AE@%%@EH@%%@NL@%
  4488. %@NL@%
  4489. %@CR:MSE76201@%%@4@%The editor looks for .HLP files according to the following rules:%@EH@%%@NL@%
  4490. %@NL@%
  4491. %@CR:MSE76202@%  1. If the %@AB@%helpfiles%@AE@% switch is set, the editor uses the files specified in%@NL@%
  4492.      this switch.%@NL@%
  4493. %@NL@%
  4494.   2. If %@AB@%helpfiles%@AE@% is not set, the editor checks next to see if the HELPFILES%@NL@%
  4495.      environment variable is set. If it is, this environment variable is%@NL@%
  4496.      evaluated the same way the %@AB@%helpfiles%@AE@% switch is.%@NL@%
  4497. %@NL@%
  4498.   3. If neither the %@AB@%helpfiles%@AE@% switch nor the HELPFILES environment variable%@NL@%
  4499.      is set, the editor searches for the file M.HLP. The editor finds M.HLP%@NL@%
  4500.      if this file is in a directory listed in the PATH environment variable.%@NL@%
  4501. %@NL@%
  4502. %@NL@%
  4503. %@CR:MSE80000@%%@1@%%@AB@%Chapter 8  Programming C Extensions%@AE@%%@EH@%%@NL@%
  4504. ───────────────────────────────────────────────────────────────────────────%@NL@%
  4505. %@NL@%
  4506. %@CR:MSE80001@%%@4@%C extensions provide the most powerful means of customizing the Microsoft%@EH@%
  4507. Editor. A "C extension" is a C-language module containing new editing
  4508. functions you program. Your functions can be attached to a key, given
  4509. arguments, or used in macros just as standard editing functions are. The
  4510. module can also define new switches. The user can adjust these switches to
  4511. modify the behavior of your functions.%@NL@%
  4512. %@NL@%
  4513. %@CR:MSE80002@%%@4@%With C extensions, you can use the power of the C language──data structures,%@EH@%
  4514. control-flow structures, and C operators. Furthermore, C extensions are much
  4515. faster than macros because they are compiled.%@NL@%
  4516. %@NL@%
  4517. ───────────────────────────────────────────────────────────────────────────%@NL@%
  4518. %@AI@%NOTE%@AE@%%@NL@%
  4519.    This chapter assumes you already know how to program in C. Before you%@NL@%
  4520.    read the chapter, make sure you understand the following C-language%@NL@%
  4521.    programming concepts: functions, pointers, structures, and unions. You%@NL@%
  4522.    also need to know how to compile and link a C source file.%@NL@%
  4523.    You can also write extensions with the Microsoft Macro Assembler if you%@NL@%
  4524.    simulate the C memory model specified in Section 8.5.1%@BO:   4ab20@%, "Compiling and%@NL@%
  4525.    Linking in Real Mode." However, this chapter is primarily addressed to C%@NL@%
  4526.    programmers.%@NL@%
  4527. ───────────────────────────────────────────────────────────────────────────%@NL@%
  4528. %@NL@%
  4529. %@CR:MSE80003@%%@4@%This chapter gradually develops concepts for writing C extensions. The first%@EH@%
  4530. time you read the chapter, read the sections in order. The chapter first
  4531. describes requirements for writing C extensions and explains how C
  4532. extensions work. It then explains how to create the required objects in a C
  4533. extension, to program your editing functions, to compile and link your
  4534. module, and to use the editor's low-level functions to read and write to
  4535. files.%@NL@%
  4536. %@NL@%
  4537. %@NL@%
  4538. %@CR:MSE81000@%%@2@%%@AB@%8.1  Requirements%@AE@%%@EH@%%@NL@%
  4539. %@NL@%
  4540. %@CR:MSE81001@%%@4@%To create C extensions, you need to have the following files and software%@EH@%
  4541. present in your current directory (or directories listed in the PATH or
  4542. INCLUDE environment variables, as appropriate):%@NL@%
  4543. %@NL@%
  4544. %@CR:MSE81002@%  ■  The Microsoft C Optimizing Compiler, Version 5.1 or later. You can use%@NL@%
  4545.      Version 4.0 or 5.0 of the compiler, but the files you need are provided%@NL@%
  4546.      with Version 5.1 and later. You also get these files with the Microsoft%@NL@%
  4547.      Macro Assembler, Version 5.1 and later.%@NL@%
  4548. %@NL@%
  4549.   ■  The Microsoft Overlay Linker, Version 3.60 or later; the OS/2 version%@NL@%
  4550.      of the linker; or the Microsoft Segmented-Executable Linker, Version%@NL@%
  4551.      5.01.%@NL@%
  4552. %@NL@%
  4553.   ■  EXTHDR.OBJ (supplied with the C compiler) or EXTHDRP.OBJ (a file%@NL@%
  4554.      supplied with the C compiler for creating protected-mode extensions).%@NL@%
  4555. %@NL@%
  4556.   ■  EXT.H (supplied with the C compiler).%@NL@%
  4557. %@NL@%
  4558.   ■  SKEL.C (a template supplied with the C compiler you can replace with%@NL@%
  4559.      your own code).%@NL@%
  4560. %@NL@%
  4561. %@CR:MSE81003@%%@4@%You need a minimum of 220K of available memory for the editor to load a C%@EH@%
  4562. extension at run time, plus the size of the extension itself.%@NL@%
  4563. %@NL@%
  4564. %@NL@%
  4565. %@CR:MSE82000@%%@2@%%@AB@%8.2  How C Extensions Work%@AE@%%@EH@%%@NL@%
  4566. %@NL@%
  4567. %@CR:MSE82001@%%@4@%A C-extension module is similar in the following respects to an OS/2 or%@EH@%
  4568. Windows dynamic-link library:%@NL@%
  4569. %@NL@%
  4570. %@CR:MSE82002@%  ■  There is no function called %@AB@%main%@AE@% in your module. Instead, you use%@NL@%
  4571.      certain names and structures the editor recognizes.%@NL@%
  4572. %@NL@%
  4573.   ■  You compile and link to create an executable file, but this executable%@NL@%
  4574.      file is separate from the "main program," M.EXE or MEP.EXE.%@NL@%
  4575. %@NL@%
  4576.   ■  The editor loads your executable file into memory at run time and uses%@NL@%
  4577.      a table-driven method for enabling your module to call functions within%@NL@%
  4578.      the editor.%@NL@%
  4579. %@NL@%
  4580. %@CR:MSE82003@%%@4@%Once your executable file is loaded, it resides in memory along with the%@EH@%
  4581. editor. The editor can call your functions, and your functions can call the
  4582. Microsoft Editor's low-level functions that perform input and output
  4583. operations.%@NL@%
  4584. %@NL@%
  4585. %@CR:MSE82004@%%@4@%The following list summarizes the process of developing and using a C%@EH@%
  4586. extension:%@NL@%
  4587. %@NL@%
  4588. %@CR:MSE82005@%  1. Compile a C module with a special memory-model option, then link the%@NL@%
  4589.      resulting object file to create an executable file.%@NL@%
  4590. %@NL@%
  4591.      You also link in the object file EXTHDR.OBJ  (or EXTHDRP.OBJ, if%@NL@%
  4592.      linking for protected mode) to the beginning of your executable file.%@NL@%
  4593.      This object file contains a special table that enables your functions%@NL@%
  4594.      to effectively call functions within the editor.%@NL@%
  4595. %@NL@%
  4596.   2. Start up the Microsoft Editor. Set the %@AB@%load%@AE@% switch  to look for the%@NL@%
  4597.      executable file you created. (As discussed in Chapter 7%@BO:   3396c@%, the %@AB@%load%@AE@%%@NL@%
  4598.      switch can be set in the TOOLS.INI file or manually with the %@AI@%Assign%@AE@%%@NL@%
  4599.      function.)%@NL@%
  4600. %@NL@%
  4601.      The editor loads your executable file into memory.%@NL@%
  4602. %@NL@%
  4603.   3. As soon as the executable file is loaded, the Microsoft Editor calls%@NL@%
  4604.      the function %@AB@%WhenLoaded%@AE@%──a special function your module must define.%@NL@%
  4605.      At the same time, the editor examines the table %@AB@%cmdTable%@AE@%, which is an%@NL@%
  4606.      array of structures your module must declare. The editor examines this%@NL@%
  4607.      table to recognize the editing functions you created. The table%@NL@%
  4608.      contains function names and pointers to functions.%@NL@%
  4609. %@NL@%
  4610.   4. You can assign keys to call your functions. Assign a key manually or in%@NL@%
  4611.      the %@AB@%WhenLoaded%@AE@% function, then press the assigned key. You can also call%@NL@%
  4612.      an editing function indirectly by placing it in a macro and calling the%@NL@%
  4613.      macro.%@NL@%
  4614. %@NL@%
  4615.   5. When you invoke a C-extension function, the editor responds by calling%@NL@%
  4616.      your module.%@NL@%
  4617. %@NL@%
  4618.   6. Your editing function is executed. It calls the Microsoft Editor's%@NL@%
  4619.      low-level functions to read from the text file, read output to the text%@NL@%
  4620.      file, and print messages.%@NL@%
  4621. %@NL@%
  4622. %@NL@%
  4623. %@CR:MSE83000@%%@2@%%@AB@%8.3  Writing a C Extension%@AE@%%@EH@%%@NL@%
  4624. %@NL@%
  4625. %@CR:MSE83001@%%@4@%To create a successful C extension, you need to follow these guidelines:%@EH@%%@NL@%
  4626. %@NL@%
  4627. %@CR:MSE83002@%  1. Include the file EXT.H.%@NL@%
  4628. %@NL@%
  4629.      This file declares all structures and types required to establish an%@NL@%
  4630.      interface to the editor.%@NL@%
  4631. %@NL@%
  4632.   2. Include the standard items that are described in Section 8.3.1%@BO:   41aca@%,%@NL@%
  4633.      "Required Objects," and write your functions by following the steps in%@NL@%
  4634.      Section 8.4%@BO:   45aeb@%, "Programming Your Function." Then compile and link as%@NL@%
  4635.      directed in Section 8.5%@BO:   4a7bb@%, "Compiling and Linking."%@NL@%
  4636. %@NL@%
  4637.   3. Call the low-level extension functions to do most any operation with%@NL@%
  4638.      files, such as read from a file, write to a file, delete or add files,%@NL@%
  4639.      and move the cursor. These functions are completely described in%@NL@%
  4640.      Chapter 9%@BO:   50fea@%, "C-Extension Functions," (an alphabetical reference), and%@NL@%
  4641.      summarized by topic at the end of this chapter.%@NL@%
  4642. %@NL@%
  4643.      Do not call functions from the C library routine, except for the ones%@NL@%
  4644.      specifically listed in Section 8.7%@BO:   4fa83@%, "Calling Library Functions."%@NL@%
  4645.      Futhermore, floating-point arithmetic is not supported.%@NL@%
  4646. %@NL@%
  4647. %@NL@%
  4648. %@CR:MSE83100@%%@3@%%@AB@%8.3.1  Required Objects%@AE@%%@EH@%%@NL@%
  4649. %@NL@%
  4650. %@CR:MSE83101@%%@4@%A C-extension module must have at minimum the three objects described below:%@EH@%%@NL@%
  4651. %@NL@%
  4652. %@CR:MSE83102@%%@AB@%Object Name                 Description%@AE@%%@NL@%
  4653. %@NL@%
  4654. %@AB@%swiTable%@AE@%                    An array of structures that declares internal%@NL@%
  4655.                             switches you wish to create%@NL@%
  4656. %@NL@%
  4657. %@AB@%cmdTable%@AE@%                    An array of structures that declares editing%@NL@%
  4658.                             functions you have coded%@NL@%
  4659. %@NL@%
  4660. %@AB@%WhenLoaded%@AE@%                  A function that the editor calls as soon as the%@NL@%
  4661.                             C-extension module is loaded%@NL@%
  4662. %@NL@%
  4663. %@CR:MSE83103@%%@4@%Each of these items can be as short or long as you wish. Each table can be%@EH@%
  4664. as short as a single row of entries. The %@AB@%WhenLoaded%@AE@% function can return
  4665. immediately, or it can perform useful initialization tasks, such as
  4666. assigning keys to functions or printing a message.%@NL@%
  4667. %@NL@%
  4668. %@NL@%
  4669. %@CR:MSE83200@%%@3@%%@AB@%8.3.2  The Switch Table%@AE@%%@EH@%%@NL@%
  4670. %@NL@%
  4671. %@CR:MSE83201@%%@4@%The switch table, %@AB@%swiTable%@AE@%, consists of a series of structures in which each%@EH@%
  4672. structure describes a switch you wish to create. The table ends with a
  4673. structure that has all null (all zero) values. Though you may choose not to
  4674. create any switches, the table must still be present. The simplest table
  4675. allowed is therefore%@NL@%
  4676. %@NL@%
  4677.      struct swiDesc swiTable[] =%@NL@%
  4678.      {%@NL@%
  4679.           { (void *) 0, (void *) 0, 0 }%@NL@%
  4680.      };%@NL@%
  4681. %@NL@%
  4682. %@CR:MSE83202@%%@4@%The structure type %@AB@%swiDesc%@AE@% is defined in EXT.H. This structure contains the%@EH@%
  4683. following three fields that define a switch for the editor to recognize:%@NL@%
  4684. %@NL@%
  4685. %@CR:MSE83203@%  1. A pointer to the name of the switch.%@NL@%
  4686. %@NL@%
  4687.   2. A pointer to the switch itself or to a function. If the switch is%@NL@%
  4688.      Boolean, this field must point to the switch (an integer which assumes%@NL@%
  4689.      the value -1 or 0). If the switch is text, this field must point to a%@NL@%
  4690.      function, as explained below. If the switch is numeric, this field%@NL@%
  4691.      points to switch itself──an integer.%@NL@%
  4692. %@NL@%
  4693.   3. A flag that indicates the type of switch: either %@AB@%SWI_BOOLEAN%@AE@%,%@NL@%
  4694.      %@AB@%SWI_NUMERIC%@AE@%, or %@AB@%SWI_SPECIAL%@AE@%.%@NL@%
  4695. %@NL@%
  4696. %@CR:MSE83204@%%@4@%If the third field has value %@AB@%SWI_NUMERIC%@AE@%, you must combine it with the value%@EH@%
  4697. %@AB@%RADIX10%@AE@% or %@AB@%RADIX16%@AE@% by using binary or (%@AB@%|%@AE@%). (See the second example below.)
  4698. If you specify %@AB@%RADIX10%@AE@%, the editor interprets user-assigned values as
  4699. decimal digits. If you specify %@AB@%RADIX16%@AE@%, the editor interprets these values
  4700. as hexadecimal.%@NL@%
  4701. %@NL@%
  4702. %@CR:MSE83205@%%@4@%If the third field has value %@AB@%SWI_SPECIAL%@AE@%, the second field must be a pointer%@EH@%
  4703. to a function of type %@AB@%int far pascal%@AE@%. You define this function in your code.
  4704. Each time the value of the switch changes, the editor calls your function
  4705. and passes the updated value in a character string. Your function should
  4706. declare exactly one parameter: a far pointer to a character string.
  4707. Typically, this function might set a global variable:%@NL@%
  4708. %@NL@%
  4709.      char globalstr[BUFLEN];%@NL@%
  4710. %@NL@%
  4711.      int far pascal setstr (char far *p)%@NL@%
  4712.      {%@NL@%
  4713.           strcpy (globalstr, p);%@NL@%
  4714.      }%@NL@%
  4715. %@NL@%
  4716. %@CR:MSE83206@%%@4@%The table may have any number of rows (each row being a structure), and must%@EH@%
  4717. at least include the final row of all null values. Here is an example of a
  4718. table that creates a numeric switch with a default value of 27:%@NL@%
  4719. %@NL@%
  4720.      int n = 27;%@NL@%
  4721. %@NL@%
  4722.      struct swiDesc swiTable [] =%@NL@%
  4723.      {%@NL@%
  4724.           { "newswitch", &n, SWI_NUMERIC|RADIX10  } ,%@NL@%
  4725.           { (void *) 0, (void *) 0, 0 }%@NL@%
  4726.      }%@NL@%
  4727. %@NL@%
  4728. %@NL@%
  4729. %@CR:MSE83300@%%@3@%%@AB@%8.3.3  The Command Table%@AE@%%@EH@%%@NL@%
  4730. %@NL@%
  4731. %@CR:MSE83301@%%@4@%The command table, %@AB@%cmdTable%@AE@%, is similar to the switch table, %@AB@%swiTable%@AE@%, in%@EH@%
  4732. its construction. Each "row" of the table consists of a structure that
  4733. describes an editing function you want the editor to recognize. The last row
  4734. must contain all null values. The simplest table allowed is the following:%@NL@%
  4735. %@NL@%
  4736.      struct cmdDesc cmdTable[] =%@NL@%
  4737.      {%@NL@%
  4738.           { (void *) 0, (void *) 0, 0, 0 }%@NL@%
  4739.      }%@NL@%
  4740. %@NL@%
  4741. %@CR:MSE83302@%%@4@%Usually you'll want to declare at least one new editing function. The%@EH@%
  4742. structure type %@AB@%cmdDesc%@AE@% is defined in EXT.H. This structure contains the
  4743. following four fields that make an editing function recognizable to the
  4744. editor:%@NL@%
  4745. %@NL@%
  4746. %@CR:MSE83303@%  1. A pointer to the name of the function, in ASCII format. This name could%@NL@%
  4747.      appear in assignments and macros.%@NL@%
  4748. %@NL@%
  4749.   2. The address of the function itself. Give the function name but do not%@NL@%
  4750.      follow it with parentheses.%@NL@%
  4751. %@NL@%
  4752.   3. A field used internally by the editor. Always declare this field as%@NL@%
  4753.      null.%@NL@%
  4754. %@NL@%
  4755.   4. Flags indicating the type of the function. Function types are described%@NL@%
  4756.      below and define what type of argument the function will accept.%@NL@%
  4757. %@NL@%
  4758. %@CR:MSE83304@%%@4@%Here is an example of a command table declaring a function that takes no%@EH@%
  4759. arguments and a second function that takes either a %@AI@%linearg%@AE@% or a %@AI@%boxarg%@AE@% or
  4760. can be entered without arguments:%@NL@%
  4761. %@NL@%
  4762.      struct cmdDesc cmdTable[] =%@NL@%
  4763.      {%@NL@%
  4764.           { "newfun", newfun, 0, NOARG } ,%@NL@%
  4765.           { "fun2",  fun2,     0, LINEARG | BOXARG | NOARG } ,%@NL@%
  4766.           { (void *) 0, (void *) 0, 0, 0 }%@NL@%
  4767.      }%@NL@%
  4768. %@NL@%
  4769. %@CR:MSE83305@%%@4@%In the fourth field of the command table, use one or more of the values%@EH@%
  4770. described in Table 8.1%@BO:   435cc@% below.%@NL@%
  4771. %@NL@%
  4772. %@CR:MSE83306@%%@4@%The first column of Table 8.1%@BO:   435cc@% contains a flag you can enter in the fourth%@EH@%
  4773. field of %@AB@%cmdTable%@AE@%. The second column describes the associated behavior. The
  4774. third column indicates which of the six data formats the editor uses to pass
  4775. information. Your function determines the format at run time by testing the
  4776. value of pArg->argType. Sections 8.4.3%@BO:   470c5@%-8.4.8 give complete descriptions of
  4777. these formats.%@NL@%
  4778. %@NL@%
  4779. %@CR:MSE83307@%%@4@%Many of the descriptions below state that the editor responds by passing%@EH@%
  4780. certain information. However, these responses only apply when the editor
  4781. detects the associated condition. For example, the %@AB@%BOXARG%@AE@% flag controls the
  4782. editor's behavior only when a %@AI@%boxarg%@AE@% is detected. However, %@AB@%KEEPMETA%@AE@%,
  4783. %@AB@%MODIFIES%@AE@%, and %@AB@%CURSORFUNC%@AE@% apply regardless of argument type.%@NL@%
  4784. %@CR:MSE8T100@%%@NL@%
  4785. %@4@%%@AU@%Table 8.1  Meaning of cmdTable Flags%@AE@%%@EH@%%@NL@%
  4786. %@TH:   68   3808  3 14 51 11 @%%@AB@%cmdTable                                                         argType%@AE@%%@AB@%Flag          Behavior                                           Format%@AE@%%@AB@%KEEPMETA%@AE@%      Preserves the state of the %@AI@%Meta%@AE@% prefix, which is   Not              normally reset upon completion of the function.    applicable%@AB@%MODIFIES%@AE@%      Prevents execution of the function when the        Not              current file is No-Edit.                           applicable%@AB@%WINDOWFUNC%@AE@%    Does not cancel highlight resulting from a         Not              previous command, such as %@AI@%Psearch%@AE@%. This flag is    applicable              useful for window-movement functions.%@AB@%CURSORFUNC%@AE@%    Does not recognize or cancel %@AI@%Arg%@AE@% prefix. The       %@AB@%NOARG%@AE@%              function is useful for helping define              cursor-movement arguments, since it preserves the              preexisting argument. Conflicts with all flags              except %@AB@%KEEPMETA%@AE@% and %@AB@%MODIFIES%@AE@%.%@AB@%NOARG%@AE@%         Accepts absence of the %@AI@%Arg%@AE@% prefix. The editor      %@AB@%NOARG%@AE@%              passes location of the cursor.%@AB@%NULLARG%@AE@%       Accepts %@AI@%Arg%@AE@% without an argument. The editor        %@AB@%NULLARG%@AE@%              passes location of the cursor. Conflicts with              %@AB@%NULLEOL%@AE@% and %@AB@%NULLEOW%@AE@%.%@AB@%NULLEOL%@AE@%       Accepts %@AI@%Arg%@AE@% without an argument. The editor        %@AB@%TEXTARG%@AE@%              passes the string of text from the cursor              position up to the end of the line. Conflicts              with %@AB@%NULLARG%@AE@% and %@AB@%NULLEOW%@AE@%.%@AB@%NULLEOW%@AE@%       Accepts %@AI@%Arg%@AE@% without an argument. The editor        %@AB@%TEXTARG%@AE@%              passes the string of text from the cursor              position up to the next white space. Conflicts              with %@AB@%NULLARG%@AE@% and %@AB@%NULLEOL%@AE@%.%@AB@%TEXTARG%@AE@%       Accepts a text argument that the user types in     %@AB@%TEXTARG%@AE@%              directly.%@AB@%BOXSTR%@AE@%        Accepts a one-line box argument. The editor        %@AB@%TEXTARG%@AE@%              passes the highlighted string as a text argument.%@AB@%LINEARG%@AE@%       Accepts a %@AI@%linearg%@AE@%. The editor passes location of   %@AB@%LINEARG%@AE@%              first and last lines.%@AB@%BOXARG%@AE@%        Accepts a %@AI@%boxarg%@AE@%. The editor passes location of    %@AB@%BOXARG%@AE@%              the four edges of the box.%@AB@%STREAMARG%@AE@%     Interprets any cursor-movement argument as a       %@AB@%STREAMARG%@AE@%              stream of text. The stream may span more than one              line. The editor passes location of beginning and              ending points.%@AB@%NUMARG%@AE@%        Interprets a numeric text argument as a file       Any cursor-              position exactly %@AI@%numarg%@AE@% lines down from the        movement              cursor. This position and the cursor position      type              then define a region in the file. (The two              positions form the end points of the region.) Use              this flag in conjunction with other              cursor-movement-argument flags, especially              %@AB@%LINEARG%@AE@%.%@AB@%MARKARG%@AE@%       Interprets a valid file-marker name as a file      Any cursor-              position. This position and the cursor position    movement              then define a region in the file. (The two         type              positions form the end points of the region.) Use              this flag in conjunction with other              cursor-movement-argument flags.%@TE:   68   3808  3 14 51 11 @%
  4787. %@NL@%
  4788. %@CR:MSE83308@%%@4@%The descriptions also refer to the passing of information to the function;%@EH@%
  4789. you'll see how the function receives information in Section 8.3.5%@BO:   44a45@%,
  4790. "Defining the Editing Function."%@NL@%
  4791. %@NL@%
  4792. %@CR:MSE83309@%%@4@%The flags are bit masks; each turns a specific bit within an unsigned%@EH@%
  4793. integer. You can combine these bit masks with binary or ( %@AB@%|%@AE@% ). For example,
  4794. you can specify a function that accepts a %@AI@%boxarg%@AE@%, %@AI@%linearg%@AE@%, or %@AI@%numarg%@AE@% as:%@NL@%
  4795. %@NL@%
  4796.      BOXARG | LINEARG | NUMARG%@NL@%
  4797. %@NL@%
  4798. %@NL@%
  4799. %@CR:MSE83400@%%@3@%%@AB@%8.3.4  The WhenLoaded Function%@AE@%%@EH@%%@NL@%
  4800. %@NL@%
  4801. %@CR:MSE83401@%%@4@%The function %@AB@%WhenLoaded%@AE@% takes no arguments and can return immediately.%@EH@%
  4802. However, you must include the function because the editor expects it to be
  4803. present. The simplest version of %@AB@%WhenLoaded%@AE@% is this:%@NL@%
  4804. %@NL@%
  4805.      WhenLoaded()%@NL@%
  4806.      {%@NL@%
  4807.           return TRUE;%@NL@%
  4808.      }%@NL@%
  4809. %@NL@%
  4810. %@CR:MSE83402@%%@4@%In Section 8.7%@BO:   4fa83@%, "Calling Library Functions," you'll learn how to call%@EH@%
  4811. functions that assign keys to functions and print a message on the message
  4812. line. These functions are often useful to call from within %@AB@%WhenLoaded%@AE@%.%@NL@%
  4813. %@NL@%
  4814. %@NL@%
  4815. %@CR:MSE83500@%%@3@%%@AB@%8.3.5  Defining the Editing Function%@AE@%%@EH@%%@NL@%
  4816. %@NL@%
  4817. %@CR:MSE83501@%%@4@%This section describes how to define an editing function. The section also%@EH@%
  4818. gives an overview of the information the editor passes to every function.
  4819. Section 8.4%@BO:   45aeb@%, "Programming Your Function," gives specific information on how
  4820. to interpret user-defined arguments.%@NL@%
  4821. %@NL@%
  4822. %@CR:MSE83502@%%@4@%The editing function must be declared %@AB@%flagType pascal EXPORT%@AE@%. The %@AB@%flagType%@AE@%%@EH@%
  4823. declaration indicates that your function returns one of two values: TRUE
  4824. (nonzero) or FALSE (zero). (Returning a value is recommended, because once
  4825. loaded, your function can be used within a macro. However, returning a value
  4826. is not a strict requirement.) The %@AB@%pascal%@AE@% keyword indicates that your
  4827. function uses the Pascal calling convention. Finally, your function must be
  4828. of type %@AB@%EXPORT%@AE@% to be properly accessed through the editor's dynamic-link
  4829. calls.%@NL@%
  4830. %@NL@%
  4831. %@CR:MSE83503@%%@4@%The sample function %@AS@%Skel%@AE@% is declared as follows:%@EH@%%@NL@%
  4832. %@NL@%
  4833.      #define TRUE  -1%@NL@%
  4834.      #define FALSE 0%@NL@%
  4835. %@NL@%
  4836.      flagType pascal EXPORT Skel (argData, pArg, fMeta)%@NL@%
  4837.      unsigned int argData;%@NL@%
  4838.      ARG far *pArg;%@NL@%
  4839.      flagType fMeta;%@NL@%
  4840.      {%@NL@%
  4841.           return TRUE;%@NL@%
  4842.      }%@NL@%
  4843. %@NL@%
  4844. %@CR:MSE83504@%%@4@%Replace the name %@AS@%Skel%@AE@% by the name of your function. This same name should%@EH@%
  4845. appear in the second field of the %@AB@%cmdTable%@AE@% data structure.%@NL@%
  4846. %@NL@%
  4847. %@CR:MSE83505@%%@4@%The parameter list is described below:%@EH@%%@NL@%
  4848. %@NL@%
  4849. %@CR:MSE83506@%%@AB@%Parameter                   Description%@AE@%%@NL@%
  4850. %@NL@%
  4851. %@AB@%argData%@AE@%                     The value of the keystroke used to invoke the%@NL@%
  4852.                             function. This parameter is generally not used.%@NL@%
  4853. %@NL@%
  4854. %@AB@%pArg%@AE@%                        A pointer to a structure that contains almost%@NL@%
  4855.                             all the information passed by the editor. This%@NL@%
  4856.                             structure is discussed in detail below.%@NL@%
  4857. %@NL@%
  4858. %@AB@%fMeta%@AE@%                       An integer that describes whether or not a %@AI@%Meta%@AE@%%@NL@%
  4859.                             prefix is present. This integer has value true%@NL@%
  4860.                             (nonzero) if %@AI@%Meta%@AE@% is present and value false (0)%@NL@%
  4861.                             if not.%@NL@%
  4862. %@NL@%
  4863. %@CR:MSE83507@%%@4@%The parameter %@AB@%pArg%@AE@% points to a structure whose first member is %@AB@%argType%@AE@%. This%@EH@%
  4864. variable contains one of six values: %@AB@%NOARG%@AE@%, %@AB@%TEXTARG%@AE@%, %@AB@%NULLARG%@AE@%, %@AB@%LINEARG%@AE@%,
  4865. %@AB@%STREAMARG%@AE@%, or %@AB@%TEXTARG%@AE@%. Each of these values is defined in Section 8.3.3%@BO:   42a57@%,
  4866. "The Command Table." For example, you could test for the presence of a
  4867. %@AI@%boxarg%@AE@% with the following code:%@NL@%
  4868. %@NL@%
  4869.      if( pArg->argType == BOXARG )%@NL@%
  4870.      {%@NL@%
  4871.          %@AI@%/* take appropriate action for boxarg */%@AE@%%@NL@%
  4872.      }%@NL@%
  4873. %@NL@%
  4874. %@CR:MSE83508@%%@4@%The rest of the structure consists of a union of smaller structures. The C%@EH@%
  4875. %@AB@%union%@AE@% type is necessary here; it enables the editor to pass data in a
  4876. variety of formats. The choice of format depends on what kind of argument
  4877. the user defined.%@NL@%
  4878. %@NL@%
  4879. %@CR:MSE83509@%%@4@%The declaration of the %@AB@%ARG%@AE@% structure is:%@EH@%%@NL@%
  4880. %@NL@%
  4881.      struct argType%@NL@%
  4882.      {%@NL@%
  4883.          int   argType;%@NL@%
  4884.          union%@NL@%
  4885.          {%@NL@%
  4886.              struct  noargType      noarg;%@NL@%
  4887.              struct  textargType    textarg;%@NL@%
  4888.              struct  nullargType    nullarg;%@NL@%
  4889.              struct  lineargType    linearg;%@NL@%
  4890.              struct  streamargType  streamarg;%@NL@%
  4891.              struct  boxargType     boxarg;%@NL@%
  4892.          } arg;%@NL@%
  4893.      }%@NL@%
  4894. %@NL@%
  4895.      typedef struct argType ARG;%@NL@%
  4896. %@NL@%
  4897. %@CR:MSE8350A@%%@4@%The editor returns argument information in one of the nested structures. The%@EH@%
  4898. next section describes the contents of each of these structures and provides
  4899. examples showing how to use each data format.%@NL@%
  4900. %@NL@%
  4901. %@NL@%
  4902. %@CR:MSE84000@%%@2@%%@AB@%8.4  Programming Your Function%@AE@%%@EH@%%@NL@%
  4903. %@NL@%
  4904. %@CR:MSE84001@%%@4@%When you write an editing function, you have two basic tasks. First, you%@EH@%
  4905. interpret information that the editor passes you. Second, you call the
  4906. editor's lower-level functions to execute basic editing tasks.%@NL@%
  4907. %@NL@%
  4908. %@CR:MSE84002@%%@4@%This section focuses on the most typical class of editing functions:%@EH@%
  4909. functions that analyze the user-defined argument and modify only the current
  4910. file. This class of functions, although huge in scope, depends on only a few
  4911. lower-level functions. Once you learn how to write these functions, you can
  4912. progress to more advanced operations──such as working on several files at
  4913. once or reading keyboard input. Chapter 9%@BO:   50fea@% describes the whole range of
  4914. low-level functions available.%@NL@%
  4915. %@NL@%
  4916. %@CR:MSE84003@%%@4@%A typical editing function might execute the following sequence of steps:%@EH@%%@NL@%
  4917. %@NL@%
  4918. %@CR:MSE84004@%  1. Get a handle to the current file by calling %@AB@%FileNameToHandle%@AE@%.%@NL@%
  4919. %@NL@%
  4920.   2. Use information about the user-defined argument to initialize local%@NL@%
  4921.      variables.%@NL@%
  4922. %@NL@%
  4923.   3. Process the argument. Modify the current file by calling %@AB@%GetLine%@AE@% and%@NL@%
  4924.      %@AB@%Putline%@AE@%.%@NL@%
  4925. %@NL@%
  4926.   4. Return TRUE or FALSE.%@NL@%
  4927. %@NL@%
  4928. %@CR:MSE84005@%%@4@%The order above is recommended, but you do not have to follow it strictly.%@EH@%
  4929. You can perform Step 2 before Step 1. However, you must get a handle to the
  4930. current file before you can modify it.%@NL@%
  4931. %@NL@%
  4932. %@CR:MSE84006@%%@4@%Sections 8.4.1%@BO:   46181@%-8.4.9 discuss each step.%@EH@%%@NL@%
  4933. %@NL@%
  4934. %@NL@%
  4935. %@CR:MSE84100@%%@3@%%@AB@%8.4.1  Getting a File Handle%@AE@%%@EH@%%@NL@%
  4936. %@NL@%
  4937. %@CR:MSE84101@%%@4@%The Microsoft Editor has its own file system. A "file system" is a group of%@EH@%
  4938. integrated structures and function calls for modifying files. The editor's
  4939. file system is not compatible with that of the C library.%@NL@%
  4940. %@NL@%
  4941. %@CR:MSE84102@%%@4@%The editor has its own file-handle type, %@AB@%PFILE%@AE@%. This type, along with other%@EH@%
  4942. types needed for extensions, is defined in the include file EXT.H. For
  4943. example, you can create a file handle %@AS@%pFile%@AE@% with the declaration:%@NL@%
  4944. %@NL@%
  4945.      PFILE   pFile;%@NL@%
  4946. %@NL@%
  4947. %@CR:MSE84103@%%@4@%Usually, your editing work involves the current file; that is, the file that%@EH@%
  4948. now appears in the current editing window. Because the current file is
  4949. already open for editing, you do not need to open or initialize the current
  4950. file in any way. You simply assign the existing file handle to one of your
  4951. own variables.%@NL@%
  4952. %@NL@%
  4953. %@CR:MSE84104@%%@4@%The %@AB@%FileNameToHandle%@AE@% function returns a handle to a file that is already%@EH@%
  4954. open for editing. (More than one file may be open for editing, particularly
  4955. if the user has worked on more than one file during the editing session.)%@NL@%
  4956. %@NL@%
  4957. %@CR:MSE84105@%%@4@%To get a handle to the current file, simply pass two empty strings to the%@EH@%
  4958. function:%@NL@%
  4959. %@NL@%
  4960.      pFile = FileNameToHandle( "", "" );%@NL@%
  4961. %@NL@%
  4962. %@CR:MSE84106@%%@4@%The first argument to %@AB@%FileNameToHandle%@AE@% takes a file name. The second%@EH@%
  4963. argument takes a "short name," which is a base name the editor searches for
  4964. in its list of open files. If the first string is empty, the function
  4965. returns a handle to the current file.%@NL@%
  4966. %@NL@%
  4967. %@CR:MSE84107@%%@4@%The %@AB@%AddFile%@AE@% function is the other function that returns a file handle.%@EH@%
  4968. %@AB@%AddFile%@AE@% causes the editor to open a file for editing──either a new file or a
  4969. file that exists on disk but is not yet open for editing.%@NL@%
  4970. %@NL@%
  4971. %@CR:MSE84108@%%@4@%See Chapter 9%@BO:   50fea@% for complete information on each function.%@EH@%%@NL@%
  4972. %@NL@%
  4973. %@NL@%
  4974. %@CR:MSE84200@%%@3@%%@AB@%8.4.2  Interpreting the User-Defined Argument%@AE@%%@EH@%%@NL@%
  4975. %@NL@%
  4976. %@CR:MSE84201@%%@4@%After getting a handle to the current file, you need to interpret the%@EH@%
  4977. user-defined argument.%@NL@%
  4978. %@NL@%
  4979. %@CR:MSE84202@%%@4@%You determine the type of the user's argument by testing the value of%@EH@%
  4980. pArg->argType. If you declare a function that takes only one type of
  4981. argument, testing pArg->argType is not necessary. You know in advance what
  4982. kind of argument was given, since the editor rejects invalid arguments.
  4983. Table 8.1%@BO:   435cc@%, "Meaning of cmdTable Flags," explains how to declare what
  4984. arguments your function accepts.%@NL@%
  4985. %@NL@%
  4986. %@CR:MSE84203@%%@4@%If your function accepts more than one kind of argument, you can use either%@EH@%
  4987. if-then-else blocks or switch-case statements to evaluate the user's
  4988. argument:%@NL@%
  4989. %@NL@%
  4990.      switch( pArg->argType )%@NL@%
  4991.      {%@NL@%
  4992.         case( NULLARG ):    %@AI@%/* Take action for empty arg */%@AE@%%@NL@%
  4993.         .%@NL@%
  4994.         .%@NL@%
  4995.         .%@NL@%
  4996.         case( BOXARG ):     %@AI@%/* Take action for boxarg */%@AE@%%@NL@%
  4997.         .%@NL@%
  4998.         .%@NL@%
  4999.         .%@NL@%
  5000.         case( LINEARG ):   %@AI@%/* Take action for linearg */%@AE@%%@NL@%
  5001.         .%@NL@%
  5002.         .%@NL@%
  5003.         .%@NL@%
  5004.      }%@NL@%
  5005. %@NL@%
  5006. %@CR:MSE84204@%%@4@%The value of pArg->argType is always equal to one of six values:%@EH@%%@NL@%
  5007. %@NL@%
  5008. %@CR:MSE84205@%  ■  %@AB@%NOARG%@AE@%%@NL@%
  5009.   ■  %@AB@%NULLARG%@AE@%%@NL@%
  5010.   ■  %@AB@%TEXTARG%@AE@%%@NL@%
  5011.   ■  %@AB@%LINEARG%@AE@%%@NL@%
  5012.   ■  %@AB@%STREAMARG%@AE@%%@NL@%
  5013.   ■  %@AB@%BOXARG%@AE@%%@NL@%
  5014. %@NL@%
  5015. %@CR:MSE84206@%%@4@%The next six sections consider each of these argument types in detail,%@EH@%
  5016. giving declarations and examples for each.%@NL@%
  5017. %@NL@%
  5018. %@NL@%
  5019. %@CR:MSE84300@%%@3@%%@AB@%8.4.3  The NOARG Type%@AE@%%@EH@%%@NL@%
  5020. %@NL@%
  5021. %@CR:MSE84301@%%@4@%When pArg->argType is equal to %@AB@%NOARG%@AE@%, the editor passes information in the%@EH@%
  5022. pArg->arg.noarg structure, which has the format:%@NL@%
  5023. %@NL@%
  5024.      struct  noargType%@NL@%
  5025.      {%@NL@%
  5026.          LINE    y;   %@AI@%/* Line number of cursor */%@AE@%%@NL@%
  5027.          COL     x;   %@AI@%/* Column of cursor */%@AE@%%@NL@%
  5028.      };%@NL@%
  5029. %@NL@%
  5030. %@CR:MSE84302@%%@4@%%@AB@%Description%@AE@%%@EH@%%@NL@%
  5031. %@NL@%
  5032. %@CR:MSE84303@%%@4@%The %@AB@%NOARG%@AE@% type indicates that the user did not invoke the %@AI@%Arg%@AE@% prefix, and%@EH@%
  5033. therefore did not enter an argument. The cursor coordinates are zero-based;
  5034. in other words, the start of the file is position (0,0).%@NL@%
  5035. %@NL@%
  5036. %@CR:MSE84304@%%@4@%This argument type is possible if you declared your function with the flag%@EH@%
  5037. %@AB@%NOARG%@AE@% or %@AB@%CURSORFUNC%@AE@%.%@NL@%
  5038. %@NL@%
  5039. %@CR:MSE84305@%%@4@%%@AB@%Example%@AE@%%@EH@%%@NL@%
  5040. %@NL@%
  5041. %@CR:MSE84306@%%@4@%The following example initializes the coordinates (%@AS@%yCur%@AE@%, %@AS@%xCur%@AE@%) with the row%@EH@%
  5042. and column of the cursor position:%@NL@%
  5043. %@NL@%
  5044.      COL   xCur;%@NL@%
  5045.      LINE  yCur;%@NL@%
  5046.      .%@NL@%
  5047.      .%@NL@%
  5048.      .%@NL@%
  5049.      if( pArg->argType == NOARG )%@NL@%
  5050.      {%@NL@%
  5051.           xCur = pArg->arg.noarg.x;%@NL@%
  5052.           yCur = pArg->arg.noarg.y;%@NL@%
  5053.      }%@NL@%
  5054. %@NL@%
  5055. %@NL@%
  5056. %@CR:MSE84400@%%@3@%%@AB@%8.4.4  The NULLARG Type%@AE@%%@EH@%%@NL@%
  5057. %@NL@%
  5058. %@CR:MSE84401@%%@4@%When pArg->argType is equal to %@AB@%NULLARG%@AE@%, the editor passes information in the%@EH@%
  5059. pArg->arg.nullarg structure, which has the format:%@NL@%
  5060. %@NL@%
  5061.      struct  nullargType%@NL@%
  5062.      {%@NL@%
  5063.          int     cArg;   %@AI@%/* Number of times Arg was invoked */%@AE@%%@NL@%
  5064.          LINE    y;      %@AI@%/* Line number of cursor */%@AE@%%@NL@%
  5065.          COL     x;      %@AI@%/* Column of cursor */%@AE@%%@NL@%
  5066.      };%@NL@%
  5067. %@NL@%
  5068. %@CR:MSE84402@%%@4@%%@AB@%Description%@AE@%%@EH@%%@NL@%
  5069. %@NL@%
  5070. %@CR:MSE84403@%%@4@%The %@AB@%NULLARG%@AE@% type indicates that the user invoked the %@AI@%Arg%@AE@% prefix but did not%@EH@%
  5071. enter an argument. The argument is therefore empty, or null. The cursor
  5072. coordinates are zero-based; in other words, the start of the file is
  5073. position (0,0).%@NL@%
  5074. %@NL@%
  5075. %@CR:MSE84404@%%@4@%This argument type is possible if you declared your function with the flag%@EH@%
  5076. %@AB@%NULLARG%@AE@%.%@NL@%
  5077. %@NL@%
  5078. %@CR:MSE84405@%%@4@%%@AB@%Example%@AE@%%@EH@%%@NL@%
  5079. %@NL@%
  5080. %@CR:MSE84406@%%@4@%The following example initializes the coordinates (%@AS@%yCur%@AE@%, %@AS@%xCur%@AE@%) with the row%@EH@%
  5081. and column of the cursor position, and sets %@AS@%cArg%@AE@% equal to the number of
  5082. times that the user invoked the %@AI@%Arg%@AE@% prefix:%@NL@%
  5083. %@NL@%
  5084.      COL   xCur;%@NL@%
  5085.      LINE  yCur;%@NL@%
  5086.      int   cArg;%@NL@%
  5087.      .%@NL@%
  5088.      .%@NL@%
  5089.      .%@NL@%
  5090.      if( pArg->argType == NULLARG )%@NL@%
  5091.      {%@NL@%
  5092.           xCur = pArg->arg.nullarg.x;%@NL@%
  5093.           yCur = pArg->arg.nullarg.y;%@NL@%
  5094.           cArg = pArg->arg.nullarg.cArg;%@NL@%
  5095.      }%@NL@%
  5096. %@NL@%
  5097. %@NL@%
  5098. %@CR:MSE84500@%%@3@%%@AB@%8.4.5  The TEXTARG Type%@AE@%%@EH@%%@NL@%
  5099. %@NL@%
  5100. %@CR:MSE84501@%%@4@%When pArg->argType is equal to %@AB@%TEXTARG%@AE@%, the editor passes information in the%@EH@%
  5101. pArg->arg.textarg structure, which has the format:%@NL@%
  5102. %@NL@%
  5103.      struct  textargType%@NL@%
  5104.      {%@NL@%
  5105.          int     cArg;   %@AI@%/* Number of times Arg was invoked */%@AE@%%@NL@%
  5106.          LINE    y;      %@AI@%/* Line number of cursor */%@AE@%%@NL@%
  5107.          COL     x;      %@AI@%/* Column of cursor */%@AE@%%@NL@%
  5108.          char far *pText %@AI@%/* Pointer to textarg string */%@AE@%%@NL@%
  5109.      };%@NL@%
  5110. %@NL@%
  5111. %@CR:MSE84502@%%@4@%%@AB@%Description%@AE@%%@EH@%%@NL@%
  5112. %@NL@%
  5113. %@CR:MSE84503@%%@4@%The %@AB@%TEXTARG%@AE@% type indicates that the user's argument defined a string of%@EH@%
  5114. text. The cursor coordinates are zero-based, and %@AS@%pText%@AE@% points to a
  5115. null-terminated string.%@NL@%
  5116. %@NL@%
  5117. %@CR:MSE84504@%%@4@%This argument type is possible if you declared your function with the flag%@EH@%
  5118. %@AB@%TEXTARG%@AE@%, %@AB@%BOXSTR%@AE@%, %@AB@%NULLEOL%@AE@%, or %@AB@%NULLEOW%@AE@%. Each of these argument types selects a
  5119. string of text in a different way (for example, %@AB@%BOXSTR%@AE@% uses a
  5120. cursor-movement argument); however, the format used for all these cases is
  5121. the same.%@NL@%
  5122. %@NL@%
  5123. %@CR:MSE84505@%%@4@%%@AB@%Example%@AE@%%@EH@%%@NL@%
  5124. %@NL@%
  5125. %@CR:MSE84506@%%@4@%The following example initializes the coordinates (%@AS@%yCur%@AE@%, %@AS@%xCur%@AE@%) with the row%@EH@%
  5126. and column of the cursor position, and sets %@AS@%cArg%@AE@% equal to the number of
  5127. times that the user invoked the %@AI@%Arg%@AE@% prefix. Finally, the user-defined
  5128. %@AI@%textarg%@AE@% is copied into the character array %@AS@%buf%@AE@%.%@NL@%
  5129. %@NL@%
  5130.      COL   xCur;%@NL@%
  5131.      LINE  yCur;%@NL@%
  5132.      int   cArg;%@NL@%
  5133.      char  buf[BUFLEN]; .%@NL@%
  5134.      .%@NL@%
  5135.      .%@NL@%
  5136.      if( pArg->argType == TEXTARG )%@NL@%
  5137.      {%@NL@%
  5138.           xCur = pArg->arg.textarg.x;%@NL@%
  5139.           yCur = pArg->arg.textarg.y;%@NL@%
  5140.           cArg = pArg->arg.textarg.cArg;%@NL@%
  5141.           strcpy (buf, pArg->arg.textarg.pText);%@NL@%
  5142.      }%@NL@%
  5143. %@NL@%
  5144. %@NL@%
  5145. %@CR:MSE84600@%%@3@%%@AB@%8.4.6  The LINEARG Type%@AE@%%@EH@%%@NL@%
  5146. %@NL@%
  5147. %@CR:MSE84601@%%@4@%When pArg->argType is equal to %@AB@%LINEARG%@AE@%, the editor passes information in the%@EH@%
  5148. pArg->arg.linearg structure, which has the format:%@NL@%
  5149. %@NL@%
  5150.      struct  lineargType%@NL@%
  5151.      {%@NL@%
  5152.          int     cArg;   %@AI@%/* Number of times Arg was invoked */%@AE@%%@NL@%
  5153.          LINE    yStart; %@AI@%/* Line number of first line */%@AE@%%@NL@%
  5154.          LINE    yEnd;   %@AI@%/* Line number of last line */%@AE@%%@NL@%
  5155.      };%@NL@%
  5156. %@NL@%
  5157. %@CR:MSE84602@%%@4@%%@AB@%Description%@AE@%%@EH@%%@NL@%
  5158. %@NL@%
  5159. %@CR:MSE84603@%%@4@%The %@AB@%LINEARG%@AE@% type indicates that the user defined a range of lines by%@EH@%
  5160. aligning the cursor and arg position in the same column but different rows.
  5161. The range of lines includes %@AS@%yStart%@AE@% and %@AS@%yEnd%@AE@%, as well as all lines in
  5162. between. Line numbers are zero-based, so that line 0 is the first line in
  5163. the file.%@NL@%
  5164. %@NL@%
  5165. %@CR:MSE84604@%%@4@%This argument type is possible if you declared your function with the flag%@EH@%
  5166. %@AB@%LINEARG%@AE@%.%@NL@%
  5167. %@NL@%
  5168. %@CR:MSE84605@%%@4@%%@AB@%Example%@AE@%%@EH@%%@NL@%
  5169. %@NL@%
  5170. %@CR:MSE84606@%%@4@%The following example sets %@AS@%cArg%@AE@% equal to the number of times that the user%@EH@%
  5171. invoked the %@AI@%Arg%@AE@% prefix, and sets %@AS@%yStart%@AE@% and %@AS@%yEnd%@AE@% equal to the line numbers
  5172. of the first and last lines:%@NL@%
  5173. %@NL@%
  5174.      int   cArg;%@NL@%
  5175.      LINE  yStart;%@NL@%
  5176.      LINE  yEnd;%@NL@%
  5177.      .%@NL@%
  5178.      .%@NL@%
  5179.      .%@NL@%
  5180.      if( pArg->argType == LINEARG )%@NL@%
  5181.      {%@NL@%
  5182.           cArg   = pArg->arg.linearg.cArg;%@NL@%
  5183.           yStart = pArg->arg.linearg.yStart;%@NL@%
  5184.           yEnd   = pArg->arg.linearg.yEnd;%@NL@%
  5185.      }%@NL@%
  5186. %@NL@%
  5187. %@NL@%
  5188. %@CR:MSE84700@%%@3@%%@AB@%8.4.7  The STREAMARG Type%@AE@%%@EH@%%@NL@%
  5189. %@NL@%
  5190. %@CR:MSE84701@%%@4@%When pArg->argType is equal to %@AB@%STREAMARG%@AE@%, the editor passes information in%@EH@%
  5191. the pArg->arg.linearg structure, which has the format:%@NL@%
  5192. %@NL@%
  5193.      struct streamargType%@NL@%
  5194.      {%@NL@%
  5195.          int   cArg;     %@AI@%/* Number of times Arg was invoked */%@AE@%%@NL@%
  5196.          LINE  yStart;   %@AI@%/* Coordinates of first byte in */%@AE@%%@NL@%
  5197.          COL   xStart;   %@AI@%/*   the stream of text */%@AE@%%@NL@%
  5198.          LINE  yEnd;     %@AI@%/* Coordinates of byte just after */%@AE@%%@NL@%
  5199.          COL   xEnd;     %@AI@%/*   the last byte of the stream */%@AE@%%@NL@%
  5200.      };%@NL@%
  5201. %@NL@%
  5202. %@CR:MSE84702@%%@4@%%@AB@%Description%@AE@%%@EH@%%@NL@%
  5203. %@NL@%
  5204. %@CR:MSE84703@%%@4@%The %@AB@%STREAMARG%@AE@% type indicates that the user defined a cursor-movement%@EH@%
  5205. argument, which the function interprets as a stream of text rather than as a
  5206. %@AI@%boxarg%@AE@% or %@AI@%linearg%@AE@%. The stream of text includes %@AS@%yStart%@AE@% and %@AS@%xStart%@AE@% but not
  5207. %@AS@%yEnd%@AE@% and %@AS@%xEnd%@AE@%, which gives the location of the character just to the right
  5208. of the last character in the stream.%@NL@%
  5209. %@NL@%
  5210. %@CR:MSE84704@%%@4@%This argument type is possible if you declared your function with the flag%@EH@%
  5211. %@AB@%STREAMARG%@AE@%.%@NL@%
  5212. %@NL@%
  5213. %@CR:MSE84705@%%@4@%%@AB@%Example%@AE@%%@EH@%%@NL@%
  5214. %@NL@%
  5215. %@CR:MSE84706@%%@4@%The following example sets %@AS@%cArg%@AE@% equal to the number of times that the user%@EH@%
  5216. invoked the %@AI@%Arg%@AE@% prefix. Then the example initializes variables for the
  5217. beginning and end of the stream.%@NL@%
  5218. %@NL@%
  5219.      int   cArg;%@NL@%
  5220.      LINE  yStart;%@NL@%
  5221.      COL   xStart;%@NL@%
  5222.      LINE  yEnd;%@NL@%
  5223.      COL   xEnd;%@NL@%
  5224.      .%@NL@%
  5225.      .%@NL@%
  5226.      .%@NL@%
  5227.      if( pArg-argType == LINEARG )%@NL@%
  5228.      {%@NL@%
  5229.           cArg   = pArg->arg.streamarg.cArg;%@NL@%
  5230.           yStart = pArg->arg.streamarg.yStart;%@NL@%
  5231.           xStart = pArg->arg.streamarg.xStart;%@NL@%
  5232.           yEnd   = pArg->arg.streamarg.yEnd;%@NL@%
  5233.           xEnd   = pArg->arg.streamarg.xEnd;%@NL@%
  5234.      }%@NL@%
  5235. %@NL@%
  5236. %@NL@%
  5237. %@CR:MSE84800@%%@3@%%@AB@%8.4.8  The BOXARG Type%@AE@%%@EH@%%@NL@%
  5238. %@NL@%
  5239. %@CR:MSE84801@%%@4@%When pArg->argType is equal to %@AB@%BOXARG%@AE@%, the editor passes information in the%@EH@%
  5240. pArg->arg.boxarg structure, which has the format:%@NL@%
  5241. %@NL@%
  5242.      struct  boxargType%@NL@%
  5243.      {%@NL@%
  5244.          int     cArg;        %@AI@%/* Number of times Arg was invoked */%@AE@%%@NL@%
  5245.          LINE    yTop;        %@AI@%/* Line number of first line */%@AE@%%@NL@%
  5246.          LINE    yBottom;     %@AI@%/* Line number of last line */%@AE@%%@NL@%
  5247.          COL     xLeft;       %@AI@%/* Leftmost column in box */%@AE@%%@NL@%
  5248.          COL     xRight;      %@AI@%/* Rightmost column in box */%@AE@%%@NL@%
  5249.      };%@NL@%
  5250. %@NL@%
  5251. %@CR:MSE84802@%%@4@%%@AB@%Description%@AE@%%@EH@%%@NL@%
  5252. %@NL@%
  5253. %@CR:MSE84803@%%@4@%The %@AB@%BOXARG%@AE@% type indicates that the user defined a rectangular area on the%@EH@%
  5254. screen. Row and column numbers are zero-based; in other words, the start of
  5255. the file is position (0,0). The lines and column edges, %@AS@%yTop%@AE@%, %@AS@%yBottom%@AE@%,
  5256. %@AS@%xLeft%@AE@%, and %@AS@%xRight%@AE@%, are all included in the area itself.%@NL@%
  5257. %@NL@%
  5258. %@CR:MSE84804@%%@4@%This argument type is possible if you declared your function with the flag %@EH@%
  5259. %@AB@%BOXARG%@AE@%.%@NL@%
  5260. %@NL@%
  5261. %@CR:MSE84805@%%@4@%%@AB@%Example%@AE@%%@EH@%%@NL@%
  5262. %@NL@%
  5263. %@CR:MSE84806@%%@4@%The following example sets %@AS@%cArg%@AE@% equal to the number of times that the user%@EH@%
  5264. invoked the %@AI@%Arg%@AE@% prefix. Then the example initializes variables for the four
  5265. borders of the box.%@NL@%
  5266. %@NL@%
  5267.      int   cArg;%@NL@%
  5268.      LINE  yTop;%@NL@%
  5269.      LINE  yBottom;%@NL@%
  5270.      COL   xLeft;%@NL@%
  5271.      COL   xRight;%@NL@%
  5272.      .%@NL@%
  5273.      .%@NL@%
  5274.      .%@NL@%
  5275.      if( pArg-argType == LINEARG )%@NL@%
  5276.      {%@NL@%
  5277.           cArg    = pArg->arg.boxarg.cArg;%@NL@%
  5278.           yTop    = pArg->arg.boxarg.yTop;%@NL@%
  5279.           yBottom = pArg->arg.boxarg.yBottom;%@NL@%
  5280.           xLeft   = pArg->arg.boxarg.xLeft;%@NL@%
  5281.           xRight  = pArg->arg.boxarg.xRight;%@NL@%
  5282.      }%@NL@%
  5283. %@NL@%
  5284. %@NL@%
  5285. %@CR:MSE84900@%%@3@%%@AB@%8.4.9  Modifying the Current File%@AE@%%@EH@%%@NL@%
  5286. %@NL@%
  5287. %@CR:MSE84901@%%@4@%This section deals with the core of an editing function──reading and%@EH@%
  5288. altering the file.%@NL@%
  5289. %@NL@%
  5290. %@CR:MSE84902@%%@4@%After you have analyzed the user's argument and got a handle to the current%@EH@%
  5291. file, you are ready to work on the file. At this stage, two functions are
  5292. most relevant: %@AB@%GetLine%@AE@% and %@AB@%Putline%@AE@%.%@NL@%
  5293. %@NL@%
  5294. %@CR:MSE84903@%%@4@%The %@AB@%GetLine%@AE@% function reads one line from the file:%@EH@%%@NL@%
  5295. %@NL@%
  5296.      len = GetLine (yStart, buffer, pFile);%@NL@%
  5297. %@NL@%
  5298. %@CR:MSE84904@%%@4@%The first argument is a line number, the second a pointer to a buffer, and%@EH@%
  5299. the third a file handle. With extension functions, line numbers are
  5300. consistently indexed (they are all zero-based so that the first line in the
  5301. file is numbered 0), so you can use a line number previously passed by the
  5302. editor. The buffer is a previously declared string of characters. %@AB@%GetLine%@AE@%
  5303. fills this string with characters and a terminating null byte. Since you are
  5304. working on the current file, pass the file handle you received when you
  5305. called %@AB@%FileNameToHandle%@AE@%.%@NL@%
  5306. %@NL@%
  5307. %@CR:MSE84905@%%@4@%Finally, %@AB@%GetLine%@AE@% returns the length of the line copied.%@EH@%%@NL@%
  5308. %@NL@%
  5309. %@CR:MSE84906@%%@4@%The %@AB@%PutLine%@AE@% function is the flip side of %@AB@%GetLine%@AE@% and takes almost exactly%@EH@%
  5310. the same arguments:%@NL@%
  5311. %@NL@%
  5312.      PutLine (yStart, buffer, pFile);%@NL@%
  5313. %@NL@%
  5314. %@CR:MSE84907@%%@4@%The first argument is a zero-based line number. The second argument points%@EH@%
  5315. to a buffer containing text that you want to write to the file. The third
  5316. argument is a file handle. Again, you can use a handle to the current file.%@NL@%
  5317. %@NL@%
  5318. %@CR:MSE84908@%%@4@%Both %@AB@%GetLine%@AE@% and %@AB@%PutLine%@AE@% deal with null-terminated strings. You should not%@EH@%
  5319. add a new-line character to the string you pass to %@AB@%PutLine%@AE@%. The editor adds
  5320. or strips new-line characters as appropriate.%@NL@%
  5321. %@NL@%
  5322. %@CR:MSE84909@%%@4@%The following section of code demonstrates the use of %@AB@%GetLine%@AE@% and %@AB@%PutLine%@AE@% in%@EH@%
  5323. a loop that numbers the lines %@AS@%yStart%@AE@% to %@AS@%yEnd%@AE@%:%@NL@%
  5324. %@NL@%
  5325.      for( curLine = yStart, i = 1; curLine <= yEnd; curLine++, i++ )%@NL@%
  5326.      {%@NL@%
  5327.          GetLine( curLine, buffer, pFile ); %@AI@%/* Get line */%@AE@%%@NL@%
  5328. %@NL@%
  5329.          itoa( i, digits, 10 );             %@AI@%/* Convert i to digit string */%@AE@%%@NL@%
  5330.          strcat( digits, ". " );%@NL@%
  5331.          strcat( digits, buffer );          %@AI@%/* Prefix buffer with digits */%@AE@%%@NL@%
  5332. %@NL@%
  5333.          PutLine( curLine, digits, pFile ); %@AI@%/* Put line back */%@AE@%%@NL@%
  5334.      }%@NL@%
  5335. %@NL@%
  5336. %@NL@%
  5337. %@CR:MSE85000@%%@2@%%@AB@%8.5  Compiling and Linking%@AE@%%@EH@%%@NL@%
  5338. %@NL@%
  5339. %@CR:MSE85001@%%@4@%After writing your C module, you're ready to compile and link. The%@EH@%
  5340. procedures for compiling and linking in protected mode are slightly
  5341. different from compiling and linking in real mode. Sections 8.5.1%@BO:   4ab20@% and
  5342. 8.5.2%@BO:   4b1b6@% consider both environments.%@NL@%
  5343. %@NL@%
  5344. ───────────────────────────────────────────────────────────────────────────%@NL@%
  5345. %@AI@%NOTE%@AE@%%@NL@%
  5346.    If you created C-extension modules for Version 1.0 of the Microsoft%@NL@%
  5347.    Editor, you do not have to recompile or relink your C extensions.%@NL@%
  5348.    However, if you do recompile your extensions, make sure that you use the%@NL@%
  5349.    new version of the EXT.H include file.%@NL@%
  5350. ───────────────────────────────────────────────────────────────────────────%@NL@%
  5351. %@NL@%
  5352. %@NL@%
  5353. %@CR:MSE85100@%%@3@%%@AB@%8.5.1  Compiling and Linking for Real Mode%@AE@%%@EH@%%@NL@%
  5354. %@NL@%
  5355. %@CR:MSE85101@%%@4@%To create a C extension for real mode (DOS or the OS/2 3.%@AI@%x%@AE@% compability box),%@EH@%
  5356. follow these steps:%@NL@%
  5357. %@NL@%
  5358. %@CR:MSE85102@%  1. Compile with command line options /Gs and /Asfu. These mandatory%@NL@%
  5359.      options establish the proper memory model and calling convention. (If%@NL@%
  5360.      you are programming in the Microsoft Macro Assembler (MASM), use near%@NL@%
  5361.      code and far data segments, in which SS is not assumed equal to DS.)%@NL@%
  5362.      For example:%@NL@%
  5363. %@NL@%
  5364.          %@AS@%CL /c /Gs /Asfu myext.c%@AE@%%@NL@%
  5365. %@NL@%
  5366.   2. Link the file EXTHDR.OBJ to your extension. The EXTHDR.OBJ file must be%@NL@%
  5367.      the first object module on the command line:%@NL@%
  5368. %@NL@%
  5369.          %@AS@%CL /AC /Femyext.mxt exthdr myext%@AE@%%@NL@%
  5370. %@NL@%
  5371.      Use the /AC option if your extension calls C library functions. The /AC%@NL@%
  5372.      option directs the linker to use the compact-model library.%@NL@%
  5373. %@NL@%
  5374. ───────────────────────────────────────────────────────────────────────────%@NL@%
  5375. %@AI@%IMPORTANT%@AE@%%@NL@%
  5376.    Strictly speaking, the .MXT file extension is not required; the editor%@NL@%
  5377.    can load modules with any file extension name. However, using a file%@NL@%
  5378.    extension of .MXT is strongly recommended so that your extensions are not%@NL@%
  5379.    confused with true executable (.EXE) files, which can be run directly%@NL@%
  5380.    from DOS. Trying to execute an extension as if it were an .EXE file will%@NL@%
  5381.    bring the system to its knees.%@NL@%
  5382. ───────────────────────────────────────────────────────────────────────────%@NL@%
  5383. %@NL@%
  5384. %@NL@%
  5385. %@CR:MSE85200@%%@3@%%@AB@%8.5.2  Compiling and Linking for Protected Mode%@AE@%%@EH@%%@NL@%
  5386. %@NL@%
  5387. %@CR:MSE85201@%%@4@%To create a C extension for protected mode, follow these steps:%@EH@%%@NL@%
  5388. %@NL@%
  5389. %@CR:MSE85202@%  1. Compile with command-line options /Gs and /Asfu. These mandatory%@NL@%
  5390.      options establish the proper memory model and calling convention. (If%@NL@%
  5391.      you are programming in MASM, use near code and far data segments in%@NL@%
  5392.      which SS is not assumed equal to DS.) For example:%@NL@%
  5393. %@NL@%
  5394.           %@AS@%CL /c /Gs /Asfu myext.c%@AE@%%@NL@%
  5395. %@NL@%
  5396.      The same object module can be used for both real and protected mode, so%@NL@%
  5397.      you do not have to recompile if you want an extension for both modes.%@NL@%
  5398.      However, you do have to relink, as explained below.%@NL@%
  5399. %@NL@%
  5400.   2. Link with the file EXTHDRP.OBJ to your extension along with a%@NL@%
  5401.      module-definitions file. The EXTHDRP.OBJ file must be the first object%@NL@%
  5402.      module on the command line:%@NL@%
  5403. %@NL@%
  5404.           %@AS@%LINK /NOI exthdrp myext, myext.dll,, doscalls, myext.def;%@AE@%%@NL@%
  5405. %@NL@%
  5406.      If your extension calls C library functions, link in the compact-model%@NL@%
  5407.      library. Link with the /NOI option, since the OS/2 loader is%@NL@%
  5408.      case-sensitive.%@NL@%
  5409. %@NL@%
  5410. %@CR:MSE85203@%%@4@%The file MYEXT.DEF can be created by copying the file SKEL.DEF (provided%@EH@%
  5411. with the editor). No modification is necessary. You can also link with
  5412. SKEL.DEF itself.%@NL@%
  5413. %@NL@%
  5414. %@NL@%
  5415. %@CR:MSE85300@%%@3@%%@AB@%8.5.3  Loading Your Extension%@AE@%%@EH@%%@NL@%
  5416. %@NL@%
  5417. %@CR:MSE85301@%%@4@%Compiling and linking your module with the correct options produces an .MXT%@EH@%
  5418. file (for real mode) or a .DLL file (for OS/2 protected mode) the editor can
  5419. load and execute on demand.%@NL@%
  5420. %@NL@%
  5421. %@CR:MSE85302@%%@4@%To use a real-mode extension, set the %@AB@%load%@AE@% switch with the full path name%@EH@%
  5422. for your C extension. For example, after you have created the file
  5423. MYEXT.MXT, you could place the following statement in the TOOLS.INI file:%@NL@%
  5424. %@NL@%
  5425.      load:%@AI@%path%@AE@%\myext.mxt%@NL@%
  5426. %@NL@%
  5427. %@CR:MSE85303@%%@4@%in which %@AI@%path%@AE@% is the location of the extension. The editor responds by%@EH@%
  5428. automatically loading your C-extension module into memory upon start-up. You
  5429. can also set the %@AB@%load%@AE@% switch with the %@AI@%Assign%@AE@% command.%@NL@%
  5430. %@NL@%
  5431. ───────────────────────────────────────────────────────────────────────────%@NL@%
  5432. %@AI@%NOTE%@AE@%%@NL@%
  5433.    The load switch can be assigned a number of times, each assignment%@NL@%
  5434.    causing the editor to load another extension. All of the extensions%@NL@%
  5435.    reside in memory together; no extension is removed from memory until the%@NL@%
  5436.    editor terminates.%@NL@%
  5437. ───────────────────────────────────────────────────────────────────────────%@NL@%
  5438. %@NL@%
  5439. %@CR:MSE85304@%%@4@%The load switch can accept an environment variable as described in Section%@EH@%
  5440. 7.3%@BO:   3a7a5@%, "Special Syntax for Text Switches."%@NL@%
  5441. %@NL@%
  5442. %@CR:MSE85305@%%@4@%To use a protected-mode extension, place your .DLL file in a directory%@EH@%
  5443. specified in the LIBPATH variable. You can set the load switch in the same
  5444. way described above; however, when running under protected mode, the editor
  5445. ignores the %@AI@%path%@AE@% and the file extension. Therefore, for protected-mode-only
  5446. extensions, the only declaration you need is the following:%@NL@%
  5447. %@NL@%
  5448.      load:myext%@NL@%
  5449. %@NL@%
  5450. %@CR:MSE85306@%%@4@%To load an extension for both real and protected modes, follow these steps:%@EH@%%@NL@%
  5451. %@NL@%
  5452. %@CR:MSE85307@%  1. Compile the source file once.%@NL@%
  5453. %@NL@%
  5454.   2. Link two times, once for real mode and once for protected mode.%@NL@%
  5455. %@NL@%
  5456.   3. Place the protected-mode module (a .DLL file) in a LIBPATH directory.%@NL@%
  5457. %@NL@%
  5458.   4. Use the real-mode %@AB@%load%@AE@% setting. The editor uses the full text of the%@NL@%
  5459.      switch setting when in real mode, but ignores the path and file%@NL@%
  5460.      extension when in protected mode.%@NL@%
  5461. %@NL@%
  5462. %@CR:MSE85308@%%@4@%Whenever the editor successfully loads an extension, it checks the TOOLS.INI%@EH@%
  5463. file for the tag%@NL@%
  5464. %@NL@%
  5465.      %@AB@%[M-%@AE@%%@AI@%mxt%@AE@%%@AB@%]%@AE@%%@NL@%
  5466. %@NL@%
  5467. %@CR:MSE8530A@%%@4@%in which %@AI@%mxt%@AE@% is the base name of the extension. If the tag exists, the%@EH@%
  5468. editor recognizes the settings immediately following the tag.%@NL@%
  5469. %@NL@%
  5470. %@CR:MSE85310@%%@4@%%@AB@%Special Considerations for OS/2%@AE@%%@EH@%%@NL@%
  5471. %@NL@%
  5472. %@CR:MSE85311@%%@4@%Under OS/2 Version 1.1 and later, protected-mode editor extensions may have%@EH@%
  5473. file extensions other than .DLL and may be placed in directories other than
  5474. those specified in LIBPATH. The editor searches for the extensions specified
  5475. in the %@AB@%load%@AE@% statement in the following sequence:%@NL@%
  5476. %@NL@%
  5477. %@CR:MSE85312@%  1. If an environment variable or a full path is specified, the editor%@NL@%
  5478.      searches the appropriate directories, as in the following examples:%@NL@%
  5479. %@NL@%
  5480.          load:$LIB:yourext.mxt%@NL@%
  5481. %@NL@%
  5482.          load:drive:\dir\ yourext.mxt%@NL@%
  5483. %@NL@%
  5484.      The editor searches the current directory if there is no environment%@NL@%
  5485.      variable or full-path specification.%@NL@%
  5486. %@NL@%
  5487.   2. If the desired extension is not found, and its name is only a base name%@NL@%
  5488.      without a file extension, the editor appends the appropriate file%@NL@%
  5489.      extension (.MXT for real mode, .PXT for protected mode) and repeats%@NL@%
  5490.      Step 1.%@NL@%
  5491. %@NL@%
  5492.   3. If the editor extension still cannot be located, the editor searches%@NL@%
  5493.      for %@AI@%basename%@AE@%.DLL in the directories specified in LIBPATH, where%@NL@%
  5494.      %@AI@%basename%@AE@% is the base name of the extension.%@NL@%
  5495. %@NL@%
  5496. %@CR:MSE85313@%%@4@%In real mode (DOS or the OS/2 3.%@AI@%x%@AE@% compatibility box), only Steps 1 and 2 are%@EH@%
  5497. preformed. Under OS/2 Version 1.0, only Step 3 is performed.%@NL@%
  5498. %@NL@%
  5499. %@CR:MSE85314@%%@4@%Within TOOLS.INI tag declarations, only the base name is significant, not%@EH@%
  5500. the file extension. For example, the statements following%@NL@%
  5501. %@NL@%
  5502.      [M-YOUREXT]%@NL@%
  5503. %@NL@%
  5504. %@CR:MSE85315@%%@4@%would always be used, regardless of the file extension that was used to%@EH@%
  5505. locate YOUREXT.%@NL@%
  5506. %@NL@%
  5507. %@CR:MSE85316@%%@4@%The "autoload" feature automatically loads extensions without a %@AB@%load%@AE@%%@EH@%
  5508. statement in TOOLS.INI. The editor searches the directories in the PATH
  5509. environment variable for file names with the following patterns, and loads
  5510. as many of them as it finds:%@NL@%
  5511. %@NL@%
  5512. %@CR:MSE85317@%%@AB@%Operating System            Extension Autoloaded%@AE@%%@NL@%
  5513. %@NL@%
  5514. DOS or OS/2 real mode       M*.MXT%@NL@%
  5515. %@NL@%
  5516. OS/2 protected mode         M*.PXT%@NL@%
  5517. %@NL@%
  5518. %@CR:MSE85318@%%@4@%The file names for the on-line Help extensions supplied with this version of%@EH@%
  5519. the Microsoft Editor have the correct form for autoloading. Therefore, they
  5520. only need to be placed in any directory in the PATH environment variable;
  5521. you do not have to add a %@AB@%load%@AE@% statement to TOOLS.INI.%@NL@%
  5522. %@NL@%
  5523. %@CR:MSE85319@%%@4@%Autoloading occurs after TOOLS.INI has been read, so any extension-specific%@EH@%
  5524. sections still take effect.%@NL@%
  5525. %@NL@%
  5526. ───────────────────────────────────────────────────────────────────────────%@NL@%
  5527. %@AI@%NOTE%@AE@%%@NL@%
  5528.    Autoloading does not work under OS/2 Version 1.0.%@NL@%
  5529. ───────────────────────────────────────────────────────────────────────────%@NL@%
  5530. %@NL@%
  5531. %@CR:MSE8531A@%%@4@%You can load extensions in both real and protected mode by using a single%@EH@%
  5532. %@AB@%load%@AE@% statement of the following form:%@NL@%
  5533. %@NL@%
  5534.      load:$PATH:%@AI@%basename%@AE@%%@NL@%
  5535. %@NL@%
  5536. %@CR:MSE8531B@%%@4@%The extensions must have the same %@AI@%basename%@AE@% and the default extension (.MXT%@EH@%
  5537. for DOS or OS/2 real mode, .PXT for OS/2 protected mode) for the appropriate
  5538. operating system. The extensions can go anywhere in the specified path.
  5539. Since the file extension is omitted in this %@AB@%load%@AE@% statement, the editor will
  5540. append the appropriate extension to %@AI@%basename%@AE@% (be sure the name has no
  5541. trailing period) and load the correct file.%@NL@%
  5542. %@NL@%
  5543. %@CR:MSE8531C@%%@4@%You can also give your extension a name of the form M*.MXT or M*.PXT%@EH@%
  5544. (according to the operating system). The extension will be autoloaded
  5545. without requiring a %@AB@%load%@AE@% statement in TOOLS.INI. It is also possible to
  5546. specify the editor extension for one mode in a %@AB@%load%@AE@% statement, while giving
  5547. the extension for the other mode an autoload default name.%@NL@%
  5548. %@NL@%
  5549. %@NL@%
  5550. %@CR:MSE86000@%%@2@%%@AB@%8.6  A C-Extension Sample Program%@AE@%%@EH@%%@NL@%
  5551. %@NL@%
  5552. %@CR:MSE86001@%%@4@%The following C-extension sample program features a function named %@AS@%tglcase%@AE@%.%@EH@%
  5553. This function converts uppercase letters to lowercase, and lowercase letters
  5554. to uppercase. It acts on the file according to the argument type:%@NL@%
  5555. %@NL@%
  5556. %@CR:MSE86002@%%@AB@%Argument                    Effect%@AE@%%@NL@%
  5557. %@NL@%
  5558. %@AB@%NOARG%@AE@%                       Acts on entire current line.%@NL@%
  5559. %@NL@%
  5560. %@AB@%NULLARG%@AE@%                     Acts on current line, from the cursor position%@NL@%
  5561.                             (inclusive) up to the end of the line.%@NL@%
  5562. %@NL@%
  5563. %@AB@%BOXARG%@AE@%                      Acts on the highlighted region.%@NL@%
  5564. %@NL@%
  5565. %@AB@%LINEARG%@AE@%                     Acts on the highlighted region (containing a%@NL@%
  5566.                             range of complete lines).%@NL@%
  5567. %@NL@%
  5568. %@AB@%TEXTARG%@AE@%                     Argument not accepted.%@NL@%
  5569. %@NL@%
  5570. %@AB@%STREAMARG%@AE@%                   Not recognized. The argument is treated as %@AB@%%@AE@%%@NL@%
  5571.                             %@AB@%BOXARG%@AE@% or %@AB@%LINEARG%@AE@%.%@NL@%
  5572. %@NL@%
  5573. %@CR:MSE86003@%%@4@%In each case, the function responds to the argument by initializing the%@EH@%
  5574. limits of an imaginary box. In the case of a %@AB@%LINEARG%@AE@%, the column limits are
  5575. set at 0 and BUFLEN (the maximum length of a text line in M). %@AB@%NOARG%@AE@% and
  5576. %@AB@%NULLARG%@AE@% are handled in a similar fashion. Once the limits of the area are
  5577. initialized, one small section of code does the actual work. This section
  5578. calls %@AB@%GetLine%@AE@% and %@AB@%PutLine%@AE@% repeatedly to read and replace lines in the
  5579. current file.%@NL@%
  5580. %@NL@%
  5581. %@CR:MSE86004@%%@4@%This extension calls C library functions. To successfully link this%@EH@%
  5582. extension, include the compact-model library.%@NL@%
  5583. %@NL@%
  5584.      %@AI@%/*** tglcase.c - case toggling editor extension%@AE@%%@NL@%
  5585.      %@AI@%*/%@AE@%%@NL@%
  5586.      #define ID      " tglcase ver 1.00 "##__DATE__##" "##__TIME__%@NL@%
  5587.      #define NULL    ((void *) 0)%@NL@%
  5588. %@NL@%
  5589.      #include <stdlib.h>                     %@AI@%/* min macro definition */%@AE@%%@NL@%
  5590.      #include <string.h>                     %@AI@%/* prototypes for string fcns*/%@AE@%%@NL@%
  5591.      #include "ext.h"%@NL@%
  5592.      %@AI@%/*%@AE@%%@NL@%
  5593.      %@AI@%** Internal function prototypes%@AE@%%@NL@%
  5594.      %@AI@%*/%@AE@%%@NL@%
  5595.      void     pascal          id         (char *);%@NL@%
  5596.      void     WhenLoaded (void);%@NL@%
  5597.      flagType pascal EXPORT tglcase    (unsigned int, ARG far *, flagType);%@NL@%
  5598. %@NL@%
  5599.      %@AI@%/********************************************************************%@AE@%%@NL@%
  5600.      %@AI@%**%@AE@%%@NL@%
  5601.      %@AI@%** tglcase%@AE@%%@NL@%
  5602.      %@AI@%** Toggle the case of alphabetics contained within the selected argument:%@AE@%%@NL@%
  5603.      %@AI@%**%@AE@%%@NL@%
  5604.      %@AI@%**  NOARG       - Toggle case of entire current line%@AE@%%@NL@%
  5605.      %@AI@%**  NULLARG     - Toggle case of current line from cursor to end of line%@AE@%%@NL@%
  5606.      %@AI@%**  LINEARG     - Toggle case of range of lines%@AE@%%@NL@%
  5607.      %@AI@%**  BOXARG      - Toggle case of characters with the selected box%@AE@%%@NL@%
  5608.      %@AI@%**  NUMARG      - Converted to LINEARG before extension is called%@AE@%%@NL@%
  5609.      %@AI@%**  MARKARG     - Converted to Appropriate ARG form above before extension is%@AE@%%@NL@%
  5610.      %@AI@%**                called%@AE@%%@NL@%
  5611.      %@AI@%**%@AE@%%@NL@%
  5612.      %@AI@%**  STREAMARG   - Not Allowed; treated as BOXARG%@AE@%%@NL@%
  5613.      %@AI@%**  TEXTARG     - Not Allowed%@AE@%%@NL@%
  5614.      %@AI@%**%@AE@%%@NL@%
  5615.      %@AI@%*/%@AE@%%@NL@%
  5616.      flagType pascal EXTERNAL tglcase (argData, pArg, fMeta)%@NL@%
  5617.      unsigned int argData;                   %@AI@%/* keystroke invoked with */%@AE@%%@NL@%
  5618.      ARG far *pArg;                          %@AI@%/* argument data */%@AE@%%@NL@%
  5619.      flagType fMeta;                         %@AI@%/* indicates preceded by meta */%@AE@%%@NL@%
  5620.      {%@NL@%
  5621.          PFILE   pFile;                  %@AI@%/* file handle of current file */%@AE@%%@NL@%
  5622.          COL     xStart;                 %@AI@%/* left border of arg area */%@AE@%%@NL@%
  5623.          LINE    yStart;                 %@AI@%/* starting line of arg area */%@AE@%%@NL@%
  5624.          COL     xEnd;                   %@AI@%/* right border of arg area */%@AE@%%@NL@%
  5625.          LINE    yEnd;                   %@AI@%/* ending line of arg area */%@AE@%%@NL@%
  5626.          int     cbLine;                 %@AI@%/* byte count of current line */%@AE@%%@NL@%
  5627.          COL     xCur;                   %@AI@%/* current column being toggled */%@AE@%%@NL@%
  5628.          char    buf[BUFLEN];            %@AI@%/* buffer for line being toggled*/%@AE@%%@NL@%
  5629.          register char c;                %@AI@%/* character being analyzed */%@AE@%%@NL@%
  5630. %@NL@%
  5631.          id( "" );%@NL@%
  5632.          pFile = FileNameToHandle( "", NULL );%@NL@%
  5633.          switch( pArg->argType )%@NL@%
  5634.          {%@NL@%
  5635.      %@AI@%/*%@AE@%%@NL@%
  5636.      %@AI@%** For the various argument types, set up a box%@AE@%%@NL@%
  5637.      %@AI@%** (xStart, yStart) - (xEnd, yEnd)%@AE@%%@NL@%
  5638.      %@AI@%** over which the case conversion code below can operate%@AE@%%@NL@%
  5639.      %@AI@%*/%@AE@%%@NL@%
  5640.              case NOARG:                         %@AI@%/* case switch entire line */%@AE@%%@NL@%
  5641.                  xStart = 0;%@NL@%
  5642.                  xEnd = BUFLEN;%@NL@%
  5643.                  yStart = yEnd = pArg->arg.noarg.y;%@NL@%
  5644.                  break;%@NL@%
  5645. %@NL@%
  5646.              case NULLARG:                       %@AI@%/* case switch to EOL */%@AE@%%@NL@%
  5647.                  xStart = pArg->arg.nullarg.x;%@NL@%
  5648.                  xEnd = BUFLEN;%@NL@%
  5649.                  yStart = yEnd = pArg->arg.nullarg.y;%@NL@%
  5650.                  break;%@NL@%
  5651. %@NL@%
  5652.              case LINEARG:                       %@AI@%/* case switch line range */%@AE@%%@NL@%
  5653.                  xStart = 0;%@NL@%
  5654.                  xEnd = BUFLEN;%@NL@%
  5655.                  yStart = pArg->arg.linearg.yStart;%@NL@%
  5656.                  yEnd = pArg->arg.linearg.yEnd;%@NL@%
  5657.                  break;%@NL@%
  5658. %@NL@%
  5659.              case BOXARG:                        %@AI@%/* case switch box */%@AE@%%@NL@%
  5660.                  xStart = pArg->arg.boxarg.xLeft;%@NL@%
  5661.                  xEnd   = pArg->arg.boxarg.xRight;%@NL@%
  5662.                  yStart = pArg->arg.boxarg.yTop;%@NL@%
  5663.                  yEnd   = pArg->arg.boxarg.yBottom;%@NL@%
  5664.                  break;%@NL@%
  5665.          }%@NL@%
  5666.      %@AI@%/*%@AE@%%@NL@%
  5667.      %@AI@%** Within range of lines yStart to yEnd, get each line, and if non-null,%@AE@%%@NL@%
  5668.      %@AI@%** check each character. If alphabetic, replace with its case-converted%@AE@%%@NL@%
  5669.      %@AI@%** value. After all characters have been checked, replace line in file.%@AE@%%@NL@%
  5670.      %@AI@%*/%@AE@%%@NL@%
  5671.          while( yStart <= yEnd )%@NL@%
  5672.          {%@NL@%
  5673.           if( cbLine = GetLine( yStart, buf, pFile ))%@NL@%
  5674.              {%@NL@%
  5675.               for( xCur = xStart; (xCur <= min( cbLine, xEnd )); xCur++ )%@NL@%
  5676.                  {%@NL@%
  5677.                      c = buf[xCur];%@NL@%
  5678.                if( (c >= 'A' ) && (c <= 'Z'))%@NL@%
  5679.                          c += 'a'-'A';%@NL@%
  5680.                else if( (c >= 'a' ) && (c <= 'z'))%@NL@%
  5681.                          c += 'A'-'a';%@NL@%
  5682.                      buf[xCur] = c;%@NL@%
  5683.                  }%@NL@%
  5684.               PutLine( yStart++, buf, pFile );%@NL@%
  5685.              }%@NL@%
  5686.          }%@NL@%
  5687.          return 1;%@NL@%
  5688.      }%@NL@%
  5689.      %@AI@%/*************************************************************************%@AE@%%@NL@%
  5690.      %@AI@%**%@AE@%%@NL@%
  5691.      %@AI@%** WhenLoaded%@AE@%%@NL@%
  5692.      %@AI@%** Executed when extension gets loaded. Identify self & assign default%@AE@%%@NL@%
  5693.      %@AI@%** keystroke.%@AE@%%@NL@%
  5694.      %@AI@%**%@AE@%%@NL@%
  5695.      %@AI@%** Entry:%@AE@%%@NL@%
  5696.      %@AI@%**  none%@AE@%%@NL@%
  5697.      %@AI@%*/%@AE@%%@NL@%
  5698.      void WhenLoaded ()%@NL@%
  5699.      {%@NL@%
  5700.      id("case conversion extension:");%@NL@%
  5701.      SetKey ("tglcase",  "alt+c");%@NL@%
  5702.      } %@AI@%/* end WhenLoaded */%@AE@%%@NL@%
  5703. %@NL@%
  5704.      %@AI@%/*************************************************************************%@AE@%%@NL@%
  5705.      %@AI@%**%@AE@%%@NL@%
  5706.      %@AI@%** id%@AE@%%@NL@%
  5707.      %@AI@%** identify ourselves, along with any passed informative message%@AE@%%@NL@%
  5708.      %@AI@%**%@AE@%%@NL@%
  5709.      %@AI@%** Entry:%@AE@%%@NL@%
  5710.      %@AI@%**  pszMsg      = Pointer to asciiz message to which the extension name%@AE@%%@NL@%
  5711.      %@AI@%**                and version are appended prior to display%@AE@%%@NL@%
  5712.      %@AI@%*/%@AE@%%@NL@%
  5713.      void pascal id (pszFcn)%@NL@%
  5714.      char *pszFcn;                                   %@AI@%/* function name */%@AE@%%@NL@%
  5715.      {%@NL@%
  5716.          char    buf[80];                                %@AI@%/* message buffer */%@AE@%%@NL@%
  5717. %@NL@%
  5718.          strcpy (buf,pszFcn);                    %@AI@%/* start with message */%@AE@%%@NL@%
  5719.          strcat (buf,ID);                                %@AI@%/* append version */%@AE@%%@NL@%
  5720.          DoMessage (buf);%@NL@%
  5721.      } %@AI@%/* end id */%@AE@%%@NL@%
  5722. %@NL@%
  5723. %@NL@%
  5724.      %@AI@%/*************************************************************************%@AE@%%@NL@%
  5725.      %@AI@%**%@AE@%%@NL@%
  5726.      %@AI@%** Switch communication table to the editor%@AE@%%@NL@%
  5727.      %@AI@%** This extension defines no switches%@AE@%%@NL@%
  5728.      %@AI@%*/%@AE@%%@NL@%
  5729.      struct swiDesc  swiTable[] =%@NL@%
  5730.      {%@NL@%
  5731.          { NULL, NULL, 0 }%@NL@%
  5732.      };%@NL@%
  5733. %@NL@%
  5734.      %@AI@%/*************************************************************************%@AE@%%@NL@%
  5735.      %@AI@%**%@AE@%%@NL@%
  5736.      %@AI@%** Command communication table to the editor%@AE@%%@NL@%
  5737.      %@AI@%** Defines the name, location and acceptable argument types%@AE@%%@NL@%
  5738.      %@AI@%*/%@AE@%%@NL@%
  5739.      struct cmdDesc  cmdTable[] =%@NL@%
  5740.      {%@NL@%
  5741.          {"tglcase",tglcase,0, KEEPMETA | NOARG | BOXARG | NULLARG | LINEARG%@NL@%
  5742.      |%@NL@%
  5743.                                MARKARG | NUMARG | MODIFIES},%@NL@%
  5744.          { NULL, NULL, 0, 0 }%@NL@%
  5745.      };%@NL@%
  5746. %@NL@%
  5747. %@NL@%
  5748. %@CR:MSE87000@%%@2@%%@AB@%8.7  Calling Library Functions%@AE@%%@EH@%%@NL@%
  5749. %@NL@%
  5750. %@CR:MSE87001@%%@4@%This section lists compatible C library functions as well as low-level%@EH@%
  5751. extension functions you can call.%@NL@%
  5752. %@NL@%
  5753. %@CR:MSE87002@%%@4@%You should call the editor's own low-level functions in preference to%@EH@%
  5754. functions in the standard C library whenever possible. Using the editor's
  5755. low-level functions guarantees that all file operations are compatible with
  5756. the editor.%@NL@%
  5757. %@NL@%
  5758. %@CR:MSE87003@%%@4@%Furthermore, not all functions in the C library are compatible with%@EH@%
  5759. extensions. The following list summarizes which functions from the
  5760. compact-model library should work when called by a C-extension module. Link
  5761. with a compact-memory-model C library if you want to call these functions.
  5762. The list refers to the function categories from Chapter 4%@BO:   120e2@% of the %@AI@%Microsoft C%@AE@%
  5763. %@AI@%Optimizing Compiler Run-Time Library Reference%@AE@% (Version 4.0 or later).%@NL@%
  5764. %@NL@%
  5765. %@CR:MSE87004@%%@4@%Note that floating-point arithmetic is not supported because it involves%@EH@%
  5766. calls to low-level, floating-point math routines.%@NL@%
  5767. %@CR:MSE87005@%%@NL@%
  5768. %@TH:   42   1423  2 28 48 @%%@AB@%Category                    Compatible Functions%@AE@%Buffer manipulation         All functions can be called.Character                   All functions can be called.classification andconversionData conversion             All functions can be called except %@AB@%strtod%@AE@%.Directory control           All functions can be called except %@AB@%getcwd%@AE@%.Graphics                    None.File handling               All functions can be called.Stream routines             None.Low-level I/O routines      None.Console and port I/O        All functions can be called except %@AB@%cgets%@AE@%,                            %@AB@%cprintf%@AE@%, and %@AB@%cscanf%@AE@%.Math                        None.Memory allocation           None.Process control             None.Searching and sorting       All functions can be called except %@AB@%qsort%@AE@%.String manipulation         All functions can be called except %@AB@%strdup%@AE@%.BIOS interface              All functions can be called.MS-DOS interface            All functions can be called except %@AB@%int86%@AE@% and                            %@AB@%int86x%@AE@%.Time                        None.Miscellaneous               All functions can be called except %@AB@%assert%@AE@%,                            %@AB@%getenv%@AE@%, %@AB@%perror%@AE@%, %@AB@%putenv%@AE@%, and %@AB@%_searchenv%@AE@%.%@TE:   42   1423  2 28 48 @%
  5769. %@NL@%
  5770. %@CR:MSE87006@%%@4@%Table 8.2%@BO:   505ed@% lists the low-level extension functions by category. Your%@EH@%
  5771. extension can call any of these functions. The next chapter gives an
  5772. alphabetical reference to all of the functions, including declarations and
  5773. examples.%@NL@%
  5774. %@NL@%
  5775. %@CR:MSE8T200@%%@4@%%@AU@%Table 8.2  Summary of Extension Functions by Category%@AE@%%@EH@%%@NL@%
  5776. %@NL@%
  5777. %@TH:   38   2405  1 19 20 37 @%%@AB@%Category           Functions           Description%@AE@%File Handle        AddFile             Opens new file and gets file handle                   %@AB@%FileNameToHandle%@AE@%    Gets handle to already opened file                   %@AB@%Remove File%@AE@%         Removes file structure from memoryLine-Oriented      %@AB@%FileLength%@AE@%          Returns number of lines in file                   %@AB@%GetLine%@AE@%             Gets contents of one line                   %@AB@%PutLine%@AE@%             Replaces a lineCursor             %@AB@%GetCursor%@AE@%           Gets cursor position                   %@AB@%MoveCur%@AE@%             Moves cursor to new locationDisplay            %@AB@%BadArg%@AE@%              Reports that argument was invalid                   %@AB@%Display%@AE@%             Forces immediate update of screen                   %@AB@%DoMessage%@AE@%           Puts message on the dialog lineFile-Oriented      %@AB@%DelFile%@AE@%             Deletes contents of a file buffer                   %@AB@%FileRead%@AE@%            Copies disk file to file buffer                   %@AB@%FileWrite%@AE@%           Copies file buffer to disk file                   %@AB@%pFileToTop%@AE@%          Makes specified file the current fileBlock Operations   %@AB@%CopyBox%@AE@%             Inserts rectangular area                   %@AB@%CopyLine%@AE@%            Inserts range of lines                   %@AB@%CopyStream%@AE@%          Inserts stream of text                   %@AB@%DelBox%@AE@%              Deletes rectangular area                   %@AB@%DelLine%@AE@%             Deletes range of lines                   %@AB@%DelStream%@AE@%           Deletes stream of textKeyboard           %@AB@%KbHook%@AE@%              Restores keyboard control to M                   %@AB@%KbUnHook%@AE@%            Removes keyboard control from M                   %@AB@%ReadChar%@AE@%            Returns information on next keystroke                   %@AB@%ReadCmd%@AE@%             Returns keystroke info in %@AB@%CmdDesc%@AE@%                                       formatMiscellaneous      %@AB@%fExecute%@AE@%            Executes a macro                   %@AB@%Replace%@AE@%             Replaces one character in a file                   %@AB@%SetKey%@AE@%              Assigns a function to a keystroke%@TE:   38   2405  1 19 20 37 @%
  5778. %@NL@%
  5779. %@NL@%
  5780. %@CR:MSE90000@%%@1@%%@AB@%Chapter 9  C-Extension Functions%@AE@%%@EH@%%@NL@%
  5781. ───────────────────────────────────────────────────────────────────────────%@NL@%
  5782. %@NL@%
  5783. %@CR:MSE90001@%%@4@%Most of the real work of an extension is done by the editor. Your extension%@EH@%
  5784. provides program logic and decision making. Yet it relies on the editor to
  5785. interact with the environment. Specifically, an extension calls low-level
  5786. functions within the editor itself to alter a file, update the screen, read
  5787. keyboard input, and perform many other useful functions.%@NL@%
  5788. %@NL@%
  5789. %@CR:MSE90002@%%@4@%This chapter describes these low-level functions in alphabetical order. Most%@EH@%
  5790. descriptions contain a summary, description, return value, cross-reference
  5791. ("See Also"), and example. The summary is a description of syntax, showing
  5792. you the number and type of arguments to give when calling the function. The
  5793. description explains the effects of the function and gives further
  5794. information about arguments. The return value typically indicates whether or
  5795. not the function was successful. In addition, some functions return a file
  5796. handle or a length.%@NL@%
  5797. %@NL@%
  5798. %@CR:MSE90003@%%@4@%Finally, the cross-reference refers you to other functions that you may need%@EH@%
  5799. to use in combination with the function described. For example, many
  5800. functions cannot be performed unless you first call the %@AB@%FileNameToHandle%@AE@%
  5801. function.%@NL@%
  5802. %@NL@%
  5803. %@CR:MSE90004@%%@4@%For a topical listing of these functions, see Table 8.2%@BO:   505ed@% in the previous%@EH@%
  5804. chapter.%@NL@%
  5805. %@NL@%
  5806. %@NL@%
  5807. %@CR:MSE9R010@%%@3@%%@AB@%AddFile%@AE@%%@EH@%%@NL@%
  5808. %@NL@%
  5809. %@4@%%@AB@%■  Summary%@AE@%%@EH@%%@NL@%
  5810. %@NL@%
  5811.      %@CR:MSE9R011@%%@AB@%#include <ext.h>%@AE@%%@NL@%
  5812. %@NL@%
  5813.      %@AB@%PFILE pascal AddFile%@AE@% (%@AI@%p%@AE@%)%@NL@%
  5814.      %@AB@%char far%@AE@% *%@AI@%p%@AE@%;%@NL@%
  5815. %@NL@%
  5816. %@4@%%@AB@%■  Description%@AE@%%@EH@%%@NL@%
  5817. %@NL@%
  5818. %@CR:MSE9R012@%%@4@%The %@AB@%AddFile%@AE@% function opens a file for editing. The parameter %@AI@%p%@AE@% points to a%@EH@%
  5819. null-terminated string of text containing the name of the file to open.%@NL@%
  5820. %@NL@%
  5821. %@CR:MSE9R013@%%@4@%The file can be new or one that currently exists on disk; however, the file%@EH@%
  5822. should not already be open for editing. Therefore, to open an existing file,
  5823. first check to see if it is already open by calling %@AB@%FileNameToHandle%@AE@%.%@NL@%
  5824. %@NL@%
  5825. %@CR:MSE9R014@%%@4@%After you open an existing file, you should immediately call the %@AB@%FileRead%@AE@%%@EH@%
  5826. function to properly initialize the internal file buffer. If you open a new
  5827. file, the file will not be added to the disk until you call %@AB@%FileWrite%@AE@%.%@NL@%
  5828. %@NL@%
  5829. %@4@%%@AB@%■  Return value%@AE@%%@EH@%%@NL@%
  5830. %@NL@%
  5831. %@CR:MSE9R015@%%@4@%The function returns a handle to the file.%@EH@%%@NL@%
  5832. %@NL@%
  5833. %@4@%%@AB@%■  See also%@AE@%%@EH@%%@NL@%
  5834. %@NL@%
  5835.      %@CR:MSE9R016@%%@4@%%@AB@%FileNameToHandle%@AE@%, %@AB@%FileRead%@AE@%, %@AB@%FileWrite%@AE@%%@EH@%%@NL@%
  5836. %@NL@%
  5837. %@4@%%@AB@%■  Example%@AE@%%@EH@%%@NL@%
  5838. %@NL@%
  5839. %@CR:MSE9R017@%%@4@%The following example checks to see if the file MYDATA.FIL is currently open%@EH@%
  5840. for editing; if not, %@AB@%AddFile%@AE@% is called to open the file. In either case, the
  5841. file handle is assigned to pFile.%@NL@%
  5842. %@NL@%
  5843.      char *p = "MYDATA.FIL";%@NL@%
  5844. %@NL@%
  5845.      if( (pFile = FileNameToHandle( p, NULL )) == 0 )%@NL@%
  5846.      {%@NL@%
  5847.           pFile = AddFile( p );%@NL@%
  5848.           FileRead( p, pFile );%@NL@%
  5849.      }%@NL@%
  5850. %@NL@%
  5851. %@NL@%
  5852. %@CR:MSE9R020@%%@3@%%@AB@%BadArg%@AE@%%@EH@%%@NL@%
  5853. %@NL@%
  5854. %@4@%%@AB@%■  Summary%@AE@%%@EH@%%@NL@%
  5855. %@NL@%
  5856.      %@CR:MSE9R021@%%@AB@%#include <ext.h>%@AE@%%@NL@%
  5857. %@NL@%
  5858.      %@AB@%flagType pascal BadArg%@AE@% (%@AB@%void%@AE@%)%@NL@%
  5859. %@NL@%
  5860. %@4@%%@AB@%■  Description%@AE@%%@EH@%%@NL@%
  5861. %@NL@%
  5862. %@CR:MSE9R022@%%@4@%The %@AB@%BadArg%@AE@% function reports an error message stating that the user's%@EH@%
  5863. argument is invalid. Usually you do not need to call this function because
  5864. the editor looks at the type of your function as declared in %@AB@%cmdTable%@AE@% and
  5865. rejects commands with the wrong argument type.%@NL@%
  5866. %@NL@%
  5867. %@CR:MSE9R023@%%@4@%This function is primarily useful if your editing function does some%@EH@%
  5868. additional tests for valid input, beyond argument type. For example, you may
  5869. want to exclude each %@AI@%numarg%@AE@% larger than a certain value.%@NL@%
  5870. %@NL@%
  5871. %@4@%%@AB@%■  Return value%@AE@%%@EH@%%@NL@%
  5872. %@NL@%
  5873. %@CR:MSE9R024@%%@4@%The function does not return a value.%@EH@%%@NL@%
  5874. %@NL@%
  5875. %@4@%%@AB@%■  See also%@AE@%%@EH@%%@NL@%
  5876. %@NL@%
  5877.      %@CR:MSE9R025@%%@AB@%DoMessage%@AE@%%@NL@%
  5878. %@NL@%
  5879. %@4@%%@AB@%■  Example%@AE@%%@EH@%%@NL@%
  5880. %@NL@%
  5881. %@CR:MSE9R026@%%@4@%The following example causes the editor to report an invalid-argument%@EH@%
  5882. message if the range of lines is greater than 10. Normally this condition is
  5883. not an error, but you may want to write a function that restricts the size
  5884. of an argument.%@NL@%
  5885. %@NL@%
  5886.      if( yEnd > yStart == 10 )%@NL@%
  5887.      {%@NL@%
  5888.          BadArg( );%@NL@%
  5889.          return 0;%@NL@%
  5890.      }%@NL@%
  5891. %@NL@%
  5892. %@NL@%
  5893. %@CR:MSE9R030@%%@3@%%@AB@%CopyBox%@AE@%%@EH@%%@NL@%
  5894. %@NL@%
  5895. %@4@%%@AB@%■  Summary%@AE@%%@EH@%%@NL@%
  5896. %@NL@%
  5897.      %@CR:MSE9R031@%%@AB@%#include <ext.h>%@AE@%%@NL@%
  5898. %@NL@%
  5899.      %@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@%
  5900.      %@AB@%PFILE%@AE@% %@AI@%pFileSrc%@AE@%, %@AI@%pFileDst%@AE@%;%@NL@%
  5901.      %@AB@%COL%@AE@% %@AI@%xLeft%@AE@%, %@AI@%xRight%@AE@%, %@AI@%xDst%@AE@%;%@NL@%
  5902.      %@AB@%LINE%@AE@% %@AI@%yTop%@AE@%, %@AI@%yBottom%@AE@%, %@AI@%yDst%@AE@%;%@NL@%
  5903. %@NL@%
  5904. %@4@%%@AB@%■  Description%@AE@%%@EH@%%@NL@%
  5905. %@NL@%
  5906. %@CR:MSE9R032@%%@4@%The %@AB@%CopyBox%@AE@% function copies the box delimited by the edges %@AI@%xLeft%@AE@%, %@AI@%yTop%@AE@%,%@EH@%
  5907. %@AI@%xRight%@AE@%, and %@AI@%yBottom%@AE@% in the source file and inserts this box just before
  5908. position (%@AI@%xDst%@AE@%, %@AI@%yDst%@AE@%) in the destination file. If the %@AI@%pFileSrc%@AE@% is null (0),
  5909. the function inserts a box of blank spaces of the size implied by the
  5910. coordinate parameters.%@NL@%
  5911. %@NL@%
  5912. %@CR:MSE9R033@%%@4@%The parameters %@AI@%pFileSrc%@AE@% and %@AI@%pFileDst%@AE@% are handles to the source and%@EH@%
  5913. destination files. The parameters %@AI@%xLeft%@AE@%, %@AI@%xRight%@AE@%, %@AI@%yTop,%@AE@% and %@AI@%yBottom%@AE@% specify
  5914. the boundaries of the box, inclusive, of the text to be copied. The text is
  5915. inserted into the destination file just before the location specified by
  5916. %@AI@%xDst, yDst%@AE@%.%@NL@%
  5917. %@NL@%
  5918. %@CR:MSE9R034@%%@4@%The same file can serve as source and destination. However, in that case the%@EH@%
  5919. source and destination regions must not overlap.%@NL@%
  5920. %@NL@%
  5921. %@CR:MSE9R035@%%@4@%All coordinates in lower-level functions are zero based.%@EH@%%@NL@%
  5922. %@NL@%
  5923. %@4@%%@AB@%■  Return value%@AE@%%@EH@%%@NL@%
  5924. %@NL@%
  5925. %@CR:MSE9R036@%%@4@%The function does not return a value.%@EH@%%@NL@%
  5926. %@NL@%
  5927. %@4@%%@AB@%■  See also%@AE@%%@EH@%%@NL@%
  5928. %@NL@%
  5929.      %@CR:MSE9R037@%%@4@%%@AB@%CopyBox%@AE@%, %@AB@%CopyLine%@AE@%, %@AB@%CopyStream%@AE@%, %@AB@%FileNameToHandle%@AE@%%@EH@%%@NL@%
  5930. %@NL@%
  5931. %@4@%%@AB@%■  Example%@AE@%%@EH@%%@NL@%
  5932. %@NL@%
  5933. %@CR:MSE9R038@%%@4@%The following example copies a box from the file A.TXT and inserts this%@EH@%
  5934. region into the file B.TXT:%@NL@%
  5935. %@NL@%
  5936.      pAFILE = FileNameToHandle( "A.TXT", NULL );%@NL@%
  5937.      pBFILE = FileNameToHandle( "B.TXT", NULL );%@NL@%
  5938.      .%@NL@%
  5939.      .%@NL@%
  5940.      .%@NL@%
  5941.      CopyBox( pAFILE, pBFILE, Left, Top, Right, End, xBFILE, yBFILE );%@NL@%
  5942. %@NL@%
  5943. %@NL@%
  5944. %@CR:MSE9R040@%%@3@%%@AB@%CopyLine%@AE@%%@EH@%%@NL@%
  5945. %@NL@%
  5946. %@4@%%@AB@%■  Summary%@AE@%%@EH@%%@NL@%
  5947. %@NL@%
  5948.      %@CR:MSE9R041@%%@AB@%#include <ext.h>%@AE@%%@NL@%
  5949. %@NL@%
  5950.      %@AB@%void pascal CopyLine%@AE@% (%@AI@%pFileSrc%@AE@%, %@AI@%pFileDst%@AE@%, %@AI@%yStart%@AE@%, %@AI@%yEnd%@AE@%, %@AI@%yDst%@AE@%)%@NL@%
  5951.      %@AB@%PFILE%@AE@% %@AI@%pFileSrc%@AE@%, %@AI@%pFileDst%@AE@%;%@NL@%
  5952.      %@AB@%LINE%@AE@% %@AI@%yStart%@AE@%, %@AI@%yEnd%@AE@%, %@AI@%yDst%@AE@%;%@NL@%
  5953. %@NL@%
  5954. %@4@%%@AB@%■  Description%@AE@%%@EH@%%@NL@%
  5955. %@NL@%
  5956. %@CR:MSE9R042@%%@4@%The %@AB@%CopyLine%@AE@% function can be used either to copy a group of lines from one%@EH@%
  5957. region to another or to insert a blank line.%@NL@%
  5958. %@NL@%
  5959. %@CR:MSE9R043@%%@4@%The %@AI@%pFileSrc%@AE@% and %@AI@%pFileDst%@AE@% parameters are handles to the source and%@EH@%
  5960. destination files. If %@AI@%pFileSrc%@AE@% is null (0), the function inserts one or more
  5961. blanks lines, the number of lines being determined by the relative values of
  5962. %@AI@%yStart%@AE@% and%@AI@%yEnd%@AE@%. (The number of blank lines is equal to the difference
  5963. between %@AI@%yStart%@AE@% and %@AI@%yEnd%@AE@% plus one.) Otherwise, the function copies the lines
  5964. from %@AI@%yStart%@AE@% to %@AI@%yEnd%@AE@%, inclusive, in the destination file. Lines are inserted
  5965. directly before line %@AI@%yDst%@AE@% in the destination file.%@NL@%
  5966. %@NL@%
  5967. %@CR:MSE9R044@%%@4@%The %@AB@%CopyLine%@AE@% function should not be confused with the %@AB@%PutLine%@AE@% function.%@EH@%
  5968. %@AB@%PutLine%@AE@% replaces a line and does not affect the total number of lines.
  5969. %@AB@%CopyLine%@AE@% inserts one or more lines and therefore increases the length of the
  5970. file.%@NL@%
  5971. %@NL@%
  5972. %@CR:MSE9R045@%%@4@%The same file cannot serve as both source and destination. To copy text from%@EH@%
  5973. one part of the file to another, copy to a temporary file, such as
  5974. <clipboard>.%@NL@%
  5975. %@NL@%
  5976. %@CR:MSE9R046@%%@4@%All line numbers in low-level functions are zero based.%@EH@%%@NL@%
  5977. %@NL@%
  5978. %@4@%%@AB@%■  Return value%@AE@%%@EH@%%@NL@%
  5979. %@NL@%
  5980. %@CR:MSE9R047@%%@4@%The function does not return a value.%@EH@%%@NL@%
  5981. %@NL@%
  5982. %@4@%%@AB@%■  See also%@AE@%%@EH@%%@NL@%
  5983. %@NL@%
  5984.      %@CR:MSE9R048@%%@4@%%@AB@%CopyBox%@AE@%, %@AB@%CopyStream%@AE@%, %@AB@%FileNameToHandle%@AE@%, %@AB@%PutLine%@AE@%%@EH@%%@NL@%
  5985. %@NL@%
  5986. %@4@%%@AB@%■  Example%@AE@%%@EH@%%@NL@%
  5987. %@NL@%
  5988. %@CR:MSE9R049@%%@4@%The following code inserts a blank line at the beginning of the file:%@EH@%%@NL@%
  5989. %@NL@%
  5990.      cfile = FileNameToHandle( "", NULL );%@NL@%
  5991.      CopyLines( NULL, cfile, 0, 0, 0 );%@NL@%
  5992. %@NL@%
  5993. %@NL@%
  5994. %@CR:MSE9R050@%%@3@%%@AB@%CopyStream%@AE@%%@EH@%%@NL@%
  5995. %@NL@%
  5996. %@4@%%@AB@%■  Summary%@AE@%%@EH@%%@NL@%
  5997. %@NL@%
  5998.      %@CR:MSE9R051@%%@AB@%#include <ext.h>%@AE@%%@NL@%
  5999. %@NL@%
  6000.      %@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@%
  6001.      %@AB@%PFILE%@AE@% %@AI@%pFileSrc%@AE@%, %@AI@%pFileDst%@AE@%;%@NL@%
  6002.      %@AB@%COL%@AE@% %@AI@%xStart%@AE@%, %@AI@%xEnd%@AE@%, %@AI@%xDst%@AE@%;%@NL@%
  6003.      %@AB@%LINE%@AE@% %@AI@%yStart%@AE@%, %@AI@%yEnd%@AE@%, %@AI@%yDst%@AE@%;%@NL@%
  6004. %@NL@%
  6005. %@4@%%@AB@%■  Description%@AE@%%@EH@%%@NL@%
  6006. %@NL@%
  6007. %@CR:MSE9R052@%%@4@%The %@AB@%CopyStream%@AE@% function copies the stream of text (including new lines)%@EH@%
  6008. beginning at position (%@AI@%xStart, yStart%@AE@%), up to but not including position
  6009. (%@AI@%xEnd, yEnd%@AE@%).  The stream of text is inserted into the destination file just
  6010. before position (%@AI@%xDst,%@AE@%%@AI@%yDst%@AE@%).  If %@AI@%pFileSrc%@AE@% is null (0), a blank space is
  6011. inserted.%@NL@%
  6012. %@NL@%
  6013. %@CR:MSE9R053@%%@4@%The %@AI@%pFileSrc%@AE@% and %@AI@%pFileDst%@AE@% parameters are file handles to the source and%@EH@%
  6014. destination files.%@NL@%
  6015. %@NL@%
  6016. %@CR:MSE9R054@%%@4@%The same file cannot serve as both source and destination. To copy text from%@EH@%
  6017. one part of the file to another, copy to a temporary file, such as
  6018. <clipboard>.%@NL@%
  6019. %@NL@%
  6020. %@4@%%@AB@%■  Return value%@AE@%%@EH@%%@NL@%
  6021. %@NL@%
  6022. %@CR:MSE9R055@%%@4@%The function does not return a value.%@EH@%%@NL@%
  6023. %@NL@%
  6024. %@4@%%@AB@%■  See also%@AE@%%@EH@%%@NL@%
  6025. %@NL@%
  6026.      %@CR:MSE9R056@%%@4@%%@AB@%CopyBox%@AE@%, %@AB@%CopyLine%@AE@%, %@AB@%FileNameToHandle%@AE@%%@EH@%%@NL@%
  6027. %@NL@%
  6028. %@4@%%@AB@%■  Example%@AE@%%@EH@%%@NL@%
  6029. %@NL@%
  6030. %@CR:MSE9R057@%%@4@%The following example copies a stream from the file A.TXT and inserts this%@EH@%
  6031. region into the file B.TXT:%@NL@%
  6032. %@NL@%
  6033.      pAFILE = FileNameToHandle( "A.TXT", "" );%@NL@%
  6034.      pBFILE = FileNameToHandle( "B.TXT", "" );%@NL@%
  6035.      .%@NL@%
  6036.      .%@NL@%
  6037.      .%@NL@%
  6038.      CopyStream( pAFILE, pBFILE, xStart, yStart, xEnd, yEnd, xBFILE, yBFILE );%@NL@%
  6039. %@NL@%
  6040. %@NL@%
  6041. %@CR:MSE9R060@%%@3@%%@AB@%DelBox%@AE@%%@EH@%%@NL@%
  6042. %@NL@%
  6043. %@4@%%@AB@%■  Summary%@AE@%%@EH@%%@NL@%
  6044. %@NL@%
  6045.      %@CR:MSE9R061@%%@AB@%#include <ext.h>%@AE@%%@NL@%
  6046. %@NL@%
  6047.      %@AB@%void pascal DelBox%@AE@% (%@AI@%pFile%@AE@%, %@AI@%xLeft%@AE@%, %@AI@%yTop%@AE@%, %@AI@%xRight%@AE@%, %@AI@%yBottom%@AE@%)%@NL@%
  6048.      %@AB@%PFILE%@AE@% %@AI@%pFile%@AE@%;%@NL@%
  6049.      %@AB@%COL%@AE@% %@AI@%xLeft%@AE@%, %@AI@%xRight%@AE@%;%@NL@%
  6050.      %@AB@%LINE%@AE@% %@AI@%yTop%@AE@%, %@AI@%yBottom%@AE@%;%@NL@%
  6051. %@NL@%
  6052. %@4@%%@AB@%■  Description%@AE@%%@EH@%%@NL@%
  6053. %@NL@%
  6054. %@CR:MSE9R062@%%@4@%The %@AB@%DelBox%@AE@% function deletes all spaces in the box delimited by the positions%@EH@%
  6055. (%@AI@%xLeft%@AE@%, %@AI@%yTop%@AE@%) and (%@AI@%xRight%@AE@%, %@AI@%yBottom%@AE@%). The box includes all four edges in the
  6056. parameter list. The %@AI@%pFile%@AE@% parameter is a handle to the file to be modified.%@NL@%
  6057. %@NL@%
  6058. %@CR:MSE9R063@%%@4@%All line and column coordinates are zero based.%@EH@%%@NL@%
  6059. %@NL@%
  6060. %@4@%%@AB@%■  Return value%@AE@%%@EH@%%@NL@%
  6061. %@NL@%
  6062. %@CR:MSE9R064@%%@4@%The function does not return a value.%@EH@%%@NL@%
  6063. %@NL@%
  6064. %@4@%%@AB@%■  See also%@AE@%%@EH@%%@NL@%
  6065. %@NL@%
  6066.      %@CR:MSE9R065@%%@4@%%@AB@%DelLine%@AE@%, %@AB@%DelStream%@AE@%, %@AB@%FileNameToHandle%@AE@%%@EH@%%@NL@%
  6067. %@NL@%
  6068. %@4@%%@AB@%■  Example%@AE@%%@EH@%%@NL@%
  6069. %@NL@%
  6070. %@CR:MSE9R066@%%@4@%The following example deletes the user-defined box argument:%@EH@%%@NL@%
  6071. %@NL@%
  6072.      pFile = FileNameToHandle( "", NULL );%@NL@%
  6073.      .%@NL@%
  6074.      .%@NL@%
  6075.      .%@NL@%
  6076.      Left   = pArg->arg.boxarg.xLeft;%@NL@%
  6077.      Right  = pArg->arg.boxarg.xRight;%@NL@%
  6078.      Top    = pArg->arg.boxarg.yTop;%@NL@%
  6079.      Bottom = pArg->arg.boxarg.yBottom;%@NL@%
  6080.      .%@NL@%
  6081.      .%@NL@%
  6082.      .%@NL@%
  6083.      DelBox( pFile, Left, Top, Right, Bottom );%@NL@%
  6084. %@NL@%
  6085. %@NL@%
  6086. %@CR:MSE9R070@%%@3@%%@AB@%DelFile%@AE@%%@EH@%%@NL@%
  6087. %@NL@%
  6088. %@4@%%@AB@%■  Summary%@AE@%%@EH@%%@NL@%
  6089. %@NL@%
  6090.      %@CR:MSE9R071@%%@AB@%#include <ext.h>%@AE@%%@NL@%
  6091. %@NL@%
  6092.      %@AB@%void pascal DelFile%@AE@% (%@AI@%pFile%@AE@%)%@NL@%
  6093.      %@AB@%PFILE%@AE@% %@AI@%pFile%@AE@%;%@NL@%
  6094. %@NL@%
  6095. %@4@%%@AB@%■  Description%@AE@%%@EH@%%@NL@%
  6096. %@NL@%
  6097. %@CR:MSE9R072@%%@4@%The %@AI@%DelFile%@AE@% function deletes the entire contents of an internal file buffer.%@EH@%
  6098. The effect of deleting contents can be made permanent by calling the
  6099. %@AB@%FileWrite%@AE@% function, which replaces the contents of the file on disk with the
  6100. contents of the internal file buffer.%@NL@%
  6101. %@NL@%
  6102. %@CR:MSE9R073@%%@4@%The  parameter %@AI@%pFile%@AE@% is the handle of the file to be cleared.%@EH@%%@NL@%
  6103. %@NL@%
  6104. %@4@%%@AB@%■  Return value%@AE@%%@EH@%%@NL@%
  6105. %@NL@%
  6106. %@CR:MSE9R074@%%@4@%The function does not return a value.%@EH@%%@NL@%
  6107. %@NL@%
  6108. %@4@%%@AB@%■  See also%@AE@%%@EH@%%@NL@%
  6109. %@NL@%
  6110.      %@CR:MSE9R075@%%@4@%%@AB@%AddFile%@AE@%, %@AB@%FileNameToHandle%@AE@%, %@AB@%FileWrite%@AE@%%@EH@%%@NL@%
  6111. %@NL@%
  6112. %@4@%%@AB@%■  Example%@AE@%%@EH@%%@NL@%
  6113. %@NL@%
  6114. %@CR:MSE9R076@%%@4@%The following example deletes the contents of the file JUNK.TXT, then calls%@EH@%
  6115. %@AB@%FileWrite%@AE@% to make the change permanent:%@NL@%
  6116. %@NL@%
  6117.      if( (pFile = FileNameToHandle( "JUNK.TXT", NULL)) == 0 )%@NL@%
  6118.           pFile = AddFile(  "JUNK.TXT"  );%@NL@%
  6119. %@NL@%
  6120.      DelFile( pFile );%@NL@%
  6121.      FileWrite( "JUNK.TXT", pFile );%@NL@%
  6122. %@NL@%
  6123. %@NL@%
  6124. %@CR:MSE9R080@%%@3@%%@AB@%DelLine%@AE@%%@EH@%%@NL@%
  6125. %@NL@%
  6126. %@4@%%@AB@%■  Summary%@AE@%%@EH@%%@NL@%
  6127. %@NL@%
  6128.      %@CR:MSE9R081@%%@4@%%@AB@%#include <ext.h>%@EH@%%@AE@%%@NL@%
  6129. %@NL@%
  6130.      %@AB@%void pascal DelLine%@AE@% (%@AI@%pFile%@AE@%, %@AI@%yStart%@AE@%, %@AI@%yEnd%@AE@%)%@NL@%
  6131.      %@AB@%PFILE%@AE@% %@AI@%pFile%@AE@%;%@NL@%
  6132.      %@AB@%LINE%@AE@% %@AI@%yStart%@AE@%, %@AI@%yEnd%@AE@%;%@NL@%
  6133. %@NL@%
  6134. %@4@%%@AB@%■  Description%@AE@%%@EH@%%@NL@%
  6135. %@NL@%
  6136. %@CR:MSE9R082@%%@4@%The %@AB@%DelLine%@AE@% function deletes lines %@AI@%yStart%@AE@% through %@AI@%yEnd%@AE@%, inclusive, in the%@EH@%
  6137. file %@AI@%pFile%@AE@%.%@NL@%
  6138. %@NL@%
  6139. %@CR:MSE9R083@%%@4@%The %@AI@%pFile%@AE@% parameter is a handle to a file from which lines are to be%@EH@%
  6140. deleted. %@AI@%yStart%@AE@% is the first line to be deleted, and %@AI@%yEnd%@AE@% is the last line
  6141. to be deleted.%@NL@%
  6142. %@NL@%
  6143. %@CR:MSE9R084@%%@4@%All line coordinates for low-level functions are zero based.%@EH@%%@NL@%
  6144. %@NL@%
  6145. %@4@%%@AB@%■  Return value%@AE@%%@EH@%%@NL@%
  6146. %@NL@%
  6147. %@CR:MSE9R085@%%@4@%The function does not return a value.%@EH@%%@NL@%
  6148. %@NL@%
  6149. %@4@%%@AB@%■  See also%@AE@%%@EH@%%@NL@%
  6150. %@NL@%
  6151.      %@CR:MSE9R086@%%@4@%%@AB@%DelBox%@AE@%, %@AB@%DelStream%@AE@%, %@AB@%FileNameToHandle%@AE@%%@EH@%%@NL@%
  6152. %@NL@%
  6153. %@4@%%@AB@%■  Example%@AE@%%@EH@%%@NL@%
  6154. %@NL@%
  6155. %@CR:MSE9R087@%%@4@%The following example deletes the user-defined line argument:%@EH@%%@NL@%
  6156. %@NL@%
  6157.      cfile = FileNameToHandle( "", NULL );%@NL@%
  6158.      .%@NL@%
  6159.      .%@NL@%
  6160.      .%@NL@%
  6161.      Start  = pArg->arg.linearg.xStart;%@NL@%
  6162.      End    = pArg->arg.linearg.xEnd;%@NL@%
  6163.      .%@NL@%
  6164.      .%@NL@%
  6165.      .%@NL@%
  6166.      DelLine( cfile, Start, End );%@NL@%
  6167. %@NL@%
  6168. %@NL@%
  6169. %@CR:MSE9R090@%%@3@%%@AB@%DelStream%@AE@%%@EH@%%@NL@%
  6170. %@NL@%
  6171. %@4@%%@AB@%■  Summary%@AE@%%@EH@%%@NL@%
  6172. %@NL@%
  6173.      %@CR:MSE9R091@%%@AB@%#include <ext.h>%@AE@%%@NL@%
  6174. %@NL@%
  6175.      %@AB@%void pascal DelStream%@AE@% (%@AI@%pFile%@AE@%, %@AI@%xStart%@AE@%, %@AI@%yStart%@AE@%, %@AI@%xEnd%@AE@%, %@AI@%yEnd%@AE@%)%@NL@%
  6176.      %@AB@%PFILE%@AE@% %@AI@%pFile%@AE@%;%@NL@%
  6177.      %@AB@%COL%@AE@% xStart, x%@AI@%End%@AE@%%@NL@%
  6178.      %@AB@%LINE%@AE@% %@AI@%yStart%@AE@%, %@AI@%yEnd%@AE@%;%@NL@%
  6179. %@NL@%
  6180. %@4@%%@AB@%■  Description%@AE@%%@EH@%%@NL@%
  6181. %@NL@%
  6182. %@CR:MSE9R092@%%@4@%The %@AB@%DelStream%@AE@% function deletes a stream of text beginning with a starting%@EH@%
  6183. coordinate up to but not including the ending coordinate.%@NL@%
  6184. %@NL@%
  6185. %@CR:MSE9R093@%%@4@%The %@AI@%xStart%@AE@% and %@AI@%yStart%@AE@% parameters give the coordinates of the beginning of%@EH@%
  6186. the stream. The %@AI@%xEnd%@AE@% and %@AI@%yEnd%@AE@% parameters give the coordinates of the byte
  6187. just after the end of the stream.%@NL@%
  6188. %@NL@%
  6189. %@CR:MSE9R094@%%@4@%All column and line coordinates for low-level functions are zero based.%@EH@%%@NL@%
  6190. %@NL@%
  6191. %@4@%%@AB@%■  Return value%@AE@%%@EH@%%@NL@%
  6192. %@NL@%
  6193. %@CR:MSE9R095@%%@4@%The function does not return a value.%@EH@%%@NL@%
  6194. %@NL@%
  6195. %@4@%%@AB@%■  See also%@AE@%%@EH@%%@NL@%
  6196. %@NL@%
  6197.      %@CR:MSE9R096@%%@4@%%@AB@%DelBox%@AE@%, %@AB@%DelLine%@AE@%, %@AB@%FileNameToHandle%@AE@%%@EH@%%@NL@%
  6198. %@NL@%
  6199. %@4@%%@AB@%■  Example%@AE@%%@EH@%%@NL@%
  6200. %@NL@%
  6201. %@CR:MSE9R097@%%@4@%The following example deletes the user-defined stream of text:%@EH@%%@NL@%
  6202. %@NL@%
  6203.      cfile = FileNameToHandle( "", NULL );%@NL@%
  6204.      .%@NL@%
  6205.      .%@NL@%
  6206.      .%@NL@%
  6207.      xStart = pArg->arg.streamarg.xStart;%@NL@%
  6208.      yStart = pArg->arg.streamarg.yStart;%@NL@%
  6209.      xEnd   = pArg->arg.streamarg.xEnd;%@NL@%
  6210.      yEnd   = pArg->arg.streamarg.yEnd;%@NL@%
  6211.      .%@NL@%
  6212.      .%@NL@%
  6213.      .%@NL@%
  6214.      DelStream( cfile, xStart, yStart, xEnd, yEnd );%@NL@%
  6215. %@NL@%
  6216. %@NL@%
  6217. %@CR:MSE9R100@%%@3@%%@AB@%Display%@AE@%%@EH@%%@NL@%
  6218. %@NL@%
  6219. %@4@%%@AB@%■  Summary%@AE@%%@EH@%%@NL@%
  6220. %@NL@%
  6221.      %@CR:MSE9R101@%%@AB@%#include <ext.h>%@AE@%%@NL@%
  6222. %@NL@%
  6223.      %@AB@%void pascal Display%@AE@% ()%@NL@%
  6224. %@NL@%
  6225. %@4@%%@AB@%■  Description%@AE@%%@EH@%%@NL@%
  6226. %@NL@%
  6227. %@CR:MSE9R102@%%@4@%The %@AB@%Display%@AE@% function refreshes the screen by examining editing changes and%@EH@%
  6228. making the minimum screen changes necessary. A keystroke interrupts the
  6229. function and causes immediate return.%@NL@%
  6230. %@NL@%
  6231. %@CR:MSE9R103@%%@4@%The editor normally updates the display whenever the editing session is%@EH@%
  6232. "idle"; that is, when the editor is waiting for the next command from the
  6233. user. Therefore, it is usually not necessary to call the %@AB@%Display%@AE@% function.
  6234. However, if your function runs for an extended period of time, call %@AB@%Display%@AE@%
  6235. periodically to show the user the stage of any intermediate changes.
  6236. Otherwise, the results of these changes are not displayed until completion
  6237. of the function.%@NL@%
  6238. %@NL@%
  6239. %@4@%%@AB@%■  Return value%@AE@%%@EH@%%@NL@%
  6240. %@NL@%
  6241. %@CR:MSE9R104@%%@4@%The function does not return a value.%@EH@%%@NL@%
  6242. %@NL@%
  6243. %@4@%%@AB@%■  Example%@AE@%%@EH@%%@NL@%
  6244. %@NL@%
  6245.      Display();%@NL@%
  6246. %@NL@%
  6247. %@NL@%
  6248. %@CR:MSE9R110@%%@3@%%@AB@%DoMessage%@AE@%%@EH@%%@NL@%
  6249. %@NL@%
  6250. %@4@%%@AB@%■  Summary%@AE@%%@EH@%%@NL@%
  6251. %@NL@%
  6252.      %@CR:MSE9R111@%%@AB@%#include <ext.h>%@AE@%%@NL@%
  6253. %@NL@%
  6254.      %@AB@%int pascal DoMessage%@AE@% (%@AI@%pStr%@AE@%)%@NL@%
  6255.      %@AB@%char far%@AE@% *%@AI@%pStr%@AE@%;%@NL@%
  6256. %@NL@%
  6257. %@4@%%@AB@%■  Description%@AE@%%@EH@%%@NL@%
  6258. %@NL@%
  6259. %@CR:MSE9R112@%%@4@%The %@AB@%DoMessage%@AE@% function writes a message to the dialog line. The %@AI@%pStr%@AE@%%@EH@%
  6260. parameter points to a null-terminated string of text containing the message
  6261. to be written.%@NL@%
  6262. %@NL@%
  6263. %@4@%%@AB@%■  Return value%@AE@%%@EH@%%@NL@%
  6264. %@NL@%
  6265. %@CR:MSE9R113@%%@4@%The function returns the number of characters written.%@EH@%%@NL@%
  6266. %@NL@%
  6267. %@4@%%@AB@%■  Example%@AE@%%@EH@%%@NL@%
  6268. %@NL@%
  6269. %@CR:MSE9R114@%%@4@%The following example outputs a message on the dialog line as part of the%@EH@%
  6270. initialization procedure %@AB@%WhenLoaded%@AE@%:%@NL@%
  6271. %@NL@%
  6272.      WhenLoaded ()%@NL@%
  6273.      {%@NL@%
  6274.           .%@NL@%
  6275.           .%@NL@%
  6276.           .%@NL@%
  6277. %@NL@%
  6278.              DoMessage( "My extension now loaded" );%@NL@%
  6279.      }%@NL@%
  6280. %@NL@%
  6281. %@NL@%
  6282. %@CR:MSE9R120@%%@3@%%@AB@%fExecute%@AE@%%@EH@%%@NL@%
  6283. %@NL@%
  6284. %@4@%%@AB@%■  Summary%@AE@%%@EH@%%@NL@%
  6285. %@NL@%
  6286.      %@CR:MSE9R121@%%@AB@%#include <ext.h>%@AE@%%@NL@%
  6287. %@NL@%
  6288.      %@AB@%flagType pascal fExecute%@AE@% %@AI@%(pStr)%@AE@%%@NL@%
  6289.      %@AB@%char far%@AE@% %@AI@%*pStr%@AE@%;%@NL@%
  6290. %@NL@%
  6291. %@4@%%@AB@%■  Description%@AE@%%@EH@%%@NL@%
  6292. %@NL@%
  6293. %@CR:MSE9R122@%%@4@%The %@AB@%fExecute%@AE@% function executes a macro, using the standard rules for macro%@EH@%
  6294. execution. The pointer %@AI@%pStr%@AE@% points to a null-terminated string of text
  6295. containing the macro to be executed.%@NL@%
  6296. %@NL@%
  6297. %@CR:MSE9R123@%%@4@%You may sometimes find it convenient to invoke a predefined editing function%@EH@%
  6298. by calling %@AB@%fExecute%@AE@%. For example, to search for the next occurrence of a
  6299. given string, you can either write a loop that examines each line in the
  6300. file, or simply invoke %@AI@%Psearch%@AE@% by calling %@AB@%fExecute%@AE@%. Macros are especially
  6301. convenient when you want to look for a regular expression.%@NL@%
  6302. %@NL@%
  6303. %@4@%%@AB@%■  Return value%@AE@%%@EH@%%@NL@%
  6304. %@NL@%
  6305. %@CR:MSE9R124@%%@4@%The function passes along the value TRUE (nonzero) or FALSE (zero) returned%@EH@%
  6306. by the last function the macro executed.%@NL@%
  6307. %@NL@%
  6308. %@4@%%@AB@%■  Example%@AE@%%@EH@%%@NL@%
  6309. %@NL@%
  6310. %@CR:MSE9R125@%%@4@%The following example invokes a macro in order to search for the next%@EH@%
  6311. occurrence of the regular expression %@AS@%RegEx%@AE@%:%@NL@%
  6312. %@NL@%
  6313.      strcpy( buf, "arg arg \"" );%@NL@%
  6314.      strcat( buf, RegEx );%@NL@%
  6315.      strcat( buf, "\" psearch" );%@NL@%
  6316. %@NL@%
  6317.      if( fExecute (buf) )%@NL@%
  6318.      {%@NL@%
  6319.          GetCursor( xCur, yCur );    %@AI@%/* Get new coordinates */%@AE@%%@NL@%
  6320.      }%@NL@%
  6321.      else%@NL@%
  6322.      {%@NL@%
  6323.      .%@NL@%
  6324.      .%@NL@%
  6325.      .%@NL@%
  6326.       %@AI@%/* Take action for item not found */%@AE@%%@NL@%
  6327.      .%@NL@%
  6328.      .%@NL@%
  6329.      .%@NL@%
  6330.      }%@NL@%
  6331. %@NL@%
  6332. %@NL@%
  6333. %@CR:MSE9R130@%%@3@%%@AB@%FileLength%@AE@%%@EH@%%@NL@%
  6334. %@NL@%
  6335. %@4@%%@AB@%■  Summary%@AE@%%@EH@%%@NL@%
  6336. %@NL@%
  6337.      %@CR:MSE9R131@%%@AB@%#include <ext.h>%@AE@%%@NL@%
  6338. %@NL@%
  6339.      %@AB@%LINE pascal FileLength%@AE@% %@AI@%(pFile)%@AE@%%@NL@%
  6340.      %@AB@%PFILE%@AE@% %@AI@%pFile%@AE@%;%@NL@%
  6341. %@NL@%
  6342. %@4@%%@AB@%■  Description%@AE@%%@EH@%%@NL@%
  6343. %@NL@%
  6344. %@CR:MSE9R132@%%@4@%The %@AB@%FileLength%@AE@% function determines the length of the file pointed to by%@EH@%
  6345. %@AI@%pFile%@AE@%.%@NL@%
  6346. %@NL@%
  6347. %@CR:MSE9R133@%%@4@%This function is useful for global operations in which it is necessary to%@EH@%
  6348. know when you have reached the end of the file.%@NL@%
  6349. %@NL@%
  6350. %@4@%%@AB@%■  Return value%@AE@%%@EH@%%@NL@%
  6351. %@NL@%
  6352. %@CR:MSE9R134@%%@4@%The function returns the number of lines in the given file.%@EH@%%@NL@%
  6353. %@NL@%
  6354. %@4@%%@AB@%■  See also%@AE@%%@EH@%%@NL@%
  6355. %@NL@%
  6356.      %@CR:MSE9R135@%%@AB@%FileNameToHandle%@AE@%%@NL@%
  6357. %@NL@%
  6358. %@4@%%@AB@%■  Example%@AE@%%@EH@%%@NL@%
  6359. %@NL@%
  6360. %@CR:MSE9R136@%%@4@%The following example determines the number of lines in the current file:%@EH@%%@NL@%
  6361. %@NL@%
  6362.      LINE fileLen;%@NL@%
  6363. %@NL@%
  6364.      cfile = FileNameToHandle( "", NULL );%@NL@%
  6365.      fileLen = FileLength( cfile );%@NL@%
  6366. %@NL@%
  6367. %@NL@%
  6368. %@CR:MSE9R140@%%@3@%%@AB@%FileNameToHandle%@AE@%%@EH@%%@NL@%
  6369. %@NL@%
  6370. %@4@%%@AB@%■  Summary%@AE@%%@EH@%%@NL@%
  6371. %@NL@%
  6372.      %@CR:MSE9R141@%%@AB@%#include <ext.h>%@AE@%%@NL@%
  6373. %@NL@%
  6374.      %@AB@%PFILE pascal FileNameToHandle%@AE@% (%@AI@%pname%@AE@%, %@AI@%pShortName%@AE@%) %@NL@%
  6375.      %@AB@%char%@AE@% *%@AI@%pname%@AE@%, *%@AI@%pShortName%@AE@%;%@NL@%
  6376. %@NL@%
  6377. %@4@%%@AB@%■  Description%@AE@%%@EH@%%@NL@%
  6378. %@NL@%
  6379. %@CR:MSE9R142@%%@4@%The %@AB@%FileNameToHandle%@AE@% function returns the handle of a file already opened%@EH@%
  6380. for editing.%@NL@%
  6381. %@NL@%
  6382. %@CR:MSE9R143@%%@4@%The %@AI@%pname%@AE@% parameter points to a null-terminated string of text containing a%@EH@%
  6383. complete file name. %@AB@%FileNameToHandle%@AE@% looks for an exact match in its list of
  6384. open files. The full path name must match. If the string does not specify a
  6385. path to a directory, the current directory is assumed.%@NL@%
  6386. %@NL@%
  6387. %@CR:MSE9R144@%%@4@%If the function cannot find a match to %@AI@%pname%@AE@%, it attempts to match the%@EH@%
  6388. %@AI@%pShortName%@AE@% parameter. This parameter points to a null-terminated string of
  6389. text containing only a base file name──the function ignores any path name or
  6390. extension in the short name. The editor selects the first file name with a
  6391. base name matching the short name.%@NL@%
  6392. %@NL@%
  6393. %@CR:MSE9R145@%%@4@%If the first string is empty, the function returns a handle to the current%@EH@%
  6394. file. The editor does not try to match a short name if the second parameter
  6395. is a null pointer or points to an empty string.%@NL@%
  6396. %@NL@%
  6397. %@4@%%@AB@%■  Return value%@AE@%%@EH@%%@NL@%
  6398. %@NL@%
  6399. %@CR:MSE9R146@%%@4@%The %@AB@%FileNameToHandle%@AE@% function returns the handle to the given file. If the%@EH@%
  6400. given file is not open for editing, the function returns NULL.%@NL@%
  6401. %@NL@%
  6402. %@4@%%@AB@%■  Example%@AE@%%@EH@%%@NL@%
  6403. %@NL@%
  6404. %@CR:MSE9R147@%%@4@%The following example returns a handle to the current file:%@EH@%%@NL@%
  6405. %@NL@%
  6406.      PFILE  curfile;%@NL@%
  6407. %@NL@%
  6408.      curfile = FileNameToHandle( "", NULL );%@NL@%
  6409. %@NL@%
  6410. %@NL@%
  6411. %@CR:MSE9R150@%%@3@%%@AB@%FileRead%@AE@%%@EH@%%@NL@%
  6412. %@NL@%
  6413. %@4@%%@AB@%■  Summary%@AE@%%@EH@%%@NL@%
  6414. %@NL@%
  6415.      %@CR:MSE9R151@%%@AB@%#include <ext.h>%@AE@%%@NL@%
  6416. %@NL@%
  6417.      %@AB@%flagType pascal FileRead%@AE@% %@AI@%(name, pFile)%@AE@%%@NL@%
  6418.      %@AB@%char far *name%@AE@%;
  6419.      %@AB@%PFILE%@AE@% %@AI@%pFile%@AE@%;%@NL@%
  6420. %@NL@%
  6421. %@4@%%@AB@%■  Description%@AE@%%@EH@%%@NL@%
  6422. %@NL@%
  6423. %@CR:MSE9R152@%%@4@%The %@AB@%FileRead%@AE@% function reads the contents of the specified disk file and%@EH@%
  6424. stores them in the internal file buffer specified by the %@AI@%pFile%@AE@%. The old
  6425. contents of the file buffer are lost.%@NL@%
  6426. %@NL@%
  6427. %@CR:MSE9R153@%%@4@%The parameter %@AI@%name%@AE@% is a pointer to a null-terminated string containing the%@EH@%
  6428. name of the disk file to be read. The %@AI@%pFile%@AE@% parameter is the handle of the
  6429. internal file buffer to write the data to.%@NL@%
  6430. %@NL@%
  6431. %@CR:MSE9R154@%%@4@%When you open a file for editing with %@AB@%AddFile%@AE@%, the file buffer is initially%@EH@%
  6432. empty. Call %@AB@%FileRead%@AE@% to initialize the buffer with the current contents of
  6433. the file.%@NL@%
  6434. %@NL@%
  6435. %@4@%%@AB@%■  Return value%@AE@%%@EH@%%@NL@%
  6436. %@NL@%
  6437. %@CR:MSE9R155@%%@4@%The function returns TRUE (nonzero) if the copy is successful and FALSE%@EH@%
  6438. (zero) if not.%@NL@%
  6439. %@NL@%
  6440. %@4@%%@AB@%■  See also%@AE@%%@EH@%%@NL@%
  6441. %@NL@%
  6442.      %@CR:MSE9R156@%%@4@%%@AB@%AddFile%@AE@%, %@AB@%FileWrite%@AE@%, %@AB@%FileNameToHandle%@AE@%%@EH@%%@NL@%
  6443. %@NL@%
  6444. %@4@%%@AB@%■  Example%@AE@%%@EH@%%@NL@%
  6445. %@NL@%
  6446. %@CR:MSE9R157@%%@4@%The following example opens the file MYTEXT.FIL for editing and then%@EH@%
  6447. initializes the buffer with the current contents of the file:%@NL@%
  6448. %@NL@%
  6449.      if( (pFile = FileNameToHandle("MYTEXT.FIL",NULL)) == 0 )%@NL@%
  6450.      {%@NL@%
  6451.           pFile = AddFile( "MYTEXT.FIL" );%@NL@%
  6452.           FileRead( "MYTEXT.FIL", pFile );%@NL@%
  6453.      }%@NL@%
  6454. %@NL@%
  6455. %@NL@%
  6456. %@CR:MSE9R160@%%@3@%%@AB@%FileWrite%@AE@%%@EH@%%@NL@%
  6457. %@NL@%
  6458. %@4@%%@AB@%■  Summary%@AE@%%@EH@%%@NL@%
  6459. %@NL@%
  6460.      %@CR:MSE9R161@%%@AB@%#include <ext.h>%@AE@%%@NL@%
  6461. %@NL@%
  6462.      %@AB@%flagType pascal FileWrite%@AE@%%@AI@% (savename, pFile)%@AE@%%@NL@%
  6463.      %@AB@%char far *savename%@AE@%;%@NL@%
  6464.      %@AB@%PFILE%@AE@%%@AI@% pFile%@AE@%;%@NL@%
  6465. %@NL@%
  6466. %@4@%%@AB@%■  Description%@AE@%%@EH@%%@NL@%
  6467. %@NL@%
  6468. %@CR:MSE9R162@%%@4@%The %@AB@%FileWrite%@AE@% function writes the contents of the specified file buffer out%@EH@%
  6469. to a disk file.%@NL@%
  6470. %@NL@%
  6471. %@CR:MSE9R163@%%@4@%The %@AI@%pFile%@AE@% parameter is the handle to the file buffer. The %@AI@%savename%@AE@% parameter%@EH@%
  6472. points to the name of the disk file. If %@AI@%savename%@AE@% points to an empty string,
  6473. the function writes to the disk file with the name as the file %@AI@%pFile%@AE@%. (Note
  6474. that a file handle points to an internal structure that contains the name of
  6475. the file as well as other data.)%@NL@%
  6476. %@NL@%
  6477. %@CR:MSE9R164@%%@4@%The function first writes contents to a temporary file. If the write%@EH@%
  6478. operation is successful, the temporary file is renamed to the destination
  6479. file.%@NL@%
  6480. %@NL@%
  6481. %@CR:MSE9R165@%%@4@%You need not use %@AB@%FileWrite%@AE@% with the current file. Since the user is%@EH@%
  6482. currently editing this file, you can let the user decide when to save the
  6483. file to disk. However,%@AB@%FileWrite%@AE@% should be used with other files that you
  6484. open for editing.%@NL@%
  6485. %@NL@%
  6486. %@4@%%@AB@%■  Return value%@AE@%%@EH@%%@NL@%
  6487. %@NL@%
  6488. %@CR:MSE9R166@%%@4@%The function returns TRUE (nonzero) if the copy was successful and FALSE%@EH@%
  6489. (zero) if not.%@NL@%
  6490. %@NL@%
  6491. %@4@%%@AB@%■  See also%@AE@%%@EH@%%@NL@%
  6492. %@NL@%
  6493.      %@CR:MSE9R167@%%@4@%%@AB@%AddFile%@AE@%, %@AB@%FileRead%@AE@%, %@AB@%FileNameToHandle%@AE@%%@EH@%%@NL@%
  6494. %@NL@%
  6495. %@4@%%@AB@%■  Example%@AE@%%@EH@%%@NL@%
  6496. %@NL@%
  6497. %@CR:MSE9R168@%%@4@%The following example alters the contents of the file JUNK.TXT, then makes%@EH@%
  6498. the deletion permanent by calling %@AB@%FileWrite%@AE@%:%@NL@%
  6499. %@NL@%
  6500.      char *p = "JUNK.TXT";%@NL@%
  6501. %@NL@%
  6502.      if( (pFile = FileNameToHandle(p, NULL)) == 0 )%@NL@%
  6503.      {%@NL@%
  6504.          pFile = AddFile( p );%@NL@%
  6505.          FileRead( p, pFile );%@NL@%
  6506.      }%@NL@%
  6507.      .%@NL@%
  6508.      .%@NL@%
  6509.      .%@NL@%
  6510.      %@AI@%/* Manipulate data in the file *%@AE@%/%@NL@%
  6511.      .%@NL@%
  6512.      .%@NL@%
  6513.      .%@NL@%
  6514.      FileWrite( p, pFile );%@NL@%
  6515. %@NL@%
  6516. %@NL@%
  6517. %@CR:MSE9R170@%%@3@%%@AB@%GetCursor%@AE@%%@EH@%%@NL@%
  6518. %@NL@%
  6519. %@4@%%@AB@%■  Summary%@AE@%%@EH@%%@NL@%
  6520. %@NL@%
  6521.      %@CR:MSE9R171@%%@AB@%#include <ext.h>%@AE@%%@NL@%
  6522. %@NL@%
  6523.      %@AB@%void pascal GetCursor%@AE@% %@AI@%(px, py)%@AE@%;%@NL@%
  6524.      %@AB@%COL far%@AE@% %@AI@%*px%@AE@%;%@NL@%
  6525.      %@AB@%LINE far%@AE@% %@AI@%*py%@AE@%;%@NL@%
  6526. %@NL@%
  6527. %@4@%%@AB@%■  Description%@AE@%%@EH@%%@NL@%
  6528. %@NL@%
  6529. %@CR:MSE9R172@%%@4@%The %@AB@%GetCursor%@AE@% function indicates current cursor position by modifying the%@EH@%
  6530. variables to which %@AI@%px%@AE@% and %@AI@%py%@AE@% point. The function sets %@AI@%*px%@AE@% to the current
  6531. cursor column, and %@AI@%*py%@AE@% to the current cursor line.%@NL@%
  6532. %@NL@%
  6533. %@CR:MSE9R173@%%@4@%Upon return, the numbers pointed to by %@AI@%px%@AE@% and %@AI@%py%@AE@% indicate the column and%@EH@%
  6534. row, respectively, of the current cursor position.%@NL@%
  6535. %@NL@%
  6536. %@4@%%@AB@%■  Return value%@AE@%%@EH@%%@NL@%
  6537. %@NL@%
  6538. %@CR:MSE9R174@%%@4@%The function does not return a value.%@EH@%%@NL@%
  6539. %@NL@%
  6540. %@4@%%@AB@%■  See also%@AE@%%@EH@%%@NL@%
  6541. %@NL@%
  6542.      %@CR:MSE9R175@%%@AB@%MoveCur%@AE@%%@NL@%
  6543. %@NL@%
  6544. %@4@%%@AB@%■  Example%@AE@%%@EH@%%@NL@%
  6545. %@NL@%
  6546.      LINE  yCur;%@NL@%
  6547.      COL   xCur;%@NL@%
  6548.      .%@NL@%
  6549.      .%@NL@%
  6550.      .%@NL@%
  6551.           GetCursor( &xCur, &yCur );%@NL@%
  6552. %@NL@%
  6553. %@NL@%
  6554. %@CR:MSE9R180@%%@3@%%@AB@%GetLine%@AE@%%@EH@%%@NL@%
  6555. %@NL@%
  6556. %@4@%%@AB@%■  Summary%@AE@%%@EH@%%@NL@%
  6557. %@NL@%
  6558.      %@CR:MSE9R181@%%@AB@%#include <ext.h>%@AE@%%@NL@%
  6559. %@NL@%
  6560.      %@AB@%int pascal GetLine%@AE@% (%@AI@%line%@AE@%, %@AI@%buf%@AE@%, %@AI@%pFile%@AE@%)%@NL@%
  6561.      %@AB@%LINE%@AE@% %@AI@%line%@AE@%;%@NL@%
  6562.      %@AB@%char far *%@AE@%%@AI@%buf%@AE@%%@NL@%
  6563.      %@AB@%PFILE%@AE@% %@AI@%pFile%@AE@%;%@NL@%
  6564. %@NL@%
  6565. %@4@%%@AB@%■  Description%@AE@%%@EH@%%@NL@%
  6566. %@NL@%
  6567. %@CR:MSE9R182@%%@4@%The %@AB@%GetLine%@AE@% function is the principal means for reading text from a file%@EH@%
  6568. buffer.%@NL@%
  6569. %@NL@%
  6570. %@CR:MSE9R183@%%@4@%The function reads a specified line of text and copies the line into a%@EH@%
  6571. character string pointed to by %@AI@%buf%@AE@%. The editor terminates the string with a
  6572. null value. The %@AI@%line%@AE@% parameter contains a line number to read. In
  6573. extensions, line numbers are always zero based. The %@AI@%pFile%@AE@% parameter is the
  6574. handle to the file.%@NL@%
  6575. %@NL@%
  6576. %@CR:MSE9R184@%%@4@%If the %@AB@%realtabs%@AE@% switch is off, the function expands tabs to spaces (as%@EH@%
  6577. indicated by the %@AB@%entab%@AE@% and %@AB@%filetab%@AE@% switches) before copying the text to %@AI@%buf%@AE@%.%@NL@%
  6578. %@NL@%
  6579. %@4@%%@AB@%■  Return value%@AE@%%@EH@%%@NL@%
  6580. %@NL@%
  6581. %@CR:MSE9R185@%%@4@%The function returns the number of characters in the line after any tab%@EH@%
  6582. conversion.%@NL@%
  6583. %@NL@%
  6584. %@4@%%@AB@%■  See also%@AE@%%@EH@%%@NL@%
  6585. %@NL@%
  6586.      %@CR:MSE9R186@%%@4@%%@AB@%CopyLine%@AE@%, %@AB@%PutLine%@AE@%, %@AB@%FileNameToHandle%@AE@%%@EH@%%@NL@%
  6587. %@NL@%
  6588. %@4@%%@AB@%■  Example%@AE@%%@EH@%%@NL@%
  6589. %@NL@%
  6590. %@CR:MSE9R187@%%@4@%The following example reads the line of text that includes the initial%@EH@%
  6591. cursor position and copies it into %@AI@%buf%@AE@%:%@NL@%
  6592. %@NL@%
  6593.      PFILE cfile;%@NL@%
  6594.      LINE  yCur;%@NL@%
  6595.      COL   xCur;%@NL@%
  6596.       char  buf[BUFLEN];%@NL@%
  6597.      int   len; .%@NL@%
  6598.      .%@NL@%
  6599.      .%@NL@%
  6600.          cfile = FileNameToHandle( "", NULL );%@NL@%
  6601.          GetCursor( &xCur, &yCur );%@NL@%
  6602.          len = GetLine( yCur, buf, cfile );%@NL@%
  6603. %@NL@%
  6604. %@NL@%
  6605. %@CR:MSE9R190@%%@3@%%@AB@%KbHook%@AE@%%@EH@%%@NL@%
  6606. %@NL@%
  6607. %@4@%%@AB@%■  Summary%@AE@%%@EH@%%@NL@%
  6608. %@NL@%
  6609.      %@CR:MSE9R191@%%@AB@%#include <ext.h>%@AE@%%@NL@%
  6610. %@NL@%
  6611.      %@AB@%void pascal KbHook%@AE@%();%@NL@%
  6612. %@NL@%
  6613. %@4@%%@AB@%■  Description%@AE@%%@EH@%%@NL@%
  6614. %@NL@%
  6615. %@CR:MSE9R192@%%@4@%The %@AB@%KbHook%@AE@% function reverses the effect of the %@AB@%KbUnHook%@AE@% function and%@EH@%
  6616. restores normal keyboard-input reading by the editor.%@NL@%
  6617. %@NL@%
  6618. %@4@%%@AB@%■  Return value%@AE@%%@EH@%%@NL@%
  6619. %@NL@%
  6620. %@CR:MSE9R193@%%@4@%The function does not return a value.%@EH@%%@NL@%
  6621. %@NL@%
  6622. %@4@%%@AB@%■  See also%@AE@%%@EH@%%@NL@%
  6623. %@NL@%
  6624.      %@CR:MSE9R194@%%@AB@%KhUnHook%@AE@%%@NL@%
  6625. %@NL@%
  6626. %@4@%%@AB@%■  Example%@AE@%%@EH@%%@NL@%
  6627. %@NL@%
  6628.      KbHook( );%@NL@%
  6629. %@NL@%
  6630. %@NL@%
  6631. %@CR:MSE9R200@%%@3@%%@AB@%KbUnHook%@AE@%%@EH@%%@NL@%
  6632. %@NL@%
  6633. %@4@%%@AB@%■  Summary%@AE@%%@EH@%%@NL@%
  6634. %@NL@%
  6635.      %@CR:MSE9R201@%%@AB@%#include <ext.h>%@AE@%%@NL@%
  6636. %@NL@%
  6637.      %@AB@%void pascal KbUnHook%@AE@%();%@NL@%
  6638. %@NL@%
  6639. %@4@%%@AB@%■  Descripti on%@AE@%%@EH@%%@NL@%
  6640. %@NL@%
  6641. %@CR:MSE9R202@%%@4@%The %@AB@%KbUnHook%@AE@% function changes the focus of the keyboard so that keyboard%@EH@%
  6642. input is no longer read by the editor.  When attempting to use system-level
  6643. calls to read from the keyboard, it is necessary to first call this
  6644. function.%@NL@%
  6645. %@NL@%
  6646. %@CR:MSE9R203@%%@4@%In particular, it is necessary to call the %@AB@%KbUnHook%@AE@% function before%@EH@%
  6647. transferring control to a program that reads directly from the keyboard by
  6648. using operating-system or BIOS calls, or by working directly with hardware.%@NL@%
  6649. %@NL@%
  6650. %@CR:MSE9R204@%%@4@%You normally do not need to call this function. For most work with the%@EH@%
  6651. keyboard, use the %@AB@%ReadChar%@AE@% function. %@AB@%ReadChar%@AE@% lets the editor read the
  6652. keyboard for you, but allows you to intercept the keystroke and evaluate it
  6653. in any way you choose. Use %@AB@%KbUnHook%@AE@% only for situations that %@AB@%ReadChar%@AE@% cannot
  6654. accommodate.%@NL@%
  6655. %@NL@%
  6656. %@4@%%@AB@%■  Return value%@AE@%%@EH@%%@NL@%
  6657. %@NL@%
  6658. %@CR:MSE9R205@%%@4@%The function does not return a value.%@EH@%%@NL@%
  6659. %@NL@%
  6660. %@4@%%@AB@%■  See also%@AE@%%@EH@%%@NL@%
  6661. %@NL@%
  6662.      %@CR:MSE9R206@%%@AB@%KbHook%@AE@%%@NL@%
  6663. %@NL@%
  6664. %@4@%%@AB@%■  Example%@AE@%%@EH@%%@NL@%
  6665. %@NL@%
  6666.      KbUnHook( );%@NL@%
  6667. %@NL@%
  6668. %@NL@%
  6669. %@CR:MSE9R210@%%@3@%%@AB@%MoveCur%@AE@%%@EH@%%@NL@%
  6670. %@NL@%
  6671. %@4@%%@AB@%■  Summary%@AE@%%@EH@%%@NL@%
  6672. %@NL@%
  6673.      %@CR:MSE9R211@%%@AB@%#include <ext.h>%@AE@%%@NL@%
  6674. %@NL@%
  6675.      %@AB@%void pascal MoveCur%@AE@% (%@AI@%x%@AE@%, %@AI@%y%@AE@%)%@NL@%
  6676.      %@AB@%COL%@AE@% %@AI@%x%@AE@%;%@NL@%
  6677.      %@AB@%LINE%@AE@% %@AI@%y%@AE@%;%@NL@%
  6678. %@NL@%
  6679. %@4@%%@AB@%■  Description%@AE@%%@EH@%%@NL@%
  6680. %@NL@%
  6681. %@CR:MSE9R212@%%@4@%The %@AB@%MoveCur%@AE@% function moves the cursor to the specified position within the%@EH@%
  6682. current file. If the cursor is within the same window, no window movement
  6683. occurs. Otherwise, the window scrolls as needed, and the cursor is placed at
  6684. a common position specified by the numeric switch %@AB@%hike.%@AE@%%@NL@%
  6685. %@NL@%
  6686. %@CR:MSE9R213@%%@4@%After the function is called, the cursor moves to column %@AI@%x%@AE@%, line %@AI@%y%@AE@% of the%@EH@%
  6687. current file. The editing window scrolls, if necessary, to display this
  6688. position within the window.%@NL@%
  6689. %@NL@%
  6690. %@4@%%@AB@%■  Return value%@AE@%%@EH@%%@NL@%
  6691. %@NL@%
  6692. %@CR:MSE9R214@%%@4@%The function does not return a value.%@EH@%%@NL@%
  6693. %@NL@%
  6694. %@4@%%@AB@%■  See also%@AE@%%@EH@%%@NL@%
  6695. %@NL@%
  6696.      %@CR:MSE9R215@%%@AB@%GetCursor%@AE@%%@NL@%
  6697. %@NL@%
  6698. %@4@%%@AB@%■  Example%@AE@%%@EH@%%@NL@%
  6699. %@NL@%
  6700. %@CR:MSE9R216@%%@4@%The following example edits the file but restores the initial cursor%@EH@%
  6701. position:%@NL@%
  6702. %@NL@%
  6703.      GetCursor( &xCur, &yCur );%@NL@%
  6704.      .%@NL@%
  6705.      .%@NL@%
  6706.      .%@NL@%
  6707.      %@AI@%/* Modify the file */%@AE@%%@NL@%
  6708.      .%@NL@%
  6709.      .%@NL@%
  6710.      .%@NL@%
  6711.      MoveCur( xCur, yCur );%@NL@%
  6712. %@NL@%
  6713. %@NL@%
  6714. %@CR:MSE9R220@%%@3@%%@AB@%pFileToTop%@AE@%%@EH@%%@NL@%
  6715. %@NL@%
  6716. %@4@%%@AB@%■  Summary%@AE@%%@EH@%%@NL@%
  6717. %@NL@%
  6718.      %@CR:MSE9R221@%%@AB@%#include <ext.h>%@AE@%%@NL@%
  6719. %@NL@%
  6720.      %@AB@%void pascal pFileToTop%@AE@%%@AI@% (pFileTmp)%@AE@%%@NL@%
  6721.      %@AB@%PFILE%@AE@% %@AI@%pFileTmp%@AE@%;%@NL@%
  6722. %@NL@%
  6723. %@4@%%@AB@%■  Description%@AE@%%@EH@%%@NL@%
  6724. %@NL@%
  6725. %@CR:MSE9R222@%%@4@%The %@AB@%pFileToTop%@AE@% function selects a file as the current file and makes it%@EH@%
  6726. visible in the current window.  The function accomplishes this operation by
  6727. moving the specified file handle to the top of the file list for the current
  6728. window. (This list is stored in the <information-file> pseudo file.)%@NL@%
  6729. %@NL@%
  6730. %@CR:MSE9R223@%%@4@%The parameter %@AI@%pFileTmp%@AE@% is the file handle to move to the top of the file%@EH@%
  6731. list.%@NL@%
  6732. %@NL@%
  6733. %@4@%%@AB@%■  Return value%@AE@%%@EH@%%@NL@%
  6734. %@NL@%
  6735. %@CR:MSE9R224@%%@4@%The function does not return a value.%@EH@%%@NL@%
  6736. %@NL@%
  6737. %@4@%%@AB@%■  See also%@AE@%%@EH@%%@NL@%
  6738. %@NL@%
  6739.      %@CR:MSE9R225@%%@4@%%@AB@%AddFile%@AE@%, %@AB@%FileNameToHandle%@AE@%%@EH@%%@NL@%
  6740. %@NL@%
  6741. %@4@%%@AB@%■  Example%@AE@%%@EH@%%@NL@%
  6742. %@NL@%
  6743.      pFileToTop( pFile );%@NL@%
  6744. %@NL@%
  6745. %@NL@%
  6746. %@CR:MSE9R230@%%@3@%%@AB@%PutLine%@AE@%%@EH@%%@NL@%
  6747. %@NL@%
  6748. %@4@%%@AB@%■  Summary%@AE@%%@EH@%%@NL@%
  6749. %@NL@%
  6750.      %@CR:MSE9R231@%%@AB@%#include <ext.h>%@AE@%%@NL@%
  6751. %@NL@%
  6752.      %@AB@%void pascal PutLine%@AE@% (%@AI@%line%@AE@%, %@AI@%buf%@AE@%, %@AI@%pFile%@AE@%)%@NL@%
  6753.      %@AB@%LINE%@AE@% %@AI@%line%@AE@%;%@NL@%
  6754.      %@AB@%char far *%@AE@%%@AI@%buf%@AE@%;%@NL@%
  6755.      %@AB@%PFILE%@AE@% %@AI@%pFile%@AE@%;%@NL@%
  6756. %@NL@%
  6757. %@4@%%@AB@%■  Description%@AE@%%@EH@%%@NL@%
  6758. %@NL@%
  6759. %@CR:MSE9R232@%%@4@%The %@AB@%PutLine%@AE@% function is the principal means for writing text to a file%@EH@%
  6760. buffer.%@NL@%
  6761. %@NL@%
  6762. %@CR:MSE9R233@%%@4@%The function replaces a single line of text. The parameter %@AI@%buf%@AE@% points to the%@EH@%
  6763. string that contains the new line of text. This string should terminate with
  6764. a null value, but it should not contain a new-line character.%@NL@%
  6765. %@NL@%
  6766. %@CR:MSE9R234@%%@4@%The parameter %@AI@%line%@AE@% contains the line number at which the replacement is to%@EH@%
  6767. take place. Line numbers start at 0; if %@AI@%line%@AE@% has the value 0, the new line
  6768. of text is inserted at the beginning of the file.%@NL@%
  6769. %@NL@%
  6770. %@CR:MSE9R235@%%@4@%If %@AI@%line%@AE@% is greater than the number of lines in the file, %@AB@%PutLine%@AE@% inserts%@EH@%
  6771. empty lines at the end of the file.%@NL@%
  6772. %@NL@%
  6773. %@4@%%@AB@%■  Return value%@AE@%%@EH@%%@NL@%
  6774. %@NL@%
  6775. %@CR:MSE9R236@%%@4@%The function does not return a value.%@EH@%%@NL@%
  6776. %@NL@%
  6777. %@4@%%@AB@%■  See also%@AE@%%@EH@%%@NL@%
  6778. %@NL@%
  6779.      %@CR:MSE9R237@%%@4@%%@AB@%CopyLine%@AE@%, %@AB@%GetLine%@AE@%, %@AB@%FileLength%@AE@%, %@AB@%FileNameToHandle%@AE@%%@EH@%%@NL@%
  6780. %@NL@%
  6781. %@4@%%@AB@%■  Example%@AE@%%@EH@%%@NL@%
  6782. %@NL@%
  6783. %@CR:MSE9R238@%%@4@%The following code replaces the first line of the current file with the%@EH@%
  6784. string pointed to by %@AS@%buf%@AE@%:%@NL@%
  6785. %@NL@%
  6786.      PutLine( 0, buf, cfile );%@NL@%
  6787. %@NL@%
  6788. %@NL@%
  6789. %@CR:MSE9R240@%%@3@%%@AB@%ReadChar%@AE@%%@EH@%%@NL@%
  6790. %@NL@%
  6791. %@4@%%@AB@%■  Summary%@AE@%%@EH@%%@NL@%
  6792. %@NL@%
  6793.      %@CR:MSE9R241@%%@AB@%#include <ext.h>%@AE@%%@NL@%
  6794. %@NL@%
  6795.      %@AB@%long pascal ReadChar%@AE@%();%@NL@%
  6796. %@NL@%
  6797. %@4@%%@AB@%■  Description%@AE@%%@EH@%%@NL@%
  6798. %@NL@%
  6799. %@CR:MSE9R242@%%@4@%The %@AB@%ReadChar%@AE@% function returns the next keystroke typed. The editor does not%@EH@%
  6800. echo the keystroke or invoke a function. Once intercepted, the keystroke
  6801. cannot be placed back into the keyboard buffer for execution. The function
  6802. returns a long integer composed of four bytes containing information about
  6803. the keystroke:%@NL@%
  6804. %@NL@%
  6805. %@CR:MSE9R243@%%@AB@%Byte                        Description%@AE@%%@NL@%
  6806. %@NL@%
  6807. 0                           ASCII character%@NL@%
  6808. %@NL@%
  6809. 1                           scan-code character%@NL@%
  6810. %@NL@%
  6811. 2                           shift information, in xxNxACxS format described%@NL@%
  6812.                             below%@NL@%
  6813. %@NL@%
  6814. 3                           null character (0), which is unused%@NL@%
  6815. %@NL@%
  6816. %@CR:MSE9R244@%%@4@%Byte 2 provides information about the shift-key conditions (N)UMLOCK, (A)LT,%@EH@%
  6817. (C)TRL, and (S)HIFT, in the format xxNxACxS. Each x indicates an unused bit.
  6818. The bits N, A, C, and S are each on or off, depending on the associated
  6819. condition.  For example, if the ALT, CTRL, and SHIFT conditions are all on,
  6820. but the NUMLOCK condition is off, byte 2 is returned as 00001101.  Note: the
  6821. N bit is 0 unless the key pressed is on the numeric keypad.%@NL@%
  6822. %@NL@%
  6823. %@4@%%@AB@%■  Return value%@AE@%%@EH@%%@NL@%
  6824. %@NL@%
  6825. %@CR:MSE9R245@%%@4@%The function returns a long integer containing the keystroke information.%@EH@%%@NL@%
  6826. %@NL@%
  6827. %@4@%%@AB@%■  See also%@AE@%%@EH@%%@NL@%
  6828. %@NL@%
  6829.      %@CR:MSE9R246@%%@4@%%@AB@%ReadCmd%@AE@%, %@AB@%KbHook%@AE@%%@EH@%%@NL@%
  6830. %@NL@%
  6831. %@4@%%@AB@%■  Example%@AE@%%@EH@%%@NL@%
  6832. %@NL@%
  6833.      #define ASCIIBYTE  0x000000FF%@NL@%
  6834.      #define SCANBYTE   0x0000FF00%@NL@%
  6835.      #define CTRLBIT    0x00040000%@NL@%
  6836.      #define SHIFTBIT   0x00010000%@NL@%
  6837.      #define NUMLKBIT   0x00200000%@NL@%
  6838. %@NL@%
  6839.      long keystroke;%@NL@%
  6840.      int  ascii_key, scan_byte;%@NL@%
  6841.      int  contrl_on, shift_on, numlk_on;%@NL@%
  6842. %@NL@%
  6843.           keystroke = ReadChar();%@NL@%
  6844.           ascii_key = keystroke & ASCIIBYTE;%@NL@%
  6845.           scan_byte = (keystroke & SCANBYTE) >>> 8;%@NL@%
  6846.           contrl_on = (keystroke & CTRLBIT) > 0;%@NL@%
  6847.           shift_on  = (keystroke & SHIFTBIT) > 0;%@NL@%
  6848.           numlk_on  = (keystroke & NUMLKBIT) > 0;%@NL@%
  6849. %@NL@%
  6850. %@NL@%
  6851. %@CR:MSE9R250@%%@3@%%@AB@%ReadCmd%@AE@%%@EH@%%@NL@%
  6852. %@NL@%
  6853. %@4@%%@AB@%■  Summary%@AE@%%@EH@%%@NL@%
  6854. %@NL@%
  6855.      %@CR:MSE9R251@%%@AB@%#include <ext.h>%@AE@%%@NL@%
  6856. %@NL@%
  6857.      %@AB@%PCMD pascal ReadCmd%@AE@%(  );%@NL@%
  6858. %@NL@%
  6859. %@4@%%@AB@%■  Description%@AE@%%@EH@%%@NL@%
  6860. %@NL@%
  6861. %@CR:MSE9R252@%%@4@%The %@AB@%ReadCmd%@AE@% function waits for input from the user. The next keystroke is%@EH@%
  6862. translated into a function reference (according to current assignments), but
  6863. the function is not executed. Instead, the editor passes information about
  6864. the function in the form of a structure of type %@AB@%cmdDesc%@AE@%. Once intercepted,
  6865. the keystroke cannot be placed back for execution.%@NL@%
  6866. %@NL@%
  6867. %@4@%%@AB@%■  Return value%@AE@%%@EH@%%@NL@%
  6868. %@NL@%
  6869. %@CR:MSE9R253@%%@4@%The return value is a structure of type %@AB@%cmdDesc%@AE@%. The structure describes the%@EH@%
  6870. command corresponding to the keystroke pressed.%@NL@%
  6871. %@NL@%
  6872. %@4@%%@AB@%■  See also%@AE@%%@EH@%%@NL@%
  6873. %@NL@%
  6874.      %@CR:MSE9R254@%%@AB@%ReadChar%@AE@%%@NL@%
  6875. %@NL@%
  6876. %@NL@%
  6877. %@CR:MSE9R260@%%@3@%%@AB@%RemoveFile%@AE@%%@EH@%%@NL@%
  6878. %@NL@%
  6879. %@4@%%@AB@%■  Summary%@AE@%%@EH@%%@NL@%
  6880. %@NL@%
  6881.      %@CR:MSE9R261@%%@AB@%#include <ext.h>%@AE@%%@NL@%
  6882. %@NL@%
  6883.      %@AB@%flagType pascal RemoveFile%@AE@% (%@AI@%pFileRem%@AE@%)%@NL@%
  6884.      %@AB@%PFILE%@AE@%%@AI@%pFileRem%@AE@%;%@NL@%
  6885. %@NL@%
  6886. %@4@%%@AB@%■  Description%@AE@%%@EH@%%@NL@%
  6887. %@NL@%
  6888. %@CR:MSE9R262@%%@4@%The %@AB@%RemoveFile%@AE@% function removes a file handle from memory, along with the%@EH@%
  6889. file buffer and all other memory-resident information about the file.
  6890. Calling this function helps to free up main memory, but it has no effect on
  6891. the file as stored on disk.%@NL@%
  6892. %@NL@%
  6893. %@CR:MSE9R263@%%@4@%This function is the converse of the %@AB@%AddFile%@AE@% function. %@AB@%RemoveFile%@AE@% closes a%@EH@%
  6894. file. In other words, the file is no longer open for editing. However,
  6895. unlike the C function %@AB@%fclose%@AE@%, the %@AB@%RemoveFile%@AE@% function does not force the
  6896. writing of the file buffer to disk.%@NL@%
  6897. %@NL@%
  6898. %@CR:MSE9R264@%%@4@%The parameter %@AI@%pFileRem%@AE@% is the file handle of the file to be removed.%@EH@%%@NL@%
  6899. %@NL@%
  6900. %@4@%%@AB@%■  Return value%@AE@%%@EH@%%@NL@%
  6901. %@NL@%
  6902. %@CR:MSE9R265@%%@4@%The function does not return a value.%@EH@%%@NL@%
  6903. %@NL@%
  6904. %@4@%%@AB@%■  See also%@AE@%%@EH@%%@NL@%
  6905. %@NL@%
  6906.      %@CR:MSE9R266@%%@4@%%@AB@%AddFile%@AE@%, %@AB@%FileNameToHandle%@AE@%%@EH@%%@NL@%
  6907. %@NL@%
  6908. %@4@%%@AB@%■  Example%@AE@%%@EH@%%@NL@%
  6909. %@NL@%
  6910.      RemoveFile( pNewFile );%@NL@%
  6911. %@NL@%
  6912. %@NL@%
  6913. %@CR:MSE9R270@%%@3@%%@AB@%Replace%@AE@%%@EH@%%@NL@%
  6914. %@NL@%
  6915. %@4@%%@AB@%■  Summary%@AE@%%@EH@%%@NL@%
  6916. %@NL@%
  6917.      %@CR:MSE9R271@%%@AB@%#include <ext.h>%@AE@%%@NL@%
  6918. %@NL@%
  6919.      %@AB@%flagType pascal Replace%@AE@% (%@AI@%c%@AE@%, %@AI@%x%@AE@%, %@AI@%y%@AE@%, %@AI@%pFile%@AE@%, %@AI@%fInsert%@AE@%)%@NL@%
  6920.      %@AB@%char%@AE@% %@AI@%c%@AE@%;%@NL@%
  6921.      %@AB@%COL%@AE@% %@AI@%x%@AE@%;%@NL@%
  6922.      %@AB@%LINE%@AE@% %@AI@%y%@AE@%;%@NL@%
  6923.      %@AB@%PFILE%@AE@% %@AI@%pFile%@AE@%;%@NL@%
  6924.      %@AB@%flagType%@AE@% %@AI@%fInsert%@AE@%;%@NL@%
  6925. %@NL@%
  6926. %@4@%%@AB@%■  Description%@AE@%%@EH@%%@NL@%
  6927. %@NL@%
  6928. %@CR:MSE9R272@%%@4@%The %@AB@%Replace%@AE@% function inserts or replaces characters one at a time. The %@AI@%c%@AE@%%@EH@%
  6929. parameter contains the new character. The %@AI@%x%@AE@% and %@AI@%y%@AE@% parameters indicate the
  6930. file position──by column and line──where the edit is to take place. Line
  6931. numbers are zero based.%@NL@%
  6932. %@NL@%
  6933. %@CR:MSE9R273@%%@4@%The %@AI@%pFile%@AE@% parameter is a file parameter handle returned by the%@EH@%
  6934. %@AB@%FileNameToHandle%@AE@% function. To specify insertion, set %@AI@%fInsert%@AE@% to TRUE
  6935. (nonzero). To specify replacement, set %@AI@%fInsert%@AE@% to FALSE (zero).%@NL@%
  6936. %@NL@%
  6937. %@4@%%@AB@%■  Return value%@AE@%%@EH@%%@NL@%
  6938. %@NL@%
  6939. %@CR:MSE9R274@%%@4@%The function returns TRUE (nonzero) if the edit is successful and FALSE%@EH@%
  6940. (zero) otherwise.%@NL@%
  6941. %@NL@%
  6942. %@4@%%@AB@%■  See also%@AE@%%@EH@%%@NL@%
  6943. %@NL@%
  6944.      %@CR:MSE9R275@%%@AB@%PutLine%@AE@%%@NL@%
  6945. %@NL@%
  6946. %@4@%%@AB@%■  Example%@AE@%%@EH@%%@NL@%
  6947. %@NL@%
  6948. %@CR:MSE9R276@%%@4@%The following code inserts the word "Hello" at line %@AS@%y%@AE@% and column %@AS@%x%@AE@% of the%@EH@%
  6949. current file:%@NL@%
  6950. %@NL@%
  6951.      #define  TRUE  -1%@NL@%
  6952.      char    *p; PFILE   cfile;  /* handle to current file */%@NL@%
  6953.      .%@NL@%
  6954.      .%@NL@%
  6955.      .%@NL@%
  6956.      cfile = FileNameToHandle( "", NULL );  /* initialize cfile */%@NL@%
  6957.      for ( p = "Hello"; *p; p++, y++ )%@NL@%
  6958.          Replace( *p, x, y, cfile, TRUE );%@NL@%
  6959. %@NL@%
  6960. %@NL@%
  6961. %@CR:MSE9R280@%%@3@%%@AB@%SetKey%@AE@%%@EH@%%@NL@%
  6962. %@NL@%
  6963. %@4@%%@AB@%■  Summary%@AE@%%@EH@%%@NL@%
  6964. %@NL@%
  6965.      %@CR:MSE9R281@%%@AB@%#include <ext.h>%@AE@%%@NL@%
  6966. %@NL@%
  6967.      %@AB@%flagType pascal SetKey%@AE@% (%@AI@%name%@AE@%, %@AI@%p%@AE@%)%@NL@%
  6968.      %@AB@%char far *%@AE@%%@AI@%name%@AE@%, %@AB@%far *%@AE@%%@AI@%p%@AE@%;%@NL@%
  6969. %@NL@%
  6970. %@4@%%@AB@%■  Description%@AE@%%@EH@%%@NL@%
  6971. %@NL@%
  6972. %@CR:MSE9R282@%%@4@%The %@AB@%SetKey%@AE@% function assigns an editing function to a key.%@EH@%%@NL@%
  6973. %@NL@%
  6974. %@CR:MSE9R283@%%@4@%The %@AI@%name%@AE@% parameter points to a string containing the name of the function,%@EH@%
  6975. and the %@AI@%p%@AE@% parameter points to a string that names the key.%@NL@%
  6976. %@NL@%
  6977. %@4@%%@AB@%■  Return value%@AE@%%@EH@%%@NL@%
  6978. %@NL@%
  6979. %@CR:MSE9R284@%%@4@%The function returns TRUE (nonzero) if the assignment is successful and%@EH@%
  6980. FALSE (zero) otherwise.%@NL@%
  6981. %@NL@%
  6982. %@4@%%@AB@%■  See also%@AE@%%@EH@%%@NL@%
  6983. %@NL@%
  6984.      %@CR:MSE9R285@%%@4@%%@AB@%RemoveFile%@AE@%, %@AB@%Replace%@AE@%%@EH@%%@NL@%
  6985. %@NL@%
  6986. %@4@%%@AB@%■  Example%@AE@%%@EH@%%@NL@%
  6987. %@NL@%
  6988. %@CR:MSE9R286@%%@4@%The following code assigns the CTRL+X key to the newly defined function%@EH@%
  6989. %@AS@%NewFunc%@AE@%:%@NL@%
  6990. %@NL@%
  6991.      SetKey( "NewFunc", "ctrl+x" );%@NL@%
  6992. %@NL@%
  6993. %@NL@%
  6994. %@CR:MSEa0000@%%@1@%%@AB@%Appendix A  Reference Tables%@AE@%%@EH@%%@NL@%
  6995. ───────────────────────────────────────────────────────────────────────────%@NL@%
  6996. %@NL@%
  6997. %@NL@%
  6998. %@CR:MSEa1000@%%@2@%%@AB@%A.1  Categories of Editing Functions%@AE@%%@EH@%%@NL@%
  6999. %@NL@%
  7000. %@CR:MSEa1001@%%@4@%Table A.1 lists the editing functions by category and gives a brief%@EH@%
  7001. description of each function.%@NL@%
  7002. %@NL@%
  7003. %@CR:MSEaT100@%%@4@%%@AU@%Table A.1  Summary of Editing Functions by Category%@AE@%%@EH@%%@NL@%
  7004. %@NL@%
  7005. %@AB@%Command Manipulation      Description%@AE@%%@NL@%
  7006. %@NL@%
  7007. %@AI@%Arg%@AE@%                       Introduces an argument or function%@NL@%
  7008. %@AI@%Assign%@AE@%                    Assigns function to a keystroke%@NL@%
  7009. %@AI@%Boxstream%@AE@%                 Toggles between box and stream mode%@NL@%
  7010. %@AI@%Cancel%@AE@%                    Cancels current operation%@NL@%
  7011. %@AI@%Execute%@AE@%                   Executes an editor function or macro list%@NL@%
  7012. %@AI@%Graphic%@AE@%                   Inserts the ASCII value of the key into the file%@NL@%
  7013. %@AI@%Lastselect%@AE@%                Recalls the last cursor-movement argument%@NL@%
  7014. %@AI@%Lasttext%@AE@%                  Recalls the last %@AI@%textarg%@AE@% entered%@NL@%
  7015. %@AI@%Meta%@AE@%                      Turns on the %@AI@%Meta%@AE@% command prefix%@NL@%
  7016. %@AI@%Quote%@AE@%                     Treats next character literally%@NL@%
  7017. %@AI@%Repeat%@AE@%                    Repeats the previous command%@NL@%
  7018. %@AI@%Undo%@AE@%                      Reverses the effect of the last editing change%@NL@%
  7019. %@NL@%
  7020. %@AB@%File Operations%@AE@%           %@AB@%Description%@AE@%%@NL@%
  7021. %@NL@%
  7022. %@AI@%Exit%@AE@%                      Exits the editor, with or without saving%@NL@%
  7023. %@AI@%Noedit%@AE@%                    Toggles the no-edit restriction%@NL@%
  7024. %@AI@%Paste%@AE@%                     Merges file or program output%@NL@%
  7025. %@AI@%Refresh%@AE@%                   Rereads file, discarding edits%@NL@%
  7026. %@AI@%Saveall%@AE@%                   Saves all modified files%@NL@%
  7027. %@AI@%Setfile%@AE@%                   Saves current file or loads a new file%@NL@%
  7028. %@NL@%
  7029. %@AB@%Cursor Movement%@AE@%           %@AB@%Description%@AE@%%@NL@%
  7030. %@NL@%
  7031. %@AI@%Backtab%@AE@%                   Moves cursor left to previous tab stop%@NL@%
  7032. %@AI@%Begfile%@AE@%                   Moves cursor to beginning of file%@NL@%
  7033. %@AI@%Begline%@AE@%                   Moves cursor left to beginning of line%@NL@%
  7034. %@AI@%Down%@AE@%                      Moves cursor down one line%@NL@%
  7035. %@AI@%Endfile%@AE@%                   Moves cursor to end of file%@NL@%
  7036. %@AI@%Endline%@AE@%                   Moves cursor to right of last character of line%@NL@%
  7037. %@AI@%Home%@AE@%                      Moves cursor to upper-left corner of window%@NL@%
  7038. %@AI@%Left%@AE@%                      Moves cursor left one character%@NL@%
  7039. %@AI@%Mpage%@AE@%                     Moves cursor back by one page%@NL@%
  7040. %@AI@%Mpara%@AE@%                     Moves cursor back by paragraphs%@NL@%
  7041. %@AI@%Mword%@AE@%                     Moves cursor back by words%@NL@%
  7042. %@AI@%Newline%@AE@%                   Moves cursor down to next line%@NL@%
  7043. %@AI@%Ppage%@AE@%                     Moves cursor forward by one page%@NL@%
  7044. %@AI@%Ppara%@AE@%                     Moves cursor forward by paragraphs%@NL@%
  7045. %@AI@%Pword%@AE@%                     Moves cursor forward by words%@NL@%
  7046. %@AI@%Right%@AE@%                     Moves cursor right one character%@NL@%
  7047. %@AI@%Tab%@AE@%                       Moves cursor right to next tab stop%@NL@%
  7048. %@AI@%Up%@AE@%                        Moves cursor up one line%@NL@%
  7049. %@NL@%
  7050. %@AB@%Mark/Goto Position%@AE@%        %@AB@%Description%@AE@%%@NL@%
  7051. %@NL@%
  7052. %@AI@%Mark%@AE@%                      Moves cursor to specified position in file%@NL@%
  7053. %@AI@%Restcur%@AE@%                   Restores cursor position saved with %@AI@%Savecur%@AE@%%@NL@%
  7054. %@AI@%Savecur%@AE@%                   Saves cursor position for use with %@AI@%Restcur%@AE@%%@NL@%
  7055. %@AI@%Mlines%@AE@%                    Moves window back by lines%@NL@%
  7056. %@AI@%Plines%@AE@%                    Moves window forward by lines%@NL@%
  7057. %@AI@%Setwindow%@AE@%                 Redisplays window%@NL@%
  7058. %@AI@%Window%@AE@%                    Creates, removes, or moves between windows%@NL@%
  7059. %@NL@%
  7060. %@AB@%Searching/Replacing%@AE@%       %@AB@%Description%@AE@%%@NL@%
  7061. %@NL@%
  7062. %@AI@%Mgrep%@AE@%                     Searches a series of files%@NL@%
  7063. %@AI@%Mreplace%@AE@%                  Replaces throughout a series of files%@NL@%
  7064. %@AI@%Msearch%@AE@%                   Searches backward%@NL@%
  7065. %@AI@%Psearch%@AE@%                   Searches forward%@NL@%
  7066. %@AI@%Qreplace%@AE@%                  Replaces with confirmation%@NL@%
  7067. %@AI@%Replace%@AE@%                   Replaces without confirmation%@NL@%
  7068. %@AI@%Searchall%@AE@%                 Highlights all occurrences of a string%@NL@%
  7069. %@NL@%
  7070. %@AB@%Special Insert%@AE@%            %@AB@%Description%@AE@%%@NL@%
  7071. %@NL@%
  7072. %@AI@%Curdate%@AE@%                   Inserts current date (e.g., 28-Nov-1988)%@NL@%
  7073. %@AI@%Curday%@AE@%                    Inserts current day (Sun...Sat)%@NL@%
  7074. %@AI@%Curfile%@AE@%                   Inserts name of current file%@NL@%
  7075. %@AI@%Curfileext%@AE@%                Inserts extension of current file%@NL@%
  7076. %@AI@%Curfilenam%@AE@%                Inserts base name of current file%@NL@%
  7077. %@AI@%Curtime%@AE@%                   Inserts current time (e.g., 13:45:55)%@NL@%
  7078. %@NL@%
  7079. %@AB@%Inserting/Deleting Text%@AE@%   %@AB@%Description%@AE@%%@NL@%
  7080. %@NL@%
  7081. %@AI@%Cdelete%@AE@%                   Deletes character to left, excluding line breaks%@NL@%
  7082. %@AI@%Copy%@AE@%                      Copies lines to the Clipboard%@NL@%
  7083. %@AI@%Delete%@AE@%                    Deletes the highlighted area%@NL@%
  7084. %@AI@%Emacscdel%@AE@%                 Deletes character to left, including line breaks%@NL@%
  7085. %@AI@%Emacsnewl%@AE@%                 Starts new line, breaking current line%@NL@%
  7086. %@AI@%Insert%@AE@%                    Inserts spaces into the highlighted area%@NL@%
  7087. %@AI@%Ldelete%@AE@%                   Deletes lines into the Clipboard%@NL@%
  7088. %@AI@%Linsert%@AE@%                   Inserts blank lines%@NL@%
  7089. %@AI@%Paste%@AE@%                     Inserts text from the Clipboard%@NL@%
  7090. %@AI@%Sdelete%@AE@%                   Deletes stream of text, including line breaks%@NL@%
  7091. %@AI@%Sinsert%@AE@%                   Inserts blanks, breaking lines if necessary%@NL@%
  7092. %@NL@%
  7093. %@AB@%Programming%@AE@%               %@AB@%Description%@AE@%%@NL@%
  7094. %@NL@%
  7095. %@AI@%Argcompile%@AE@%                Performs the %@AI@%Arg Compile%@AE@% command%@NL@%
  7096. %@AI@%Compile%@AE@%                   Executes compile or build command%@NL@%
  7097. %@AI@%Nextmsg%@AE@%                   Moves cursor to next error message%@NL@%
  7098. %@AI@%Pbal%@AE@%                      Balances parentheses and brackets%@NL@%
  7099. %@NL@%
  7100. %@AB@%Macro Creation%@AE@%            %@AB@%Description%@AE@%%@NL@%
  7101. %@NL@%
  7102. %@AI@%Assign%@AE@%                    Defines a macro%@NL@%
  7103. %@AI@%Message%@AE@%                   Displays message on the dialog line%@NL@%
  7104. %@AI@%Record%@AE@%                    Turns macro recording on or off%@NL@%
  7105. %@AI@%Tell%@AE@%                      Displays assignment or macro definition%@NL@%
  7106. %@NL@%
  7107. %@AB@%Miscellaneous%@AE@%             %@AB@%Description%@AE@%%@NL@%
  7108. %@NL@%
  7109. %@AI@%Environment%@AE@%               Executes and views environment settings%@NL@%
  7110. %@AI@%Information%@AE@%               Displays list of previously edited files%@NL@%
  7111. %@AI@%Initialize%@AE@%                Rereads initialization file%@NL@%
  7112. %@AI@%Insertmode%@AE@%                Toggles insert mode on and off%@NL@%
  7113. %@AI@%Print%@AE@%                     Prints all or part of a file%@NL@%
  7114. %@AI@%Shell%@AE@%                     Spawns a system-level shell or command line%@NL@%
  7115. %@NL@%
  7116. %@NL@%
  7117. %@CR:MSEa2000@%%@2@%%@AB@%A.2  Key Assignments for Editing Functions%@AE@%%@EH@%%@NL@%
  7118. %@NL@%
  7119. %@CR:MSEa2001@%%@4@%Table A.2 lists the editing functions and the assigned keys for each of the%@EH@%
  7120. configurations provided with the setup program.%@NL@%
  7121. %@NL@%
  7122. %@CR:MSEaT200@%%@CR:MSEa2002@%%@CR:MSEa2003@%%@4@%%@AU@%Table A.2  Function Assignments%@AE@%%@EH@%%@NL@%
  7123. %@TH:  176   6744  3 17 13 13 12 21 @%                              %@AB@%Quick/%@AE@%%@AB@%Function         Default      WordStar     BRIEF       Epsilon%@AE@%%@AI@%Arg%@AE@%              ALT+A        ALT+A        ALT+A       CTRL+U or CTRL+X%@AI@%Argcompile%@AE@%       ---          F5           ALT+F10     F5%@AI@%Assign%@AE@%           ALT+=        ALT+=        F7          F1%@AI@%Backtab%@AE@%          SHIFT+TAB    SHIFT+TAB    SHIFT+TAB   SHIFT+TAB%@AI@%Begfile%@AE@%          CTRL+PGUP ---             ---         ---%@AI@%Begline%@AE@%          HOME         HOME or      HOME        CTRL+A                              CTRL+QS%@AI@%Boxstream%@AE@%        CTRL+B       ---          ---         ---%@AI@%Cancel%@AE@%           ESC or       ESC          ESC         CTRL+C                 CTRL+BREAK%@AI@%Cdelete%@AE@%          CTRL+G       CTRL+G       BKSP        ---%@AI@%Compile%@AE@%          CTRL+F3      SHIFT+F3     CTRL+N      SHIFT+F3%@AI@%Copy%@AE@%             CTRL+INS     CTRL+INS     + (keypad)  ALT+W                 or press +                 (keypad)%@AI@%Curdate%@AE@%          ---          ---          ---         ---%@AI@%Curday%@AE@%           ---          ---          ---         ---%@AI@%Curfile%@AE@%          ---          ---          ---         ---%@AI@%Curfileext%@AE@%       ---          ---          ---         ---%@AI@%Curfilenam%@AE@%       ---          ---          ---         ---%@AI@%Curtime%@AE@%          ---          ---          ---         ---%@AI@%Delete%@AE@%           DEL          ---          ---         ---%@AI@%Down%@AE@%             DOWN or      DOWN or      DOWN        DOWN or CTRL+N                 CTRL+X       CTRL+X%@AI@%Emacscdel%@AE@%        BKSP         BKSP         ---         BKSP or CTRL+H%@AI@%Emacsnewl%@AE@%        ENTEREND     END or       END         CTRL+E%@AI@%Endfile%@AE@%          CTRL+PGDN    ---          CTRL+QD     ---%@AI@%Endline%@AE@%          END          END or       END         CTRL+E                              CTRL+QD%@AI@%Environment%@AE@%      ---          ---          ---         ---%@AI@%Execute%@AE@%          F7           F10          F10         ALT+X%@AI@%Exit%@AE@%             F8           ALT+X        ALT+X       F8%@AI@%Home%@AE@%             CTRL+HOME    CTRL+HOME    CTRL+HOME   HOME%@AI@%Information%@AE@%      SHIFT+F10    SHIFT+F1     ALT+B       SHIFT+F1%@AI@%Initialize%@AE@%       SHIFT+F8     ALT+F10      SHIFT+F10   ALT+F10%@AI@%Insert%@AE@%           ---          ---          ---         ---%@AI@%Insertmode%@AE@%       INS or       INS or       ALT+I       CTRL+V                 CTRL+V       CTRL+V%@AI@%Lastselect%@AE@%       CTRL+U       ---          ---         ---%@AI@%Lasttext%@AE@%         CTRL+O       ALT+L        ALT+L       ALT+L%@AI@%Ldelete%@AE@%          CTRL+Y       CTRL+Y       ALT+D       CTRL+K%@AI@%Left%@AE@%             LEFT or      LEFT         LEFT        LEFT or CTRL+B                 CTRL+S%@AI@%Linsert%@AE@%          CTRL+N       CTRL+N       CTRL+ENTER  CTRL+O%@AI@%Mark%@AE@%             CTRL+M       ALT+M        ALT+M       CTRL+@%@AI@%Message%@AE@%          ---          ---          ---         ---%@AI@%Meta%@AE@%             F9           F9           F9          F9%@AI@%Mgrep%@AE@%            ---          ---          ---         ---%@AI@%Mlines%@AE@%           CTRL+W       CTRL+W       ALT+U       CTRL+W%@AI@%Mpage%@AE@%            PGUP         PGUP or      PGUP        PGUP or ALT+V                 CTRL+R       CTRL+R%@AI@%Mpara%@AE@%            ---          CTRL+PGUP    CTRL+PGUP   ALT+UP%@AI@%Mreplace%@AE@%         ---          ---          ---         ---%@AI@%Msearch%@AE@%          F4           F4           ALT+F5      CTRL+R%@AI@%Mword%@AE@%            CTRL+LEFT    CTRL+LEFT    CTRL+LEFT   CTRL+LEFT or                 or CTRL+A                             ALT+B%@AI@%Newline%@AE@%          ---          ---          ENTER       ---%@AI@%Nextmsg%@AE@%          SHIFT+F3     ---          ---         ---%@AI@%Noedit%@AE@%           ---          ---          ---         ---%@AI@%Paste%@AE@%            SHIFT+INS    SHIFT+INS    INS         CTRL+Y or INS%@AI@%Pbal%@AE@%             CTRL+[       CTRL+[       CTRL+[      CTRL+[%@AI@%Plines%@AE@%           CTRL+Z       CTRL+Z       CTRL+Z      CTRL+Z%@AI@%Ppage%@AE@%            PGDN or      PGDN or      PDGN        PDGN                 CTRL+C       CTRL+C%@AI@%Ppara%@AE@%            ---          CTRL+PGDN    CTRL+PDGN   ALT+DOWN%@AI@%Print%@AE@%            CTRL+F8      ---          ---         ---                 or ALT+F2%@AI@%Psearch%@AE@%          F3           F3           F5          F4 or CTRL+S%@AI@%Pword%@AE@%            CTRL+RIGHT   CTRL+RIGHT   CTRL+RIGHT  CTRL+RIGHT                 or CTRL+F                             or ALT+F%@AI@%Qreplace%@AE@%         CTRL+\       ALT+F3       F6          ALT+F3 or ALT+5 or                                                       ALT+8%@AI@%Quote%@AE@%            CTRL+P       ALT+Q        ALT+Q       CTRL+Q%@AI@%Record%@AE@%           ALT+R        ---          ---         ---%@AI@%Refresh%@AE@%          SHIFT+F7     ALT+R        CTRL+]      ALT+R%@AI@%Repeat%@AE@%           ---          ---          ---         ---%@AI@%Replace%@AE@%          CTRL+L       CTRL+L       SHIFT+F6    ---%@AI@%Restcur%@AE@%          ---          ---          ---         ---%@AI@%Right%@AE@%            RIGHT or     RIGHT or     RIGHT       RIGHT or CTRL+F                 CTRL+D       CTRL+D%@AI@%Saveall%@AE@%          ---          ---          ---         ---%@AI@%Savecur%@AE@%          ---          ---          ---         ---%@AI@%Sdelete%@AE@%          ---          DEL          DEL or      DEL or                                           press       CTRL+D                                           - (keypad)%@AI@%Searchall%@AE@%        SHIFT+F6     ---          ---         ---%@AI@%Setfile%@AE@%          F2           F2           ALT+N       F2%@AI@%Setwindow%@AE@%        CTRL+]       CTRL+]       F2          CTRL+]%@AI@%Shell%@AE@%            SHIFT+F9     SHIFT+F9     ALT+Z       ALT+Z%@AI@%Sinsert%@AE@%          CTRL+J       ALT+INS      CTRL+INS    ALT+INS%@AI@%Tab%@AE@%              TAB          TAB          TAB         TAB or CTRL+I%@AI@%Tell%@AE@%             CTRL+T       ---          ---         ---%@AI@%Undo%@AE@%             ALT+BKSP     ALT+BKSP     * (keypad)  CTRL+BKSP%@AI@%Up%@AE@%               UP or        UP or        UP          UP or CTRL+P                 CTRL+E       CTRL+E%@AI@%Window%@AE@%           F6           F6           F1          ALT+PGDN%@TE:  176   6744  3 17 13 13 12 21 @%
  7124. %@NL@%
  7125. %@CR:MSEa3000@%%@2@%%@AB@%A.3  Comprehensive Listing of Editing Functions%@AE@%%@EH@%%@NL@%
  7126. %@NL@%
  7127. %@CR:MSEa3001@%%@4@%Table A.3 gives a comprehensive listing of the editing functions and syntax%@EH@%
  7128. for each command. Default keystrokes, if available, are given in
  7129. parentheses.%@NL@%
  7130. %@NL@%
  7131. %@CR:MSEaT300@%%@4@%%@AU@%Table A.3  Comprehensive List of Functions%@AE@%%@EH@%%@NL@%
  7132. %@TH:  915  62451  4 16 31 60 @%Function(and DefaultKeysrokes)      Syntax                         Description%@AI@%Arg             Arg%@AE@%                            Introduces a function or an argument for a(ALT+A)                                        function.%@AI@%Argcompile      Argcompile%@AE@%                     Performs the %@AI@%Arg Compile command%@AE@%. A macro for                                               this function appears in the TOOLS.PRE file.%@AI@%Assign          Assign%@AE@%                         Treats the entire line (except for the line(ALT+=)                                        break) on which the cursor is positioned as a                                               function assignment or macro definition.                %@AI@%Arg Assign%@AE@%                     Treats the text from the initial cursor                                               position to the end of the line (not including                                               the line break) as a function assignment or                                               macro definition.                %@AI@%Arg boxarg Assign%@AE@%              Treats each line of the %@AI@%boxarg%@AE@% as an                %@AI@%Arg markarg Assign%@AE@%             individual function assignment or macro                %@AI@%Arg numarg Assign%@AE@%              definition.                %@AI@%Arg linearg Assign%@AE@%             Treats each line as a separate function                                               assignment or macro definition, ignoring blank                                               lines.                %@AI@%Arg textarg Assign%@AE@%             Treats %@AI@%textarg%@AE@% as a function assignment or                                               macro definition.                %@AI@%Arg%@AE@% %@AB@%?%@AE@% %@AI@%Assign%@AE@%                   Displays the current function assignments for                                               all functions and macros.%@AI@%Backtab         Backtab%@AE@%                        Moves the cursor to the previous tab stop. Tab%@AI@%(SHIFT+TAB)%@AE@%                                    stops are defined to be every %@AI@%n%@AE@%th character,                                               where %@AI@%n%@AE@% is defined by the %@AB@%tabstops%@AE@% switch.%@AI@%Begfile         Begfile%@AE@%                        Places the cursor at the beginning of the%@AI@%(CTRL+PGUP)%@AE@%                                    file.%@AI@%Begline         Begline%@AE@%                        Places the cursor on the first nonblank(HOME)                                         character on the line.                %@AI@%Meta Begline%@AE@%                   Places the cursor in the first character                                               position of the line.%@AI@%Boxstream       Boxstream%@AE@%                      Toggles between box mode and stream mode. In(CTRL+B)                                       box mode, each                                               cursor-movement is interpreted as a                                               rectangular-shaped %@AI@%linearg%@AE@% or                                               %@AI@%boxarg%@AE@%. In stream mode, the editor highlights                                               all file positions between initial and new                                               cursor position.%@AI@%Cancel          Cancel%@AE@%                         Cancels the current operation in(ESC)                                          progress.%@AI@%Cdelete         Cdelete%@AE@%                        Deletes the previous character, excluding line(CTRL+G)                                       breaks. If the cursor is in column 1, %@AI@%Cdelete%@AE@%                                               moves the cursor to the end of the previous                                               line. If issued in insert mode, %@AI@%Cdelete%@AE@%                                               deletes the previous character, reducing the                                               length of the line by 1; otherwise, it deletes                                               the previous character and replaces it with a                                               blank. If the cursor is beyond the end of the                                               line when the function is invoked, the cursor                                               is moved to the immediate right of the last                                               character on the line.%@AI@%Compile         Compile%@AE@%                        Displays status of the current compilation (if(CTRL+F3)                                      any) on the dialog line.                %@AI@%Arg Compile%@AE@%                    Compiles the current file. Uses the %@AB@%extmake%@AE@%                                               command line that matches the filename                                               extension of the current file.                %@AI@%Arg textarg Compile%@AE@%            Uses the command line specified by                                               %@AB@%extmake:text%@AE@%. The %@AI@%textarg%@AE@% replaces %s in the                                               command line. See Table A.5%@BO:   701fe@% for more                                               information on                                               %@AB@%extmake%@AE@%.                %@AI@%Arg Arg textarg Compile%@AE@%        Invokes the specified text as a program. The                                               program is assumed to display its errors in                                               the following format: %@AI@%file row column message%@AE@%.                %@AI@%Arg Meta Compile%@AE@%               OS/2 only. Kills a protected-mode compilation                                               running in the background, after prompting for                                               confirmation.%@AI@%Copy            Copy%@AE@%                           Copies the current line into the(CTRL+INS, or                                  Clipboard.press + onnumeric keypad)                %@AI@%Arg Copy%@AE@%                       Copies text from the initial cursor position                                               to the end of the line and places it into the                                               Clipboard. Note that the line break is not                                               picked up.                %@AI@%Arg boxarg Copy%@AE@%                Copies the highlighted text into the                %@AI@%Arg linearg Copy%@AE@%               Clipboard.                %@AI@%Arg streamarg Copy%@AE@%                %@AI@%Arg textarg Copy%@AE@%                %@AI@%Arg markarg Copy%@AE@%               Copies the range of text between the cursor                                               and the location of the file marker into the                                               Clipboard. In %@AI@%stream%@AE@% mode, a stream of text is                                               selected. In %@AI@%box%@AE@% mode, the text is treated as                                               a %@AI@%boxarg%@AE@% or %@AI@%linearg%@AE@% depending on the                                               relative positions of the initial cursor position and                                               the file marker.                %@AI@%Arg numarg Copy%@AE@%                Copies the specified number                                               of lines into the Clipboard, starting with the                                               current line.%@AI@%Curdate         Curdate%@AE@%                        Inserts the current date at the cursor in the                                               format of 28-Nov-1988.%@AI@%Curday          Curday%@AE@%                         Inserts the current day at the cursor in the                                               format of Sun...Sat.%@AI@%Curfile         Curfile%@AE@%                        Inserts the fully qualified path name of the                                               current file at the cursor.%@AI@%Curfileext      Curfileext%@AE@%                     Inserts the extension of the current file at                                               the cursor.%@AI@%Curfilenam      Curfilenam%@AE@%                     Inserts the base name of the current file at                                               the cursor.%@AI@%Curtime         Curtime%@AE@%                        Inserts the current time at the cursor in the                                               format of 13:45:55.%@AI@%Delete          Delete%@AE@%                         Deletes the single character under the cursor,(DEL)                                          excluding line breaks. The deleted character                                               is not placed into the Clipboard.                %@AI@%Arg Delete%@AE@%                     Deletes all text from the current cursor                                               position to the end of the line. The deleted                                               text (including the line break) is placed into                                               the Clipboard. This command has the effect of                                               joining lines.                %@AI@%Arg boxarg Delete%@AE@%              Deletes the highlighted text. The                %@AI@%Arg linearg Delete%@AE@%             deleted text is placed into the Clipboard.                %@AI@%Arg streamarg Delete%@AE@%                %@AI@%Arg Meta Delete%@AE@%                Performs the deletions as described above,                %@AI@%Arg boxarg Meta Delete%@AE@%         except the deleted text is not placed into the                %@AI@%Arg linearg Meta Delete%@AE@%        Clipboard.                %@AI@%Arg streamarg Meta Delete%@AE@%%@AI@%Down            Down%@AE@%                           Moves the cursor down one line. If this would(DOWN or                                       result in the cursor moving out of the window,CTRL+X)                                        the window is adjusted downward by the number                                               of lines specified by the %@AB@%vscroll%@AE@% switch or                                               less if in a small window.                %@AI@%Meta Down%@AE@%                      Moves the cursor to the bottom of the window                                               without changing the column position.%@AI@%Emacscdel       Emacscdel%@AE@%                      Performs similarly to %@AI@%Cdelete%@AE@%, except that at(BKSP)                                         the beginning of a line while in insert mode,                                               %@AI@%Emacscdel%@AE@% deletes the line break between the                                               current line and the previous line, joining                                               the two lines together.%@AI@%Emacsnewl       Emacsnewl%@AE@%                      Performs similarly to %@AI@%Newline%@AE@%, except that(ENTER)                                        when in insert mode, it breaks the current                                               line at the cursor position.%@AI@%Endfile         Endfile%@AE@%                        Places the cursor at the end of the file.(CTRL+PGDN)%@AI@%Endline         Endline%@AE@%                        Moves the cursor to the immediate right of the(END)                                          last nonblank character on the line.                %@AI@%Meta Endline%@AE@%                   Moves the cursor one character be-yond the                                               column corresponding to the rightmost edge of                                               the window.%@AI@%Environment     Environment%@AE@%                    Executes the current line as an                                               environment-variable setting. For example,                                               assume the current line contains the following                                               text:                                               %@AS@%PATH=C:\BIN;C:\DOS%@AE@%                                               The editor responds by adding this setting to                                               the operating system environment space. This                                               function is essentially the same as the                                               system-level SET command. The editor                                               recognizes the setting during the rest of the                                               editing session, but the setting is lost when                                               you exit the editor.                %@AI@%Arg boxarg Environment%@AE@%         Executes each highlighted line or line                %@AI@%Arg linearg Environment%@AE@%        fragment as an environment-                                               variable setting.                %@AI@%Arg textarg Environment%@AE@%        Executes the text argument as an                                               environment-variable setting.                %@AI@%Arg%@AE@% %@AB@%?%@AE@% %@AI@%Environment%@AE@%              Displays all current environment-variable                                               settings.                %@AI@%Meta Environment%@AE@%               Performs environment "mappings" for all                                               environment variables found on the current                                               line, whenever the variable appears in the                                               following                                               syntax:                                               %@AB@%$(%@AE@%%@AI@%environment-variable%@AE@%%@AB@%)%@AE@%                                               For each such environment variable appearing                                               on the line, the editor replaces the variable                                               with the corresponding setting. For                                               example, if PATH is set to %@AS@%C:\BIN%@AE@%, the editor                                               replaces each occurrence of the text %@AS@%$(PATH)%@AE@%                                               with the text %@AS@%C:\BIN%@AE@%.                %@AI@%Arg Meta Environment%@AE@%           Performs environment mappings (see description                                               above) for all text from the cursor position                                               to the end of line.                %@AI@%Arg linearg Meta Environment%@AE@%   Performs environment mappings (see description                %@AI@%Arg boxarg Meta Environment%@AE@%    above) for all highlighted text.                %@AI@%Arg streamarg Meta Environment%@AE@%%@AI@%Execute         Arg Execute%@AE@%                    Treats the line from the initial cursor(F7)                                           position to the end as a series of                                               Microsoft Editor commands and executes them.                %@AI@%Arg linearg Execute%@AE@%            Treats the specified text as Microsoft Editor                %@AI@%Arg textarg Execute%@AE@%            commands and executes them, following the                                               standard rules of macro execution.%@AI@%Exit            Exit%@AE@%                           Saves the current file. If multiple files were(F8)                                           specified on the command line, the editor                                               advances to the next file. Otherwise, the                                               editor quits and returns control to the                                               operating system.                %@AI@%Meta Exit%@AE@%                      Performs similarly to %@AI@%Exit%@AE@%, except that the                                               current file is not saved.                %@AI@%Arg Exit%@AE@%                       Performs similarly to %@AI@%Exit%@AE@%, except that if                                               multiple files are specified on the command                                               line, the editor exits without advancing to                                               the next file.                %@AI@%Arg Meta Exit%@AE@%                  Performs similarly to %@AI@%Arg Exit%@AE@%, except that                                               the editor does not save the current file.%@AI@%Home            Home%@AE@%                           Places the cursor in the upper-left corner of%@AI@%(CTRL+HOME)%@AE@%                                    the current window.%@AI@%Information     Information%@AE@%                    Saves the current file and loads an(F10)                                          information file that contains a list of all                                               files in memory along with the current set of                                               files that you have edited. The size of this                                               list is con-trolled by the %@AB@%tmpsav switch%@AE@%,                                               which has a default value of 20.%@AI@%Initialize      Initialize%@AE@%                     Reads all the editor statements from the [M](SHIFT+F8)                                     section of TOOLS.INI.                %@AI@%Arg Initialize%@AE@%                 Reads the editor statements from the TOOLS.INI                                               file, using the continuous string of nonblank                                               characters, starting with the initial cursor                                               position, as the tag name.                %@AI@%Arg textarg Initialize%@AE@%         Reads all the editor statements from the                                               [M-%@AI@%textarg%@AE@%] section of TOOLS.INI.%@AI@%Insert          Insert%@AE@%                         Inserts a single blank space at the current                                               cursor position.                %@AI@%Arg Insert%@AE@%                     Inserts a carriage return at the initial                                               cursor position, splitting the line.                %@AI@%Arg streamarg Insert%@AE@%           Inserts blank spaces into the highlighted                %@AI@%Arg linearg Insert%@AE@%             area.                %@AI@%Arg boxarg Insert%@AE@%%@AI@%Insertmode      Insertmode%@AE@%                     Toggles between insert mode and overtype mode.(INS or                                        If insert mode is on, %@AS@%insert%@AE@% appears on theCTRL+V)                                        status line. While in insert mode, each                                               character that is entered is inserted at the                                               cursor position, shifting the remainder of the                                               line one position to the right. Overtype mode                                               replaces the character at the cursor position                                               with the character you type.%@AI@%Lastselect      Lastselect%@AE@%                     Recalls the last cursor-movement argument.(CTRL+U)                                       This function produces the same result as                                               returning to the last %@AI@%Arg%@AE@% position, invoking                                               the %@AI@%Arg%@AE@% function, and then recreating the last                                               cursor-movement argument.%@AI@%Lasttext        Lasttext%@AE@%                       Recalls the last %@AI@%textarg%@AE@%. This function(CTRL+O)                                       produces the same result as invoking the %@AI@%Arg%@AE@%                                               function and then retyping the previous                                               %@AI@%textarg%@AE@%.%@AI@%Ldelete         Ldelete%@AE@%                        Deletes the current line and places it into(CTRL+Y)                                       the Clipboard.                %@AI@%Arg Ldelete%@AE@%                    Deletes text, starting with the initial cursor                                               position through the end of the line, and                                               places it into the Clipboard. Note that it                                               does not join the current line with the next                                               line.                %@AI@%Arg boxarg Ldelete%@AE@%             Deletes the specified text from the file and                %@AI@%Arg linearg Ldelete%@AE@%            places it into the Clipboard, treating the                                               argument as a %@AI@%linearg%@AE@% or %@AI@%boxarg%@AE@% regardless of                                               what mode the editor is in.%@AI@%Left            Left%@AE@%                           Moves the cursor one character to the left. If%@AI@%(LEFT or%@AE@%                                       this would result in the cursor moving out of%@AI@%CTRL+S)%@AE@%                                        the window, the window is adjusted to the left                                               by the number of columns specified by the                                               %@AB@%hscroll%@AE@% switch or less if in a small window.                %@AI@%Meta Left%@AE@%                      Moves the cursor to the left-most position in                                               the window on the same line.%@AI@%Linsert         Linsert%@AE@%                        Inserts one blank line above the current line.(CTRL+N)                %@AI@%Arg Linsert%@AE@%                    Inserts or deletes blanks at the beginning of                                               a line to make the first nonblank character                                               appear under the cursor.                %@AI@%Arg boxarg Linsert%@AE@%             Fills the specified area with blanks, treating                %@AI@%Arg linearg Linsert%@AE@%            the argument as a %@AI@%linearg%@AE@% or %@AI@%boxarg%@AE@% regardless                                               of the editor's mode.%@AI@%Mark            Mark%@AE@%                           Moves the window to the beginning of the file.(CTRL+M)                %@AI@%Arg Mark%@AE@%                       Restores the window to its previous location.                                               The editor remembers only the location prior                                               to the last scrolling operation.                %@AI@%Arg numarg Mark%@AE@%                Moves the cursor to the beginning of the line,                                               where %@AI@%numarg%@AE@% specifies the position of the                                               line in the file.                %@AI@%Arg textarg Mark%@AE@%               Moves the cursor to the specified file marker.                                               If the file marker was not previously defined,                                               the editor uses the %@AB@%markfile%@AE@% switch to find                                               the file that contains file marker                                               definitions.                %@AI@%Arg Arg textarg Mark%@AE@%           Deletes a marker definition.                %@AI@%Arg Arg textarg Meta Mark%@AE@%      Defines a file marker at the initial cursor                                               position. This does not record the file marker                                               in the file specified by the %@AB@%markfile%@AE@% switch,                                               but allows you to refer to this position as                                               %@AI@%textarg%@AE@%.%@AI@%Message         Message%@AE@%                        Clears the dialog line.                %@AI@%Arg textarg Message%@AE@%            Prints the text argument on the dialog line.%@AI@%Meta            Meta%@AE@%                           Modifies the action of the function it is used(F9)                                           with. Refer to the individual functions for                                               specific information.%@AI@%Mgrep           Mgrep%@AE@%                          Searches for the previously defined string or                                               pattern. The editor searches all files listed                                               in the %@AS@%mgreplist%@AE@% macro, which can contain DOS                                               wildcards and environment variables, as in the                                               following example:                                               %@AS@%megreplist:="DATA.FIL *.FOR  $INCLUDE:*.H"%@AE@%                                               The editor places all strings found in the                                               <compile> pseudo file.                %@AI@%Arg Mgrep%@AE@%                      Searches files for the string defined as the                                               characters from the initial cursor position to                                               the first blank character.                %@AI@%Arg textarg Mgrep%@AE@%              Searches files for the specified text.                %@AI@%Arg Arg Mgrep%@AE@%                  Searches files for the regular expression                                               defined as the characters from the initial                                               cursor position to the first blank character.                %@AI@%Arg Arg textarg Mgrep%@AE@%          Searches files for a regular expression as                                               defined by %@AI@%textarg%@AE@%.                %@AI@%Meta Mgrep%@AE@%                     Performs similarly to command form above,                %@AI@%Arg Meta Mgrep%@AE@%                 except that value of the %@AB@%case%@AE@% switch is                %@AI@%Arg textarg Meta Mgrep%@AE@%         temporarily reversed.                %@AI@%Arg Arg Meta Mgrep%@AE@%                %@AI@%Arg Arg textarg Meta Mgrep%@AE@%%@AI@%Mlines          Mlines%@AE@%                         Moves the window back by the number of lines(CTRL+W)                                       specified by the %@AB@%vscroll%@AE@% switch or less if in                                               a small window.                %@AI@%Arg Mlines%@AE@%                     Moves the window until the line that the                                               cursor is on is at the bottom of the window.                %@AI@%Arg numarg Mlines%@AE@%              Moves the window back by the specified number                                               of lines.%@AI@%Mpage           Mpage%@AE@%                          Moves the window backward in the file by one(PGUP or                                       window's worth of lines.CTRL+R)%@AI@%Mpara           Mpara%@AE@%                          Moves the cursor to the first blank line                                               preceding the current paragraph, or if                                               currently on a blank line, the cursor is                                               positioned before the previous paragraph.                %@AI@%Meta Mpara%@AE@%                     Moves the cursor to the first previous line                                               that has text.%@AI@%Mreplace        Mreplace%@AE@%                       Performs a simple search-and-                                               replace operation, prompting you for the                                               search and replacement strings, and prompting                                               at each occurrence for confirmation. The                                               function searches all the file listed in the                                               %@AS@%mgreplist%@AE@% macro, which can contain DOS                                               wildcards and environment variables, as in the                                               following example:                                               %@AS@%megreplist:="DATA.FIL *.FOR   $INCLUDE:*.H"%@AE@%                %@AI@%Arg Arg Mreplace%@AE@%               Performs the same action as                                               %@AI@%Mreplace%@AE@%, but uses regular-                                               expression syntax.%@AI@%Msearch         Msearch%@AE@%                        Searches backward for the previously defined(F4)                                           string or pattern. If the string or pattern is                                               found, the window is moved to display it and                                               the matched string or pattern is high-lighted.                                               If no match is found, no cursor movement takes                                               place and a message is displayed.                %@AI@%Arg Msearch%@AE@%                    Searches backward in the file for the string                                               defined as the characters from the initial                                               cursor position to the first blank character.                %@AI@%Arg textarg Msearch%@AE@%            Searches backward for the specified text.                %@AI@%Arg Arg Msearch%@AE@%                Searches backward in the file for the regular                                               expression defined as the characters from the                                               initial cursor position to the first blank                                               character.                %@AI@%Arg Arg textarg Msearch%@AE@%        Searches backward for a regular expression as                                               defined by %@AI@%textarg%@AE@%.                %@AI@%Meta Msearch%@AE@%                   Performs similarly to command form above,                %@AI@%Arg Meta Msearch%@AE@%               except that value of the %@AB@%case%@AE@% switch is                %@AI@%Arg textarg Meta Msearch%@AE@%       temporarily reversed.                %@AI@%Arg Arg Meta Msearch%@AE@%                %@AI@%Arg Arg textarg Meta Msearch%@AE@%%@AI@%Mword           Mword%@AE@%                          Moves the cursor to the beginning of a word.(CTRL+LEFT                                     If not in a word or at the first character,or CTRL+A)                                     uses the previous word; otherwise, uses the                                               current word.                %@AI@%Meta Mword%@AE@%                     Moves the cursor to the immediate right of the                                               previous word.%@AI@%Newline         Newline%@AE@%                        Moves the cursor to a new line. If the %@AB@%softcr%@AE@%                                               switch is set, the editor tries to place the                                               cursor in an appropriate position based on the                                               type of file. If the file is a C program, the                                               editor tries to tab in based on continuation                                               of lines and on open blocks. If the next line                                               is blank, the editor places the cursor in the                                               column corresponding to the first nonblank                                               character of the previous line. If neither of                                               the above is true, the editor places the                                               cursor on the first nonblank character of the                                               line.                %@AI@%Meta Newline%@AE@%                   Moves the cursor to column 1 of the next line.%@AI@%Nextmsg         Nextmsg%@AE@%                        Advances to next error message.(SHIFT+F3)                %@AI@%Arg numarg Nextmsg%@AE@%             Moves forward or backward %@AI@%numarg%@AE@% error                                               messages. A %@AI@%numarg%@AE@% value of 1 moves to next                                               message; a value of -1 moves to previous                                               message.                %@AI@%Arg Nextmsg%@AE@%                    Moves to the next error message (within                                               current set of messages) that does not refer                                               to current file.                %@AI@%Arg Arg Nextmsg%@AE@%                Positions the text-file cursor at the line                                               with the error described in the error message                                               at the current cursor position in the                                               <compile> pseudo file. This message becomes                                               the current error message. The following                                               %@AI@%Nextmsg%@AE@% command displays the next error                                               message from the <compile> pseudo file.                %@AI@%Meta Nextmsg%@AE@%                   OS/2 only. Advance to next "set" of error                                               messages, in which a set corresponds to all                                               the error messages for a single compilation.                                               After executing this command, the previous set                                               is deleted (though you can still view all                                               subsequent sets of error messages in the                                               <compile> pseudo file, until deleted).%@AI@%Noedit          Noedit%@AE@%                         Reverses the no-edit condition, so that if the                                               editor was started with the /R (read only)                                               option, this command removes the no-edit                                               limitation. If the editor is not in the                                               no-edit state, this command disallows all                                               editing commands that alter a file.                %@AI@%Meta Noedit%@AE@%                    Reverses the no-edit condition for the current                                               file.%@AI@%Paste           Paste%@AE@%                          Inserts the contents of the Clipboard prior to%@AI@%(SHIFT+INS)%@AE@%                                    the current line if the contents were placed                                               there in a line-oriented way, such as with                                               %@AI@%linearg%@AE@% or %@AI@%numarg%@AE@%. Otherwise, the contents of                                               the Clipboard are inserted at the current                                               cursor position.                %@AI@%Arg Paste%@AE@%                      Inserts the text from the initial cursor                                               position to the end of the line at the initial                                               cursor position.                %@AI@%Arg textarg Paste%@AE@%              Places the specified text into the Clipboard                                               and inserts that text at the initial cursor                                               position.                %@AI@%Arg Arg textarg Paste%@AE@%          Interprets %@AI@%textarg%@AE@% as a file name                                               and inserts the contents of that file into the                                               current file above the current line.                %@AI@%Arg Arg%@AE@% %@AB@%!%@AE@%%@AI@%textarg Paste%@AE@%         Treats the text as a DOS command and inserts                                               its output to stdout into the current file at                                               the initial cursor position. The exclamation                                               mark must be entered as shown.%@AI@%Pbal            Pbal%@AE@%                           Scans backward through the file, balancing(CTRL+[)                                       parentheses and brackets. The first unbalanced                                               one is highlighted when found. If it is found                                               and is not visible, the editor displays the                                               matching line on the dialog line, with the                                               highlighted matching character. The                                               corresponding character is placed into the                                               file at the current cursor position.  Note                                               that the search does not include the current                                               cursor position and that the scan only looks                                               for more left brackets or parentheses than                                               right, not just an unequal amount.                %@AI@%Arg Pbal%@AE@%                       Performs similarly to %@AI@%Pbal%@AE@% except that it                                               scans forward in the file and looks for more                                               right brackets or parentheses than left.                %@AI@%Meta Pbal%@AE@%                      Performs similarly to %@AI@%Pbal%@AE@% except that the                                               file is not updated.                %@AI@%Arg Meta Pbal%@AE@%                  Performs similarly to %@AI@%Arg Pbal%@AE@% except that the                                               file is not updated.%@AI@%Plines          Plines%@AE@%                         Adjusts the window forward by the number of(CTRL+Z)                                       lines specified by the %@AB@%vscroll%@AE@% switch or less                                               if in a small window.                %@AI@%Arg Plines%@AE@%                     Moves the window downward so the line that the                                               cursor is on is at the top of the window.                %@AI@%Arg numarg Plines%@AE@%              Moves the window forward the specified number                                               of lines.%@AI@%Ppage           Ppage%@AE@%                          Moves the window forward in the file by one(PGDN or                                       window's worth of lines.CTRL+C)%@AI@%Ppara           Ppara%@AE@%                          Moves the cursor forward one paragraph and                                               places the cursor on the first line of the new                                               paragraph.                %@AI@%Meta Ppara%@AE@%                     Moves the cursor to the first blank line                                               following the current paragraph.%@AI@%Print           Print%@AE@%                          Prints the current file. If the %@AB@%printcmd%@AE@%(CTRL+F8)                                      switch is set, this function uses the                                               system-level command given in the switch.                                               Otherwise, the function copies output to LPT1.                %@AI@%Arg textarg Print%@AE@%              Prints all the files listed in the text                                               argument. File names should be sepa- rated                                               with a space.                %@AI@%Arg linearg Print%@AE@%              Prints the highlighted area.                %@AI@%Arg boxarg Print%@AE@%                %@AI@%Arg streamarg Print%@AE@%%@AI@%Psearch         Psearch%@AE@%                        Searches forward for the previously defined(F3)                                           string or pattern. If the string or pattern is                                               found, the window is moved to display it and                                               the matched string or pattern is highlighted.                                               If it is not found, no cursor movement takes                                               place and a message is displayed.                %@AI@%Arg Psearch%@AE@%                    Searches forward in the file for the string                                               defined as the characters from the initial                                               cursor position to the first blank character.                %@AI@%Arg textarg Psearch%@AE@%            Searches forward for the specified text.                %@AI@%Arg Arg Psearch%@AE@%                Searches forward in the file for the regular                                               expression defined as the characters from the                                               initial cursor position to the first blank                                               character.                %@AI@%Arg Arg textarg Psearch%@AE@%        Searches forward for a regular expression as                                               defined by %@AI@%textarg%@AE@%.                %@AI@%Meta Psearch%@AE@%                   Performs similarly to command form above,                %@AI@%Arg Meta Psearch%@AE@%               except that value of the %@AB@%case%@AE@% switch is                %@AI@%Arg textarg Meta Psearch%@AE@%       temporarily reversed.                %@AI@%Arg Arg Meta Psearch%@AE@%                %@AI@%Arg Arg textarg Meta Psearch%@AE@%%@AI@%Pword           Pword%@AE@%                          Moves the cursor forward one word and places(CTRL+RIGHT                                    the cursor on the beginning of the new word.or CTRL+F)                %@AI@%Meta Pword%@AE@%                     Moves cursor to immediate right of current                                               word or, if not in a word, to the right of the                                               next word.%@AI@%Qreplace        Qreplace%@AE@%                       Performs a simple search-and-(CTRL+\)                                       replace operation, prompting you for the                                               search and replacement strings, and prompting                                               at each occurrence for confirmation. The                                               search begins at the cursor position and                                               continues through the end of the file.                %@AI@%Arg boxarg Qreplace%@AE@%            Perform the search-and-replace operation over                %@AI@%Arg linearg Qreplace%@AE@%           the highlighted area, prompting at each                %@AI@%Arg streamarg Qreplace%@AE@%         occurrence for confirmation.                %@AI@%Arg markarg Qreplace%@AE@%           Performs the search-and-replace operation                                               between the initial cursor position and the                                               specified file marker, prompting at each                                               occurrence for confirmation.                %@AI@%Arg numarg Qreplace%@AE@%            Performs the search-and-replace operation over                                               the specified number of lines, starting with                                               the current line, prompting at each occurrence                                               for confirmation.                %@AI@%Arg Arg Qreplace%@AE@%               Performs the same as the corresponding command                %@AI@%Arg Arg boxarg Qreplace%@AE@%        listed above, except that the search pattern                %@AI@%Arg Arg linearg Qreplace%@AE@%       is a regular expression and the replacement                %@AI@%Arg Arg streamarg Qreplace%@AE@%     pattern can select special tagged sections of                %@AI@%Arg Arg markarg Qreplace%@AE@%       the search for selective replacement. See                %@AI@%Arg Arg numarg Qreplace%@AE@%        Chapter 5%@BO:   206bc@% for more information.%@AI@%Quote           Quote%@AE@%                          Reads one keystroke from the keyboard and(CTRL+P)                                       treats it literally. This is useful for                                               inserting text into a file that happens to be                                               assigned to an editor function.%@AI@%Record          Record%@AE@%                         Turns on macro recording if off, and off if(ALT+R)                                        on. When a recording is stopped, the editor                                               assigns all the recorded commands to the                                               default macro name recordvalue. During the                                               recording, the name of each command is written                                               to the <record> pseudo file, which can be                                               placed in a window and viewed as it is                                               dynamically updated.                %@AI@%Arg textarg Record%@AE@%             Turns on macro recording if off and gives                                               recording the name specified in the text                                               argument or turns recording off if on.                %@AI@%Meta Record%@AE@%                    Turns recording on if recording state is off,                                               but no editing commands are executed until                                               recording is turned off. Turns recording off                                               if it is on.                %@AI@%Arg Arg Record%@AE@%                 Performs identically to the corresponding                %@AI@%Arg Arg textarg Record%@AE@%         command listed above, but if the target macro                %@AI@%Arg Arg Meta Record%@AE@%            already exists, editing commands are appended                                               to the end of the macro.%@AI@%Refresh         Refresh%@AE@%                        Asks for confirmation and then rereads the(SHIFT+F7)                                     file from disk, discarding all edits since the                                               file was last saved.                %@AI@%Arg Refresh%@AE@%                    Asks for confirmation and then discards the                                               file from memory, loading the last file edited                                               in its place.%@AI@%Repeat          Repeat%@AE@%                         Repeats the last editing command, using                                               precisely the same arguments and %@AI@%Meta%@AE@%                                               condition used by the last command. However,                                               the command is executed relative to the new                                               cursor position. (Note: if the previous                                               command had a cursor-movement argument, the                                               text actually high-lighted is reused as the                                               argument.)%@AI@%Replace         Replace%@AE@%                        Performs a simple search-and-(CTRL+L)                                       replace operation without confirmation,                                               prompting you for the search string and                                               replacement string. The search begins at                                               the cursor position and continues through                                               the end of the file.                %@AI@%Arg boxarg Replace%@AE@%             Performs the search-and-replace operation over                %@AI@%Arg linearg Replace%@AE@%            the highlighted area.                %@AI@%Arg streamarg Replace%@AE@%                %@AI@%Arg markarg Replace%@AE@%            Performs the search-and-replace operation                                               between the cursor and the specified file                                               marker.                %@AI@%Arg numarg Replace%@AE@%             Performs the search-and-replace operation over                                               the specified number of lines, starting with                                               the current line.                %@AI@%Arg Arg Replace%@AE@%                Performs the same as the corresponding command                %@AI@%Arg Arg boxarg Replace%@AE@%         listed above except that the search pattern is                %@AI@%Arg Arg linearg Replace%@AE@%        a regular expression and the replacement                %@AI@%Arg Arg streamarg Replace%@AE@%      pattern can select special tagged sections of                %@AI@%Arg Arg markarg Replace%@AE@%        the search for selective replacement. See                %@AI@%Arg Arg numarg Replace%@AE@%         Chapter 5%@BO:   206bc@% for more information.%@AI@%Restcur         Restcur%@AE@%                        Restores the cursor position saved with                                               %@AI@%Savecur%@AE@%.%@AI@%Right (RIGHT    Right%@AE@%                          Moves the cursor one character to the right.%@AI@%or CTRL+D)%@AE@%                                     If this would result in the cursor moving out                                               of the window,  the window is adjusted to the                                               right the number of columns specified by the                                               %@AB@%hscroll%@AE@% switch or less if in a small window.                %@AI@%Meta Right%@AE@%                     Moves the cursor to the right-most position in                                               the window.%@AI@%Saveall         Saveall%@AE@%                        Saves all files that have been altered during                                               the current editing session without being                                               saved.%@AI@%Savecur         Savecur%@AE@%                        Saves the current cursor position to be                                               restored with %@AI@%Restcur%@AE@%.%@AI@%Sdelete         Sdelete%@AE@%                        Deletes the single character under the cursor,(DEL)                                          excluding line breaks. It does not place the                                               deleted character into the Clipboard. This                                               command has the effect of joining lines.                %@AI@%Arg Sdelete%@AE@%                    Deletes from the current line at the point of                                               the cursor position. The text deleted                                               (including the line break) is placed into the                                               Clipboard.                %@AI@%Arg streamarg Sdelete%@AE@%          Deletes the stream of text from the initial                                               cursor position up to the current cursor                                               position and places it into the Clipboard.%@AI@%Searchall       Searchall%@AE@%                      Highlights all occurrences of the previously(SHIFT+F6)                                     defined string or pattern. If at least one                                               occurrence is found, the cursor moves to the                                               first occurrence in the file.                %@AI@%Arg Searchall%@AE@%                  Highlights all occurrences of the string                                               defined as the characters from the initial                                               cursor position to the first blank character.                %@AI@%Arg textarg Searchall%@AE@%          Highlights all occurrences of the specified                                               text.                %@AI@%Arg Arg Searchall%@AE@%              Highlights all occurrences of the regular                                               expression defined as the char- acters from                                               the initial cursor position to the first blank                                               character.                %@AI@%Arg Arg textarg Searchall%@AE@%      Highlights all occurrences of a regular                                               expression as defined by %@AI@%textarg%@AE@%.                %@AI@%Meta Searchall%@AE@%                 Performs similarly to command forms above,                %@AI@%Arg Meta Searchall%@AE@%             except that the value of the %@AB@%case%@AE@% switch is                %@AI@%Arg textarg Meta Searchall%@AE@%     temporarily reversed.                %@AI@%Arg Arg Meta Searchall%@AE@%                %@AI@%Arg Arg textarg Meta Searchall%@AE@%%@AI@%Setfile         Setfile%@AE@%                        Switches to the most recently edited file,(F2)                                           saving any changes made to the current file to                                               disk.                %@AI@%Arg Setfile%@AE@%                    Switches to the file name that begins at the                                               initial cursor position and ends with the                                               first blank.                %@AI@%Arg textarg Setfile%@AE@%            Switches to the file specified by %@AI@%textarg%@AE@%. The                                               text argument may be a drive or directory, in                                               which case the editor changes the current                                               drive or directory.                %@AI@%Meta Setfile%@AE@%                   Performs similarly to the corresponding                %@AI@%Arg Meta Setfile%@AE@%               command listed above, but disables the saving                %@AI@%Arg textarg Meta Setfile%@AE@%       of changes for the current file.                %@AI@%Arg Arg textarg Setfile%@AE@%        Saves the current file under the name                                               specified by %@AI@%textarg%@AE@%.                %@AI@%Arg Arg Setfile%@AE@%                Saves the current file.%@AI@%Setwindow       Setwindow%@AE@%                      Redisplays the entire screen.(CTRL+])                %@AI@%Arg Setwindow%@AE@%                  Adjusts the window so that the initial cursor                                               position becomes the home position (upper-left                                               corner).                %@AI@%Meta Setwindow%@AE@%                 Redisplays the current line.%@AI@%Shell           Shell%@AE@%                          Saves the current file and runs the command(SHIFT+F9)                                     shell.                %@AI@%Meta Shell%@AE@%                     Runs the command shell without saving the                                               current file.                %@AI@%Arg Shell%@AE@%                      Uses the text on the screen from the cursor up                                               to the end of line as a command to the shell.                %@AI@%Arg boxarg Shell%@AE@%               Treats each line of either argument as a                %@AI@%Arg linearg Shell%@AE@%              separate command to the shell                %@AI@%Arg textarg Shell%@AE@%              Uses %@AI@%textarg%@AE@% as a command to the shell.%@AI@%Sinsert         Sinsert%@AE@%                        Inserts a single blank space at the current(CTRL+J)                                       cursor position.                %@AI@%Arg Sinsert%@AE@%                    Inserts a carriage return at the initial                                               cursor position, splitting the line.                %@AI@%Arg streamarg Sinsert%@AE@%          Insert a stream of blanks between the initial                                               cursor position and the current cursor                                               position.%@AI@%Tab             Tab%@AE@%                            Moves the cursor to the next tab stop. Tab(TAB)                                          stops are defined to be every %@AI@%n%@AE@%th character,                                               where %@AI@%n%@AE@% is defined by the %@AB@%tabstops%@AE@% switch.%@AI@%Tell            Tell%@AE@%                           Prompts for a keystroke, then displays the(CTRL+T)                                       name of the keystroke and the function                                               assigned to it in the format %@AI@%function:keyname%@AE@%.                %@AI@%Arg Tell%@AE@%                       Identical to %@AI@%Tell%@AE@%, but if the key has a macro                                               attached, displays                                               %@AI@%MacroName:=MacroValue%@AE@%.                %@AI@%Arg Arg Tell%@AE@%                   Prompts for a keystroke, then displays the                                               value of the macro attached to the key. If a                                               function is assigned to the key, the editor                                               displays the name of the function.                %@AI@%Arg textarg Tell%@AE@%               Like %@AI@%Arg Tell%@AE@% but obtains the macro name from                                               a %@AI@%textarg%@AE@% rather than a keystroke.                %@AI@%Meta Tell%@AE@%                      Performs the same as the command listed above,                %@AI@%Arg Meta Tell%@AE@%                  except the editor inserts the output into the                %@AI@%Arg Arg Meta Tell%@AE@%              file rather than on the dialog line.                %@AI@%Arg textarg Meta Tell%@AE@%%@AI@%Undo            Undo%@AE@%                           Reverses the last editing change. The maximum(ALT+BKSP)                                     number of times this can be performed is set                                               by the %@AB@%undocount%@AE@% switch.                %@AI@%Meta Undo%@AE@%                      Recalls a command previously canceled with                                               %@AI@%Undo%@AE@%. This command is often called "redo."%@AI@%Up              Up%@AE@%                             Moves the cursor up one line. If this would%@AI@%(UP or%@AE@%                                         result in the cursor moving out of the window,%@AI@%CTRL+E)%@AE@%                                        the window is adjusted upward by the number of                                               lines specified by the %@AB@%vscroll%@AE@% switch or fewer                                               if in a small window.                %@AI@%Meta Up%@AE@%                        Moves the cursor to the top of the window                                               without changing the column position.%@AI@%Window          Window%@AE@%                         Moves the cursor to the next window. With(F6)                                           multiple windows, the next window is defined                                               as being to the right of or below the current                                               window.                %@AI@%Arg Window%@AE@%                     Splits the current window horizontally at the                                               initial cursor position. Note that all windows                                               must be at least five lines high.                %@AI@%Arg Arg Window%@AE@%                 Splits the current window vertically at the                                               initial cursor position. Note that all windows                                               must be at least 10 columns wide.                %@AI@%Meta Window%@AE@%                    Closes the window.%@TE:  915  62451  4 16 31 60 @%
  7133. %@NL@%
  7134. %@CR:MSEa4000@%%@2@%%@AB@%A.4  Return Values of Editing Functions%@AE@%%@EH@%%@NL@%
  7135. %@NL@%
  7136. %@CR:MSEa4001@%%@4@%Table A.4 gives an alphabetical listing of editing functions along with the%@EH@%
  7137. conditions under which each function returns TRUE or FALSE. These return
  7138. values are useful in conditional macros.%@NL@%
  7139. %@NL@%
  7140. %@CR:MSEaT400@%%@CR:MSEaT500@%%@CR:MSEaT600@%%@4@%%@AU@%Table A.4  Editor Functions and Return Values%@AE@%%@EH@%%@NL@%
  7141. %@TH:  188   7800  2 18 28 30 @%%@AB@%Function          Returns TRUE               Returns FALSE%@AE@%%@AI@%Arg%@AE@%               Always                     Never%@AI@%Argcompile%@AE@%        Compile successful         Bad argument/compiler not found%@AI@%Assign%@AE@%            Assignment successful      Invalid assignment%@AI@%Backtab%@AE@%           Cursor moved               Cursor at left margin%@AI@%Begfile%@AE@%           Cursor moved               Cursor not moved%@AI@%Begline%@AE@%           Cursor moved               Cursor not moved%@AI@%Boxstream%@AE@%         New mode is box mode       New mode is stream mode%@AI@%Cancel%@AE@%            Always                     Never%@AI@%Cdelete%@AE@%           Cursor moved               Cursor not moved%@AI@%Compile%@AE@%           Compilation                Compilation unsuccessfully                  successfully initiated     initiated or background                  or background              compilation not                  compilation running        running%@AI@%Copy%@AE@%              Always                     Never%@AI@%Curdate%@AE@%           Date inserted              Insertion would make line                                             too long%@AI@%Curday%@AE@%            Day inserted               Insertion would make line                                             too long%@AI@%Curfile%@AE@%           File inserted              Insertion would make line                                             too long%@AI@%Curfileext%@AE@%        File extension inserted    Insertion would make line                                             too long%@AI@%Curfilenam%@AE@%        File name inserted         Insertion would make line                                             too long%@AI@%Curtime%@AE@%           Time inserted              Insertion would make line                                             too long%@AI@%Delete%@AE@%            Always                     Never%@AI@%Down%@AE@%              Cursor moved               Cursor not moved%@AI@%Emacscdel%@AE@%         Cursor moved               Cursor not moved%@AI@%Emacsnewl%@AE@%         Always                     Never%@AI@%Endfile%@AE@%           Cursor moved               Cursor not moved%@AI@%Endline%@AE@%           Cursor moved               Cursor not moved%@AI@%Environment%@AE@%       Successful set or map      Syntax error or line too long%@AI@%Execute%@AE@%           Last command successful    Last command failed%@AI@%Exit%@AE@%              No return condition        No return condition%@AI@%Graphic%@AE@%           Character inserted         Insertion would make line                                                         too long%@AI@%Home%@AE@%              Cursor moved               Cursor not moved%@AI@%Information%@AE@%       Always                     Never%@AI@%Initialize%@AE@%        Found tagged section       Did not find tagged section in                  in TOOLS.INI               TOOLS.INI%@AI@%Insert%@AE@%            Always                     Never%@AI@%Insertmode%@AE@%        Insert mode turned on      Insert mode turned off%@AI@%Lastselect%@AE@%        Selection recreated        %@AI@%Arg%@AE@% already selected%@AI@%Lasttext%@AE@%          Value of function          Bad argument                  eventually executed%@AI@%Ldelete%@AE@%           Always                     Never%@AI@%Left%@AE@%              Cursor moved               Cursor not moved%@AI@%Linsert%@AE@%           Always                     Never%@AI@%Mark%@AE@%              Definition/move            Bad argument/not found                  successful%@AI@%Message%@AE@%           Always                     Never%@AI@%Meta%@AE@%              %@AI@%Meta%@AE@% turned on             %@AI@%Meta%@AE@% turned off%@AI@%Mgrep%@AE@%             String found               String not found or specified,                                             or search terminated by                                             CTRL+BREAK, or background                                             compilation in progress%@AI@%Mlines%@AE@%            Movement occurred          Bad argument%@AI@%Mpage%@AE@%             Movement occurred          Bad argument%@AI@%Mpara%@AE@%             String found               Bad argument/string not found%@AI@%Mreplace%@AE@%          Replacement successful     Replacement failed or was                                             aborted%@AI@%Msearch%@AE@%%@AI@%Mword%@AE@%             Cursor moved               Cursor not moved%@AI@%Newline%@AE@%           Always                     Never%@AI@%Nextmsg%@AE@%           Message found              No more messages%@AI@%Noedit%@AE@%            File or editor in          File or editor is not in                  no-edit state              no-edit state%@AI@%Paste%@AE@%             Almost always              Tried %@AI@%Arg Arg filename Paste%@AE@%                                             and file didn't exist%@AI@%Pbal%@AE@%              Balance successful         Bad argument/not balanced%@AI@%Plines%@AE@%            Movement occurred          Bad argument%@AI@%Ppage%@AE@%             Cursor moved               Cursor not moved%@AI@%Ppara%@AE@%             Cursor moved               Cursor not moved%@AI@%Print%@AE@%             Print successfully         Could not start print job                  submitted%@AI@%Psearch%@AE@%           String found               Bad argument/string not found%@AI@%Pword%@AE@%             Cursor moved               Cursor not moved%@AI@%Qreplace%@AE@%          At least one               String not found/invalid                  replacement                pattern%@AI@%Quote%@AE@%             Almost always              Insertion would make line                                             too long%@AI@%Record%@AE@%            Recording turned on        Recording turned off%@AI@%Refresh%@AE@%           File read in/deleted       Canceled, bad argument%@AI@%Repeat%@AE@%            Function repeated and      Function repeated and returned                  returned TRUE              FALSE, or no function to repeat%@AI@%Replace%@AE@%           At least one               String not found/invalid                  replacement                pattern%@AI@%Restcur%@AE@%           Position previously        Position not saved with                  saved with %@AI@%Savecur%@AE@%         %@AI@%Savecur%@AE@%%@AI@%Right%@AE@%             Cursor over text of line   Cursor beyond end of line%@AI@%Saveall%@AE@%           Always                     Never%@AI@%Savecur%@AE@%           Always                     Never%@AI@%Sdelete%@AE@%           Always                     Never%@AI@%Searchall%@AE@%         Something found            Nothing found%@AI@%Setfile%@AE@%           File-switch successful     No alternate file, or current                                             file needs to be saved and                                             can't be%@AI@%Setwindow%@AE@%         Always                     Never%@AI@%Shell%@AE@%             Shell successful           Bad argument/program not found%@AI@%Sinsert%@AE@%           Always                     Never%@AI@%Tab%@AE@%               Cursor moved               Cursor not moved%@AI@%Tell%@AE@%              Key pressed has            Key pressed has no function                  function assigned          assigned%@AI@%Undo%@AE@%              Almost always              If nothing to undo%@AI@%Up%@AE@%                Cursor moved               Cursor not moved%@AI@%Window%@AE@%            Successful split,          Any error                  join, or move%@TE:  188   7800  2 18 28 30 @%
  7142. %@NL@%
  7143. %@CR:MSEa5000@%%@2@%%@AB@%A.5  Editor Switches%@AE@%%@EH@%%@NL@%
  7144. %@NL@%
  7145. %@CR:MSEa5001@%%@4@%Table A.5%@BO:   7225b@% gives an alphabetical listing of editor switches along with%@EH@%
  7146. descriptions and default values. The first word in each description
  7147. identifies the switch as a text, numeric, or Boolean switch.%@NL@%
  7148. %@NL@%
  7149. %@CR:MSEaT700@%%@4@%%@AU@%Table A.5  Editor Switches%@AE@%%@EH@%%@NL@%
  7150. %@TH:  304  17158  2 18 58 @%%@AB@%Switch            Description (and Default Value)%@AE@%%@AB@%askexit%@AE@%           Boolean. Prompts for confirmation when you exit from the                  editor. (Default value: No)%@AB@%askrtn%@AE@%            Boolean. Prompts you to press ENTER when returning from a                  %@AI@%Shell%@AE@% command. (Default value: Yes)%@AB@%autosave%@AE@%          Boolean. Saves the current file whenever you switch away                  from it. If this switch is off, contents of file buffer                  are maintained, but subsequent actions, such as exiting,                  may lose edits. (Default value: Yes)%@AB@%backup%@AE@%            Text. Determines what happens to the old copy of a file                  when a new version is saved to disk. A value of none                  specifies that no backup operation is to be performed; the                  editor simply overwrites the old file. A value of %@AB@%undel%@AE@%                  specifies that the old file is to be moved so that                  UNDEL.EXE can retrieve it. A value of bak specifies that                  the file name of the old version of the file will be                  changed to .BAK. (Default value: bak)%@AB@%case%@AE@%              Boolean. Considers case to be significant for search and                  replace operations. For example if %@AB@%case%@AE@% is on, the string                  %@AS@%Procedure%@AE@% is not found as a match for the string                  %@AS@%procedure%@AE@%. (Default value: No)%@AB@%displaycursor%@AE@%     Boolean. Shows a position on the status line in the                  (%@AI@%row%@AE@%,%@AI@%column%@AE@%) format. When off, the position listed is that                  of the upper-left corner. When on, the current cursor                  position is given. (Default value: No)%@AB@%editreadonly%@AE@%      Boolean. Allows read-only files to be edited. If off, a                  read-only file is marked no-edit in the editor. (Default                  value: Yes)%@AB@%entab%@AE@%             Numeric. Controls the degree to which the Microsoft Editor                  converts multiple spaces to tabs when reading or writing a                  file. A value of 0 means tabs are not used to represent                  white space; 1 means all multiple spaces outside of quoted                  strings are converted; 2 means all multiple spaces are                  converted to tabs. (Default value: 1)%@AB@%enterinsmode%@AE@%      Boolean. Starts the editor up in insert mode instead of                  overtype mode, or switches to insert mode in the middle of                  an editing session. (Default value: No)%@AB@%errcolor%@AE@%          Numeric, using hexadecimal radix. Controls the color used                  for error messages. The default is red text on a black                  background. (Default value: 04)%@AB@%errprompt%@AE@%         Boolean. Controls the "Press any key" prompt. When On, the                  editor stops at each error message and waits for a                  keystroke. (Default value: Yes)%@AB@%extmake%@AE@%           Text. Associates a command line with a particular file                  extension for use by the %@AI@%Compile%@AE@% function. The text after                  the switch has this form:                  %@AB@%extmake:%@AE@%%@AI@%extension commandline%@AE@%                  Here, %@AI@%extension%@AE@% is the extension of the file to match, and                  %@AI@%commandline%@AE@% is a command line to be executed. If there is                  a %@AB@%%s%@AE@% in the command line, it is replaced with the name of                  the current file or with the %@AI@%textarg%@AE@% in the %@AI@%Arg textarg%@AE@%                  %@AI@%Compile%@AE@% command. This switch may appear more than once in                  the TOOLS.INI file.                  For example, you could have the following lines in                  TOOLS.INI:                  %@AS@%extmake:bc /Z %s;%@AE@%                  %@AS@%extmake:for fl /c %s%@AE@%                  %@AS@%extmake:pas pl /c /h %s%@AE@%                  %@AS@%extmake:asm masm -Mx %s;%@AE@%                  %@AS@%extmake:c cl /c /Zep /D LINT_ARGS %s%@AE@%                  %@AS@%extmake:text make %s     %@AE@%                  The %@AI@%Arg Compile%@AE@% command spawns a system-level command line                  based on extension of current file; the editor selects the                  corresponding %@AB@%extmake%@AE@% setting. The %@AI@%Arg textarg Compile%@AE@%                  command spawns the command line for %@AB@%text%@AE@% extension, in                  which %@AI@%textarg%@AE@% replaces %@AB@%%s%@AE@%.                  This switch can also use the %@AB@%%|F%@AE@% syntax described in                  Section 7.3%@BO:   3a7a5@%.%@AB@%fgcolor%@AE@%           Numeric. Controls the color used for the editing window.                  The default is light gray text on a black background.                  (Default value: 07)%@AB@%filetab%@AE@%           Numeric. Determines how the editor translates tabs to                  spaces when reading or writing a disk file. This switch                  also determines how the editor translates spaces to tabs                  for modified lines, when %@AB@%entab%@AE@% > 0. The value of the                  switch gives the number of spaces associated with each tab                  column. For example, the setting "filetab:4" assumes a tab                  column every 4 positions on each line. Every time the                  editor finds a tab character in a file, it loads the                  buffer with the number of spaces necessary to get to the                  next tab column. (Default value: 8)%@AB@%height%@AE@%            Numeric. Controls the number of lines that the Microsoft                  Editor uses in the editing window, not including the                  dialog and status lines. This is useful with a nonstandard                  display device. Enhanced Graphics Adapter (EGA) in 43-line                  mode on the IBM PC uses a value of 41. Video Graphics                  Array (VGA) in 50-line mode uses a value of 48. (Default                  value: 23)%@AB@%helpboldcolor%@AE@%     Numeric. Controls the color of text designated as                  boldface. (Default value: 0F)%@AB@%helpfiles%@AE@%         Text. Specifies which .HLP files should be used by on-line                  Help.%@AB@%helpitalcolor%@AE@%     Numeric. Controls the color of text designated as italic.                  (Default value: 0A)%@AB@%helpundcolor%@AE@%      Numeric. Controls the color of text designated as                  underlined. (Default value: 0C)%@AB@%helpwarncolor%@AE@%     Numeric. Controls the color of text used for a "warning"                  note. Also controls the color of highlighted                  cross-references. (Default value: 07)%@AB@%helpwindow%@AE@%        Boolean. Controls split-screen behavior. When off, the                  editor cannot split the screen to display Help                  information. (Default value: Yes)%@AB@%hgcolor%@AE@%           Numeric; hexadecimal value. Controls the color of text                  highlighted by a search command. (See %@AB@%selcolor%@AE@%.) The                  default is green. (Default value: 02)%@AB@%hike%@AE@%              Numeric. Specifies the cursor's new-line position (from                  the top of the screen) when the cursor is moved out of the                  current window by more than %@AB@%vscroll%@AE@% lines. (Default value:                  4)%@AB@%hscroll%@AE@%           Numeric. Controls the number of columns shifted left or                  right when the cursor is scrolled out of the editing                  window. (Default value: 10)%@AB@%infcolor%@AE@%          Numeric, using hexadecimal radix. Controls the color used                  for informative text. The default is dark yellow text on a                  black background. (On some monitors, this may appear                  brown.) (Default value: 06)%@AB@%keyboard%@AE@%          Text. Set to "compatible" if you have a 101-key enhanced                  keyboard and wish to use keyboard-enhancer programs that                  do not fully support the enhanced keyboard. Set to                  "enhanced" to restore normal operation after using                  "compatible." If no option is used, the editor makes its                  own decision about type of keyboard in use. This switch                  works only under DOS or real-mode OS/2.%@AB@%load%@AE@%              Text. Specifies the name of a C-extension executable file                  to be loaded. Whenever this switch is assigned a new                  value, the extension file named is loaded into memory and                  initialized by calling the %@AB@%WhenLoaded%@AE@% function. The file                  named must be a full name, including base name and file                  extension (unless extension module is for OS/2 protected                  mode). See Chapter 8%@BO:   3fbeb@%, "Programming C Extensions," for                  more information.%@AB@%markfile%@AE@%          Text. Specifies the name of the file the Microsoft Editor                  searches when looking for a marker that is not in the                  in-memory set. This file can be created by entering lines                  of the following form:                  %@AI@%markername%@AE@% %@AI@%filename%@AE@% %@AI@%line%@AE@% %@AI@%column%@AE@%                  Here, %@AI@%line%@AE@% and %@AI@%column%@AE@% specify the position in the file                  %@AI@%filename%@AE@% where the marker %@AI@%markername%@AE@% appears.%@AB@%noise%@AE@%             Numeric. Controls the number of lines counted at a time                  when searching or loading a file. This value is displayed                  in the lower-right corner of the screen and may be turned                  off by setting %@AB@%noise%@AE@% to 0. (Default value: 50)%@AB@%printcmd%@AE@%          Text. Specifies a system-level command that the editor                  invokes when you issue the %@AI@%Print%@AE@% command. For example, the                  following setting copies output to LPT2:                  %@AS@%COPY %s LPT2%@AE@%                  By default, the %@AI@%Print%@AE@% command sends output directly to                  LPT1.%@AB@%readonly%@AE@%          Text. Specifies the DOS command invoked when the Microsoft                  Editor attempts to overwrite a read-only file. The current                  file name is appended to the command, as shown in the                  following example:                  %@AS@%readonly:attrib -r %s%@AE@%                  This command removes the read-only attribute from the                  current file so the file can be overwritten. If no command                  is specified, you are prompted to enter a new name under                  which to save the file.%@AB@%realtabs%@AE@%          Boolean. Preserves actual tab characters instead of                  converting them to spaces. When this switch is on, the                  editor preserves tab alignment as characters are added and                  deleted, and cursor-movement functions treat each tab as a                  single character. (Default value: Yes)%@AB@%rmargin%@AE@%           Numeric. Controls the right column margin used in wordwrap                  mode. A space typed to the right of this margin causes a                  line break. Wordwrap mode is turned on and off with the                  %@AB@%wordwrap%@AE@% switch. (Default value: 72)%@AB@%savescreen%@AE@%        Boolean. Saves and restores the DOS screen (used with the                  %@AI@%Shell%@AE@% and %@AI@%Exit%@AE@% functions). (Default value: Yes)%@AB@%searchwrap%@AE@%        Boolean. Causes search and replace commands to wrap past                  the end of the file and continue searching from the                  beginning. Unsuccessful searches stop after the entire                  file is searched once. When this switch is off, searches                  stop at the end of the file. (Default value: No)%@AB@%selcolor%@AE@%          Numeric. Controls the color of text highlighted by an                  on-screen argument (%@AI@%linearg%@AE@%, %@AI@%boxarg%@AE@%, %@AI@%streamarg%@AE@%). The                  default is black text on a white background. Do not                  confuse with %@AB@%hgcolor%@AE@%. (Default value: 70)%@AB@%shortnames%@AE@%        Boolean. Allows you to load a file by giving only the base                  name, which the editor searches for in the                  <information-file>. (Default value: Yes)%@AB@%snow%@AE@%              Boolean. Eliminates snow on a CGA, at a penalty to speed.                  Turn this switch off if you have a CGA-compatible that                  doesn't generate snow. (Default value: Yes)%@AB@%softcr%@AE@%            Boolean. Attempts to indent based upon the format of the                  surrounding text when you invoke the %@AI@%Newline%@AE@% or %@AI@%Emacsnewl%@AE@%                  function. (Default value: Yes)%@AB@%stacolor%@AE@%          Numeric. Controls the color used for the status-line                  information. The default is cyan text on a black                  background. (Default value: 03)%@AB@%tabalign%@AE@%          Boolean. Determines where the cursor may be placed in a                  tab field. When off, the cursor may be placed anywhere in                  a tab field. When on (and if %@AB@%realtabs%@AE@% is also on), the                  cursor must align with the column position of the tab.                  (Default value: No)%@AB@%tabdisp%@AE@%           Numeric. Specifies the ASCII value of the character used                  to display tabs. Normally, a space is used, but a graphic                  character can be used to show which spaces correspond to                  tabs. (Default value: 32)%@AB@%tabstops%@AE@%          Numeric. Controls the number of spaces between each                  logical tab stop for the %@AI@%Tab%@AE@% and %@AI@%Backtab%@AE@% movement                  functions. Note that this switch has no relation to the                  interpretation of actual tabs. (Default value: 4)%@AB@%tmpsav%@AE@%            Numeric. Controls the maximum number of recently edited                  files listed in the information file. If this switch is                  set to 0, the editor lets the information file grow                  without limit; all files ever edited appear in the                  information file until M.TMP is altered or deleted.                  (Default value: 20)%@AB@%traildisp%@AE@%         Numeric. Specifies the ASCII value of the character to be                  displayed as trailing spaces. Note that this switch has no                  effect unless the %@AB@%trailspace%@AE@% switch is turned on. (Default                  value: 0)%@AB@%trailspace%@AE@%        Boolean. Preserves trailing spaces in each line you                  modify. (Default value: No)%@AB@%undelcount%@AE@%        Numeric. Controls the number of backup copies of a file                  that are saved when the %@AB@%backup%@AE@% switch is set to %@AB@%undel%@AE@%.                  When the limit is exceeded, the editor discards the oldest                  backup. (Default value: no limit)%@AB@%undocount%@AE@%         Numeric. Controls the number of edit functions that you                  can undo. (Default value: 10)%@AB@%unixre%@AE@%            Boolean. Specifies the use of UNIX regular-expression                  syntax rather than the syntax used inVersion 1.0 of the                  editor. (Default value: Yes)%@AB@%viewonly%@AE@%          Boolean. Identical to the /r command-line switch and the                  %@AI@%Noedit%@AE@% function. When set, no file can be edited. (Default                  value: No)%@AB@%vscroll%@AE@%           Numeric. Controls the number of lines shifted up or down                  when the cursor is scrolled out of the editing window. The                  %@AI@%Mlines%@AE@% and %@AI@%Plines%@AE@% functions also use this value. (Default                  value: 7)%@AB@%wdcolor%@AE@%           Numeric. Controls the color of the border line created                  when you split a window. (Default value: 07).%@AB@%width%@AE@%             Numeric. Controls the width of the display mode for                  displays that are capable of showing more than 80 columns.                  Values other than 80 are supported only for a limited                  number of monitors. (Default value: 80)%@AB@%wordwrap%@AE@%          Boolean. Breaks lines of text when you edit them beyond                  the margin specified%@TE:  304  17158  2 18 58 @%
  7151. %@NL@%
  7152. %@NL@%
  7153. %@CR:MSEb0000@%%@1@%%@AB@%Appendix B  Support Programs for the Microsoft Editor%@AE@%%@EH@%%@NL@%
  7154. ───────────────────────────────────────────────────────────────────────────%@NL@%
  7155. %@NL@%
  7156. %@CR:MSEb0001@%%@4@%This appendix discusses two programs that work in conjunction with the%@EH@%
  7157. Microsoft Editor:%@NL@%
  7158. %@NL@%
  7159. %@CR:MSEb0002@%  ■  UNDEL.EXE%@NL@%
  7160. %@NL@%
  7161.   ■  EXP.EXE%@NL@%
  7162. %@NL@%
  7163. %@CR:MSEb0003@%%@4@%Both programs work with backup files. When a file is updated and the %@AB@%backup%@AE@%%@EH@%
  7164. switch is set to %@AB@%undel%@AE@%, the old version of the file is copied to a hidden
  7165. subdirectory called DELETED. UNDEL.EXE and EXP.EXE manipulate the files in
  7166. the DELETED subdirectory.%@NL@%
  7167. %@NL@%
  7168. %@NL@%
  7169. %@CR:MSEb1000@%%@2@%%@AB@%B.1  UNDEL.EXE%@AE@%%@EH@%%@NL@%
  7170. %@NL@%
  7171. %@CR:MSEb1001@%%@4@%Use this program to move a file from the DELETED subdirectory to the parent%@EH@%
  7172. directory. Its command-line syntax is as follows:%@NL@%
  7173. %@NL@%
  7174.      undel «%@AI@%filename%@AE@%»%@NL@%
  7175. %@NL@%
  7176. %@CR:MSEb1002@%%@4@%If %@AI@%filename%@AE@% is not given, the contents of the DELETED subdirectory are%@EH@%
  7177. listed. If there is more than one version of the file, you are given a list
  7178. to choose from. If the file already exists in the parent directory, the two
  7179. files are swapped.%@NL@%
  7180. %@NL@%
  7181. %@NL@%
  7182. %@CR:MSEb2000@%%@2@%%@AB@%B.2  EXP.EXE%@AE@%%@EH@%%@NL@%
  7183. %@NL@%
  7184. %@CR:MSEb2001@%%@4@%Use this program to remove all of the files in the hidden DELETED%@EH@%
  7185. subdirectory of the specified directory. Use the following command-line
  7186. syntax:%@NL@%
  7187. %@NL@%
  7188.      exp «/r» «/q» «%@AI@%directory%@AE@%»%@NL@%
  7189. %@NL@%
  7190. %@CR:MSEb2002@%%@4@%If no %@AI@%directory%@AE@% is specified, the current directory's DELETED subdirectory%@EH@%
  7191. is used. If the /r option is given, EXP.EXE recursively operates on all
  7192. subdirectories. The /q option specifies quiet mode; the deleted file names
  7193. are not displayed on the screen.%@NL@%
  7194. %@NL@%
  7195. %@NL@%
  7196. %@CR:MSEc0000@%%@1@%%@AB@%Appendix C  Microsoft Editor Messages%@AE@%%@EH@%%@NL@%
  7197. ───────────────────────────────────────────────────────────────────────────%@NL@%
  7198. %@NL@%
  7199. %@CR:MSEc0001@%%@4@%This appendix lists the messages that the editor can report on the dialog%@EH@%
  7200. line, along with explanations. Some of these messages represent error
  7201. conditions; in that case, the explanation given describes what went wrong
  7202. and what action to take to correct the error. Other messages prompt you for
  7203. information or report what operation is taking place. For example, the
  7204. editor displays a message whenever it saves a file.%@NL@%
  7205. %@NL@%
  7206. %@CR:MSEc0002@%%@4@%The messages are listed in two sections. The first section consists of%@EH@%
  7207. messages that begin with a placeholder. A "placeholder" is a piece of
  7208. information──such as a number or a file name──that varies with the
  7209. situation. This section is organized alphabetically by the placeholder type.
  7210. The second section consists of messages that do not begin with a
  7211. placeholder. These messages are organized alphabetically by first symbol or
  7212. word.%@NL@%
  7213. %@NL@%
  7214. %@NL@%
  7215. %@CR:MSEc1000@%%@2@%%@AB@%C.1  Messages Starting with Placeholders%@AE@%%@EH@%%@NL@%
  7216. %@NL@%
  7217. %@CR:MSEcE001@%%@4@%%@AI@%driveletter%@AE@%%@AB@% is an invalid drive%@AE@%%@EH@%%@NL@%
  7218. %@NL@%
  7219.                You attempted to use %@AI@%Setfile%@AE@% to change the current drive to a%@NL@%
  7220.                drive not recognized by your system. Use a different drive%@NL@%
  7221.                letter.%@NL@%
  7222. %@NL@%
  7223. %@CR:MSEcE002@%%@4@%%@AI@%file%@AE@%%@AB@% does not exist%@AE@%%@EH@%%@NL@%
  7224. %@NL@%
  7225.                You gave the %@AI@%Arg Arg filename Paste%@AE@% command, but the file%@NL@%
  7226.                specified does not exist. Make sure you give the complete%@NL@%
  7227.                path name of the file if it is not in the current directory.%@NL@%
  7228. %@NL@%
  7229. %@CR:MSEcE003@%%@4@%%@AI@%file%@AE@%%@AB@% does not exist. Create?%@AE@%%@EH@%%@NL@%
  7230. %@NL@%
  7231.                When you started the editor, you specified a file that does%@NL@%
  7232.                not exist. Type Y to create the file or N to avoid creating%@NL@%
  7233.                the file, in which case the editor loads the most recently%@NL@%
  7234.                edited file.%@NL@%
  7235. %@NL@%
  7236. %@CR:MSEcE004@%%@4@%%@AI@%file%@AE@%%@AB@% has been changed.  Refresh?%@AE@%%@EH@%%@NL@%
  7237. %@NL@%
  7238.                One of the files opened for editing was altered by a program%@NL@%
  7239.                other than the editor. This change has not yet been reflected%@NL@%
  7240.                in the file buffer. You should either type Y to discard%@NL@%
  7241.                recent edits and have the editor reread the file from disk,%@NL@%
  7242.                or type N to preserve your edits. If you answer N, you should%@NL@%
  7243.                execute a save operation so that the file buffer is copied to%@NL@%
  7244.                the file stored on disk.%@NL@%
  7245. %@NL@%
  7246. %@CR:MSEcE005@%%@4@%%@AI@%file%@AE@%%@AB@% has changed. Save changes (Y/N)?%@AE@%%@EH@%%@NL@%
  7247. %@NL@%
  7248.                You have attempted to exit, and the file you are currently%@NL@%
  7249.                working on has been changed since it was last saved. If you%@NL@%
  7250.                respond Y, the changes will be saved; if N, they will be%@NL@%
  7251.                discarded.%@NL@%
  7252. %@NL@%
  7253. %@CR:MSEcE006@%%@4@%%@AI@%file%@AE@%%@AB@% is read-only%@AE@%%@EH@%%@NL@%
  7254. %@NL@%
  7255.                You attempted to overwrite a file that has the read-only%@NL@%
  7256.                attribute. After displaying this message, the editor prompts%@NL@%
  7257.                for a new file name under which to save the file. If you%@NL@%
  7258.                assigned a command line to the %@AB@%readonly%@AE@% switch, the editor%@NL@%
  7259.                asks if you want to execute this command.%@NL@%
  7260. %@NL@%
  7261. %@CR:MSEcE007@%%@4@%%@AB@%'%@AE@%%@AI@%keystroke%@AE@%%@AB@%' is an unknown key%@AE@%%@EH@%%@NL@%
  7262. %@NL@%
  7263.                You gave an unrecognized keystroke in an assignment. Some%@NL@%
  7264.                keyboards may support keystroke combinations that the editor%@NL@%
  7265.                does not accept.%@NL@%
  7266. %@NL@%
  7267. %@CR:MSEcE008@%%@4@%%@AI@%keystroke%@AE@%%@AB@% is not assigned to any editor function%@AE@%%@EH@%%@NL@%
  7268. %@NL@%
  7269.                The keystroke you pressed has no editing function assigned to%@NL@%
  7270.                it (not even the %@AI@%Graphic%@AE@% function, which makes keystrokes%@NL@%
  7271.                literal). You must assign a function to a keystroke before%@NL@%
  7272.                using it.%@NL@%
  7273. %@NL@%
  7274. %@CR:MSEcE009@%%@4@%%@AI@%name%@AE@%%@AB@% is not an editor function%@AE@%%@EH@%%@NL@%
  7275. %@NL@%
  7276.                You attempted to assign an undefined function to a keystroke.%@NL@%
  7277.                You may have mistyped the function name, or you may have used%@NL@%
  7278.                the colon (:) instead of the definition symbol (:=) to enter%@NL@%
  7279.                a macro definition.%@NL@%
  7280. %@NL@%
  7281. %@CR:MSEcE010@%%@4@%%@AI@%name%@AE@%%@AB@% is not an editor switch%@AE@%%@EH@%%@NL@%
  7282. %@NL@%
  7283.                You entered an assignment in which the left side did not%@NL@%
  7284.                contain a recognized function, macro, or switch name. You may%@NL@%
  7285.                have mistyped the name or used the wrong syntax.%@NL@%
  7286. %@NL@%
  7287. %@CR:MSEcE011@%%@4@%%@AI@%number%@AE@%%@AB@% occurrences found%@AE@%%@EH@%%@NL@%
  7288. %@NL@%
  7289.                The %@AI@%Searchall%@AE@% function found %@AI@%number%@AE@% occurrences of the search%@NL@%
  7290.                string.%@NL@%
  7291. %@NL@%
  7292. %@CR:MSEcE012@%%@4@%%@AI@%number%@AE@%%@AB@% occurrences replaced%@AE@%%@EH@%%@NL@%
  7293. %@NL@%
  7294.                The %@AI@%Replace%@AE@% or %@AI@%Qreplace%@AE@% function replaced %@AI@%number%@AE@% occurrences%@NL@%
  7295.                of the search string.%@NL@%
  7296. %@NL@%
  7297. %@CR:MSEcE013@%%@4@%%@AI@%number%@AE@%%@AB@%: Undefined opcode%@AE@%%@EH@%%@NL@%
  7298. %@NL@%
  7299.                The editor detected an internal error in the way it analyzed%@NL@%
  7300.                a regular expression. Please note the circumstances of this%@NL@%
  7301.                error and notify Microsoft Corporation by following the%@NL@%
  7302.                directions in the Microsoft Product Assistance Request form%@NL@%
  7303.                at the back of one of your manuals.%@NL@%
  7304. %@NL@%
  7305. %@CR:MSEcE014@%%@4@%%@AB@%+'%@AE@%%@AI@%string%@AE@%%@AB@%' not found%@AE@%%@EH@%%@NL@%
  7306. %@NL@%
  7307.                The %@AI@%Psearch%@AE@% function failed to find an occurrence of %@AI@%string%@AE@%.%@NL@%
  7308.                This message may be reported for both ordinary and%@NL@%
  7309.                regular-expression searches.%@NL@%
  7310. %@NL@%
  7311. %@CR:MSEcE015@%%@4@%%@AI@%value%@AE@%%@AB@% is an illegal setting%@AE@%%@EH@%%@NL@%
  7312. %@NL@%
  7313.                You attempted to give an illegal value in a switch%@NL@%
  7314.                assignment.%@NL@%
  7315. %@NL@%
  7316. %@NL@%
  7317. %@CR:MSEc2000@%%@2@%%@AB@%C.2  Other Messages%@AE@%%@EH@%%@NL@%
  7318. %@NL@%
  7319. %@CR:MSEcE016@%%@4@%%@AB@%<ZFormat???>%@AE@%%@EH@%%@NL@%
  7320. %@NL@%
  7321.                You used the percent sign (%@AS@%%%@AE@%) in a text switch (such as%@NL@%
  7322.                %@AB@%extmake%@AE@%) without following it by correct syntax such as %@AS@%%s%@AE@% or%@NL@%
  7323.                %@AS@%|F%@AE@%. To include a literal use of the percent sign, enter two%@NL@%
  7324.                percent signs in a row (%@AS@%%%%@AE@%).%@NL@%
  7325. %@NL@%
  7326. %@CR:MSEcE017@%%@4@%%@AB@%**PANIC EXIT** Really exit and lose edits?%@AE@%%@EH@%%@NL@%
  7327. %@NL@%
  7328.                The editor appeared to be "hung" (non-functioning) and you%@NL@%
  7329.                pressed CTRL+BREAK five times to exit. If you answer Y, the%@NL@%
  7330.                editing session will be terminated and any unsaved changes%@NL@%
  7331.                will be lost. The editor sometimes has so many operations to%@NL@%
  7332.                perform that it appears to be hung, but is actually%@NL@%
  7333.                functioning normally. If you think this is the case, answer N%@NL@%
  7334.                to return to the editing session.%@NL@%
  7335. %@NL@%
  7336. %@CR:MSEcE018@%%@4@%%@AB@%- floating point not loaded%@AE@%%@EH@%%@NL@%
  7337. %@NL@%
  7338.                The editor encountered an internal error. Please note the%@NL@%
  7339.                circumstances of this error and notify Microsoft Corporation%@NL@%
  7340.                by following the directions in the Microsoft Product%@NL@%
  7341.                Assistance Request form at the back of one of your manuals.%@NL@%
  7342. %@NL@%
  7343. %@CR:MSEcE019@%%@4@%%@AB@%- integer divide by zero%@AE@%%@EH@%%@NL@%
  7344. %@NL@%
  7345.                The editor encountered an internal error. Please note the%@NL@%
  7346.                circumstances of this error and notify Microsoft Corporation%@NL@%
  7347.                by following the directions in the Microsoft Product%@NL@%
  7348.                Assistance Request form at the back of one of your manuals.%@NL@%
  7349. %@NL@%
  7350. %@CR:MSEcE020@%%@4@%%@AB@%- not enough memory on exec%@AE@%%@EH@%%@NL@%
  7351. %@NL@%
  7352.                The editor encountered an internal error. Please note the%@NL@%
  7353.                circumstances of this error and notify Microsoft Corporation%@NL@%
  7354.                by following the directions in the Microsoft Product%@NL@%
  7355.                Assistance Request form at the back of one of your manuals.%@NL@%
  7356. %@NL@%
  7357. %@CR:MSEcE021@%%@4@%%@AB@%- not enough space for arguments%@AE@%%@EH@%%@NL@%
  7358. %@NL@%
  7359.                You attempted to start the editor with more file names than%@NL@%
  7360.                can be stored in free memory. This error should be impossible%@NL@%
  7361.                to get unless you use a wildcard expression (such as %@AS@%*.c%@AE@%)%@NL@%
  7362.                with an extraordinarily large directory.%@NL@%
  7363. %@NL@%
  7364. %@CR:MSEcE022@%%@4@%%@AB@%- not enough space for environment%@AE@%%@EH@%%@NL@%
  7365. %@NL@%
  7366.                The editor has insufficient free memory to store the%@NL@%
  7367.                environment variables for the current session. This error%@NL@%
  7368.                should be impossible to get unless you have severely%@NL@%
  7369.                restricted the amount of memory granted to the editor.%@NL@%
  7370. %@NL@%
  7371. %@CR:MSEcE023@%%@4@%%@AB@%- null pointer assignment%@AE@%%@EH@%%@NL@%
  7372. %@NL@%
  7373.                The editor encountered an internal error. Please note the%@NL@%
  7374.                circumstances of this error and notify Microsoft Corporation%@NL@%
  7375.                by following the directions in the Microsoft Product%@NL@%
  7376.                Assistance Request form at the back of one of your manuals.%@NL@%
  7377. %@NL@%
  7378. %@CR:MSEcE024@%%@4@%%@AB@%-Search for '%@AE@%%@AI@%string%@AE@%%@AB@%'%@AE@%%@EH@%%@NL@%
  7379. %@NL@%
  7380.                The %@AI@%Msearch%@AE@% function is currently searching for %@AI@%string%@AE@%.%@NL@%
  7381. %@NL@%
  7382. %@CR:MSEcE025@%%@4@%%@AB@%- stack overflow%@AE@%%@EH@%%@NL@%
  7383. %@NL@%
  7384.                Internal function calls required a larger stack than is%@NL@%
  7385.                available to the editor. If you receive this error, it is%@NL@%
  7386.                most likely because you are using an extension that makes%@NL@%
  7387.                extensive use of local variables or function calls. Rewrite%@NL@%
  7388.                the extension so that it uses fewer or smaller local%@NL@%
  7389.                variables; then recompile and relink.%@NL@%
  7390. %@NL@%
  7391. %@CR:MSEcE026@%%@4@%%@AB@%-'%@AE@%%@AI@%string%@AE@%%@AB@%' not found%@AE@%%@EH@%%@NL@%
  7392. %@NL@%
  7393.                The %@AI@%Msearch%@AE@% function failed to find an occurrence of %@AI@%string%@AE@%.%@NL@%
  7394.                This message may be reported for both ordinary and%@NL@%
  7395.                regular-expression searches.%@NL@%
  7396. %@NL@%
  7397. %@CR:MSEcE027@%%@4@%%@AB@%+Search for '%@AE@%%@AI@%string%@AE@%%@AB@%'%@AE@%%@EH@%%@NL@%
  7398. %@NL@%
  7399.                The %@AI@%Psearch%@AE@% function is currently searching for %@AI@%string%@AE@%.%@NL@%
  7400. %@NL@%
  7401. %@CR:MSEcE028@%%@4@%%@AB@%All edits lost (Sorry)%@AE@%%@EH@%%@NL@%
  7402. %@NL@%
  7403.                The editor lost information as a result of an internal error.%@NL@%
  7404.                Please note the circumstances of this error and notify%@NL@%
  7405.                Microsoft Corporation by following the directions in the%@NL@%
  7406.                Microsoft Product Assistance Request form at the back of one%@NL@%
  7407.                of your manuals.%@NL@%
  7408. %@NL@%
  7409. %@CR:MSEcE029@%%@4@%%@AB@%Are you sure you want to exit? (y/n):%@AE@%%@EH@%%@NL@%
  7410. %@NL@%
  7411.                You gave the %@AI@%Meta Exit%@AE@% command (exit without saving), or the%@NL@%
  7412.                %@AB@%autosave%@AE@% switch is not on and you tried to exit. Type Y to%@NL@%
  7413.                exit or N to continue the editing session.%@NL@%
  7414. %@NL@%
  7415. %@CR:MSEcE030@%%@4@%%@AB@%Arg [%@AE@%%@AI@%number%@AE@%%@AB@%]:%@AE@%%@EH@%%@NL@%
  7416. %@NL@%
  7417.                You invoked the %@AI@%Arg%@AE@% function, which is used to introduce an%@NL@%
  7418.                argument or modify a function. The %@AI@%number%@AE@% placeholder%@NL@%
  7419.                indicates the number of times you invoked %@AI@%Arg%@AE@%. Complete the%@NL@%
  7420.                command or type %@AI@%Cancel%@AE@% to escape. Any %@AI@%textarg%@AE@% s you type in%@NL@%
  7421.                are displayed after the colon.%@NL@%
  7422. %@NL@%
  7423. %@CR:MSEcE031@%%@4@%%@AB@%Arg list too long%@AE@%%@EH@%%@NL@%
  7424. %@NL@%
  7425.                The editor encountered an internal error. Please note the%@NL@%
  7426.                circumstances of this error and notify Microsoft Corporation%@NL@%
  7427.                by following the directions in the Microsoft Product%@NL@%
  7428.                Assistance Request form at the back of one of your manuals.%@NL@%
  7429. %@NL@%
  7430. %@CR:MSEcE032@%%@4@%%@AB@%Argument cancelled%@AE@%%@EH@%%@NL@%
  7431. %@NL@%
  7432.                You invoked the %@AI@%Cancel%@AE@% function, which removes arguments. To%@NL@%
  7433.                clear this message from the dialog line, invoke %@AI@%Cancel%@AE@% again.%@NL@%
  7434. %@NL@%
  7435. %@CR:MSEcE033@%%@4@%%@AB@%Argument required%@AE@%%@EH@%%@NL@%
  7436. %@NL@%
  7437.                The function you just invoked requires an argument.%@NL@%
  7438. %@NL@%
  7439. %@CR:MSEcE034@%%@4@%%@AB@%Bad Assignment!%@AE@%%@EH@%%@NL@%
  7440. %@NL@%
  7441.                The editor could not perform the assignment requested. You%@NL@%
  7442.                may have mistyped your entry or requested nonexistent%@NL@%
  7443.                functions.%@NL@%
  7444. %@NL@%
  7445. %@CR:MSEcE035@%%@4@%%@AB@%bad environment on exec%@AE@%%@EH@%%@NL@%
  7446. %@NL@%
  7447.                OS/2 only. You gave a %@AI@%Compile%@AE@% or %@AI@%Shell%@AE@% command that could not%@NL@%
  7448.                be executed.%@NL@%
  7449. %@NL@%
  7450. %@CR:MSEcE036@%%@4@%%@AB@%Bad file number%@AE@%%@EH@%%@NL@%
  7451. %@NL@%
  7452.                The editor encountered an internal error. Please note the%@NL@%
  7453.                circumstances of this error and notify Microsoft Corporation%@NL@%
  7454.                by following the directions in the Microsoft Product%@NL@%
  7455.                Assistance Request form at the back of one of your manuals.%@NL@%
  7456. %@NL@%
  7457. %@CR:MSEcE037@%%@4@%%@AB@%bad format on exec%@AE@%%@EH@%%@NL@%
  7458. %@NL@%
  7459.                OS/2 only. You gave a %@AI@%Compile%@AE@% or %@AI@%Shell%@AE@% command that could not%@NL@%
  7460.                be executed.%@NL@%
  7461. %@NL@%
  7462. %@CR:MSEcE038@%%@4@%%@AB@%Bookmark not found%@AE@%%@EH@%%@NL@%
  7463. %@NL@%
  7464.                You attempted to go to a file marker that does not exist or%@NL@%
  7465.                mistyped the marker name.%@NL@%
  7466. %@NL@%
  7467. %@CR:MSEcE039@%%@4@%%@AB@%Can't delete%@AE@% %@AI@%file%@AE@%%@AB@% -%@AE@%%@AI@%messagetext%@AE@%%@EH@%%@NL@%
  7468. %@NL@%
  7469.                The editor could not delete the given file, for the reason%@NL@%
  7470.                given in %@AI@%messagetext%@AE@%.%@NL@%
  7471. %@NL@%
  7472. %@CR:MSEcE040@%%@4@%%@AB@%Can't delete old version of%@AE@% %@AI@%file%@AE@%%@EH@%%@NL@%
  7473. %@NL@%
  7474.                The editor attempted to write a file to disk during the UNDEL%@NL@%
  7475.                backup procedure (the old version of the file is stored in%@NL@%
  7476.                the DELETED subdirectory), but the editor could not do the%@NL@%
  7477.                necessary file deletion. Attempt saving to an alternate file.%@NL@%
  7478. %@NL@%
  7479. %@CR:MSEcE041@%%@4@%%@AB@%Can't rename%@AE@% %@AI@%srcfile%@AE@%%@AB@% to%@AE@% %@AI@%destfile%@AE@%%@AB@% -%@AE@% %@AI@%messagetext%@AE@%%@EH@%%@NL@%
  7480. %@NL@%
  7481.                The editor attempted to write a file to disk during the BAK%@NL@%
  7482.                backup procedure (the old version of the file is stored as%@NL@%
  7483.                %@AI@%srcfile%@AE@%.BAK), but the editor could not do the necessary%@NL@%
  7484.                renaming. Attempt saving to an alternate file.%@NL@%
  7485. %@NL@%
  7486. %@CR:MSEcE042@%%@4@%%@AB@%Cannot access%@AE@% %@AI@%file%@AE@%%@AB@% -%@AE@% %@AI@%messagetext%@AE@%%@EH@%%@NL@%
  7487. %@NL@%
  7488.                You tried to load %@AI@%file%@AE@%, but were denied access by the system%@NL@%
  7489.                for the reason given in %@AI@%messagetext%@AE@%.%@NL@%
  7490. %@NL@%
  7491. %@CR:MSEcE043@%%@4@%%@AB@%Cannot allocate mpPnPage -%@AE@% %@AI@%number%@AE@%%@EH@%%@NL@%
  7492. %@NL@%
  7493.                OS/2 only. The editor encountered an internal error. Please%@NL@%
  7494.                note the circumstances of this error and notify Microsoft%@NL@%
  7495.                Corporation by following the directions in the Microsoft%@NL@%
  7496.                Product Assistance Request form at the back of one of your%@NL@%
  7497.                manuals.%@NL@%
  7498. %@NL@%
  7499. %@CR:MSEcE044@%%@4@%%@AB@%Cannot allocate pageTmp -%@AE@% %@AI@%number%@AE@%%@EH@%%@NL@%
  7500. %@NL@%
  7501.                OS/2 only. The editor encountered an internal error. Please%@NL@%
  7502.                note the circumstances of this error and notify Microsoft%@NL@%
  7503.                Corporation by following the directions in the Microsoft%@NL@%
  7504.                Product Assistance Request form at the back of one of your%@NL@%
  7505.                manuals.%@NL@%
  7506. %@NL@%
  7507. %@CR:MSEcE045@%%@4@%%@AB@%Cannot change screen parameters when windows present%@AE@%%@EH@%%@NL@%
  7508. %@NL@%
  7509.                You attempted to reset the %@AB@%height%@AE@% switch when multiple%@NL@%
  7510.                windows were present. Close all windows but one before%@NL@%
  7511.                attempting to set %@AB@%height%@AE@%. (The editor can give this message%@NL@%
  7512.                when attempting to read TOOLS.INI.)%@NL@%
  7513. %@NL@%
  7514. %@CR:MSEcE046@%%@4@%%@AB@%Cannot close this window%@AE@%%@EH@%%@NL@%
  7515. %@NL@%
  7516.                You attempted to close a window that cannot be merged with%@NL@%
  7517.                another window. Two windows can be merged only if the windows%@NL@%
  7518.                share one complete side. A window could not be merged with%@NL@%
  7519.                two smaller windows if each shared part of one side adjoining%@NL@%
  7520.                the larger window.%@NL@%
  7521. %@NL@%
  7522.                The editor closes the window if it can find at least one%@NL@%
  7523.                adjoining window that can be properly merged. If the editor%@NL@%
  7524.                cannot close the window, move to another window and close it%@NL@%
  7525.                first.%@NL@%
  7526. %@NL@%
  7527. %@CR:MSEcE047@%%@4@%%@AB@%Cannot create%@AE@% %@AI@%file%@AE@%%@AB@% -%@AE@% %@AI@%messagetext%@AE@%%@EH@%%@NL@%
  7528. %@NL@%
  7529.                The editor was unable to create %@AI@%file%@AE@%, for the reason given in%@NL@%
  7530.                %@AI@%messagetext%@AE@%.%@NL@%
  7531. %@NL@%
  7532. %@CR:MSEcE048@%%@4@%%@AB@%Cannot create printer intermediate file%@AE@%%@EH@%%@NL@%
  7533. %@NL@%
  7534.                OS/2 only. The editor was unable to create the intermediate%@NL@%
  7535.                file needed for printer queuing.%@NL@%
  7536. %@NL@%
  7537. %@CR:MSEcE049@%%@4@%%@AB@%Cannot duplicate:%@AE@% %@AI@%errormessage%@AE@%%@EH@%%@NL@%
  7538. %@NL@%
  7539.                In attempting to perform a shell command or compile action,%@NL@%
  7540.                the editor was unable to redirect output. The C run-time%@NL@%
  7541.                error message indicates the nature of the problem.%@NL@%
  7542. %@NL@%
  7543. %@CR:MSEcE050@%%@4@%%@AB@%Cannot find label%@AE@% %@AI@%name%@AE@%%@EH@%%@NL@%
  7544. %@NL@%
  7545.                The given %@AI@%name%@AE@% was the target of a jump-to-label instruction%@NL@%
  7546.                (%@AS@%+>%@AE@%, %@AS@%->%@AE@%, or %@AS@%=>%@AE@%) within a macro, but the label was not%@NL@%
  7547.                defined. Place %@AS@%:>%@AE@% %@AI@%name%@AE@% in the macro to define the label.%@NL@%
  7548. %@NL@%
  7549. %@CR:MSEcE051@%%@4@%%@AB@%Cannot load%@AE@% %@AI@%file%@AE@%%@AB@% -%@AE@% %@AI@%messagetext%@AE@%%@EH@%%@NL@%
  7550. %@NL@%
  7551.                You attempted to load %@AI@%file%@AE@% as an extensions module, but it%@NL@%
  7552.                cannot be loaded for the reason given in %@AI@%messagetext%@AE@%.%@NL@%
  7553. %@NL@%
  7554. %@CR:MSEcE052@%%@4@%%@AB@%Cannot mgrep to <compile> during background compile%@AE@%%@EH@%%@NL@%
  7555. %@NL@%
  7556.                OS/2 only. You cannot start an %@AB@%mgrep%@AE@% during a background%@NL@%
  7557.                compile.%@NL@%
  7558. %@NL@%
  7559. %@CR:MSEcE053@%%@4@%%@AB@%Cannot open%@AE@% %@AI@%file%@AE@%%@EH@%%@NL@%
  7560. %@NL@%
  7561.                The %@AI@%file%@AE@% was specified as an argument to the %@AI@%Setfile%@AE@% or %@AI@%Paste%@AE@%%@NL@%
  7562.                command, but the %@AI@%file%@AE@% cannot be opened.%@NL@%
  7563. %@NL@%
  7564. %@CR:MSEcE054@%%@4@%%@AB@%Cannot open%@AE@% %@AI@%file%@AE@%%@AB@% -%@AE@% %@AI@%errormessage%@AE@%%@EH@%%@NL@%
  7565. %@NL@%
  7566.                The specified file could not be opened. The C run-time error%@NL@%
  7567.                message indicates the nature of the problem.%@NL@%
  7568. %@NL@%
  7569. %@CR:MSEcE055@%%@4@%%@AB@%Cannot open%@AE@% %@AI@%file%@AE@%%@AB@%:%@AE@% %@AI@%errormessage%@AE@%%@EH@%%@NL@%
  7570. %@NL@%
  7571.                The specified file could not be opened. The C run-time error%@NL@%
  7572.                message indicates the nature of the problem.%@NL@%
  7573. %@NL@%
  7574. %@CR:MSEcE056@%%@4@%%@AB@%Cannot open PRN:%@AE@% %@AI@%file%@AE@%%@EH@%%@NL@%
  7575. %@NL@%
  7576.                The editor could not locate or access a printer port to print%@NL@%
  7577.                %@AI@%file%@AE@%.%@NL@%
  7578. %@NL@%
  7579. %@CR:MSEcE057@%%@4@%%@AB@%Cannot read%@AE@% %@AI@%file%@AE@%%@EH@%%@NL@%
  7580. %@NL@%
  7581.                A %@AI@%file%@AE@% to be read was located but could not be read.%@NL@%
  7582. %@NL@%
  7583. %@CR:MSEcE058@%%@4@%%@AB@%Cannot save to directory:%@AE@% %@AI@%directory%@AE@%%@EH@%%@NL@%
  7584. %@NL@%
  7585.                You attempted to save to a directory that has the read-only%@NL@%
  7586.                attribute.%@NL@%
  7587. %@NL@%
  7588. %@CR:MSEcE059@%%@4@%%@AB@%Cannot unlink file%@AE@% %@AI@%file%@AE@%%@AB@%:%@AE@% %@AI@%messagetext%@AE@%%@EH@%%@NL@%
  7589. %@NL@%
  7590.                The temporary file used for printing could not be deleted.%@NL@%
  7591.                The %@AI@%file%@AE@% placeholder is the name of the file, and %@AI@%messagetext%@AE@%%@NL@%
  7592.                is a C run-time error message.%@NL@%
  7593. %@NL@%
  7594. %@CR:MSEcE060@%%@4@%%@AB@%Cannot write on PRN:%@AE@% %@AI@%file%@AE@%%@EH@%%@NL@%
  7595. %@NL@%
  7596.                The editor was unable to output the specified file to the%@NL@%
  7597.                printer.%@NL@%
  7598. %@NL@%
  7599. %@CR:MSEcE061@%%@4@%%@AB@%Cannot write printer intermediate file%@AE@%%@EH@%%@NL@%
  7600. %@NL@%
  7601.                OS/2 only. The editor was unable to write to the intermediate%@NL@%
  7602.                file used for printer queuing.%@NL@%
  7603. %@NL@%
  7604. %@CR:MSEcE062@%%@4@%%@AB@%Changed directory to%@AE@% %@AI@%file%@AE@%%@EH@%%@NL@%
  7605. %@NL@%
  7606.                The %@AI@%Setfile%@AE@% command successfully changed the current%@NL@%
  7607.                directory.%@NL@%
  7608. %@NL@%
  7609. %@CR:MSEcE063@%%@4@%%@AB@%Changed drive to%@AE@% %@AI@%file%@AE@%%@EH@%%@NL@%
  7610. %@NL@%
  7611.                The %@AI@%Setfile%@AE@% command successfully changed the current drive.%@NL@%
  7612. %@NL@%
  7613. %@CR:MSEcE064@%%@4@%%@AB@%Command could not be executed -%@AE@% %@AI@%command%@AE@%%@EH@%%@NL@%
  7614. %@NL@%
  7615.                You passed a system-level command line that could not be%@NL@%
  7616.                executed to the %@AI@%Shell%@AE@% or %@AI@%Compile%@AE@% command. This command line%@NL@%
  7617.                is displayed in the message as %@AI@%command%@AE@%.%@NL@%
  7618. %@NL@%
  7619. %@CR:MSEcE065@%%@4@%%@AB@%Command failed to begin,%@AE@% %@AI@%messagetext%@AE@%%@EH@%%@NL@%
  7620. %@NL@%
  7621.                OS/2 only. A background compilation could not begin for the%@NL@%
  7622.                reason stated in %@AI@%messagetext%@AE@%.%@NL@%
  7623. %@NL@%
  7624. %@CR:MSEcE066@%%@4@%%@AB@%Compilation complete - return code is%@AE@% %@AI@%number%@AE@%%@EH@%%@NL@%
  7625. %@NL@%
  7626.                DOS or real mode only. A compilation has completed with the%@NL@%
  7627.                return code shown. A nonzero return code usually indicates an%@NL@%
  7628.                error.%@NL@%
  7629. %@NL@%
  7630. %@CR:MSEcE067@%%@4@%%@AB@%Compile Action%@AE@% %@AI@%number%@AE@%%@AB@%: Internal Error%@AE@%%@EH@%%@NL@%
  7631. %@NL@%
  7632.                The editor detected an internal error in the way it analyzed%@NL@%
  7633.                a regular expression. Please note the circumstances of this%@NL@%
  7634.                error and notify Microsoft Corporation by following the%@NL@%
  7635.                directions in the Microsoft Product Assistance Request form%@NL@%
  7636.                at the back of one of your manuals.%@NL@%
  7637. %@NL@%
  7638. %@CR:MSEcE068@%%@4@%%@AB@%Compile failed to begin,%@AE@% %@AI@%file%@AE@%%@AB@% -%@AE@% %@AI@%messagetext%@AE@%%@EH@%%@NL@%
  7639. %@NL@%
  7640.                OS/2 only. The %@AI@%Compile%@AE@% command could not execute the command%@NL@%
  7641.                line that it was given for the reason stated in %@AI@%messagetext%@AE@%.%@NL@%
  7642. %@NL@%
  7643. %@CR:MSEcE069@%%@4@%%@AB@%Compile list full, try later%@AE@%%@EH@%%@NL@%
  7644. %@NL@%
  7645.                OS/2 only. You tried to execute too many compilations at%@NL@%
  7646.                once. The limit to the number that can be queued (that is,%@NL@%
  7647.                waiting to execute) is 16.%@NL@%
  7648. %@NL@%
  7649. %@CR:MSEcE070@%%@4@%%@AB@%Cross-device link%@AE@%%@EH@%%@NL@%
  7650. %@NL@%
  7651.                The editor encountered an internal error. Please note the%@NL@%
  7652.                circumstances of this error and notify Microsoft Corporation%@NL@%
  7653.                by following the directions in the Microsoft Product%@NL@%
  7654.                Assistance Request form at the back of one of your manuals.%@NL@%
  7655. %@NL@%
  7656. %@CR:MSEcE071@%%@4@%%@AB@%Delete current contents of compile log?%@AE@%%@EH@%%@NL@%
  7657. %@NL@%
  7658.                OS/2 only. The compile log still contains the results of a%@NL@%
  7659.                previous compilation. Type Y to delete the contents before%@NL@%
  7660.                starting another compilation.%@NL@%
  7661. %@NL@%
  7662. %@CR:MSEcE072@%%@4@%%@AB@%Do you want to delete this file from the current window?%@AE@%%@EH@%%@NL@%
  7663. %@NL@%
  7664.                You gave the %@AI@%Arg%@AE@% %@AI@%Refresh%@AE@% command, which removes the file from%@NL@%
  7665.                the current window. Type Y to remove the file, or N to%@NL@%
  7666.                continue editing the file.%@NL@%
  7667. %@NL@%
  7668. %@CR:MSEcE073@%%@4@%%@AB@%Do you want to replace this occurrence (Yes/No/All/Quit) :%@AE@%%@EH@%%@NL@%
  7669. %@NL@%
  7670.                The %@AI@%Qreplace%@AE@% function has found an occurrence of the search%@NL@%
  7671.                string and is prompting you for confirmation before%@NL@%
  7672.                substituting the replacement string. Type Y to make the%@NL@%
  7673.                replacement, N to avoid replacement, A to proceed with making%@NL@%
  7674.                replacements without confirmation, or Q to quit the %@AI@%Qreplace%@AE@%%@NL@%
  7675.                function.%@NL@%
  7676. %@NL@%
  7677. %@CR:MSEcE074@%%@4@%%@AB@%Do you want to reread this file?%@AE@%%@EH@%%@NL@%
  7678. %@NL@%
  7679.                You invoked the %@AI@%Refresh%@AE@% function. Type Y to discard the most%@NL@%
  7680.                recent edits and reread the file from disk. Type any other%@NL@%
  7681.                character to cancel the function.%@NL@%
  7682. %@NL@%
  7683. %@CR:MSEcE075@%%@4@%%@AB@%Do you want to save this file as%@AE@% %@AI@%filename%@AE@%%@AB@%?%@AE@%%@EH@%%@NL@%
  7684. %@NL@%
  7685.                You gave the %@AI@%Arg%@AE@% %@AI@%Arg%@AE@% %@AI@%textarg%@AE@% %@AI@%Setfile%@AE@% command, which saves the%@NL@%
  7686.                current file under a new file name. Type Y to proceed with%@NL@%
  7687.                the save or any other character to cancel the command.%@NL@%
  7688. %@NL@%
  7689. %@CR:MSEcE076@%%@4@%%@AB@%Empty replacement string, confirm:%@AE@%%@EH@%%@NL@%
  7690. %@NL@%
  7691.                The %@AI@%Replace%@AE@% or %@AI@%Qreplace%@AE@% function has been invoked with an%@NL@%
  7692.                empty replacement string. Type Y to confirm or any other%@NL@%
  7693.                character to cancel. Confirming an empty replacement string%@NL@%
  7694.                means that the editor simply deletes each occurrence of the%@NL@%
  7695.                search string that it finds.%@NL@%
  7696. %@NL@%
  7697. %@CR:MSEcE077@%%@4@%%@AB@%error on scratch file.%@AE@%%@EH@%%@NL@%
  7698. %@NL@%
  7699.                The drive on which the scratch (temporary) file resides is%@NL@%
  7700.                full. Exit the editor, change the setting of the TMP%@NL@%
  7701.                environment variable to a directory on a different drive, or%@NL@%
  7702.                free up space on the drive listed in TMP.%@NL@%
  7703. %@NL@%
  7704. %@CR:MSEcE078@%%@4@%%@AB@%EstimateAction%@AE@% %@AI@%number%@AE@%%@AB@%: Internal Error%@AE@%%@EH@%%@NL@%
  7705. %@NL@%
  7706.                The editor detected an internal error in the way it analyzed%@NL@%
  7707.                a regular expression. Please note the circumstances of this%@NL@%
  7708.                error and notify Microsoft Corporation by following the%@NL@%
  7709.                directions in the Microsoft Product Assistance Request form%@NL@%
  7710.                at the back of one of your manuals.%@NL@%
  7711. %@NL@%
  7712. %@CR:MSEcE079@%%@4@%%@AB@%Exec format error%@AE@%%@EH@%%@NL@%
  7713. %@NL@%
  7714.                You attempted to load an extension module that does not have%@NL@%
  7715.                the correct format for this version of the editor. Rewrite%@NL@%
  7716.                the extension, relink, and recompile.%@NL@%
  7717. %@NL@%
  7718. %@CR:MSEcE080@%%@4@%%@AB@%File%@AE@% %@AI@%file%@AE@%%@AB@% is dirty, do you want to save it?%@AE@%%@EH@%%@NL@%
  7719. %@NL@%
  7720.                You are trying to exit without saving a file that has been%@NL@%
  7721.                altered since it was last saved. If you answer N, the changes%@NL@%
  7722.                will be lost.%@NL@%
  7723. %@NL@%
  7724. %@CR:MSEcE081@%%@4@%%@AB@%File has been deleted%@AE@%%@EH@%%@NL@%
  7725. %@NL@%
  7726.                The current file has been deleted by a program other than the%@NL@%
  7727.                editor, another process running under OS/2, another computer%@NL@%
  7728.                on the network, or a shelled or compiled program.%@NL@%
  7729. %@NL@%
  7730. %@CR:MSEcE082@%%@4@%%@AB@%File to edit:%@AE@%%@EH@%%@NL@%
  7731. %@NL@%
  7732.                You started the editor without specifying a file, and there%@NL@%
  7733.                is no previously edited file. Enter a file name or press%@NL@%
  7734.                ENTER to exit back to the operating-system level.%@NL@%
  7735. %@NL@%
  7736. %@CR:MSEcE083@%%@4@%%@AB@%Flushing%@AE@% %@AI@%file%@AE@%%@AB@% from memory%@AE@%%@EH@%%@NL@%
  7737. %@NL@%
  7738.                The specified %@AI@%file%@AE@% has been cleared from memory.%@NL@%
  7739. %@NL@%
  7740. %@CR:MSEcE084@%%@4@%%@AB@%Illegal Extension Interface Called%@AE@%%@EH@%%@NL@%
  7741. %@NL@%
  7742.                An extension function attempted to call a low-level function%@NL@%
  7743.                that is not supported by this version of the editor. Consult%@NL@%
  7744.                Chapters 8%@BO:   3fbeb@% and 9%@BO:   50fea@% for a list of low-level functions%@NL@%
  7745.                supported by the editor.%@NL@%
  7746. %@NL@%
  7747. %@CR:MSEcE085@%%@4@%%@AB@%Illegal setting%@AE@%%@EH@%%@NL@%
  7748. %@NL@%
  7749.                You attempted to set a switch to an invalid setting.%@NL@%
  7750. %@NL@%
  7751. %@CR:MSEcE086@%%@4@%%@AB@%Internal Error: RE error%@AE@% %@AI@%number%@AE@%%@AB@%, line%@AE@% %@AI@%number%@AE@%%@EH@%%@NL@%
  7752. %@NL@%
  7753.                The editor detected an internal error in the way it analyzed%@NL@%
  7754.                a regular expression. Please note the circumstances of this%@NL@%
  7755.                error and notify Microsoft Corporation by following the%@NL@%
  7756.                directions in the Microsoft Product Assistance Request form%@NL@%
  7757.                at the back of one of your manuals.%@NL@%
  7758. %@NL@%
  7759. %@CR:MSEcE087@%%@4@%%@AB@%Invalid argument%@AE@%%@EH@%%@NL@%
  7760. %@NL@%
  7761.                The function just invoked does not accept the argument given.%@NL@%
  7762.                Try reentering the command using a valid argument.%@NL@%
  7763. %@NL@%
  7764. %@CR:MSEcE088@%%@4@%%@AB@%Invalid drive%@AE@%%@EH@%%@NL@%
  7765. %@NL@%
  7766.                You attempted to execute a command with a drive letter not%@NL@%
  7767.                recognized by your system. Use a different drive letter.%@NL@%
  7768. %@NL@%
  7769. %@CR:MSEcE089@%%@4@%%@AB@%Invalid pattern%@AE@%%@EH@%%@NL@%
  7770. %@NL@%
  7771.                You specified a regular-expression search command but gave a%@NL@%
  7772.                search string that is not a valid regular expression. Check%@NL@%
  7773.                the syntax rules for regular expressions and reenter.%@NL@%
  7774. %@NL@%
  7775. %@CR:MSEcE090@%%@4@%%@AB@%Invalid replacement pattern%@AE@%%@EH@%%@NL@%
  7776. %@NL@%
  7777.                You specified a regular-expression search and replace command%@NL@%
  7778.                but gave an invalid replacement string. Check the syntax%@NL@%
  7779.                rules for regular-expression replacement strings and reenter.%@NL@%
  7780. %@NL@%
  7781. %@CR:MSEcE091@%%@4@%%@AB@%Invoke: "%@AE@%%@AI@%command%@AE@%%@AB@%" (y/n)?%@AE@%%@EH@%%@NL@%
  7782. %@NL@%
  7783.                You attempted to overwrite a file on disk that has the%@NL@%
  7784.                read-only attribute set, and the %@AB@%readonly%@AE@% switch has been%@NL@%
  7785.                assigned a command. The editor asks you for confirmation%@NL@%
  7786.                before executing this command.%@NL@%
  7787. %@NL@%
  7788. %@CR:MSEcE092@%%@4@%%@AB@%Kill background compile?%@AE@%%@EH@%%@NL@%
  7789. %@NL@%
  7790.                OS/2 only. You gave the %@AI@%Arg Arg Meta Compile%@AE@% command, which%@NL@%
  7791.                kills a background compilation after prompting for%@NL@%
  7792.                confirmation. Type Y to terminate the compilation or any%@NL@%
  7793.                other key to cancel the command.%@NL@%
  7794. %@NL@%
  7795. %@CR:MSEcE093@%%@4@%%@AB@%Line%@AE@% %@AI@%linenumber%@AE@%%@AB@% too long%@AE@%%@EH@%%@NL@%
  7796. %@NL@%
  7797.                The indicated line exceeds the maximum of 251 characters. The%@NL@%
  7798.                editor ignores edits that exceed this limit.%@NL@%
  7799. %@NL@%
  7800. %@CR:MSEcE094@%%@4@%%@AB@%line%@AE@% %@AI@%linenumber%@AE@%%@AB@% too long; replacement skipped%@AE@%%@EH@%%@NL@%
  7801. %@NL@%
  7802.                The replacement requested would have caused the indicated%@NL@%
  7803.                line to be greater than the maximum line length, so the%@NL@%
  7804.                replacement was not performed.%@NL@%
  7805. %@NL@%
  7806. %@CR:MSEcE095@%%@4@%%@AB@%List Error: '%@AE@%%@AI@%listmacro%@AE@%%@AB@%' does not exist%@AE@%%@EH@%%@NL@%
  7807. %@NL@%
  7808.                The specified list macro did not exist. You may have mistyped%@NL@%
  7809.                its name or used the wrong syntax.%@NL@%
  7810. %@NL@%
  7811. %@CR:MSEcE096@%%@4@%%@AB@%List Error: Nested too deeply at '%@AE@%%@AI@%macroname%@AE@%%@AB@%'%@AE@%%@EH@%%@NL@%
  7812. %@NL@%
  7813.                Macros may be nested no more than 20 deep. You tried to%@NL@%
  7814.                execute a macro that has more than 20 nesting levels; the%@NL@%
  7815.                %@AI@%macroname%@AE@% placeholder indicates the macro which tried to call%@NL@%
  7816.                a macro at the 21st level.%@NL@%
  7817. %@NL@%
  7818. %@CR:MSEcE097@%%@4@%%@AB@%M internal error -%@AE@% %@AI@%file%@AE@%%@AB@%, continue?%@AE@%%@EH@%%@NL@%
  7819. %@NL@%
  7820.                The editor encountered an internal error. Please note the%@NL@%
  7821.                circumstances of this error and notify Microsoft Corporation%@NL@%
  7822.                by following the directions in the Microsoft Product%@NL@%
  7823.                Assistance Request form at the back of one of your manuals.%@NL@%
  7824. %@NL@%
  7825. %@CR:MSEcE098@%%@4@%%@AB@%macro%@AE@% %@AI@%file%@AE@%%@AB@% is in use%@AE@%%@EH@%%@NL@%
  7826. %@NL@%
  7827.                A macro attempted to redefine itself during execution (by%@NL@%
  7828.                using the %@AI@%Assign%@AE@% command), or a macro called a second macro%@NL@%
  7829.                that attempted to redefine the first macro.%@NL@%
  7830. %@NL@%
  7831. %@CR:MSEcE099@%%@4@%%@AB@%Macros nested too deep%@AE@%%@EH@%%@NL@%
  7832. %@NL@%
  7833.                You created a macro that used too many levels of nesting. A%@NL@%
  7834.                macro is nested when it is executed inside another macro.%@NL@%
  7835.                Macros can be nested to 20 levels.%@NL@%
  7836. %@NL@%
  7837. %@CR:MSEcE100@%%@4@%%@AB@%Mapped line%@AE@% %@AI@%number%@AE@%%@AB@% too long%@AE@%%@EH@%%@NL@%
  7838. %@NL@%
  7839.                You used the %@AI@%Environment%@AE@% function to replace the names of%@NL@%
  7840.                environment variables in a text string with their actual%@NL@%
  7841.                values; the resulting string was greater than 251 characters.%@NL@%
  7842. %@NL@%
  7843. %@CR:MSEcE101@%%@4@%%@AB@%Math argument%@AE@%%@EH@%%@NL@%
  7844. %@NL@%
  7845.                The editor encountered an internal error. Please note the%@NL@%
  7846.                circumstances of this error and notify Microsoft Corporation%@NL@%
  7847.                by following the directions in the Microsoft Product%@NL@%
  7848.                Assistance Request form at the back of one of your manuals.%@NL@%
  7849. %@NL@%
  7850. %@CR:MSEcE102@%%@4@%%@AB@%mGetCmd called with no macros in effect%@AE@%%@EH@%%@NL@%
  7851. %@NL@%
  7852.                The editor encountered an internal error. Please note the%@NL@%
  7853.                circumstances of this error and notify Microsoft Corporation%@NL@%
  7854.                by following the directions in the Microsoft Product%@NL@%
  7855.                Assistance Request form at the back of one of your manuals.%@NL@%
  7856. %@NL@%
  7857. %@CR:MSEcE103@%%@4@%%@AB@%missing ':' in%@AE@% %@AI@%string%@AE@%%@EH@%%@NL@%
  7858. %@NL@%
  7859.                You gave an argument to the %@AI@%Assign%@AE@% command without including%@NL@%
  7860.                an assignment symbol (:).%@NL@%
  7861. %@NL@%
  7862. %@CR:MSEcE104@%%@4@%%@AB@%Missing key assignment for '%@AE@%%@AI@%function%@AE@%%@AB@%'%@AE@%%@EH@%%@NL@%
  7863. %@NL@%
  7864.                You attempted to assign the given %@AI@%function%@AE@% to a keystroke but%@NL@%
  7865.                did not enter a keystroke name.%@NL@%
  7866. %@NL@%
  7867. %@CR:MSEcE105@%%@4@%%@AB@%New file name:%@AE@%%@EH@%%@NL@%
  7868. %@NL@%
  7869.                You attempted to overwrite a file on disk that has the%@NL@%
  7870.                read-only attribute set, and the %@AB@%readonly%@AE@% switch has not been%@NL@%
  7871.                assigned a command. The editor asks for a new file name under%@NL@%
  7872.                which to save the file so your edits are not lost. Respond%@NL@%
  7873.                with the name of a file that can be overwritten.%@NL@%
  7874. %@NL@%
  7875. %@CR:MSEcE106@%%@4@%%@AB@%Next file is%@AE@% %@AI@%file%@AE@%%@AB@%...%@AE@%%@EH@%%@NL@%
  7876. %@NL@%
  7877.                You invoked the %@AI@%Setfile%@AE@% function, and the editor is now%@NL@%
  7878.                loading the given file.%@NL@%
  7879. %@NL@%
  7880. %@CR:MSEcE107@%%@4@%%@AB@%no alternate file%@AE@%%@EH@%%@NL@%
  7881. %@NL@%
  7882.                You gave the %@AI@%Setfile%@AE@% command file with no arguments, but%@NL@%
  7883.                there was no alternate file to load. The %@AI@%Setfile%@AE@% command with%@NL@%
  7884.                no arguments normally switches to the previous file.%@NL@%
  7885. %@NL@%
  7886. %@CR:MSEcE108@%%@4@%%@AB@%No command to repeat%@AE@%%@EH@%%@NL@%
  7887. %@NL@%
  7888.                You executed the %@AI@%Repeat%@AE@% function to repeat the previous%@NL@%
  7889.                function, but no previous function had been executed.%@NL@%
  7890. %@NL@%
  7891. %@CR:MSEcE109@%%@4@%%@AB@%No compile command known%@AE@%%@EH@%%@NL@%
  7892. %@NL@%
  7893.                You executed %@AI@%Arg textarg Compile%@AE@%, but there was no%@NL@%
  7894.                corresponding %@AB@%extmake:text%@AE@% definition.%@NL@%
  7895. %@NL@%
  7896. %@CR:MSEcE110@%%@4@%%@AB@%No compile command known for .%@AE@%%@AI@%ext%@AE@%%@EH@%%@NL@%
  7897. %@NL@%
  7898.                No %@AI@%extmake%@AE@% definition has been created for the extension of%@NL@%
  7899.                the file you are currently editing.%@NL@%
  7900. %@NL@%
  7901. %@CR:MSEcE111@%%@4@%%@AB@%No compile command known for extension%@AE@% %@AI@%file%@AE@%%@EH@%%@NL@%
  7902. %@NL@%
  7903.                You invoked the %@AI@%Arg Compile%@AE@% command, which uses the extension%@NL@%
  7904.                of the current file, but the %@AB@%extmake%@AE@% switch has no setting%@NL@%
  7905.                for this file extension. Before invoking %@AI@%Arg Compile%@AE@%, make%@NL@%
  7906.                the assignment%@NL@%
  7907. %@NL@%
  7908.                %@AB@%extmake:%@AE@% %@AI@%ext%@AE@% %@AI@%command-line%@AE@%%@NL@%
  7909. %@NL@%
  7910.                in which %@AI@%ext%@AE@% is the extension of the current file.%@NL@%
  7911. %@NL@%
  7912. %@CR:MSEcE112@%%@4@%%@AB@%No compile in progress%@AE@%%@EH@%%@NL@%
  7913. %@NL@%
  7914.                You executed a %@AI@%Compile%@AE@% command without arguments, which%@NL@%
  7915.                returns the current compilation status. No compilation was in%@NL@%
  7916.                progress.%@NL@%
  7917. %@NL@%
  7918. %@CR:MSEcE113@%%@4@%%@AB@%No-Edit file may not be modified%@AE@%%@EH@%%@NL@%
  7919. %@NL@%
  7920.                You attempted to execute an editing command that would change%@NL@%
  7921.                a No-Edit file. No-Edit files cannot be modified, even in%@NL@%
  7922.                memory.%@NL@%
  7923. %@NL@%
  7924. %@CR:MSEcE114@%%@4@%%@AB@%No matching files%@AE@%%@EH@%%@NL@%
  7925. %@NL@%
  7926.                You invoked the %@AI@%Setfile%@AE@% function with a string containing the%@NL@%
  7927.                wildcards ? or *, but no file names matched this string.%@NL@%
  7928. %@NL@%
  7929. %@CR:MSEcE115@%%@4@%%@AB@%No more compilation messages%@AE@%%@EH@%%@NL@%
  7930. %@NL@%
  7931.                The %@AI@%Compile%@AE@% function was given with no arguments. This%@NL@%
  7932.                function moves the cursor to the next error message. However,%@NL@%
  7933.                there are no further error messages.%@NL@%
  7934. %@NL@%
  7935. %@CR:MSEcE116@%%@4@%%@AB@%No search string specified%@AE@%%@EH@%%@NL@%
  7936. %@NL@%
  7937.                You invoked %@AI@%Psearch%@AE@% or %@AI@%Msearch%@AE@% without a search string, and%@NL@%
  7938.                there is no previously defined search string to use as a%@NL@%
  7939.                default. Use an argument the first time you use %@AI@%Psearch%@AE@% or%@NL@%
  7940.                %@AI@%Msearch%@AE@%.%@NL@%
  7941. %@NL@%
  7942. %@CR:MSEcE117@%%@4@%%@AB@%No space left on device%@AE@%%@EH@%%@NL@%
  7943. %@NL@%
  7944.                You attempted to save a file to a device (usually a disk%@NL@%
  7945.                drive) that has no room left. Execute a shell and make room%@NL@%
  7946.                on the drive, or else save to a different device.%@NL@%
  7947. %@NL@%
  7948. %@CR:MSEcE118@%%@4@%%@AB@%No such file or directory%@AE@%%@EH@%%@NL@%
  7949. %@NL@%
  7950.                You attempted to use the %@AI@%Setfile%@AE@% function to change to a file%@NL@%
  7951.                or directory that does not exist.%@NL@%
  7952. %@NL@%
  7953. %@CR:MSEcE119@%%@4@%%@AB@%No unbalanced characters found%@AE@%%@EH@%%@NL@%
  7954. %@NL@%
  7955.                You invoked the %@AI@%Pbal%@AE@% function, but there are no unbalanced%@NL@%
  7956.                braces, brackets, or parentheses.%@NL@%
  7957. %@NL@%
  7958. %@CR:MSEcE120@%%@4@%%@AB@%No-Execute Record Mode - Press%@AE@% %@AI@%keystroke%@AE@%%@AB@% to resume normal editing%@AE@%%@EH@%%@NL@%
  7959. %@NL@%
  7960.                You have completed the special macro recording function (%@AI@%Meta%@AE@%%@NL@%
  7961.                %@AI@%Record%@AE@%) that records the macro without executing the%@NL@%
  7962.                keystrokes. This message reminds you that the editor is not%@NL@%
  7963.                hung. You may continue normal editing after pressing the%@NL@%
  7964.                specified key.%@NL@%
  7965. %@NL@%
  7966. %@CR:MSEcE121@%%@4@%%@AB@%Not enough core%@AE@%%@EH@%%@NL@%
  7967. %@NL@%
  7968.                The editor encountered an internal error. Please note the%@NL@%
  7969.                circumstances of this error and notify Microsoft Corporation%@NL@%
  7970.                by following the directions in the Microsoft Product%@NL@%
  7971.                Assistance Request form at the back of one of your manuals.%@NL@%
  7972. %@NL@%
  7973. %@CR:MSEcE122@%%@4@%%@AB@%Not enough free memory%@AE@%%@EH@%%@NL@%
  7974. %@NL@%
  7975.                DOS or real mode only. The editor was unable to allocate%@NL@%
  7976.                enough memory for all the files that were opened and was%@NL@%
  7977.                unable to recover. Normally, the editor recovers from lack of%@NL@%
  7978.                memory by closing files if it can. Terminate the editing%@NL@%
  7979.                session immediately.%@NL@%
  7980. %@NL@%
  7981. %@CR:MSEcE123@%%@4@%%@AB@%Not enough memory for pattern%@AE@%%@EH@%%@NL@%
  7982. %@NL@%
  7983.                You specified a regular-expression pattern too complicated%@NL@%
  7984.                for the editor to implement. Specify a simpler pattern.%@NL@%
  7985. %@NL@%
  7986. %@CR:MSEcE124@%%@4@%%@AB@%not enough memory on exec%@AE@%%@EH@%%@NL@%
  7987. %@NL@%
  7988.                OS/2 only. You gave a %@AI@%Compile%@AE@% or %@AI@%Shell%@AE@% command that could not%@NL@%
  7989.                be executed.%@NL@%
  7990. %@NL@%
  7991. %@CR:MSEcE125@%%@4@%%@AB@%Not enough room for macro%@AE@% %@AI@%macroname%@AE@%%@EH@%%@NL@%
  7992. %@NL@%
  7993.                You defined 1,024 macros and cannot add another. To reduce%@NL@%
  7994.                the number of macros, exit the editor and restart.%@NL@%
  7995. %@NL@%
  7996. %@CR:MSEcE126@%%@4@%%@AB@%Not supported by video display%@AE@%%@EH@%%@NL@%
  7997. %@NL@%
  7998.                You attempted to assign the %@AB@%height%@AE@% switch to a value not%@NL@%
  7999.                supported by the video adapter card. Only the following%@NL@%
  8000.                values are supported: 23 for CGA and monochrome; 23 and 41%@NL@%
  8001.                for EGA; and 23, 41, and 48 for VGA.%@NL@%
  8002. %@NL@%
  8003. %@CR:MSEcE127@%%@4@%%@AB@%Nothing to ReDo%@AE@%%@EH@%%@NL@%
  8004. %@NL@%
  8005.                You have repeated the last command in the editing command%@NL@%
  8006.                list; there are no more commands that can be repeated.%@NL@%
  8007. %@NL@%
  8008. %@CR:MSEcE128@%%@4@%%@AB@%Nothing to UnDo%@AE@%%@EH@%%@NL@%
  8009. %@NL@%
  8010.                You have reversed every editing command that remains in the%@NL@%
  8011.                UnDo list; there are no more editing commands to reverse.%@NL@%
  8012. %@NL@%
  8013. %@CR:MSEcE129@%%@4@%%@AB@%Out of disk space for VM swap file - recovering%@AE@%%@EH@%%@NL@%
  8014. %@NL@%
  8015.                DOS or real mode only. An insufficient amount of space was%@NL@%
  8016.                available for swapping. Exit the editor and reset the TMP%@NL@%
  8017.                environment variable to a disk drive with more space, if%@NL@%
  8018.                possible.%@NL@%
  8019. %@NL@%
  8020. %@CR:MSEcE130@%%@4@%%@AB@%Out of far memory - recovering%@AE@%%@EH@%%@NL@%
  8021. %@NL@%
  8022.                The editor has insufficient memory to support all the files%@NL@%
  8023.                open and is now trying to recover memory so that no%@NL@%
  8024.                information is lost.%@NL@%
  8025. %@NL@%
  8026. %@CR:MSEcE131@%%@4@%%@AB@%Out of local heap - recovering%@AE@%%@EH@%%@NL@%
  8027. %@NL@%
  8028.                The editor has insufficient memory to support all the files%@NL@%
  8029.                open and is now trying to recover memory so that no%@NL@%
  8030.                information is lost.%@NL@%
  8031. %@NL@%
  8032. %@CR:MSEcE132@%%@4@%%@AB@%Out of local memory%@AE@%%@EH@%%@NL@%
  8033. %@NL@%
  8034.                DOS or real mode only. The editor was unable to allocate%@NL@%
  8035.                enough memory for all the files that were opened and was%@NL@%
  8036.                unable to recover. Normally, the editor recovers from lack of%@NL@%
  8037.                memory by closing files if it can. Terminate the editing%@NL@%
  8038.                session and do not open as many files at the same time.%@NL@%
  8039. %@NL@%
  8040. %@CR:MSEcE133@%%@4@%%@AB@%Out of space on%@AE@% %@AI@%device%@AE@%%@EH@%%@NL@%
  8041. %@NL@%
  8042.                You attempted to save a file to a %@AI@%device%@AE@% (usually a disk%@NL@%
  8043.                drive) with no room left. Create free space on the drive, or%@NL@%
  8044.                else save to a different device.%@NL@%
  8045. %@NL@%
  8046. %@CR:MSEcE134@%%@4@%%@AB@%Packed file is corrupt%@AE@%%@EH@%%@NL@%
  8047. %@NL@%
  8048.                DOS or real mode only. You used the %@AI@%Shell%@AE@% or %@AI@%Compile%@AE@% function%@NL@%
  8049.                to execute a corrupted packed file.%@NL@%
  8050. %@NL@%
  8051. %@CR:MSEcE135@%%@4@%%@AB@%Permission denied%@AE@%%@EH@%%@NL@%
  8052. %@NL@%
  8053.                You attempted to write to a locked file.%@NL@%
  8054. %@NL@%
  8055. %@CR:MSEcE136@%%@4@%%@AB@%Please strike any key to continue%@AE@%%@EH@%%@NL@%
  8056. %@NL@%
  8057.                The %@AI@%Shell%@AE@% command has terminated, and the editor is ready to%@NL@%
  8058.                continue the normal editing session.%@NL@%
  8059. %@NL@%
  8060. %@CR:MSEcE137@%%@4@%%@AB@%Press any key...%@AE@%%@EH@%%@NL@%
  8061. %@NL@%
  8062.                The editor has completed some operation and is waiting for%@NL@%
  8063.                you to press a key before resuming the editing session.%@NL@%
  8064. %@NL@%
  8065. %@CR:MSEcE138@%%@4@%%@AB@%Print list full, try later%@AE@%%@EH@%%@NL@%
  8066. %@NL@%
  8067.                OS/2 only. There is no space in the printing queue for%@NL@%
  8068.                another file. Wait, then submit your print request again.%@NL@%
  8069. %@NL@%
  8070. %@CR:MSEcE139@%%@4@%%@AB@%Printing%@AE@% %@AI@%file%@AE@%%@AB@%... Press Esc to abort%@AE@%%@EH@%%@NL@%
  8071. %@NL@%
  8072.                Your print request has been accepted. Press ESC to cancel the%@NL@%
  8073.                printing.%@NL@%
  8074. %@NL@%
  8075. %@CR:MSEcE140@%%@4@%%@AB@%Printing:%@AE@% %@AI@%file%@AE@%%@EH@%%@NL@%
  8076. %@NL@%
  8077.                The specified %@AI@%file%@AE@% will be printed.%@NL@%
  8078. %@NL@%
  8079. %@CR:MSEcE141@%%@4@%%@AB@%Query search string:%@AE@%%@EH@%%@NL@%
  8080. %@NL@%
  8081.                You invoked the %@AI@%Qreplace%@AE@% function. Enter a new search string,%@NL@%
  8082.                press ENTER (or invoke the %@AI@%Emacsnewl%@AE@% function) to accept the%@NL@%
  8083.                old search string, or invoke %@AI@%Cancel%@AE@% to exit.%@NL@%
  8084. %@NL@%
  8085. %@CR:MSEcE142@%%@4@%%@AB@%Queued: '%@AE@%%@AI@%file%@AE@%%@AB@%'%@AE@%%@EH@%%@NL@%
  8086. %@NL@%
  8087.                OS/2 only. You gave a new compile command before the last%@NL@%
  8088.                compilation was complete. The editor will not spawn more than%@NL@%
  8089.                one compilation at a time but can hold up to 16 compile%@NL@%
  8090.                commands to be executed sequentially.%@NL@%
  8091. %@NL@%
  8092. %@CR:MSEcE143@%%@4@%%@AB@%RE emulator stack overflow%@AE@%%@EH@%%@NL@%
  8093. %@NL@%
  8094.                The editor encountered an internal error while evaluating a%@NL@%
  8095.                regular expression. Please note the circumstances of this%@NL@%
  8096.                error and notify Microsoft Corporation by following the%@NL@%
  8097.                directions in the Microsoft Product Assistance Request form%@NL@%
  8098.                at the back of one of your manuals.%@NL@%
  8099. %@NL@%
  8100. %@CR:MSEcE144@%%@4@%%@AB@%RemoveFile can't find file%@AE@%%@EH@%%@NL@%
  8101. %@NL@%
  8102.                An extension module passed a nonexistent file to the%@NL@%
  8103.                %@AB@%RemoveFile%@AE@% low-level function.%@NL@%
  8104. %@NL@%
  8105. %@CR:MSEcE145@%%@4@%%@AB@%Removing file%@AE@% %@AI@%filename%@AE@%%@EH@%%@NL@%
  8106. %@NL@%
  8107.                The %@AB@%RemoveFile%@AE@% low-level function has removed a file buffer%@NL@%
  8108.                from memory. This is not an error unless you need to have the%@NL@%
  8109.                file open for editing.%@NL@%
  8110. %@NL@%
  8111. %@CR:MSEcE146@%%@4@%%@AB@%Replace string:%@AE@%%@EH@%%@NL@%
  8112. %@NL@%
  8113.                You invoked the %@AI@%Replace%@AE@% function. Enter a new replacement%@NL@%
  8114.                string, press ENTER (or invoke the %@AI@%Emacsnewl%@AE@% function) to%@NL@%
  8115.                accept the old replacement string, or invoke %@AI@%Cancel%@AE@% to exit.%@NL@%
  8116. %@NL@%
  8117. %@CR:MSEcE147@%%@4@%%@AB@%Replace this occurrence (Yes/No/All/Quit):%@AE@%%@EH@%%@NL@%
  8118. %@NL@%
  8119.                You executed the %@AI@%Qreplace%@AE@% function, which prompts for the%@NL@%
  8120.                replacement rather than performing the replacement%@NL@%
  8121.                automatically. You can choose not to replace the text, to%@NL@%
  8122.                replace the text for this occurrence only, to replace all%@NL@%
  8123.                following occurrences, or to quit the %@AI@%Qreplace%@AE@% function.%@NL@%
  8124. %@NL@%
  8125. %@CR:MSEcE148@%%@4@%%@AB@%Resource deadlock would occur%@AE@%%@EH@%%@NL@%
  8126. %@NL@%
  8127.                The editor encountered an internal error. Please note the%@NL@%
  8128.                circumstances of this error and notify Microsoft Corporation%@NL@%
  8129.                by following the directions in the Microsoft Product%@NL@%
  8130.                Assistance Request form at the back of one of your manuals.%@NL@%
  8131. %@NL@%
  8132. %@CR:MSEcE149@%%@4@%%@AB@%Result too large%@AE@%%@EH@%%@NL@%
  8133. %@NL@%
  8134.                The editor encountered an internal error. Please note the%@NL@%
  8135.                circumstances of this error and notify Microsoft Corporation%@NL@%
  8136.                by following the directions in the Microsoft Product%@NL@%
  8137.                Assistance Request form at the back of one of your manuals.%@NL@%
  8138. %@NL@%
  8139. %@CR:MSEcE150@%%@4@%%@AB@%run-time error%@AE@%%@EH@%%@NL@%
  8140. %@NL@%
  8141.                The editor encountered an internal error. Please note the%@NL@%
  8142.                circumstances of this error and notify Microsoft Corporation%@NL@%
  8143.                by following the directions in the Microsoft Product%@NL@%
  8144.                Assistance Request form at the back of one of your manuals.%@NL@%
  8145. %@NL@%
  8146. %@CR:MSEcE151@%%@4@%%@AB@%Save all remaining changed files (Y/N)?%@AE@%%@EH@%%@NL@%
  8147. %@NL@%
  8148.                This prompt appears when there are one or more changed files%@NL@%
  8149.                in addition to the file you were working on when you%@NL@%
  8150.                attempted to exit. If you respond Y, all the remaining%@NL@%
  8151.                changed files will be saved. If you respond N, you will be%@NL@%
  8152.                prompted about saving each file individually.%@NL@%
  8153. %@NL@%
  8154. %@CR:MSEcE152@%%@4@%%@AB@%Save file%@AE@% %@AI@%file%@AE@%%@AB@% before flushing (y/n/p)%@AE@%%@EH@%%@NL@%
  8155. %@NL@%
  8156.                The editor is running low on memory and needs to remove file%@NL@%
  8157.                buffers. No saved files are available for removal, and the%@NL@%
  8158.                editor must remove unsaved files. Type Y to save changes to%@NL@%
  8159.                %@AI@%file%@AE@% before it is removed, or N to remove %@AI@%file%@AE@% without saving%@NL@%
  8160.                changes. Type P to save all files that have unsaved changes.%@NL@%
  8161.                Invoke the %@AI@%Cancel%@AE@% function to prevent %@AI@%file%@AE@% from being%@NL@%
  8162.                removed. This last option causes the editor to try to remove%@NL@%
  8163.                a different %@AI@%file%@AE@% if one is available.%@NL@%
  8164. %@NL@%
  8165. %@CR:MSEcE153@%%@4@%%@AB@%Saving%@AE@% %@AI@%file%@AE@%%@AB@% ...%@AE@%%@EH@%%@NL@%
  8166. %@NL@%
  8167.                You invoked the %@AI@%Setfile%@AE@% function, and the editor is now%@NL@%
  8168.                saving %@AI@%file%@AE@%.%@NL@%
  8169. %@NL@%
  8170. %@CR:MSEcE154@%%@4@%%@AB@%Search string:%@AE@%%@EH@%%@NL@%
  8171. %@NL@%
  8172.                You invoked the %@AI@%Replace%@AE@% function. Enter a new search string,%@NL@%
  8173.                press ENTER (or invoke the %@AI@%Emacsnewl%@AE@% function) to accept the%@NL@%
  8174.                old search string, or invoke %@AI@%Cancel%@AE@% to exit.%@NL@%
  8175. %@NL@%
  8176. %@CR:MSEcE155@%%@4@%%@AB@%Source file not found:%@AE@% %@AI@%file%@AE@%%@EH@%%@NL@%
  8177. %@NL@%
  8178.                The %@AI@%Arg%@AE@% %@AI@%Compile%@AE@% command was invoked but could not find one of%@NL@%
  8179.                the files specified. Reset the %@AB@%extmake%@AE@% switch so that%@NL@%
  8180.                compilations can run successfully.%@NL@%
  8181. %@NL@%
  8182. %@CR:MSEcE156@%%@4@%%@AB@%Spawn failed on%@AE@% %@AI@%command%@AE@%%@AB@% -%@AE@% %@AI@%messagetext%@AE@%%@EH@%%@NL@%
  8183. %@NL@%
  8184.                The %@AI@%Shell%@AE@% or %@AI@%Compile%@AE@% function was given a command that could%@NL@%
  8185.                not be executed for the reason given in %@AI@%messagetext%@AE@%.%@NL@%
  8186. %@NL@%
  8187. %@CR:MSEcE157@%%@4@%%@AB@%Swapping file%@AE@% %@AI@%file%@AE@%%@AB@% already exists.%@AE@%%@EH@%%@NL@%
  8188. %@NL@%
  8189.                DOS or real mode only. When you started the editor, the%@NL@%
  8190.                virtual-memory swapping file already existed. (On start-up,%@NL@%
  8191.                the editor assumes that this file has been deleted.) Delete%@NL@%
  8192.                %@AI@%file%@AE@% and restart the editor.%@NL@%
  8193. %@NL@%
  8194. %@CR:MSEcE158@%%@4@%%@AB@%Testing VM error at%@AE@% %@AI@%address%@AE@%%@AB@% error on scratch file. This usually indicates a%@AE@%%@EH@%%@NL@%
  8195. %@AB@%full-disk on the scratch file device. Please attempt to free some space on%@AE@%%@NL@%
  8196. %@AB@%it.%@AE@%%@NL@%
  8197. %@NL@%
  8198.                The editor encountered an internal error. Please note the%@NL@%
  8199.                circumstances of this error and notify Microsoft Corporation%@NL@%
  8200.                by following the directions in the Microsoft Product%@NL@%
  8201.                Assistance Request form at the back of one of your manuals.%@NL@%
  8202. %@NL@%
  8203. %@CR:MSEcE159@%%@4@%%@AB@%This program cannot be run in DOS mode.%@AE@%%@EH@%%@NL@%
  8204. %@NL@%
  8205.                OS/2 only. You invoked the %@AI@%Shell%@AE@% or %@AI@%Compile%@AE@% command, which%@NL@%
  8206.                can be run in real mode only (DOS or 3.%@AI@%x%@AE@% compatibility box).%@NL@%
  8207. %@NL@%
  8208. %@CR:MSEcE160@%%@4@%%@AB@%Too many open files%@AE@%%@EH@%%@NL@%
  8209. %@NL@%
  8210.                The editor tried to open more files at the operating-system%@NL@%
  8211.                level, but the system cannot open any more files. Typically,%@NL@%
  8212.                this error occurs when an extension opens many files, or the%@NL@%
  8213.                FILES setting in CONFIG.SYS is too small. Increase the FILES%@NL@%
  8214.                setting in CONFIG.SYS if this setting is not already at the%@NL@%
  8215.                system maximum, then reboot. (This maximum is 20 in most%@NL@%
  8216.                versions of DOS.)%@NL@%
  8217. %@NL@%
  8218. %@CR:MSEcE161@%%@4@%%@AB@%Too many windows%@AE@%%@EH@%%@NL@%
  8219. %@NL@%
  8220.                You tried to open more than eight windows, which is the%@NL@%
  8221.                maximum number supported by the editor.%@NL@%
  8222. %@NL@%
  8223. %@CR:MSEcE162@%%@4@%%@AB@%Unable to create pipe:%@AE@%%@EH@%%@NL@%
  8224. %@NL@%
  8225.                OS/2 only. This message appears only on start-up. The editor%@NL@%
  8226.                cannot generate the pipes it needs for background compiling%@NL@%
  8227.                and printing. These features will not be available during the%@NL@%
  8228.                current editing session. This problem is probably the result%@NL@%
  8229.                of a lack of memory or file handles.%@NL@%
  8230. %@NL@%
  8231. %@CR:MSEcE163@%%@4@%%@AB@%Unable to open swapping file%@AE@% %@AI@%file%@AE@%%@AB@% -%@AE@% %@AI@%messagetext%@AE@%%@EH@%%@NL@%
  8232. %@NL@%
  8233.                DOS or real mode only. When you started the editor, it was%@NL@%
  8234.                unable to recreate the virtual-memory swapping file. Make%@NL@%
  8235.                sure your TMP environment variable lists an accessible%@NL@%
  8236.                location.%@NL@%
  8237. %@NL@%
  8238. %@CR:MSEcE164@%%@4@%%@AB@%Unable to read TOOLS.INI%@AE@%%@EH@%%@NL@%
  8239. %@NL@%
  8240.                The editor could not read the TOOLS.INI file upon start-up.%@NL@%
  8241.                Make sure that the TOOLS.INI file read permission is in the%@NL@%
  8242.                proper format.%@NL@%
  8243. %@NL@%
  8244. %@CR:MSEcE165@%%@4@%%@AB@%Unable to recover - abort now?%@AE@%%@EH@%%@NL@%
  8245. %@NL@%
  8246.                The editor has run out of memory and exhausted all possible%@NL@%
  8247.                roads to recovery. (The editor takes a number of measures to%@NL@%
  8248.                recover memory before it reports this error.) If you have%@NL@%
  8249.                files you need to save, type N to save them now before the%@NL@%
  8250.                editor terminates. Otherwise, type Y to terminate%@NL@%
  8251.                immediately.%@NL@%
  8252. %@NL@%
  8253. %@CR:MSEcE166@%%@4@%%@AB@%Unable to set up compile pipe%@AE@%%@EH@%%@NL@%
  8254. %@NL@%
  8255.                OS/2 only. The editor encountered an internal error. Please%@NL@%
  8256.                note the circumstances of this error and notify Microsoft%@NL@%
  8257.                Corporation by following the directions in the Microsoft%@NL@%
  8258.                Product Assistance Request form at the back of one of your%@NL@%
  8259.                manuals.%@NL@%
  8260. %@NL@%
  8261. %@CR:MSEcE167@%%@4@%%@AB@%Unable to start compile thread%@AE@%%@EH@%%@NL@%
  8262. %@NL@%
  8263.                OS/2 only. The editor encountered an internal error. Please%@NL@%
  8264.                note the circumstances of this error and notify Microsoft%@NL@%
  8265.                Corporation by following the directions in the Microsoft%@NL@%
  8266.                Product Assistance Request form at the back of one of your%@NL@%
  8267.                manuals.%@NL@%
  8268. %@NL@%
  8269. %@CR:MSEcE168@%%@4@%%@AB@%Unable to start Idle thread%@AE@%%@EH@%%@NL@%
  8270. %@NL@%
  8271.                OS/2 only. The editor encountered an internal error. Please%@NL@%
  8272.                note the circumstances of this error and notify Microsoft%@NL@%
  8273.                Corporation by following the directions in the Microsoft%@NL@%
  8274.                Product Assistance Request form at the back of one of your%@NL@%
  8275.                manuals.%@NL@%
  8276. %@NL@%
  8277. %@CR:MSEcE169@%%@4@%%@AB@%Unable to start printing thread%@AE@%%@EH@%%@NL@%
  8278. %@NL@%
  8279.                OS/2 only. The editor encountered an internal error. Please%@NL@%
  8280.                note the circumstances of this error and notify Microsoft%@NL@%
  8281.                Corporation by following the directions in the Microsoft%@NL@%
  8282.                Product Assistance Request form at the back of one of your%@NL@%
  8283.                manuals.%@NL@%
  8284. %@NL@%
  8285. %@CR:MSEcE170@%%@4@%%@AB@%Unknown error%@AE@%%@EH@%%@NL@%
  8286. %@NL@%
  8287.                The editor encountered an internal error. Please note the%@NL@%
  8288.                circumstances of this error and notify Microsoft Corporation%@NL@%
  8289.                by following the directions in the Microsoft Product%@NL@%
  8290.                Assistance Request form at the back of one of your manuals.%@NL@%
  8291. %@NL@%
  8292. %@CR:MSEcE171@%%@4@%%@AB@%unknown function%@AE@% %@AI@%name%@AE@%%@EH@%%@NL@%
  8293. %@NL@%
  8294.                You attempted to execute a macro-definition list containing%@NL@%
  8295.                an undefined function or macro name. Make sure that %@AI@%name%@AE@% is%@NL@%
  8296.                defined before appearing in a macro or as an argument to%@NL@%
  8297.                %@AI@%Execute%@AE@%.%@NL@%
  8298. %@NL@%
  8299. %@CR:MSEcE172@%%@4@%%@AB@%Unsupported video mode.  Please change modes and restart.%@AE@%%@EH@%%@NL@%
  8300. %@NL@%
  8301.                You started the editor in an unrecognized video mode. Please%@NL@%
  8302.                exit the editor and reset the operating system video mode.%@NL@%
  8303. %@NL@%
  8304. %@CR:MSEcE173@%%@4@%%@AB@%VM: Alloc  Free%@AE@%%@EH@%%@NL@%
  8305. %@NL@%
  8306.                OS/2 only. The editor encountered an internal error. Please%@NL@%
  8307.                note the circumstances of this error and notify Microsoft%@NL@%
  8308.                Corporation by following the directions in the Microsoft%@NL@%
  8309.                Product Assistance Request form at the back of one of your%@NL@%
  8310.                manuals.%@NL@%
  8311. %@NL@%
  8312. %@CR:MSEcE174@%%@4@%%@AB@%Warning: continuation character on last line!%@AE@%%@EH@%%@NL@%
  8313. %@NL@%
  8314.                The last line from the appropriate section of TOOLS.INI ended%@NL@%
  8315.                in a continuation character but there was no following line.%@NL@%
  8316. %@NL@%
  8317. %@CR:MSEcE175@%%@4@%%@AB@%Window too small to split%@AE@%%@EH@%%@NL@%
  8318. %@NL@%
  8319.                You attempted to create a window smaller than 5 lines or 5%@NL@%
  8320.                columns. Choose a different cursor position to split the%@NL@%
  8321.                window.%@NL@%
  8322. %@NL@%
  8323. %@CR:MSEcE176@%%@4@%%@AB@%You have more files to edit. Are you sure you want to exit? (y/n):%@AE@%%@EH@%%@NL@%
  8324. %@NL@%
  8325.                You specified more than one file when you started the editor,%@NL@%
  8326.                but you are quitting without having edited all of them. Type%@NL@%
  8327.                Y to exit or N to continue editing.%@NL@%
  8328. %@NL@%
  8329. %@CR:MSEcE177@%%@4@%%@AB@%You have unsaved files.  Are you sure you want to exit? (y/n):%@AE@%%@EH@%%@NL@%
  8330. %@NL@%
  8331.                You gave the %@AI@%Meta Exit%@AE@% command, and the editor has detected%@NL@%
  8332.                at least one file open with unsaved changes. Type Y to exit%@NL@%
  8333.                without saving, or any other key to continue editing.%@NL@%
  8334. %@NL@%
  8335. %@NL@%
  8336. %@NL@%
  8337. %@CR:MSEg0000@%%@1@%%@AB@%Glossary%@AE@%%@EH@%%@NL@%
  8338. ───────────────────────────────────────────────────────────────────────────%@NL@%
  8339. %@NL@%
  8340. %@CR:MSEg0001@%%@4@%This glossary defines terms in this manual used in a technical or unique%@EH@%
  8341. way.%@NL@%
  8342. %@NL@%
  8343. %@CR:MSEgD001@%%@4@%%@AB@%Arg%@AE@%%@EH@%%@NL@%
  8344.   A function modifier that introduces an argument or an editing function.
  8345.   The argument may be of any type and is passed to the next function as
  8346.   input. For example, the command %@AI@%Arg textarg Copy%@AE@% passes the argument
  8347.   %@AI@%textarg%@AE@% to the function %@AI@%Copy%@AE@%.%@NL@%
  8348. %@NL@%
  8349. %@CR:MSEgD002@%%@4@%%@AB@%argument%@AE@%%@EH@%%@NL@%
  8350.   An input to a function. The Microsoft Editor uses two classes of
  8351.   arguments: cursor-movement arguments and text arguments. Cursor-movement
  8352.   arguments (%@AI@%boxarg%@AE@%, %@AI@%linearg%@AE@%, and %@AI@%streamarg%@AE@%) specify a range of characters
  8353.   on the screen. Text arguments (%@AI@%markarg%@AE@%, %@AI@%numarg%@AE@%, and %@AI@%textarg%@AE@%) are typed in
  8354.   directly. Arguments are introduced by using the %@AI@%Arg%@AE@% function.%@NL@%
  8355. %@NL@%
  8356. %@CR:MSEgD003@%%@4@%%@AB@%assignment%@AE@%%@EH@%%@NL@%
  8357.   %@AI@%See%@AE@% "function assignment."%@NL@%
  8358. %@NL@%
  8359. %@CR:MSEgD004@%%@4@%%@AB@%box mode%@AE@%%@EH@%%@NL@%
  8360.   The editing mode that lets you highlight cursor-movement arguments as
  8361.   rectangular areas of text.%@NL@%
  8362. %@NL@%
  8363. %@CR:MSEgD005@%%@4@%%@AB@%boxarg%@AE@%%@EH@%%@NL@%
  8364.   A rectangular area on the screen, defined by the two opposite corners: the
  8365.   initial cursor position and the current cursor position. The editor must
  8366.   be in box mode, and the two cursor positions must be on separate rows and
  8367.   separate columns. A %@AI@%boxarg%@AE@% is generated by invoking the %@AI@%Arg%@AE@% function and
  8368.   then moving the cursor to a new location.%@NL@%
  8369. %@NL@%
  8370. %@CR:MSEgD006@%%@4@%%@AB@%buffer%@AE@%%@EH@%%@NL@%
  8371.   An area in memory in which a copy of the file is kept and changed as you
  8372.   edit. This buffer is copied to disk when you do a save operation.%@NL@%
  8373. %@NL@%
  8374. %@CR:MSEgD007@%%@4@%%@AB@%C extension%@AE@%%@EH@%%@NL@%
  8375.   A C-language module that defines new editing functions and switches. %@AI@%See%@AE@%
  8376.   Chapter 8%@BO:   3fbeb@%.%@NL@%
  8377. %@NL@%
  8378. %@CR:MSEgD008@%%@4@%%@AB@%Clipboard%@AE@%%@EH@%%@NL@%
  8379.   A pseudo file that holds text selected with the %@AI@%Copy%@AE@%, %@AI@%Ldelete%@AE@%, or %@AI@%Sdelete%@AE@%
  8380.   functions. You can use the %@AI@%Paste%@AE@% function to insert text from the
  8381.   Clipboard into a file.%@NL@%
  8382. %@NL@%
  8383. %@CR:MSEgD009@%%@4@%%@AB@%configuration%@AE@%%@EH@%%@NL@%
  8384.   A description of the specific assignments of functions to keys. For
  8385.   example, a BRIEF configuration implies that the Microsoft Editor uses keys
  8386.   similar to those that the BRIEF editor uses to invoke similar functions.%@NL@%
  8387. %@NL@%
  8388. %@CR:MSEgD010@%%@4@%%@AB@%cursor%@AE@%%@EH@%%@NL@%
  8389.   The blinking white underline character that defines current position. When
  8390.   you type characters into the file, they appear at the cursor position.%@NL@%
  8391. %@NL@%
  8392. %@CR:MSEgD011@%%@4@%%@AB@%default%@AE@%%@EH@%%@NL@%
  8393.   A setting assumed by the editor until you specify otherwise. The Microsoft
  8394.   Editor uses two categories of default settings: function assignments and
  8395.   switches.%@NL@%
  8396. %@NL@%
  8397. %@CR:MSEgD012@%%@4@%%@AB@%dialog line%@AE@%%@EH@%%@NL@%
  8398.   The line just above the status line. The dialog line reports editor
  8399.   messages. You enter text arguments on this line.%@NL@%
  8400. %@NL@%
  8401. %@CR:MSEgD013@%%@4@%%@AB@%emacs%@AE@%%@EH@%%@NL@%
  8402.   A popular mainframe editor from which the functions %@AI@%Emacscdel%@AE@% and
  8403.   %@AI@%Emacsnewl%@AE@% were taken.%@NL@%
  8404. %@NL@%
  8405. %@CR:MSEgD014@%%@4@%%@AB@%file history%@AE@%%@EH@%%@NL@%
  8406.   A list of the most recently edited files, including any files currently
  8407.   open for editing. The file history is displayed in the <information-file>
  8408.   pseudo file.%@NL@%
  8409. %@NL@%
  8410. %@CR:MSEgD015@%%@4@%%@AB@%function assignment%@AE@%%@EH@%%@NL@%
  8411.   A method of assigning an editor function to a specific keystroke so that
  8412.   pressing the keystroke invokes the function. Use the %@AI@%Arg%@AE@%%@AI@%textarg Assign%@AE@%
  8413.   command to make an assignment for a single editing session, or you can
  8414.   enter the assignment in the TOOLS.INI file so that it may be used during
  8415.   any editing session. %@AI@%See%@AE@% Chapter 6%@BO:   28e3a@%.%@NL@%
  8416. %@NL@%
  8417. %@CR:MSEgD016@%%@4@%%@AB@%graphic%@AE@%%@EH@%%@NL@%
  8418.   %@AI@%See%@AE@% "literal."%@NL@%
  8419. %@NL@%
  8420. %@CR:MSEgD017@%%@4@%%@AB@%initial cursor position%@AE@%%@EH@%%@NL@%
  8421.   The position the cursor is in when the %@AI@%Arg%@AE@% function is invoked.%@NL@%
  8422. %@NL@%
  8423. %@CR:MSEgD018@%%@4@%%@AB@%insert mode%@AE@%%@EH@%%@NL@%
  8424.   An input mode that inserts rather than replaces characters in the file as
  8425.   they are entered.%@NL@%
  8426. %@NL@%
  8427. %@CR:MSEgD019@%%@4@%%@AB@%linearg%@AE@%%@EH@%%@NL@%
  8428.   A range of complete lines, including all the lines from the initial cursor
  8429.   position to the current cursor position. The editor must be in box mode.
  8430.   You define a %@AI@%linearg%@AE@% by invoking the %@AI@%Arg%@AE@% function (pressing ALT+A), then
  8431.   moving the cursor to a different line but same column as the initial
  8432.   cursor position.%@NL@%
  8433. %@NL@%
  8434. %@CR:MSEgD020@%%@4@%%@AB@%literal%@AE@%%@EH@%%@NL@%
  8435.   The corresponding ASCII value of a keystroke.  When a keystroke is
  8436.   considered literal or graphic, pressing the key causes the editor to place
  8437.   the corresponding value in a file.%@NL@%
  8438. %@NL@%
  8439. %@CR:MSEgD021@%%@4@%%@AB@%macro%@AE@%%@EH@%%@NL@%
  8440.   A function made up of arguments and previously defined functions. For
  8441.   example, you can create a macro that contains a set of repeatedly
  8442.   performed functions and assign the macro to a keystroke. Those functions
  8443.   can be carried out much more quickly and simply by invoking the macro. %@AI@%See%@AE@%
  8444.   Chapter 6%@BO:   28e3a@%.%@NL@%
  8445. %@NL@%
  8446. %@CR:MSEgD022@%%@4@%%@AB@%markarg%@AE@%%@EH@%%@NL@%
  8447.   A special type of %@AI@%textarg%@AE@% that has been previously defined to be a
  8448.   marker──that is, it is associated with a particular position in the file.%@NL@%
  8449. %@NL@%
  8450. %@CR:MSEgD023@%%@4@%%@AB@%marker%@AE@%%@EH@%%@NL@%
  8451.   A name assigned to a cursor position in a file so that this position can
  8452.   be referred to within a command by using this name. For example, the %@AI@%Arg%@AE@%
  8453.   %@AI@%markarg Copy%@AE@% command selects the text between the cursor position and the
  8454.   marker position. A marker is assigned using the %@AI@%Arg Arg textarg Mark%@AE@%
  8455.   command.%@NL@%
  8456. %@NL@%
  8457. %@CR:MSEgD024@%%@4@%%@AB@%Meta%@AE@%%@EH@%%@NL@%
  8458.   A function that modifies other functions so they perform differently. The
  8459.   effect of %@AI@%Meta%@AE@% varies with each function.%@NL@%
  8460. %@NL@%
  8461. %@CR:MSEgD025@%%@4@%%@AB@%nested macro%@AE@%%@EH@%%@NL@%
  8462.   A macro executed by another macro.%@NL@%
  8463. %@NL@%
  8464. %@CR:MSEgD026@%%@4@%%@AB@%numarg%@AE@%%@EH@%%@NL@%
  8465.   A numerical value you enter on the dialog line, which is passed to a
  8466.   function. A %@AI@%numarg%@AE@% is introduced by the %@AI@%Arg%@AE@% function.%@NL@%
  8467. %@NL@%
  8468. %@CR:MSEgD027@%%@4@%%@AB@%overtype mode%@AE@%%@EH@%%@NL@%
  8469.   The input mode that replaces characters at the cursor position instead of
  8470.   inserting them. Unlike insert mode, this mode does not preserve existing
  8471.   text at the cursor position.%@NL@%
  8472. %@NL@%
  8473. %@CR:MSEgD028@%%@4@%%@AB@%pseudo file%@AE@%%@EH@%%@NL@%
  8474.   A file kept in memory that does not correspond to a disk file. The name of
  8475.   a pseudo file is always enclosed in angle brackets (%@AB@%<>%@AE@%). You can create
  8476.   your pseudo files for fast saving of temporary information. In addition,
  8477.   the editor creates several pseudo files of its own and gives them special
  8478.   meaning. %@AI@%See%@AE@% Chapter 4%@BO:   120e2@%.%@NL@%
  8479. %@NL@%
  8480. %@CR:MSEgD029@%%@4@%%@AB@%recorded macro%@AE@%%@EH@%%@NL@%
  8481.   A macro you create with the %@AI@%Record%@AE@% function. The %@AI@%Record%@AE@% function turns
  8482.   record mode on and off. All actions you execute while in record mode are
  8483.   by default assigned to the RECORDVALUE macro. %@AI@%See%@AE@% Chapter 6%@BO:   28e3a@%.%@NL@%
  8484. %@NL@%
  8485. %@CR:MSEgD030@%%@4@%%@AB@%regular expression%@AE@%%@EH@%%@NL@%
  8486.   A pattern specifying a set of one or more character strings to search for.
  8487.   It may be a simple string or a more complex arrangement of characters and
  8488.   special symbols that specify a variety of strings to be matched. %@AI@%See%@AE@%
  8489.   Chapter 5%@BO:   206bc@%.%@NL@%
  8490. %@NL@%
  8491. %@CR:MSEgD031@%%@4@%%@AB@%return value%@AE@%%@EH@%%@NL@%
  8492.   A value returned by an editing function. The value may be true or false,
  8493.   depending on whether the function was successful. This value can be used
  8494.   to create complex macros that perform differently depending upon the
  8495.   results of individual functions within the macro. %@AI@%See%@AE@% Chapter 6%@BO:   28e3a@%.%@NL@%
  8496. %@NL@%
  8497. %@CR:MSEgD032@%%@4@%%@AB@%short name%@AE@%%@EH@%%@NL@%
  8498.   A file name without a path or file extension. The %@AI@%Setfile%@AE@% and %@AI@%Paste%@AE@%
  8499.   functions can take a short name as input and search for a full-length file
  8500.   name in the file history that contains the short name.%@NL@%
  8501. %@NL@%
  8502. %@CR:MSEgD033@%%@4@%%@AB@%status line%@AE@%%@EH@%%@NL@%
  8503.   The bottom line of the screen. This line contains useful information about
  8504.   the current editing session.%@NL@%
  8505. %@NL@%
  8506. %@CR:MSEgD034@%%@4@%%@AB@%stream mode%@AE@%%@EH@%%@NL@%
  8507.   The editing mode that lets you highlight cursor-movement arguments as
  8508.   continuous streams of text, rather than rectangular areas.%@NL@%
  8509. %@NL@%
  8510. %@CR:MSEgD035@%%@4@%%@AB@%streamarg%@AE@%%@EH@%%@NL@%
  8511.   The contiguous stream of characters between two positions──the initial
  8512.   cursor position and the new cursor position. The editor must be in stream
  8513.   mode. You define a %@AI@%streamarg%@AE@% by invoking %@AI@%Arg%@AE@%, moving the cursor to any new
  8514.   location, and then invoking %@AI@%Sinsert%@AE@% or %@AI@%Sdelete%@AE@%.%@NL@%
  8515. %@NL@%
  8516. %@CR:MSEgD036@%%@4@%%@AB@%switch%@AE@%%@EH@%%@NL@%
  8517.   A variable that modifies the way the editor performs. The Microsoft Editor
  8518.   uses three kinds of switches: Boolean switches, which turn a certain
  8519.   editor feature on or off; numeric switches, which specify numeric
  8520.   constants; and text switches, which specify a string of characters. %@AI@%See%@AE@%
  8521.   Chapter 7%@BO:   3396c@%.%@NL@%
  8522. %@NL@%
  8523. %@CR:MSEgD037@%%@4@%%@AB@%tag%@AE@%%@EH@%%@NL@%
  8524.   An identifier enclosed in brackets (%@AB@%[]%@AE@%) that marks the beginning of a
  8525.   section in the TOOLS.INI file. For example, unless you rename the editor,
  8526.   the principal section for editor settings starts at the [M] tag. %@AI@%See%@AE@%
  8527.   Chapter 7%@BO:   3396c@%.%@NL@%
  8528. %@NL@%
  8529. %@CR:MSEgD038@%%@4@%%@AB@%textarg%@AE@%%@EH@%%@NL@%
  8530.   A string of text that you enter on the dialog line after invoking the %@AI@%Arg%@AE@%
  8531.   function. The text that you enter is passed as input to the next function.%@NL@%
  8532. %@NL@%
  8533. %@CR:MSEgD039@%%@4@%%@AB@%TOOLS.INI%@AE@%%@EH@%%@NL@%
  8534.   A file that contains initialization information for the Microsoft Editor
  8535.   and other programs. The file is divided into sections with the use of
  8536.   tags. These sections can be loaded automatically when the editor is
  8537.   started or by command from within the editor. %@AI@%See%@AE@% Chapter 7%@BO:   3396c@%.%@NL@%
  8538. %@NL@%
  8539. %@CR:MSEgD040@%%@4@%%@AB@%window%@AE@%%@EH@%%@NL@%
  8540.   An area on the screen used to display part of a file. Unless a file is
  8541.   extremely small, it is impossible to see all of it on the screen at once.
  8542.   Therefore you see a portion of the file through the main editing window at
  8543.   any one time. It is possible to see any part of the file by moving or
  8544.   scrolling this window. The Microsoft Editor allows you to open multiple
  8545.   windows on the screen, using the %@AI@%Window%@AE@% function, for viewing different
  8546.   parts of the same file or different files.%@NL@%
  8547. %@NL@%
  8548. %@NL@%
  8549. %@CR:MSEINDEX@%%@1@%%@AB@%Index%@AE@%%@EH@%%@NL@%
  8550. ───────────────────────────────────────────────────────────────────────────%@NL@%
  8551. %@NL@%
  8552. %|F parameter%@BO:   3ab6d@%%@NL@%
  8553. %s parameter%@BO:   3ab6d@%%@NL@%
  8554. %@NL@%
  8555. %@2@%%@AB@%A%@AE@%%@EH@%%@NL@%
  8556. ───────────────────────────────────────────────────────────────────────────%@NL@%
  8557.  %@NL@%
  8558. Abandoning edits%@BO:   128e1@%%@NL@%
  8559. AddFile function%@BO:   51608@%%@NL@%
  8560. Adding lines%@BO:   16a0d@%%@NL@%
  8561. Arg function%@BO:    9154@%%@BO:   60c4c@%%@NL@%
  8562. Argcompile function%@BO:   60c4c@%%@NL@%
  8563. Arguments%@NL@%
  8564.      canceling%@BO:    9512@%%@NL@%
  8565.      cmdTable flags%@BO:   435cc@%%@NL@%
  8566.      cursor-movement type%@NL@%
  8567.           boxarg%@BO:   115ce@%%@BO:   1698d@%%@NL@%
  8568.           defined%@BO:    e83e@%%@NL@%
  8569.           linearg%@BO:   11355@%%@NL@%
  8570.           streamarg%@BO:   11a23@%%@NL@%
  8571.      introducing%@BO:    9154@%%@BO:    d6ea@%%@NL@%
  8572.      text type%@NL@%
  8573.           defined%@BO:    e83e@%%@NL@%
  8574.           markarg%@BO:    fa9b@%%@NL@%
  8575.           numarg%@BO:    f671@%%@BO:   17134@%%@NL@%
  8576.           textarg%@BO:    fec9@%%@NL@%
  8577. Arrow keys%@BO:    6026@%%@NL@%
  8578. askexit switch%@BO:   7225b@%%@NL@%
  8579. askrtn switch%@BO:   7225b@%%@NL@%
  8580. Assign command%@BO:   3b6af@%%@NL@%
  8581. Assign function%@BO:   2a35a@%%@BO:   2ae71@%%@BO:   33a2a@%%@BO:   60c4c@%%@NL@%
  8582. Assign pseudo file%@BO:   1406a@%%@BO:   2b1a0@%%@NL@%
  8583. Assignments%@NL@%
  8584.      functions%@BO:   2a304@%%@NL@%
  8585.      keystrokes%@BO:   29ab0@%%@NL@%
  8586.      macros%@BO:   2e15e@%%@NL@%
  8587.      switches and functions contrasted%@BO:   34590@%%@NL@%
  8588. Automatic command execution at start-up%@BO:   3e9db@%%@NL@%
  8589. autosave switch%@BO:   7225b@%%@NL@%
  8590. Autostart macro%@BO:   3e9db@%%@NL@%
  8591.  %@NL@%
  8592. %@2@%%@AB@%B%@AE@%%@EH@%%@NL@%
  8593. ───────────────────────────────────────────────────────────────────────────%@NL@%
  8594.  %@NL@%
  8595. backslash (\), regular expressions%@NL@%
  8596.      M 1.0 syntax%@BO:   24908@%%@NL@%
  8597. backslash, regular expressions%@BO:   21940@%%@NL@%
  8598. Backtab function%@BO:   60c4c@%%@NL@%
  8599. backup switch%@BO:   7225b@%%@NL@%
  8600. BadArg function%@BO:   51d7a@%%@NL@%
  8601. Base names, inserting into text%@BO:   17957@%%@NL@%
  8602. Begfile function%@BO:   15b0c@%%@BO:   60c4c@%%@NL@%
  8603. Beginning of file, moving to%@BO:   15b0c@%%@NL@%
  8604. Beginning of line, moving to%@BO:    88cf@%%@BO:   14d77@%%@NL@%
  8605. Begline function%@BO:   60c4c@%%@NL@%
  8606. Block operations%@NL@%
  8607.      moving%@BO:    a0da@%%@NL@%
  8608.      copying%@BO:   16fbc@%%@NL@%
  8609.      deleting%@BO:    9512@%%@BO:    a018@%%@BO:   16340@%%@NL@%
  8610.      inserting%@BO:    8b05@%%@BO:   16340@%%@NL@%
  8611.      merging%@BO:   13355@%%@BO:   17ec6@%%@NL@%
  8612.      moving%@BO:    9bb3@%%@NL@%
  8613.      multiple files%@BO:   1f605@%%@NL@%
  8614.      replacing%@BO:   19804@%%@NL@%
  8615.      searching%@BO:   19804@%%@NL@%
  8616. Blocks of text, large%@BO:   16b40@%%@NL@%
  8617. Boolean switches%@BO:   34391@%%@NL@%
  8618. Bottom of file, moving to%@BO:   15bca@%%@NL@%
  8619. Box mode%@BO:   10bc4@%%@NL@%
  8620. BOXARG argument type%@BO:   494fa@%%@NL@%
  8621. boxarg, argument type%@BO:   115ce@%%@NL@%
  8622. BOXARG, cmdTable flag%@BO:   435cc@%%@NL@%
  8623. BOXSTR, cmdTable flag%@BO:   435cc@%%@NL@%
  8624. Boxstream function%@BO:   10f81@%%@BO:   60c4c@%%@NL@%
  8625. Brackets (\lb\rb), finding%@BO:   5d2a3@%%@NL@%
  8626.  %@NL@%
  8627. %@2@%%@AB@%C%@AE@%%@EH@%%@NL@%
  8628. ───────────────────────────────────────────────────────────────────────────%@NL@%
  8629.  %@NL@%
  8630. C extensions%@NL@%
  8631.      compiling and linking%@BO:   4a7bb@%%@NL@%
  8632.      defined%@BO:   3fc94@%%@NL@%
  8633.      editing functions, low level%@NL@%
  8634.           Addfile%@BO:   46852@%%@NL@%
  8635.           AddFile%@BO:   51608@%%@NL@%
  8636.           BadArg%@BO:   51d7a@%%@NL@%
  8637.           CopyBox%@BO:   5238e@%%@NL@%
  8638.           CopyLine%@BO:   52d82@%%@NL@%
  8639.           CopyStream%@BO:   5376c@%%@NL@%
  8640.           DelBox%@BO:   53fde@%%@NL@%
  8641.           DelFile%@BO:   546d9@%%@NL@%
  8642.           DelLine%@BO:   54cad@%%@NL@%
  8643.           DelStream%@BO:   55335@%%@NL@%
  8644.           Display%@BO:   55abb@%%@NL@%
  8645.           DoMessage%@BO:   55f94@%%@NL@%
  8646.           fExecute%@BO:   563e5@%%@NL@%
  8647.           FileLength%@BO:   56b4d@%%@NL@%
  8648.           FileNameToHandle%@BO:   4655f@%%@BO:   49f36@%%@BO:   57001@%%@NL@%
  8649.           FileRead%@BO:   577dc@%%@NL@%
  8650.           FileWrite%@BO:   57f2d@%%@NL@%
  8651.           GetCursor%@BO:   505ed@%%@BO:   58886@%%@NL@%
  8652.           GetLine%@BO:   49e97@%%@BO:   58d95@%%@NL@%
  8653.           KbHook%@BO:   595af@%%@NL@%
  8654.           KbUnHook%@BO:   598b1@%%@NL@%
  8655.           MoveCur%@BO:   59ead@%%@NL@%
  8656.           pFileToTop%@BO:   5a4d2@%%@NL@%
  8657.           PutLine%@BO:   4a1fe@%%@NL@%
  8658.           Putline%@BO:   505ed@%%@NL@%
  8659.           PutLine%@BO:   5a976@%%@NL@%
  8660.           ReadChar%@BO:   5b0be@%%@NL@%
  8661.           ReadCmd%@BO:   5ba9c@%%@NL@%
  8662.           RemoveFile%@BO:   5be9e@%%@NL@%
  8663.           Replace%@BO:   5c466@%%@NL@%
  8664.           SetKey%@BO:   5cc35@%%@NL@%
  8665.      editing%@BO:   44a45@%%@NL@%
  8666.      functions, declaring%@BO:   41b89@%%@BO:   42a57@%%@NL@%
  8667.      guidelines for creating%@BO:   415be@%%@NL@%
  8668.      loading%@BO:   40dcc@%%@BO:   4b8c3@%%@NL@%
  8669.      programming%@BO:   3fc94@%%@NL@%
  8670.      sample program%@BO:   4d33a@%%@NL@%
  8671.      steps for development%@BO:   409a9@%%@BO:   40dcc@%%@NL@%
  8672.      switches, declaring%@BO:   41b89@%%@BO:   41eff@%%@NL@%
  8673.      types, function%@BO:   4319b@%%@NL@%
  8674. C library functions%@BO:   4fad5@%%@NL@%
  8675. Cancel function%@BO:    94b9@%%@BO:   60c4c@%%@NL@%
  8676. Cancelling arguments%@BO:    9512@%%@NL@%
  8677. carat (^), regular expressions%@NL@%
  8678.      M 1.0 syntax%@BO:   24908@%%@NL@%
  8679.      UNIX syntax%@BO:   21940@%%@NL@%
  8680. Carriage return%@NL@%
  8681.      Emacsnewl function%@BO:   5d2a3@%%@NL@%
  8682.      Newline function%@BO:   5f038@%%@NL@%
  8683. case switch%@BO:   7225b@%%@NL@%
  8684. Cdelete function%@BO:   60c4c@%%@NL@%
  8685. Clipboard pseudo file%@BO:   1406a@%%@NL@%
  8686. Closing a window%@BO:   1f027@%%@NL@%
  8687. cmdTable flags%@NL@%
  8688.      (table)%@BO:   435cc@%%@NL@%
  8689.      arguments%@BO:   435cc@%%@NL@%
  8690. cmdTable, described%@BO:   42aa3@%%@NL@%
  8691. Color switches%@NL@%
  8692.      errcolor%@BO:   368ed@%%@NL@%
  8693.      fgcolor%@BO:   35acc@%%@BO:   35d72@%%@NL@%
  8694.      hgcolor%@BO:   368ed@%%@NL@%
  8695.      infcolor%@BO:   368ed@%%@NL@%
  8696.      selcolor%@BO:   368ed@%%@NL@%
  8697.      stacolor%@BO:   368ed@%%@NL@%
  8698.      wdcolor%@BO:   368ed@%%@NL@%
  8699. Colors. %@AI@%See%@AE@% Setting screen colors%@NL@%
  8700. Command line%@BO:    bc2e@%%@NL@%
  8701. Commands, Assign%@BO:   3b6af@%%@NL@%
  8702. Comments%@BO:   3dbb2@%%@NL@%
  8703. Compile function%@BO:   1bf47@%%@BO:   60c4c@%%@NL@%
  8704. Compile pseudo file%@BO:   1406a@%%@NL@%
  8705. Compilers supported%@BO:   1d97e@%%@NL@%
  8706. Compiling%@NL@%
  8707.      compilers, invoking%@BO:   1c335@%%@NL@%
  8708.      editor, with%@BO:   1bf47@%%@NL@%
  8709.      error output%@BO:   1d528@%%@NL@%
  8710.      extensions%@BO:   4ab20@%%@NL@%
  8711.      utilities, invoking%@BO:   1c564@%%@NL@%
  8712. Conditional macros%@BO:   320fc@%%@NL@%
  8713. Configuring the editor%@NL@%
  8714.      switches, with%@BO:   33a2a@%%@NL@%
  8715.      TOOLS.INI file, with%@BO:   3b535@%%@NL@%
  8716. Context-sensitive Help%@BO:    b59d@%%@NL@%
  8717. Copy function%@BO:   16fbc@%%@BO:   60c4c@%%@NL@%
  8718. CopyBox function%@BO:   5238e@%%@NL@%
  8719. Copying%@BO:   16f75@%%@NL@%
  8720. CopyLine function%@BO:   52d82@%%@NL@%
  8721. CopyStream function%@BO:   5376c@%%@NL@%
  8722. Curdate function%@BO:   17957@%%@BO:   60c4c@%%@NL@%
  8723. Curday function%@BO:   17957@%%@BO:   60c4c@%%@NL@%
  8724. Curfile function%@BO:   17957@%%@BO:   60c4c@%%@NL@%
  8725. Curfileext function%@BO:   17957@%%@BO:   60c4c@%%@NL@%
  8726. Curfilenam function%@BO:   17957@%%@BO:   60c4c@%%@NL@%
  8727. Cursor-movement type arguments%@NL@%
  8728.      boxarg%@BO:   115ce@%%@BO:   1698d@%%@NL@%
  8729.      defined%@BO:    e83e@%%@NL@%
  8730.      linearg%@BO:   11355@%%@NL@%
  8731.      streamarg%@BO:   11a23@%%@NL@%
  8732. Cursor%@NL@%
  8733.      displaying position of%@BO:   353da@%%@NL@%
  8734.      initial position%@BO:   10988@%%@NL@%
  8735.      movement%@NL@%
  8736.           backtab%@BO:   5d2a3@%%@BO:   60c4c@%%@NL@%
  8737.           down%@BO:   5d2a3@%%@BO:   60c4c@%%@NL@%
  8738.           left%@BO:   5d2a3@%%@BO:   60c4c@%%@NL@%
  8739.           macros, in%@BO:   2f78b@%%@NL@%
  8740.           right%@BO:   5d2a3@%%@BO:   60c4c@%%@NL@%
  8741.           tab%@BO:   5d2a3@%%@BO:   5f038@%%@NL@%
  8742.           up%@BO:   5d2a3@%%@BO:   60c4c@%%@NL@%
  8743. CURSORFUNC, cmdTable flag%@BO:   435cc@%%@NL@%
  8744. Curtime function%@BO:   17957@%%@BO:   60c4c@%%@NL@%
  8745. Customizing editor%@NL@%
  8746.      assignments%@BO:   29476@%%@NL@%
  8747.      %@AI@%See also%@AE@% C extensions%@NL@%
  8748.      described%@BO:   292f2@%%@NL@%
  8749.      macros%@BO:   2ccc4@%%@NL@%
  8750.      TOOLS.INI, using%@BO:   2b024@%%@NL@%
  8751. %@NL@%
  8752. %@2@%%@AB@%D%@AE@%%@EH@%%@NL@%
  8753. ───────────────────────────────────────────────────────────────────────────%@NL@%
  8754. %@NL@%
  8755. Date, inserting into text%@BO:   17957@%%@BO:   60c4c@%%@NL@%
  8756. Day, inserting into text%@BO:   17957@%%@BO:   60c4c@%%@NL@%
  8757. Default, TOOLS.INI, using to set%@BO:   3b535@%%@NL@%
  8758. DelBox function%@BO:   53fde@%%@NL@%
  8759. Delete function%@BO:    8e12@%%@BO:    9da7@%%@BO:   16414@%%@BO:   60c4c@%%@NL@%
  8760. Deleting%@NL@%
  8761.      canceling deletion%@BO:    9512@%%@NL@%
  8762.      lines%@BO:    9da7@%%@NL@%
  8763.      text%@BO:   162ea@%%@NL@%
  8764.      words%@BO:    8e12@%%@NL@%
  8765. DelFile function%@BO:   546d9@%%@NL@%
  8766. DelLine function%@BO:   54cad@%%@NL@%
  8767. DelStream function%@BO:   55335@%%@NL@%
  8768. Direction keys%@BO:    6026@%%@BO:   14957@%%@NL@%
  8769. Disabling keystrokes%@BO:   2bbd2@%%@NL@%
  8770. Discarding edits%@BO:   128e1@%%@NL@%
  8771. Display function%@BO:   55abb@%%@NL@%
  8772. displaycursor switch%@BO:   7225b@%%@NL@%
  8773. Displaying the cursor%@BO:   353da@%%@NL@%
  8774. Document conventions%@BO:    5f30@%%@NL@%
  8775. dollar sign ($), regular expressions%@NL@%
  8776.      M 1.0 syntax%@BO:   24908@%%@NL@%
  8777.      UNIX syntax%@BO:   21940@%%@NL@%
  8778. DoMessage function%@BO:   55f94@%%@NL@%
  8779. DOS environment variable. %@AI@%See%@AE@% Environment variable%@NL@%
  8780. DOS shell. %@AI@%See%@AE@% Shell function%@NL@%
  8781. DOS wildcards%@BO:    c693@%%@BO:   135c3@%%@NL@%
  8782. DOS-specific initialization%@BO:   3ce83@%%@NL@%
  8783. Down function%@BO:   15095@%%@BO:   60c4c@%%@NL@%
  8784. Drawing window borders, color%@BO:   368ed@%%@NL@%
  8785. Dynamic compile log%@BO:   1e543@%%@NL@%
  8786. %@NL@%
  8787. %@2@%%@AB@%E%@AE@%%@EH@%%@NL@%
  8788. ───────────────────────────────────────────────────────────────────────────%@NL@%
  8789. %@NL@%
  8790. Editing%@NL@%
  8791.      copying%@BO:   16fbc@%%@NL@%
  8792.      deleting%@NL@%
  8793.           cancelling deletion%@BO:    9512@%%@NL@%
  8794.           lines%@BO:    9da7@%%@NL@%
  8795.           text%@BO:   162ea@%%@NL@%
  8796.           words%@BO:    8e12@%%@NL@%
  8797.      exiting andsaving%@BO:    af34@%%@NL@%
  8798.      inserting%@BO:    8b05@%%@BO:   162ea@%%@BO:   16340@%%@NL@%
  8799.      merging%@BO:   13355@%%@NL@%
  8800.      moving%@NL@%
  8801.           text%@BO:    9bb3@%%@BO:    a0da@%%@BO:   16f75@%%@NL@%
  8802.           through files%@BO:   14909@%%@BO:   15d4c@%%@NL@%
  8803.      multiple files%@BO:   1f605@%%@NL@%
  8804.      overtype mode%@BO:    85e5@%%@NL@%
  8805.      pasting%@BO:    a0da@%%@BO:   17ec6@%%@NL@%
  8806.      replacing%@BO:    85e5@%%@BO:   197b4@%%@BO:   19804@%%@BO:   1b205@%%@NL@%
  8807.      scrolling%@NL@%
  8808.           control%@BO:   1527e@%%@NL@%
  8809.           edge of screen%@BO:   1503c@%%@NL@%
  8810.           page%@BO:   155e1@%%@NL@%
  8811.           switches%@BO:   356ce@%%@NL@%
  8812.           %@AI@%See also%@AE@% Switches
  8813.      search and replace%@BO:   197b4@%%@NL@%
  8814.      searching%@BO:    a3e8@%%@BO:   19804@%%@BO:   1a2e0@%%@BO:   26c13@%%@NL@%
  8815.      starting editor%@BO:    7746@%%@NL@%
  8816.      text arguments%@BO:    f20b@%%@NL@%
  8817.      windows%@BO:   1ec4c@%%@NL@%
  8818. editreadonly switch%@BO:   7225b@%%@NL@%
  8819. Edits, discarding%@BO:   128e1@%%@NL@%
  8820. Emacsdel function%@BO:   60c4c@%%@NL@%
  8821. Emacsnewl function%@BO:   60c4c@%%@NL@%
  8822. End of file, moving to%@BO:   15bca@%%@NL@%
  8823. End of line, moving to%@BO:   14957@%%@NL@%
  8824. Endfile function%@BO:   15bca@%%@BO:   60c4c@%%@NL@%
  8825. Endline function%@BO:   60c4c@%%@NL@%
  8826. entab switch%@BO:   38b68@%%@BO:   7225b@%%@NL@%
  8827. enterinsmode switch%@BO:   7225b@%%@NL@%
  8828. Environment function%@BO:   60c4c@%%@NL@%
  8829. Environment variable%@NL@%
  8830.      loading a file, used for%@BO:   138ea@%%@NL@%
  8831.      merging a file, used for%@BO:   13ab0@%%@NL@%
  8832.      switch settings, in%@BO:   3b101@%%@NL@%
  8833.      switches,used with%@BO:   3b262@%%@NL@%
  8834. errcolor switch%@BO:   35c03@%%@BO:   368ed@%%@BO:   7225b@%%@NL@%
  8835. Error messages%@BO:   76d41@%%@NL@%
  8836. Error output%@BO:   1d4d9@%%@NL@%
  8837. errprompt switch%@BO:   7225b@%%@NL@%
  8838. Execute function%@BO:   17c17@%%@BO:   2ffe3@%%@BO:   60c4c@%%@NL@%
  8839. Execution of commands at start-up%@BO:   3e9db@%%@NL@%
  8840. Exit function%@BO:   60c4c@%%@NL@%
  8841. Exiting and saving%@BO:    af34@%%@NL@%
  8842. Exiting without saving%@BO:   128e1@%%@NL@%
  8843. Exiting%@NL@%
  8844.      completely%@BO:   60c4c@%%@NL@%
  8845.      Help%@BO:    b9ae@%%@NL@%
  8846.      moving to next file, and%@BO:   128e1@%%@NL@%
  8847. EXP.EXE file%@BO:   76ad7@%%@NL@%
  8848. Expressions%@NL@%
  8849.      predefined regular%@BO:   2885d@%%@NL@%
  8850.      regular%@BO:   20760@%%@NL@%
  8851.      tagged%@BO:   231bc@%%@BO:   23b94@%%@BO:   27441@%%@BO:   27df8@%%@NL@%
  8852. EXT.H file%@BO:   4055d@%%@BO:   4162e@%%@NL@%
  8853. Extensions, file%@BO:   3d62e@%%@NL@%
  8854. Extensions. %@AI@%See%@AE@% C extensions%@NL@%
  8855. EXTHDR.OBJ file%@BO:   4055d@%%@BO:   40dcc@%%@NL@%
  8856. EXTHDRP.OBJ file%@BO:   4055d@%%@BO:   40dcc@%%@NL@%
  8857. extmake switch%@BO:   7225b@%%@NL@%
  8858. %@NL@%
  8859. %@2@%%@AB@%F%@AE@%%@EH@%%@NL@%
  8860. ───────────────────────────────────────────────────────────────────────────%@NL@%
  8861. %@NL@%
  8862. fExecute function%@BO:   563e5@%%@NL@%
  8863. fgcolor switch%@BO:   35acc@%%@BO:   7225b@%%@NL@%
  8864. File extensions%@NL@%
  8865.      inserting into text%@BO:   17957@%%@NL@%
  8866.      syntax%@BO:   3d62e@%%@NL@%
  8867. File history. %@AI@%See%@AE@% Information-file pseudo-file%@NL@%
  8868. File markers%@NL@%
  8869.      commands%@BO:   1839c@%%@NL@%
  8870.      defined%@BO:   1839c@%%@NL@%
  8871.      functions used with%@BO:   18cab@%%@NL@%
  8872. File name, inserting into text%@BO:   17957@%%@NL@%
  8873. File operations%@BO:   127d4@%%@NL@%
  8874. File position, displaying%@BO:   353da@%%@NL@%
  8875. File-list pseudo file%@BO:   1406a@%%@NL@%
  8876. FileLength function%@BO:   56b4d@%%@NL@%
  8877. FileNameToHandle function%@BO:   4655f@%%@BO:   57001@%%@NL@%
  8878. FileRead function%@BO:   577dc@%%@NL@%
  8879. Files%@NL@%
  8880.      EXTHDR.OBJ%@BO:   4055d@%%@NL@%
  8881.      EXP.EXE%@BO:   76ad7@%%@NL@%
  8882.      EXT.H%@BO:   4055d@%%@NL@%
  8883.      EXTHDR.OBJ%@BO:   40dcc@%%@NL@%
  8884.      EXTHDRP.OBJ%@BO:   4055d@%%@BO:   40dcc@%%@NL@%
  8885.      loading%@BO:    c38d@%%@NL@%
  8886.      M.EXE%@BO:    7792@%%@BO:    bc2e@%%@BO:   40a36@%%@NL@%
  8887.      M.TMP%@BO:   1f901@%%@NL@%
  8888.      MEP.EXE%@BO:    bc2e@%%@NL@%
  8889.      multiple%@BO:   1f30c@%%@NL@%
  8890.      SKEL.C%@BO:   4055d@%%@NL@%
  8891.      TOOLS.INI%@NL@%
  8892.           comments%@BO:   3dbb2@%%@NL@%
  8893.           defined%@BO:   33be7@%%@NL@%
  8894.           line continuation%@BO:   3dea7@%%@NL@%
  8895.           sample%@BO:   3b535@%%@NL@%
  8896.           structure%@BO:   3c086@%%@NL@%
  8897.      UNDEL.EXE%@BO:   76895@%%@NL@%
  8898. filetab switch%@BO:   38b68@%%@BO:   7225b@%%@NL@%
  8899. FileWrite function%@BO:   57f2d@%%@NL@%
  8900. Function assignments%@NL@%
  8901.      graphic%@BO:   2c0ab@%%@NL@%
  8902.      keys, numeric-keypad%@BO:    6026@%%@BO:   2a5d3@%%@NL@%
  8903.      making%@BO:   2a304@%%@NL@%
  8904.      removing%@BO:   2bbd2@%%@NL@%
  8905.      viewing%@BO:   2b13c@%%@NL@%
  8906. Functions, C library%@BO:   4fad5@%%@NL@%
  8907. Functions%@NL@%
  8908.      AddFile%@BO:   51608@%%@NL@%
  8909.      Arg%@BO:    9154@%%@BO:   60c4c@%%@NL@%
  8910.      Argcompile%@BO:   60c4c@%%@NL@%
  8911.      Assign%@BO:   2a35a@%%@BO:   2ae71@%%@BO:   33a2a@%%@BO:   60c4c@%%@NL@%
  8912.      assignment of%@BO:   2a304@%%@NL@%
  8913.      Backtab%@BO:   60c4c@%%@NL@%
  8914.      BadArg%@BO:   51d7a@%%@NL@%
  8915.      Begfile%@BO:   15b0c@%%@BO:   60c4c@%%@NL@%
  8916.      Begline%@BO:   60c4c@%%@NL@%
  8917.      Boxstream%@BO:   10f81@%%@BO:   60c4c@%%@NL@%
  8918.      Cancel%@BO:    94b9@%%@BO:   60c4c@%%@NL@%
  8919.      Cdelete%@BO:   60c4c@%%@NL@%
  8920.      Compile%@BO:   1c290@%%@BO:   60c4c@%%@NL@%
  8921.      Copy%@BO:   16f75@%%@NL@%
  8922.      copy%@BO:   16fbc@%%@NL@%
  8923.      Copy%@BO:   60c4c@%%@NL@%
  8924.      CopyBox%@BO:   5238e@%%@NL@%
  8925.      CopyLine%@BO:   52d82@%%@NL@%
  8926.      CopyStream%@BO:   5376c@%%@NL@%
  8927.      Curdate%@BO:   17957@%%@BO:   60c4c@%%@NL@%
  8928.      Curday%@BO:   17957@%%@BO:   60c4c@%%@NL@%
  8929.      Curfile%@BO:   17957@%%@BO:   60c4c@%%@NL@%
  8930.      Curfileext%@BO:   17957@%%@BO:   60c4c@%%@NL@%
  8931.      Curfilenam%@BO:   17957@%%@BO:   60c4c@%%@NL@%
  8932.      Curtime%@BO:   17957@%%@BO:   60c4c@%%@NL@%
  8933.      declaring%@BO:   44a45@%%@NL@%
  8934.      defined%@BO:    70bc@%%@NL@%
  8935.      DelBox%@BO:   53fde@%%@NL@%
  8936.      Delete%@BO:    8e12@%%@BO:    9da7@%%@BO:   16414@%%@BO:   60c4c@%%@NL@%
  8937.      DelFile%@BO:   546d9@%%@NL@%
  8938.      DelLine%@BO:   54cad@%%@NL@%
  8939.      DelStream%@BO:   55335@%%@NL@%
  8940.      Display%@BO:   55abb@%%@NL@%
  8941.      DoMessage%@BO:   55f94@%%@NL@%
  8942.      Down%@BO:   15095@%%@BO:   60c4c@%%@NL@%
  8943.      Emacscdel%@BO:   60c4c@%%@NL@%
  8944.      Emacsnewl%@BO:   60c4c@%%@NL@%
  8945.      Endfile%@BO:   15bca@%%@BO:   60c4c@%%@NL@%
  8946.      Endline%@BO:   60c4c@%%@NL@%
  8947.      Environment%@BO:   60c4c@%%@NL@%
  8948.      Execute%@BO:   60c4c@%%@NL@%
  8949.      Exit%@BO:   60c4c@%%@NL@%
  8950.      fExecute%@BO:   563e5@%%@NL@%
  8951.      FileLength%@BO:   56b4d@%%@NL@%
  8952.      FileNameToHandle%@BO:   4655f@%%@BO:   57001@%%@NL@%
  8953.      FileRead%@BO:   577dc@%%@NL@%
  8954.      FileWrite%@BO:   57f2d@%%@NL@%
  8955.      GetCursor%@BO:   58886@%%@NL@%
  8956.      GetLine%@BO:   49e97@%%@BO:   58d95@%%@NL@%
  8957.      Graphic%@BO:   2c71f@%%@NL@%
  8958.      Home%@BO:   60c4c@%%@NL@%
  8959.      Information%@BO:   1f605@%%@BO:   60c4c@%%@NL@%
  8960.      Initialize%@BO:   3e7ee@%%@BO:   60c4c@%%@NL@%
  8961.      Insert%@BO:   60c4c@%%@NL@%
  8962.      Insertmode%@BO:    8b05@%%@BO:   60c4c@%%@NL@%
  8963.      KbHook%@BO:   595af@%%@NL@%
  8964.      KbUnHook%@BO:   598b1@%%@NL@%
  8965.      Lastselect%@BO:   110d1@%%@BO:   60c4c@%%@NL@%
  8966.      Lasttext%@BO:    f570@%%@BO:   60c4c@%%@NL@%
  8967.      Ldelete%@BO:   16a0d@%%@BO:   2f8ae@%%@BO:   60c4c@%%@NL@%
  8968.      Left%@BO:   15095@%%@BO:   60c4c@%%@NL@%
  8969.      Linsert%@BO:   16a0d@%%@BO:   60c4c@%%@NL@%
  8970.      Mark%@BO:   15d4c@%%@BO:   185f6@%%@BO:   60c4c@%%@NL@%
  8971.      Message%@BO:   60c4c@%%@NL@%
  8972.      Meta%@BO:   60c4c@%%@NL@%
  8973.      Mgrep%@BO:   60c4c@%%@NL@%
  8974.      Mgreplist%@BO:   1ab64@%%@NL@%
  8975.      Mlines%@BO:   60c4c@%%@NL@%
  8976.      MoveCur%@BO:   59ead@%%@NL@%
  8977.      Mpage%@BO:   154eb@%%@BO:   60c4c@%%@NL@%
  8978.      Mpara%@BO:   60c4c@%%@NL@%
  8979.      Mreplace%@BO:   60c4c@%%@NL@%
  8980.      Msearch%@BO:   19d88@%%@BO:   60c4c@%%@NL@%
  8981.      Mword%@BO:   15d4c@%%@BO:   60c4c@%%@NL@%
  8982.      Newline%@BO:   60c4c@%%@NL@%
  8983.      Nextmsg%@BO:   60c4c@%%@NL@%
  8984.      Noedit%@BO:   60c4c@%%@NL@%
  8985.      Paste%@BO:    a0da@%%@BO:   174fa@%%@BO:   60c4c@%%@NL@%
  8986.      Pbal%@BO:   60c4c@%%@NL@%
  8987.      pFileToTop%@BO:   5a4d2@%%@NL@%
  8988.      Plines%@BO:   60c4c@%%@NL@%
  8989.      Ppage%@BO:   154eb@%%@BO:   60c4c@%%@NL@%
  8990.      Ppara%@BO:   60c4c@%%@NL@%
  8991.      Print%@BO:   1fcd8@%%@BO:   60c4c@%%@NL@%
  8992.      Psearch%@BO:   19804@%%@BO:   60c4c@%%@NL@%
  8993.      PutLine%@BO:   4a1fe@%%@BO:   5a976@%%@NL@%
  8994.      Pword%@BO:   15d4c@%%@BO:   60c4c@%%@NL@%
  8995.      Qreplace%@BO:   1ba49@%%@BO:   60c4c@%%@NL@%
  8996.      Quote%@BO:   2c5a6@%%@BO:   60c4c@%%@NL@%
  8997.      ReadChar%@BO:   5b0be@%%@NL@%
  8998.      ReadCmd%@BO:   5ba9c@%%@NL@%
  8999.      Record%@BO:   2d29c@%%@BO:   60c4c@%%@NL@%
  9000.      Refresh%@BO:   128e1@%%@BO:   60c4c@%%@NL@%
  9001.      RemoveFile%@BO:   5be9e@%%@NL@%
  9002.      Repeat%@BO:   60c4c@%%@NL@%
  9003.      Replace%@NL@%
  9004.           editing function%@BO:   1b205@%%@BO:   60c4c@%%@NL@%
  9005.           extension function%@BO:   5c466@%%@NL@%
  9006.      Restcur%@BO:   19402@%%@BO:   2f9b5@%%@BO:   60c4c@%%@NL@%
  9007.      Right%@BO:   15095@%%@BO:   60c4c@%%@NL@%
  9008.      Saveall%@BO:   60c4c@%%@NL@%
  9009.      Savecur%@BO:   19402@%%@BO:   2ade8@%%@BO:   2f9b5@%%@BO:   60c4c@%%@NL@%
  9010.      Sdelete%@BO:   2f5d4@%%@BO:   60c4c@%%@NL@%
  9011.      Searchall%@BO:   1a791@%%@BO:   60c4c@%%@NL@%
  9012.      Setfile%@BO:   1356e@%%@BO:   1f360@%%@BO:   60c4c@%%@NL@%
  9013.      SetKey%@BO:   5cc35@%%@NL@%
  9014.      Setwindow%@BO:   60c4c@%%@NL@%
  9015.      Shell%@BO:   60c4c@%%@NL@%
  9016.      Sinsert%@BO:   60c4c@%%@NL@%
  9017.      Tab%@BO:   5f038@%%@BO:   60c4c@%%@NL@%
  9018.      Tell%@BO:   2b9eb@%%@BO:   2d034@%%@BO:   60c4c@%%@NL@%
  9019.      Unassigned%@BO:   2bc22@%%@NL@%
  9020.      Undo%@BO:    964e@%%@BO:   60c4c@%%@NL@%
  9021.      Up%@BO:   15095@%%@BO:   60c4c@%%@NL@%
  9022.      Whenloaded%@BO:   40dcc@%%@BO:   41dbb@%%@BO:   44776@%%@NL@%
  9023.      Window%@BO:   1eea0@%%@BO:   60c4c@%%@NL@%
  9024. %@NL@%
  9025. %@2@%%@AB@%G%@AE@%%@EH@%%@NL@%
  9026. ───────────────────────────────────────────────────────────────────────────%@NL@%
  9027. %@NL@%
  9028. GetCursor function%@BO:   58886@%%@NL@%
  9029. GetLine function%@BO:   49e97@%%@BO:   58d95@%%@NL@%
  9030. Graphic function%@BO:   2c71f@%%@NL@%
  9031. %@NL@%
  9032. %@2@%%@AB@%H%@AE@%%@EH@%%@NL@%
  9033. ───────────────────────────────────────────────────────────────────────────%@NL@%
  9034. %@NL@%
  9035. Height of screen%@BO:   3a3f0@%%@NL@%
  9036. height switch%@BO:   3a3f0@%%@BO:   7225b@%%@NL@%
  9037. Help function%@BO:    b16a@%%@NL@%
  9038. Help, configuring%@BO:   3eb8b@%%@NL@%
  9039. helpboldcolor switch%@BO:   7225b@%%@NL@%
  9040. helpfiles switch%@BO:   7225b@%%@NL@%
  9041. helpitalcolor switch%@BO:   7225b@%%@NL@%
  9042. helpundcolor switch%@BO:   7225b@%%@NL@%
  9043. helpwarncolor switch%@BO:   7225b@%%@NL@%
  9044. helpwindow switch%@BO:   7225b@%%@NL@%
  9045. helpwindow switches%@BO:   3756d@%%@NL@%
  9046. hgcolor switch%@BO:   35c03@%%@BO:   368ed@%%@BO:   7225b@%%@NL@%
  9047. Highlighting%@BO:   10251@%%@BO:   10988@%%@NL@%
  9048. hike switch%@BO:   7225b@%%@NL@%
  9049. Home function%@BO:   60c4c@%%@NL@%
  9050. horizontal scrolling%@BO:   3596c@%%@NL@%
  9051. hscroll switch%@BO:   3596c@%%@BO:   7225b@%%@NL@%
  9052. %@NL@%
  9053. %@2@%%@AB@%I%@AE@%%@EH@%%@NL@%
  9054. ───────────────────────────────────────────────────────────────────────────%@NL@%
  9055. %@NL@%
  9056. infcolor switch%@BO:   35c03@%%@BO:   368ed@%%@BO:   7225b@%%@NL@%
  9057. Information function%@BO:   1f605@%%@BO:   60c4c@%%@NL@%
  9058. Information-file pseudo file%@BO:   1406a@%%@NL@%
  9059. Initial cursor position%@BO:   10988@%%@NL@%
  9060. Initialization file. %@AI@%See%@AE@% TOOLS.INI file%@NL@%
  9061. Initialize function%@BO:   3e7ee@%%@BO:   60c4c@%%@NL@%
  9062. Initializing editor%@BO:   3b535@%%@NL@%
  9063. Insert function%@BO:   60c4c@%%@NL@%
  9064. Insert mode%@BO:    85e5@%%@NL@%
  9065. Inserting%@NL@%
  9066.      another file%@BO:   128e1@%%@BO:   1f30c@%%@NL@%
  9067.      lines%@BO:    e090@%%@BO:   16a0d@%%@NL@%
  9068.      program output%@BO:   17f5c@%%@NL@%
  9069.      spaces%@BO:    e090@%%@NL@%
  9070.      text%@BO:    8b05@%%@BO:   162ea@%%@NL@%
  9071. Insertmode, setting on start-up%@BO:   7225b@%%@NL@%
  9072. Insertmode%@NL@%
  9073.      function%@BO:    8b05@%%@BO:   60c4c@%%@NL@%
  9074.      macro%@BO:   329d5@%%@NL@%
  9075. Installing editor%@BO:    7792@%%@NL@%
  9076. %@NL@%
  9077. %@2@%%@AB@%K%@AE@%%@EH@%%@NL@%
  9078. ───────────────────────────────────────────────────────────────────────────%@NL@%
  9079. %@NL@%
  9080. KbHook function%@BO:   595af@%%@NL@%
  9081. KbUnHook function%@BO:   598b1@%%@NL@%
  9082. KEEPMETA, cmdTable flag%@BO:   435cc@%%@NL@%
  9083. keyboard switch%@BO:   7225b@%%@NL@%
  9084. Keys, numeric-keypad%@BO:    6026@%%@BO:   2a5d3@%%@NL@%
  9085. Keystrokes%@NL@%
  9086.      default%@BO:   5f038@%%@NL@%
  9087.      disabling%@BO:   2bbd2@%%@NL@%
  9088.      function assignments%@BO:   29ab0@%%@NL@%
  9089.      macros%@BO:   2e15e@%%@NL@%
  9090.      making literal%@BO:   2c0ab@%%@NL@%
  9091.      recognized by editor%@BO:   2c100@%%@NL@%
  9092. %@NL@%
  9093. %@2@%%@AB@%L%@AE@%%@EH@%%@NL@%
  9094. ───────────────────────────────────────────────────────────────────────────%@NL@%
  9095. %@NL@%
  9096. Languages, customizing files for%@BO:   3d7b3@%%@NL@%
  9097. Large blocks of text, marking%@BO:   16b40@%%@NL@%
  9098. Lastselect function%@BO:   110d1@%%@BO:   60c4c@%%@NL@%
  9099. Lasttext function%@BO:    f570@%%@BO:   60c4c@%%@NL@%
  9100. Ldelete function%@BO:   16a0d@%%@BO:   2f8ae@%%@BO:   60c4c@%%@NL@%
  9101. Leaving Help%@BO:    b9ae@%%@NL@%
  9102. Left function%@BO:   15095@%%@BO:   60c4c@%%@NL@%
  9103. Library functions, C%@BO:   4fad5@%%@NL@%
  9104. Line continuation%@BO:   3dea7@%%@NL@%
  9105. Line number, moving to%@BO:   1884d@%%@NL@%
  9106. linearg, argument type%@BO:   11355@%%@NL@%
  9107. LINEARG, argument type%@BO:   4858c@%%@NL@%
  9108. LINEARG, cmdTable flag%@BO:   435cc@%%@NL@%
  9109. Linking extensions%@BO:   4ab20@%%@NL@%
  9110. Linsert function%@BO:   16a0d@%%@BO:   60c4c@%%@NL@%
  9111. List of assignments%@BO:   1406a@%%@NL@%
  9112. Literal keystrokes%@NL@%
  9113.      defined%@BO:   2c1d8@%%@NL@%
  9114.      defining keys as%@BO:   2c0ab@%%@NL@%
  9115. load switch%@BO:   40dcc@%%@BO:   7225b@%%@NL@%
  9116. Loading%@NL@%
  9117.      extensions%@BO:   40dcc@%%@BO:   4b8c3@%%@NL@%
  9118.      files%@BO:    c38d@%%@BO:   13355@%%@NL@%
  9119. %@NL@%
  9120. %@2@%%@AB@%M%@AE@%%@EH@%%@NL@%
  9121. ───────────────────────────────────────────────────────────────────────────%@NL@%
  9122. %@NL@%
  9123. M 1.0 syntax, regular expression%@BO:   24293@%%@NL@%
  9124. M 1.0 syntax%@NL@%
  9125.      regular expressions%@BO:   20eeb@%%@NL@%
  9126. M.EXE file%@BO:    7792@%%@BO:    bc2e@%%@BO:   40a36@%%@NL@%
  9127. M.TMP file%@BO:   1f901@%%@NL@%
  9128. Macros%@NL@%
  9129.      autostart%@BO:   3e9db@%%@NL@%
  9130.      conditional operations%@BO:   320fc@%%@NL@%
  9131.      defining%@BO:   2ccc4@%%@NL@%
  9132.      entering%@BO:   2def3@%%@NL@%
  9133.      handling prompts%@BO:   30928@%%@NL@%
  9134.      insertmode%@BO:   329d5@%%@NL@%
  9135.      lists%@BO:   2eac6@%%@NL@%
  9136.      mgreplist%@BO:   1ad57@%%@NL@%
  9137.      record and playback%@BO:   2d29c@%%@NL@%
  9138.      RECORDVALUE%@BO:   2d4c0@%%@NL@%
  9139.      references to other macros%@BO:   30352@%%@NL@%
  9140. Mark function%@BO:   15d4c@%%@BO:   185f6@%%@BO:   60c4c@%%@NL@%
  9141. markarg, argument type%@BO:    fa9b@%%@NL@%
  9142. MARKARG, cmdTable flag%@BO:   435cc@%%@NL@%
  9143. markfile switch%@BO:   192a8@%%@BO:   7225b@%%@NL@%
  9144. Marking large amounts of text%@BO:   16b40@%%@NL@%
  9145. Matching%@NL@%
  9146.      maximal%@BO:   26d87@%%@NL@%
  9147.      method%@BO:   26bc3@%%@NL@%
  9148.      minimal%@BO:   26d87@%%@NL@%
  9149. MEP.EXE file%@BO:    7792@%%@NL@%
  9150. Merging%@BO:   13355@%%@BO:   17ec6@%%@NL@%
  9151. Message function%@BO:   60c4c@%%@NL@%
  9152. Messages%@BO:   76d41@%%@NL@%
  9153. Meta function%@BO:   60c4c@%%@NL@%
  9154. Mgrep function%@BO:   60c4c@%%@NL@%
  9155. Mgreplist%@NL@%
  9156.      function%@BO:   1ab64@%%@NL@%
  9157.      macro%@BO:   1ad57@%%@NL@%
  9158. Mlines function%@BO:   60c4c@%%@NL@%
  9159. Mode%@NL@%
  9160.      box%@BO:   10bc4@%%@NL@%
  9161.      stream%@BO:   10bc4@%%@NL@%
  9162. MODIFIES, cmdTable flag%@BO:   435cc@%%@NL@%
  9163. MoveCur function%@BO:   59ead@%%@NL@%
  9164. Moving cursor. %@AI@%See%@AE@% Cursor movement%@NL@%
  9165. Moving%@NL@%
  9166.      backward one paragraph%@BO:   15d4c@%%@NL@%
  9167.      backward one word%@BO:   15d4c@%%@NL@%
  9168.      beginning of line, to%@BO:    88cf@%%@BO:   14d77@%%@NL@%
  9169.      between windows%@BO:   1eea0@%%@NL@%
  9170.      end of file, to%@BO:   15bca@%%@NL@%
  9171.      end of line, to%@BO:   14957@%%@NL@%
  9172.      file markers, using%@BO:   1839c@%%@NL@%
  9173.      files, through%@BO:   14909@%%@BO:   15d4c@%%@NL@%
  9174.      forward one paragraph%@BO:   15d4c@%%@NL@%
  9175.      Help, through%@BO:    b81a@%%@NL@%
  9176.      line numbers, to%@BO:   1884d@%%@NL@%
  9177.      text%@BO:    9bb3@%%@NL@%
  9178.      top of file, to%@BO:   15b0c@%%@NL@%
  9179.      window down%@BO:   60c4c@%%@NL@%
  9180.      window up%@BO:   60c4c@%%@NL@%
  9181. Mpage function%@BO:   154eb@%%@BO:   60c4c@%%@NL@%
  9182. Mpara function%@BO:   15d4c@%%@BO:   60c4c@%%@NL@%
  9183. Mreplace function%@BO:   60c4c@%%@NL@%
  9184. Msearch function%@BO:   19d88@%%@BO:   60c4c@%%@NL@%
  9185. Multiple files%@BO:   1f30c@%%@NL@%
  9186. Mword function%@BO:   15d4c@%%@BO:   60c4c@%%@NL@%
  9187. %@NL@%
  9188. %@2@%%@AB@%N%@AE@%%@EH@%%@NL@%
  9189. ───────────────────────────────────────────────────────────────────────────%@NL@%
  9190. %@NL@%
  9191. Newline function%@BO:   60c4c@%%@NL@%
  9192.      %@AI@%See Also%@AE@% Emacsnewl function%@NL@%
  9193. Nextmsg function%@BO:   1dc62@%%@BO:   60c4c@%%@NL@%
  9194. NOARG, cmdTable flag%@BO:   435cc@%%@NL@%
  9195. Noedit function%@BO:   60c4c@%%@NL@%
  9196. noise switch%@BO:   7225b@%%@NL@%
  9197. NULLARG, cmdTable flag%@BO:   435cc@%%@NL@%
  9198. NULLEOL, cmdTable flag%@BO:   435cc@%%@NL@%
  9199. NULLEOW, cmdTable flag%@BO:   435cc@%%@NL@%
  9200. numarg, argument type%@BO:    f671@%%@BO:   17134@%%@NL@%
  9201. NUMARG, cmdTable flag%@BO:   435cc@%%@NL@%
  9202. Numeric switches%@BO:   3421c@%%@NL@%
  9203. Numeric-keypad keys%@BO:    6026@%%@BO:   2a5d3@%%@NL@%
  9204. %@NL@%
  9205. %@2@%%@AB@%O%@AE@%%@EH@%%@NL@%
  9206. ───────────────────────────────────────────────────────────────────────────%@NL@%
  9207. %@NL@%
  9208. Options, command line%@BO:    bc2e@%%@NL@%
  9209. OS/2-specific initialization%@BO:   3ce83@%%@NL@%
  9210. OS/2. %@AI@%See%@AE@% Protected mode%@NL@%
  9211. Overtype mode%@BO:    85e5@%%@NL@%
  9212. %@NL@%
  9213. %@2@%%@AB@%P%@AE@%%@EH@%%@NL@%
  9214. ───────────────────────────────────────────────────────────────────────────%@NL@%
  9215. %@NL@%
  9216. Page%@NL@%
  9217.      moving down by%@BO:   154eb@%%@NL@%
  9218.      moving up by%@BO:   154eb@%%@NL@%
  9219. Paragraph%@NL@%
  9220.      moving backward by%@BO:   15d4c@%%@NL@%
  9221.      moving forward by%@BO:   15d4c@%%@NL@%
  9222. Paste function%@BO:    a0da@%%@BO:   17ec6@%%@BO:   60c4c@%%@NL@%
  9223. Pbal function%@BO:   60c4c@%%@NL@%
  9224. pFileToTop function%@BO:   5a4d2@%%@NL@%
  9225. Plines function%@BO:   60c4c@%%@NL@%
  9226. Position of cursor, displaying%@BO:   353da@%%@NL@%
  9227. Ppage function%@BO:   154eb@%%@BO:   60c4c@%%@NL@%
  9228. Ppara function%@BO:   15d4c@%%@BO:   60c4c@%%@NL@%
  9229. Predefined regular expressions%@BO:   2885d@%%@NL@%
  9230. Print function%@BO:   1fcd8@%%@BO:   60c4c@%%@NL@%
  9231. printcmd switch%@BO:   7225b@%%@NL@%
  9232. Programming languages. %@AI@%See%@AE@% Languages, customizing files for%@NL@%
  9233. Prompts, handling within macros%@BO:   30928@%%@NL@%
  9234. Protected mode%@NL@%
  9235.      creating extensions for%@BO:   4b1b6@%%@NL@%
  9236.      dynamic compile log%@BO:   1e917@%%@NL@%
  9237. Psearch function%@BO:   19804@%%@BO:   60c4c@%%@NL@%
  9238. Pseudo files%@BO:   13c6b@%%@NL@%
  9239. PutLine function%@BO:   4a1fe@%%@BO:   5a976@%%@NL@%
  9240. Pword function%@BO:   15d4c@%%@BO:   60c4c@%%@NL@%
  9241. %@NL@%
  9242. %@2@%%@AB@%Q%@AE@%%@EH@%%@NL@%
  9243. ───────────────────────────────────────────────────────────────────────────%@NL@%
  9244. %@NL@%
  9245. Qreplace function%@BO:   1b205@%%@BO:   60c4c@%%@NL@%
  9246. question mark (?), regular expressions%@NL@%
  9247.      M 1.0 syntax%@BO:   24908@%%@NL@%
  9248. Quitting. %@AI@%See%@AE@% Exiting%@NL@%
  9249. Quote function%@BO:   2c5a6@%%@BO:   60c4c@%%@NL@%
  9250. %@NL@%
  9251. %@2@%%@AB@%R%@AE@%%@EH@%%@NL@%
  9252. ───────────────────────────────────────────────────────────────────────────%@NL@%
  9253. %@NL@%
  9254. ReadChar function%@BO:   5b0be@%%@NL@%
  9255. ReadCmd function%@BO:   5ba9c@%%@NL@%
  9256. Reading from files%@BO:   17e67@%%@NL@%
  9257. readonly switch%@BO:   7225b@%%@NL@%
  9258. realtabs switch%@BO:   38064@%%@BO:   38b68@%%@BO:   7225b@%%@NL@%
  9259. Record function%@BO:   2d29c@%%@BO:   60c4c@%%@NL@%
  9260. Record pseudo file%@BO:   1406a@%%@NL@%
  9261. Recording a macro%@BO:   2d29c@%%@NL@%
  9262. RECORDVALUE macro%@BO:   2d4c0@%%@NL@%
  9263. Redoing a command%@BO:    9a45@%%@NL@%
  9264. Refresh function%@BO:   128e1@%%@BO:   60c4c@%%@NL@%
  9265. Regular expressions%@NL@%
  9266.      defined%@BO:   20760@%%@NL@%
  9267.      M 1.0 syntax%@BO:   20eeb@%%@BO:   24293@%%@NL@%
  9268.      predefined%@BO:   2885d@%%@NL@%
  9269.      searching%@BO:   1a2e0@%%@BO:   208bc@%%@NL@%
  9270.      special characters and%@BO:   21754@%%@BO:   2473c@%%@NL@%
  9271.      tagged%@BO:   231bc@%%@BO:   23b94@%%@BO:   27441@%%@BO:   27df8@%%@NL@%
  9272.      UNIX syntax%@BO:   20eeb@%%@NL@%
  9273. Reinitializing, TOOLS.INI%@BO:   3b6af@%%@NL@%
  9274. RemoveFile function%@BO:   5be9e@%%@NL@%
  9275. Repeat function%@BO:   60c4c@%%@NL@%
  9276. Repeating%@NL@%
  9277.      cursor-movement arguments%@BO:   110d1@%%@NL@%
  9278.      on-screen arguments%@BO:   110d1@%%@NL@%
  9279.      text arguments%@BO:    f570@%%@NL@%
  9280. Replace function%@BO:   1b205@%%@BO:   5c466@%%@BO:   60c4c@%%@NL@%
  9281. Replacing%@NL@%
  9282.      forward%@BO:   19804@%%@BO:   1b205@%%@NL@%
  9283.      overtype mode%@BO:    85e5@%%@NL@%
  9284.      repeated%@BO:   26c13@%%@NL@%
  9285.      search and replace%@BO:   197b4@%%@NL@%
  9286. Restcur function%@BO:   19402@%%@BO:   2f9b5@%%@BO:   60c4c@%%@NL@%
  9287. Right function%@BO:   15095@%%@BO:   60c4c@%%@NL@%
  9288. rmargin switch%@BO:   7225b@%%@NL@%
  9289. %@NL@%
  9290. %@2@%%@AB@%S%@AE@%%@EH@%%@NL@%
  9291. ───────────────────────────────────────────────────────────────────────────%@NL@%
  9292. %@NL@%
  9293. Saveall function%@BO:   60c4c@%%@NL@%
  9294. Savecur function%@BO:   19402@%%@BO:   2ade8@%%@BO:   2f9b5@%%@BO:   60c4c@%%@NL@%
  9295. savescreen switch%@BO:   7225b@%%@NL@%
  9296. Saving%@NL@%
  9297.      cursor position%@BO:   19402@%%@NL@%
  9298.      exiting, without%@BO:   128e1@%%@NL@%
  9299. Screen%@NL@%
  9300.      height%@BO:   3a3f0@%%@NL@%
  9301.      setting colors%@NL@%
  9302.           background and foreground%@BO:   35acc@%%@NL@%
  9303.           error messages%@BO:   368ed@%%@NL@%
  9304.           foreground and background%@BO:   35acc@%%@NL@%
  9305.           in TOOLS.INI file[TOOLS.INI]%@BO:   3ce83@%%@NL@%
  9306.           status line%@BO:   368ed@%%@NL@%
  9307.           text%@BO:   368ed@%%@NL@%
  9308.           user-selected text%@BO:   368ed@%%@NL@%
  9309.      windows%@BO:   1ebfe@%%@NL@%
  9310. Scrolling%@NL@%
  9311.      control%@BO:   1527e@%%@NL@%
  9312.      controlling with switches%@BO:   356ce@%%@NL@%
  9313.      %@AI@%See also%@AE@% Switches%@NL@%
  9314.      direction keys, using%@BO:   1503c@%%@NL@%
  9315.      horizontal%@BO:   1503c@%%@NL@%
  9316.      page%@BO:   155e1@%%@NL@%
  9317.      vertical%@BO:   1503c@%%@NL@%
  9318.      window down%@BO:   60c4c@%%@NL@%
  9319.      window up%@BO:   60c4c@%%@NL@%
  9320. Sdelete function%@BO:   2f5d4@%%@BO:   60c4c@%%@NL@%
  9321. Search-and-Replace functions%@BO:   197b4@%%@BO:   1b205@%%@NL@%
  9322. Searchall function%@BO:   1a791@%%@BO:   60c4c@%%@NL@%
  9323. Searching a series of files%@BO:   1ad57@%%@NL@%
  9324. Searching%@NL@%
  9325.      forward%@BO:    a3e8@%%@BO:   19804@%%@BO:   1a2e0@%%@NL@%
  9326.      patterns, for%@BO:   1a2e0@%%@NL@%
  9327.      regular expressions, with [regular expressions]%@BO:   208bc@%%@NL@%
  9328.      repeated%@BO:    aa58@%%@BO:   26c13@%%@NL@%
  9329. searchwrap switch%@BO:   7225b@%%@NL@%
  9330. selcolor switch%@BO:   368ed@%%@BO:   7225b@%%@NL@%
  9331. Setfile function%@BO:   1356e@%%@BO:   1f360@%%@BO:   60c4c@%%@NL@%
  9332. SetKey function%@BO:   5cc35@%%@NL@%
  9333. Setting screen colors%@NL@%
  9334.      background and foreground%@BO:   35acc@%%@NL@%
  9335.      error messages%@BO:   368ed@%%@NL@%
  9336.      foreground and background%@BO:   35a6f@%%@NL@%
  9337.      highlighted text%@BO:   368ed@%%@NL@%
  9338.      in TOOLS.INI file[TOOLS.INI]%@BO:   3ce83@%%@NL@%
  9339.      status line%@BO:   368ed@%%@NL@%
  9340.      text%@BO:   368ed@%%@NL@%
  9341.      user-selected text%@BO:   368ed@%%@NL@%
  9342. Setting up%@NL@%
  9343.      editor%@BO:    7792@%%@NL@%
  9344.      Help%@BO:   3eb8b@%%@NL@%
  9345. Setwindow function%@BO:   60c4c@%%@NL@%
  9346. Shell function%@BO:   135c3@%%@BO:   60c4c@%%@NL@%
  9347. Short name, in extensions%@BO:   13b58@%%@BO:   46722@%%@NL@%
  9348. shortnames switch%@BO:   7225b@%%@NL@%
  9349. Sinsert function%@BO:   60c4c@%%@NL@%
  9350. SKEL.C file%@BO:   4055d@%%@NL@%
  9351. SKEL.DEF file%@BO:   4b6c7@%%@NL@%
  9352. snow switch%@BO:   7225b@%%@NL@%
  9353. softcr switch%@BO:   7225b@%%@NL@%
  9354. stacolor switch%@BO:   35c03@%%@BO:   368ed@%%@BO:   7225b@%%@NL@%
  9355. Start-up, execution of commands at%@BO:   3e9db@%%@NL@%
  9356. Starting%@NL@%
  9357.      editor%@BO:    7746@%%@BO:    bc2e@%%@NL@%
  9358.      Help%@BO:    b45a@%%@NL@%
  9359. Status line, fields, described%@BO:    c7e2@%%@NL@%
  9360. Stream mode%@BO:   10bc4@%%@NL@%
  9361. STREAMARG, argument type%@BO:   48c88@%%@NL@%
  9362. STREAMARG, cmdTable flag%@BO:   435cc@%%@NL@%
  9363. streamarg%@NL@%
  9364.      argument type%@BO:   11a23@%%@NL@%
  9365. SwiDesc structure types%@BO:   421fa@%%@BO:   42880@%%@NL@%
  9366. swiTable%@BO:   41f4a@%%@NL@%
  9367. Switches%@NL@%
  9368.      askexit%@BO:   7225b@%%@NL@%
  9369.      askrtn%@BO:   7225b@%%@NL@%
  9370.      autosave%@BO:   7225b@%%@NL@%
  9371.      backup%@BO:   7225b@%%@NL@%
  9372.      case%@BO:   7225b@%%@NL@%
  9373.      defined%@BO:   33a2a@%%@NL@%
  9374.      displaycursor%@BO:   7225b@%%@NL@%
  9375.      editreadonly%@BO:   7225b@%%@NL@%
  9376.      entab%@BO:   38b68@%%@BO:   7225b@%%@NL@%
  9377.      enterinsmode%@BO:   7225b@%%@NL@%
  9378.      errcolor%@BO:   35c03@%%@BO:   368ed@%%@BO:   7225b@%%@NL@%
  9379.      errprompt%@BO:   7225b@%%@NL@%
  9380.      extmake%@BO:   7225b@%%@NL@%
  9381.      fgcolor%@BO:   35acc@%%@BO:   7225b@%%@NL@%
  9382.      filetab%@BO:   38b68@%%@BO:   7225b@%%@NL@%
  9383.      height%@BO:   7225b@%%@NL@%
  9384.      helpboldcolor%@BO:   7225b@%%@NL@%
  9385.      helpfiles%@BO:   7225b@%%@NL@%
  9386.      helpitalcolor%@BO:   7225b@%%@NL@%
  9387.      helpundcolor%@BO:   7225b@%%@NL@%
  9388.      helpwarncolor%@BO:   7225b@%%@NL@%
  9389.      helpwindow%@BO:   3756d@%%@BO:   7225b@%%@NL@%
  9390.      hgcolor%@BO:   35c03@%%@BO:   368ed@%%@BO:   7225b@%%@NL@%
  9391.      hike%@BO:   7225b@%%@NL@%
  9392.      hscroll%@BO:   3596c@%%@BO:   7225b@%%@NL@%
  9393.      in extensions%@BO:   41eff@%%@NL@%
  9394.      infcolor%@BO:   35c03@%%@BO:   368ed@%%@BO:   7225b@%%@NL@%
  9395.      keyboard%@BO:   7225b@%%@NL@%
  9396.      load%@BO:   40dcc@%%@BO:   7225b@%%@NL@%
  9397.      markfile%@BO:   192a8@%%@BO:   7225b@%%@NL@%
  9398.      noise%@BO:   7225b@%%@NL@%
  9399.      printcmd%@BO:   7225b@%%@NL@%
  9400.      readonly%@BO:   7225b@%%@NL@%
  9401.      realtabs%@BO:   38064@%%@BO:   38b68@%%@BO:   7225b@%%@NL@%
  9402.      rmargin%@BO:   7225b@%%@NL@%
  9403.      savescreen%@BO:   7225b@%%@NL@%
  9404.      scrolling and%@BO:   356ce@%%@NL@%
  9405.      searchwrap%@BO:   7225b@%%@NL@%
  9406.      selcolor%@BO:   368ed@%%@BO:   7225b@%%@NL@%
  9407.      setting screen color and%@BO:   35acc@%%@NL@%
  9408.      shortnames%@BO:   7225b@%%@NL@%
  9409.      snow%@BO:   7225b@%%@NL@%
  9410.      softcr%@BO:   7225b@%%@NL@%
  9411.      special syntax for%@BO:   3a7a5@%%@NL@%
  9412.      stacolor%@BO:   35c03@%%@BO:   368ed@%%@BO:   7225b@%%@NL@%
  9413.      tabalign%@BO:   38b68@%%@BO:   7225b@%%@NL@%
  9414.      tabdisp%@BO:   38718@%%@BO:   7225b@%%@NL@%
  9415.      tabstops%@BO:   38b68@%%@BO:   7225b@%%@NL@%
  9416.      tmpsav%@BO:   7225b@%%@NL@%
  9417.      traildisp%@BO:   3a1ab@%%@BO:   7225b@%%@NL@%
  9418.      trailspace%@BO:   39e2f@%%@BO:   7225b@%%@NL@%
  9419.      undelcount%@BO:   7225b@%%@NL@%
  9420.      undocount%@BO:    964e@%%@BO:   7225b@%%@NL@%
  9421.      unixre%@BO:   7225b@%%@NL@%
  9422.      viewonly%@BO:   7225b@%%@NL@%
  9423.      vscroll%@BO:   356ce@%%@BO:   7225b@%%@NL@%
  9424.      wdcolor%@BO:   368ed@%%@BO:   7225b@%%@NL@%
  9425.      width%@BO:   7225b@%%@NL@%
  9426.      wordwrap%@BO:   7225b@%%@NL@%
  9427. System requirements%@BO:    4be3@%%@NL@%
  9428. System-specific initialization%@BO:   3ce83@%%@NL@%
  9429. %@NL@%
  9430. %@2@%%@AB@%T%@AE@%%@EH@%%@NL@%
  9431. ───────────────────────────────────────────────────────────────────────────%@NL@%
  9432. %@NL@%
  9433. Tab function%@BO:   60c4c@%%@NL@%
  9434. tabalign switch%@BO:   38b68@%%@BO:   7225b@%%@NL@%
  9435. tabdisp switch%@BO:   38718@%%@BO:   7225b@%%@NL@%
  9436. Tables%@NL@%
  9437.      cmdTable%@BO:   40dcc@%%@BO:   42aa3@%%@NL@%
  9438.      swiTable%@BO:   41f4a@%%@NL@%
  9439. Tabs%@NL@%
  9440.      meaning within editor%@BO:   38b68@%%@NL@%
  9441.      reading from files%@BO:   38b68@%%@NL@%
  9442.      setting with switches%@BO:   38afc@%%@NL@%
  9443.      writing to disk%@BO:   38b68@%%@NL@%
  9444. tabstops switch%@BO:   38b68@%%@BO:   7225b@%%@NL@%
  9445. Tagged expressions%@BO:   231bc@%%@BO:   23b94@%%@BO:   27441@%%@BO:   27df8@%%@NL@%
  9446. Tags%@BO:   3c8ac@%%@NL@%
  9447. Tell function%@BO:   2b9eb@%%@BO:   2d034@%%@BO:   60c4c@%%@NL@%
  9448. Terminating sessions. %@AI@%See%@AE@% Exiting%@NL@%
  9449. Text arguments, editing%@BO:    f20b@%%@NL@%
  9450. Text switches%@BO:   3421c@%%@BO:   3a7a5@%%@NL@%
  9451. Text type arguments%@NL@%
  9452.      defined%@BO:    e83e@%%@NL@%
  9453.      markarg%@BO:    fa9b@%%@NL@%
  9454.      numarg%@BO:    e9d0@%%@BO:   17134@%%@NL@%
  9455.      textarg%@BO:    fec9@%%@NL@%
  9456. TEXTARG, argument type%@BO:   47d36@%%@NL@%
  9457. TEXTARG, cmdTable flag%@BO:   435cc@%%@NL@%
  9458. tmpsav switch%@BO:   7225b@%%@NL@%
  9459. TOOLS.INI file%@NL@%
  9460.      comments%@BO:   3dbb2@%%@NL@%
  9461.      defined%@BO:   33be7@%%@NL@%
  9462.      dividing into sections%@BO:   3c902@%%@NL@%
  9463.      line continuation%@BO:   3dea7@%%@NL@%
  9464.      reinitializing%@BO:   3b6af@%%@NL@%
  9465.      sample%@BO:   3b535@%%@NL@%
  9466.      structure%@BO:   3c086@%%@NL@%
  9467.      using tags in%@BO:   3c15b@%%@BO:   3c902@%%@NL@%
  9468. Top of file, moving to%@BO:   15b0c@%%@NL@%
  9469. traildisp switch%@BO:   3a1ab@%%@BO:   7225b@%%@NL@%
  9470. Trailing space%@BO:   39cc2@%%@NL@%
  9471. trailspace switch%@BO:   39e2f@%%@BO:   7225b@%%@NL@%
  9472. Translate. %@AI@%See%@AE@% Search-and-Replace functions%@NL@%
  9473. %@NL@%
  9474. %@2@%%@AB@%U%@AE@%%@EH@%%@NL@%
  9475. ───────────────────────────────────────────────────────────────────────────%@NL@%
  9476. %@NL@%
  9477. Unassigned function%@BO:   2bc22@%%@NL@%
  9478. UNDEL.EXE file%@BO:   76895@%%@NL@%
  9479. undelcount switch%@BO:   7225b@%%@NL@%
  9480. Undo function%@BO:    964e@%%@BO:   60c4c@%%@NL@%
  9481. undocount switch%@BO:    964e@%%@BO:   7225b@%%@NL@%
  9482. UNIX syntax, regular expression%@BO:   213b3@%%@NL@%
  9483. unixre switch%@BO:   7225b@%%@NL@%
  9484. Up function%@BO:   15095@%%@BO:   60c4c@%%@NL@%
  9485. %@NL@%
  9486. %@2@%%@AB@%V%@AE@%%@EH@%%@NL@%
  9487. ───────────────────────────────────────────────────────────────────────────%@NL@%
  9488. %@NL@%
  9489. Vertical scrolling%@BO:   356ce@%%@NL@%
  9490. Video modes supported%@BO:   3a514@%%@NL@%
  9491. Video-specific initialization%@BO:   3ce83@%%@NL@%
  9492. Viewing%@NL@%
  9493.      current assignments%@BO:   1406a@%%@NL@%
  9494.      function assignments%@BO:   2b13c@%%@NL@%
  9495. viewonly switch%@BO:   7225b@%%@NL@%
  9496. vscroll switch%@BO:   356ce@%%@BO:   7225b@%%@NL@%
  9497. %@NL@%
  9498. %@2@%%@AB@%W%@AE@%%@EH@%%@NL@%
  9499. ───────────────────────────────────────────────────────────────────────────%@NL@%
  9500. %@NL@%
  9501. wdcolor switch%@BO:   368ed@%%@BO:   7225b@%%@NL@%
  9502. Whenloaded function%@BO:   40dcc@%%@BO:   44776@%%@NL@%
  9503. width switch%@BO:   7225b@%%@NL@%
  9504. Wildcards%@NL@%
  9505.      DOS%@BO:    c693@%%@BO:   135c3@%%@NL@%
  9506.      regular expressions%@BO:   21940@%%@BO:   24908@%%@NL@%
  9507. Window function%@BO:   1eea0@%%@BO:   60c4c@%%@NL@%
  9508. WINDOWFUNC, cmdTable flag%@BO:   435cc@%%@NL@%
  9509. Windows%@NL@%
  9510.      closing%@BO:   1f027@%%@NL@%
  9511.      creating%@BO:   1f027@%%@NL@%
  9512.      moving%@NL@%
  9513.           between%@BO:   1eea0@%%@NL@%
  9514.           down%@BO:   60c4c@%%@NL@%
  9515.           up%@BO:   60c4c@%%@NL@%
  9516. Word, moving forward by%@BO:   15d4c@%%@NL@%
  9517. Word%@NL@%
  9518.      moving backward by%@BO:   15d4c@%%@NL@%
  9519. wordwrap switch%@BO:   7225b@%%@NL@%
  9520. %@NL@%
  9521. %@NL@%
  9522.