home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS 1992 June / SIMTEL_0692.cdr / msdos / info / dostips3.arc / DOSPMPTS.TXT next >
Text File  |  1985-11-24  |  46KB  |  829 lines

  1.                          Driving with ANSI.SYS
  2.             (PC Magazine Vol 3 No 7 Apr 17, 1984/S. Smith)
  3.  
  4.      A program in DOS 2.0 called ANSI.SYS will give users of the PC 
  5. extended control over keyboard and display functions, provided you can 
  6. figure out how to use it.
  7.      ANSI.SYS is a loadable device driver that becomes part of DOS and 
  8. remains in memory with COMMAND.COM.  Loadable drivers are a feature of 
  9. DOS added with version 2.0.  They allow you to change the software that 
  10. controls your PC's peripherals, for example the console and disk 
  11. drives, and to add support for new devices, such as RAMdisk or mouse.  
  12. ANSI.SYS changes the console control software, the programs in DOS that 
  13. interpret the codes sent from your keyboard and place characters on 
  14. your display.  It allows an application program to alter the input that 
  15. will result from given keys and to change the attributes (color, 
  16. intensity, etc.) and location (row and column) of output to the screen.
  17.      These functions are provided by a specific set of control codes 
  18. sent to the console as part of an output string.  In other words, some 
  19. portions of a program's output appear on your screen, but other parts 
  20. are intercepted by the device driver, ANSI.SYS, and produce the altered 
  21. functions you want.  It is important, of course, that the commands 
  22. don't appear in normal output.  To ensure that this doesn't happen, the 
  23. control codes begin with ASCII 27, the data link escape code.  By 
  24. convention, this character should never appear in an output string 
  25. unless the program intends to send commands to a peripheral or its 
  26. device driver.  Many devices, for example the IBM printer, respond to 
  27. the escape character by interpreting the next several characters as a 
  28. command instead of as data.  The standard console handler provided in 
  29. DOS does not respond to escape codes, but ANSI.SYS does.
  30.      When designing ANSI.SYS, IBM selected a set of commands adopted by 
  31. the New York-based American National Standards Institute or ANSI -- 
  32. hence the driver's name.  The driver's incorporation of three ANSI 
  33. standards permits the use of the many programs that are designed with 
  34. the standards in mind (see Figure below).  With the new console device 
  35. driver installed, the PC can use these programs.  ANSI.SYS can also be 
  36. used to develop programs for the PC or other systems with terminals 
  37. that meet the standard.  It is no longer necessary to include 
  38. hardware-specific commands to control the display or cursor location.  
  39. Program outputs can achieve the same results on any conforming 
  40. hardware.
  41.      Unfortunately, the program output that is easiest for most of us 
  42. to produce, BASIC print statements, does not pass through the DOS 
  43. console driver and therefore bypasses ANSI.SYS.  BASIC contains its own 
  44. console handler which does not respond to escape commands.  It is 
  45. possible for BASIC to write strings containing the escape code to disk 
  46. files and to send these to the console using the DOS TYPE or COPY 
  47. commands.  A later article will explore this approach for both the 
  48. console and various printers in considerable depth.  Here we'll see how 
  49. other programs can use ANSI.SYS to control the display and reassign 
  50. keys with DOS.
  51.      DOS provides a simple way to laod device drivers.  First, the file 
  52. containing the driver software must be on the disk you will use to load 
  53. DOS.  To use the procedure given here, copy ANSI.SYS from the DOS disk 
  54. to your working disk. Second, you must create a file called CONFIG.SYS 
  55. that contains the following line:
  56.           DEVICE = ANSI.SYS
  57. DOS 2.0 looks for this file whenever it is started and will install any 
  58. device driver it specifies.  The easiest way to create CONFIG.SYS is to 
  59. enter the following commands after you start your system:
  60.           COPY CON:CONFIG.SYS
  61.           DEVICE = ANSI.SYS
  62. After entering these lines, press F6 or Ctrl-Z and the Return key.  Now 
  63. restart DOS, and ANSI.SYS will have been installed.
  64.      At this point, your PC can use software written for terminals that 
  65. use the ANSI standards.  Programmers who are proficient in Pascal or 
  66. assembly language can also write code that uses the extended keyboard 
  67. and display control features.  The rest of us are not left out, 
  68. however, because there are still some clever things that ANSI.SYS can 
  69. do using DOS commands alone.  The trick is to find a way to generate 
  70. the escape command.
  71.      Generating an escape is not as easy as you might think.  If you 
  72. press the Esc key in either DOS or EDLIN, your current line is deleted 
  73. (although not removed from the display), and the system waits for you 
  74. to reenter it.  Most other editors use the escape key in combinations 
  75. to provide additional commands.  They will not allow you to embed an 
  76. ASCII 27 in your files.  There is, however, a DOS command that allows 
  77. you to send escape sequences directly to the console.
  78.      The command is PROMPT, a little gem tucked away in Chapter 10 of 
  79. the DOS manual under "Advanced Commands."  Its purpose is to change the 
  80. symbol that DOS uses to tell you that it is waiting for input, but it 
  81. can do quite a lot more.  The DOS manual states, "All text on the
  82. PROMPT command line is taken by DOS to be the new system prompt."
  83. If you enter:
  84.           PROMPT READY
  85. DOS will no longer signal you with A>, but will use READY- instead.  
  86. You can create any prompt you want by changing the text that allows the 
  87. PROMPT command.
  88.      Not all that text is taken literally, however.  Some of it forms 
  89. what are called "metastrings," groups of characters that take on 
  90. special meaning.  For example, if the PROMPT command includes the 
  91. characters $t, DOS will not use them in the system prompt.  Instead, it 
  92. will replace them with the current time.  Try entering PROMPT $t to see 
  93. the effect.  You will notice that entering PROMPT alone brings back A>. 
  94.      The next installment of this column will offer an expanded list of 
  95. metastrings that can be used in combination with the PROMPT command.  
  96. The most important of these is the metastring $e which generates an 
  97. ASCII escape character and which will prove to be the key to using 
  98. ANSI.SYS.
  99.  
  100. Figure:  ANSI standard console command codes implemented by IBM.
  101. ANSI.SYS does not display these strings, but rather takes the action
  102. indicated under "Function."
  103.  
  104. Command                                            Escape code
  105.   name                      Function                 sequence
  106. -------   --------------------------------------   ------------
  107.   CUP     Both these commands move the cursor      Esc [1#,c# H
  108.   HVP     to line 1# and column c#                 Esc [1#,c# f
  109.  
  110.   CUU     Move cursor up # lines                   Esc [# A
  111.   CUD     Move cursor down # lines                 Esc [# B
  112.   CUF     Move cursor forward # spaces             Esc [# C
  113.   CUB     Move cursor backward # spaces            Esc [# D
  114.  
  115.   SCP     Save the cursor position                 Esc [s
  116.   RCP     Return the cursor to the position it     Esc [u
  117.           had when the last SCP was sent
  118.  
  119.   DSR     Request console to send a CPR            Esc [6 n
  120.   CPR     Cursor is at line #1 and column #c       Esc [#1,#c R
  121.           (The CPR is received by a program as
  122.           if it had been entered at the keyboard.)
  123.  
  124.   ED      Clear screen and home cursor             Esc [2J
  125.   EL      Clear line from cursor to end (ANSI      Esc [k
  126.           specifies more erase options, but IBM
  127.           does not support them.)
  128.  
  129.   SGR     Set display attributes where # is        Esc [#;...;#m
  130.             0 for normal display
  131.             1 for bold (high intensity)
  132.             4 underline
  133.             5 blink
  134.             7 reverse video
  135.             8 nondisplayed (invisible)
  136.           (Options for color are in the DOS manual)
  137.  
  138.   SM      Put the screen in the indicated mode     Esc [=#h
  139.           where # is chose from
  140.             0 for 40x25 black and white
  141.             1 for 40x25 color
  142.             2 for 80x25 black and white
  143.             3 for 80x25 color
  144.             4 for 320x200 color graphics
  145.             5 for 320x200 black and white
  146.             6 for 640x200 black and white
  147.             7 to wrap at end of line
  148.  
  149.   RM      Reset the modes described above          Esc [=# 1
  150.  
  151. -----------------------------------------------------------------
  152.                            Metastring Magic
  153.              (PC Magazine Vol 3 No 8 May 1, 1984/S. Smith)
  154.  
  155.      PROMPT is one command in DOS 2.0 that permits you to enter an 
  156. escape character without deleting your current line.  The escape is 
  157. essential for transforming ordinary text characters into commands to a 
  158. peripheral or its device driver to, for instance, control the display 
  159. or reassign keys.  PROMPT accomplishes this feat with the metastring $e 
  160. (Figure 1).  When inserted in a PROMPT statement, this metastring, with 
  161. its ability to generate an ASCII escape character, unlocks the power of 
  162. ANSI.SYS.
  163.      The keyboard reassignment example from Chapter 13 of the DOS 
  164. manual illustrates the procedure.  It suggests that we send ANSI.SYS an 
  165. escape followed by the string {0;68;"dir";13.  To do this when the 
  166. system prompt A> appears, type:
  167.           PROMPT $e[0;68;"DIR";13p
  168. and press Return.  You'll discover that the system no longer gives you 
  169. any prompt at all.  This is because the entire string has been used as 
  170. a command by ANSI.SYS.  Entering PROMPT with nothing following will 
  171. bring back the A>, but there has been another change.  If you press 
  172. function key F10, you'll find that it now invokes the DOS directory 
  173. command.  PROMPT has sent a command to ANSI.SYS to effect the 
  174. reassignment.
  175.      Each of the three statements that follow is a valid form for a 
  176. keyboard reassignment:
  177.           Esc [#;#;. . .;#p
  178.           Esc [#;"string"p
  179.           Esc [#;#;"string";#;. . .;#p
  180. The first number sign (#) is the keyboard code of the key to be 
  181. reassigned.  The remaining #'s and strings are the ASCII characters to 
  182. be assigned to the key.  If the first # is zero, however, the second # 
  183. becomes part of the keyboard code, because two-digit extended ASCII 
  184. codes are being used.  Keyboard codes are listed in Figure 2.  With 
  185. them, we could produce a series of PROMPT commands such as those in 
  186. Figure 3.  They can be entered one at a time or placed in a batch file 
  187. called ALTKEYS.BAT.  Invoking the ALTKEYS file will now make the 
  188. following assignments to these combinations of the Alt key and the 
  189. function keys:
  190.           Alt-F1    Lists the directory of drive A
  191.           Alt-F2    Lists the directory of drive B
  192.           Alt-F3    Clears the screen
  193.           Alt-F4    Shows the current disk volume
  194.           Alt-F5    Turns Break function on (default setting)
  195.           Alt-F6    Turns Break function off
  196.           Alt-F7    Turns Verify mode on
  197.           Alt-F8    Turns Verify mode off (default setting)
  198.           Alt-F9    Enters Reverse Video mode
  199.           Alt-F10   Restores normal while on black display
  200. Suddenly, 10 new functions keys are available under DOS, and you didn't 
  201. have to buy any new software.  Other reassignments are possible.  Just 
  202. use PROMPT as though it were a reassignment command and substitute $e 
  203. where Chapter 13 directs you to use escape.
  204.      Now that the link between PROMPT and ANSI.SYS has been
  205. established, the system prompt can be used to perform some clever 
  206. operations.  The next example illustrates control of the cursor 
  207. position.  Try entering:
  208.           PROMPT $e[s$e[1;1H$e[k$e[60C$t$h$h$h$e[u$n$g
  209. This sequence saves the cursor position (Esc[s), moves the cursor to 
  210. the first row and column (Esc [1;1H), clears the row (Esc [k), moves 
  211. the cursor to the sixtieth column (Esc [60C), displays the current time 
  212. ($t), backspaces three times to erase the hundredths of seconds 
  213. ($h$h$h), returns the cursor to its saved position (Esc [u), and gives 
  214. the standard prompt of the default driver ($n$g).  You might call this 
  215. the poor man's clock display.
  216.      PROMPT can also control the display format or attributes.  You can 
  217. use it like the MODE command to select color or black-and-white 
  218. display, 80- or 40-column width, and graphics or character displays.  
  219. In the following examples, it is used to put the display in Reverse 
  220. Video mode and return it to normal.  Enter:
  221.           PROMPT $e[7m$e[2J$n$g
  222. This sequence begins Reverse Video mode (Esc [7m), clears the screen to 
  223. reverse all cells (Esc [2J), and then presents the standard prompt.  
  224. Entering:
  225.           PROMPT $e[0m$e[2J$n$g
  226. returns the screen to normal white on black.  These commands can be 
  227. placed in separate batch files.
  228.      The examples I have included here are only some of the
  229. possibilities.  I hope they show you that DOS is more than the sum or 
  230. its parts.  ANSI.SYS and PROMPT are useful by themselves, but together 
  231. they can really expand your control over your computer.  ANSI.SYS will 
  232. let you reassign any of the keyboard codes defined by DOS, give you 
  233. control over the location and movement of the cursor, and let you 
  234. change the attributes of your display.  PROMPT lets you change the 
  235. signal DOS uses to show that it is ready to accept a command.  By 
  236. including metastrings, it allows you to show the time, date, default 
  237. disk drive, and so forth in the prompt.  Most significantly, PROMPT has 
  238. a metastring for the ASCII escape code that allows it to include ANSI 
  239. standard control sequences.  When ANSI.SYS is installed, PROMPT can use 
  240. its features to enhance the display, for example, with the poor man's 
  241. clock.  PROMPT can also serve as a command generator for the console 
  242. driver, providing the direction to reassign keys and alter display 
  243. formats.  IBM has certainly added new capabilities to DOS 2.0; it's 
  244. just a matter of figuring out how to use them.
  245.  
  246. Figure 1:  A listing of metastrings.  DOS takes everything that follows
  247. a PROMPT command to be the new prompt, but it does not take all 
  248. characters literally.  The characters in these metastrings are 
  249. automatically redefined.
  250.  
  251. 1. The values generated by these metastrings change during the 
  252. operation of your programs and cannot be known in advance.
  253.  
  254. Metastring   Will be replaced by
  255. ----------   -------------------
  256. $d           the system date
  257. $t           the system time
  258. $n           the default drive
  259. $p           a directory of the default drive 
  260. $v           the DOS version number
  261.  
  262. 2. These metastrings generate characters that would otherwise be given 
  263. a different interpretation by DOS when they are entered.
  264.  
  265. Metastring   Will be replaced by
  266. ----------   -------------------
  267. $h           a backspace over the previous character
  268. $$           a dollar sign "$"
  269. $g           the ">" character
  270. $l           the "<" character
  271. $b           the "|" character
  272. $q           an equals sign "="
  273. $-           a carriage return and linefeed
  274. $e           an escape, ASCII 27
  275.  
  276. Figure 2:  A listing of keyboard codes.  These codes, generated by the 
  277. IBM PC keyboard and sent to the console device driver, are used in 
  278. commands to ANSI.SYS to indicate which keys are to be redefined.
  279.  
  280. Key       Code      Key           Code       Key        Code 
  281. --------------      ------------------       ---------------
  282. Null        3       F1             59        Ctrl F1     94
  283. Back Tab   15       F2             60        Ctrl F2     95
  284. Alt Q      16       F3             61        Ctrl F3     96
  285. Alt W      17       F4             62        Ctrl F4     97
  286. Alt E      18       F5             63        Ctrl F5     98
  287. Alt R      19       F6             64        Ctrl F6     99
  288. Alt T      20       F7             65        Ctrl F7    100
  289. Alt Y      21       F8             66        Ctrl F8    101
  290. Alt U      22       F9             67        Ctrl F9    102
  291. Alt I      23       F10            68        Ctrl F10   103
  292. Alt O      24       HOME           71        Alt F1     104
  293. Alt P      25       Cursor Up      72        Alt F2     105
  294. Alt A      30       Page Up        73        Alt F3     106
  295. Alt S      31       Cursor Left    75        Alt F4     107
  296. Alt D      32       Cursor Right   77        Alt F5     108
  297. Alt F      33       End            79        Alt F6     109
  298. Alt G      34       Cursor Down    80        Alt F7     110
  299. Alt H      35       Page Down      81        Alt F8     111
  300. Alt J      36       Ins            82        Alt F9     112
  301. Alt K      37       Del            83        Alt F10    113
  302. Alt L      38       Ctrl PrtSc     114       Shift F1    59
  303. Alt Z      44       Ctrl Cursor              Shift F2    60
  304. Alt X      45         Left         115       Shift F3    61
  305. Alt C      46       Ctrl Cursor              Shift F4    62
  306. Alt V      47         Right        116       Shift F5    63
  307. Alt B      48       Ctrl End       117       Shift F6    64
  308. Alt N      49       Ctrl PgDn      118       Shift F7    65
  309. Alt M      50       Ctrl Home      119       Shift F8    66
  310. Alt 1     120       Ctrl PgUp      132       Shift F9    67
  311. Alt 2     121       Alt =          131       Shift F10   68
  312. Alt 3     122       Alt -          130
  313. Alt 4     123       Alt 5          124
  314. Alt 6     125       Alt 7          126
  315. Alt 8     127       Alt 9          128
  316. Alt 0     129
  317.  
  318. Figure 3:  PROMPT commands for defining combinations of the Alt key and
  319. various function keys.
  320. PROMPT $e[0;104;"DIR A:";13p
  321. PROMPT $e[0;105;"DIR B:";13p
  322. PROMPT $e[0;106;"CLS";13p
  323. PROMPT $e[0;107;"VOL";13p
  324. PROMPT $e[0;108;"BREAK ON";13p
  325. PROMPT $e[0;109;"BREAK OFF";13p
  326. PROMPT $e[0;110;"VERIFY ON";13p
  327. PROMPT $e[0;111;"VERIFY OFF";13p
  328. PROMPT $e[0;112;"PROMPT $$e[7m$$e[2J";13;"PROMPT";13p
  329. PROMPT $e[0;113;"PROMPT $$e[0m$$e[2J";13;"PROMPT";13p
  330. PROMPT
  331.  
  332. -----------------------------------------------------------------
  333.         The MS-DOS Prompt Command Has More Power Than You Think
  334.               (Microsystems November 1984 by C. Petzold)
  335.  
  336.      We usually think of using a disk operating system rathen than 
  337. programming it.  But DOS offers many powerful programming tools.  DOS 
  338. 2.0 and later lets you:
  339.      - Display the time and date
  340.      - Display the current directory path (for tree-structured
  341.        directories)
  342.      - Put this information anywhere on the screen
  343.      - Change the color/graphics display mode and color (or monochrome
  344.        display attributes)
  345.      - Redefine the keyboard
  346. It's all a matter of understanding PROMPT, and DOS.
  347.      The PROMPT command is an internal rather than an external command.  
  348. The general format of the command is:
  349.      PROMPT prompt-text
  350. where prompt-text stands for a wide range of commands.  Executing this 
  351. command in DOS makes the text following the word PROMPT the new system 
  352. prompt, until you change it or boot again.  Only one blank between 
  353. PROMPT and the prompt-text will become part of the prompt, but any 
  354. number of trailing blanks following the prompt-text (before you press 
  355. Enter) are included.
  356.      The word PROMPT, with no prompt-text following, resets the system 
  357. prompt to the default drive and right angle bracket.
  358.      How long can the new prompt be?  Normal command processing accepts 
  359. strings of 128 characters, including the final Return.  This rule would 
  360. allow a prompt of 120 characters (128 minus 6 for the word PROMPT, 1 
  361. for the space after the word PROMPT, and 1 for the final Return.  It is 
  362. possible to create a longer prompt if the command is a line in a batch 
  363. file.
  364.      The prompt becomes part of the command processor's environment.  
  365. The environment memory (and hence any prompt that you set) can be 
  366. viewed with the SET command if you include no parameters.  If you have 
  367. executed any programs that remain in memory (such as MODE, PRINT, 
  368. ASSIGN, or GRAPHICS), you may have limited your environment storage.  
  369. Using a long prompt may prevent you from specifying a long path name.  
  370. Usually, the message OUT OF ENVIRONMENT SPACE results, but a crash 
  371. could also occur when attempting to set long prompts.
  372.      Certain characters cannot be used directly in prompt-text.  These 
  373. characters are the angle brackets, `<' and `>', the equal sign, `=', 
  374. and the vertical bar, `|'.  DOS uses these characters for other things, 
  375. such as redirection of standard input and output.  The equal sign 
  376. works if it is not the first character of the prompt.  Spaces, commas, 
  377. semicolons, and equal signs are all ignored when they are the first 
  378. character of the string.
  379.      To use such characters in the prompt, you can define metastrings 
  380. to take their places.  These metastrings consist of a dollar sign, 
  381. followed by a letter or symbol.  The letter may be upper or lowercase.  
  382. The PROMPT metastrings are shown in Figure 1.  To use the right angle 
  383. bracket, for example, enter the metastring $G.  Thus, the command:
  384.           PROMPT Enter a DOS command--$G
  385. causes the prompt: ==>.  Since the dollar sign is used for these meta-
  386. strings, it takes two dollar signs to put one in a prompt display.
  387.      If you want to create a prompt that begins with a blank, comma or 
  388. semicolon, you must begin the string with a null character.  Null 
  389. characters are created by combining a dollar sign and any character not 
  390. used for any other metastring, such as X.  For a prompt that begins 
  391. and ends with three blanks, try:
  392.           PROMPT $X   System Prompt   $X
  393. Note the three spaces after the first $X and before the second.
  394.      For a noisy prompt, type Ctrl-G in the prompt-text.  It will 
  395. appear on the screen as ^G.  But instead of showing up when the prompt 
  396. is displayed, your PC will beep.  This beep can be used as a signal 
  397. that a long DOS job is done.
  398.      The second group of metastrings displays current information 
  399. about the system.  These allow you to show the current default drive 
  400. (the normal prompt), the current directory path (if you are using tree-
  401. structured directories), the date, time and version number.
  402.      The current directory path is what the CHDIR (of CD) command 
  403. produces without parameters; the version number is the text that the 
  404. VER command displays.  For instance, the command:
  405.           PROMPT $P$G
  406. will display:
  407.           A:\>
  408. if drive A: is your default and you are in the root directory. If you 
  409. are not in your root directory, then the directory path will be 
  410. displayed:
  411.           A:\LEVEL1\LEVEL2>
  412.      The above display gives you a constant visual reminder of the 
  413. current directory path, but the system must access the disk before 
  414. displaying a directory-path prompt.  This may cause a delay, depending 
  415. on how deeply embedded in subdirectories you are.  If your default 
  416. drive is a disk rather than the fixed disk, this frequent disk access 
  417. may be annoying.
  418.      Other metastrings position the cursor as part of the PROMPT.  The 
  419. cursor can be backspaced (with an erasure), or a carriage 
  420. return/linefeed can send the cursor to the beginning of the next line.
  421.      The $H metastring backspaces and deletes a character.  You may 
  422. want to combine this feature with the time display to get rid of the 
  423. hundredths-of-seconds.  For instance, the command:
  424.           PROMPT $T$H$H$H$G
  425. will produce the prompt:
  426.           10:52:30>
  427. Three more $H's will get rid of the seconds as well.
  428.      The metastring $__ is a carriage return/linefeed sequence.  The 
  429. new prompt is displayed up to the $__, and then the cursor drops to the 
  430. beginning of the next line, where anything after the $__ is displayed.  
  431. The command:
  432.           PROMPT OK$__
  433. displays the same prompt you get in BASIC -- the OK prompt -- and waits 
  434. for input on the next line.  This prompt may not be a wise choice since 
  435. it looks like BASIC, but you're still in DOS.  Similarly confusing 
  436. prompts should be avoided unless you have a special application for 
  437. them.
  438.      Finally, the $E metastring displays the ASCII Escape character 
  439. (Hex 1B).  Normally, this character shows up on the screen as a tiny 
  440. left arrow.  However, the ASCII Escape character, with the help of the 
  441. DOS ANSI.SYS file, opens up a whole world of options with PROMPT.
  442.      ANSI.SYS includes a series of video control routines that begin 
  443. with an Escape code.  Since ANSI.SYS assists DOS in driving the 
  444. display, it functions as a device driver.  Using ANSI.SYS with the 
  445. PROMPT command is simple.
  446.      ANSI.SYS is loaded from a CONFIG.SYS file when DOS is booted and 
  447. becomes a part of DOS.  You can create the necessary CONFIG.SYS file 
  448. with the COPY command.  Type:
  449.           copy con:config.sys
  450. press Enter, and they type:
  451.           device = ansi.sys
  452. and press Enter, F6 (or Ctrl-Z) and Enter again.
  453.      The boot disk must contain CONFIG.SYS and the ANSI.SYS file.  Now, 
  454. the $E metastring gives you the whole range of extended screen control 
  455. features.  ANSI.SYS can interpret any command string that begins with
  456. an ASCII Escape character and either position the cursor, move it
  457. around, set display attributes and colors, or redefine the keyboard.
  458.      Some of the more useful screen control sequences are shown in 
  459. Figure 2 below.  Notice that some characters are uppercase and some 
  460. lowercase.  This is an important distinction.  ANSI.SYS interprets 
  461. uppercase and lowercase characters differently.
  462.      Try something simple:
  463.           PROMPT $E[s$E{0;0H$T$E[K$E[u$N$G
  464. It may not appear simple but it is.  Every $E metastring is converted 
  465. to an ASCII Escape code when the prompt is displayed, and thus 
  466. indicates to the ANSI.SYS file that a control sequence is present.  The 
  467. $E[s ANSI.SYS string saves the current cursor position so you can put 
  468. it back where it belongs after moving it around the screen.  Next, 
  469. $E[0;0H moves the cursor to position 0,0 on the display -- the upper 
  470. left-hand corner.  The $T metastring prints the time, while $E[K 
  471. erases the rest of the top line, $E[u restores the cursor and $N$G 
  472. prints the normal prompt.
  473.      When DOS tries to display this prompt, the $E metastring first 
  474. sends an Escape character to the screen.  ANSI.SYS recognizes the 
  475. Escape code, intercepts the characters that follow, and carries out the 
  476. command.  The time display in the corner of the screen will be updated 
  477. only when DOS displays the next prompt.  In other words, it simply 
  478. indicates the time when DOS last displayed the prompt.
  479.      If this command doesn't work and you see some tiny arrows on the 
  480. screen, then ANSI.SYS probably hasn't been loaded.  You can find out
  481. by using the CHKDSK command to display the amount of available memory, 
  482. since ANSI.SYS is a load-and-stay resident module.
  483.      Putting the time on the top of the screen creates a primitive 
  484. status line.  These status lines are fairly easy to create and 
  485. customize with the PROMPT command as long as you accept their 
  486. limitations.  Put status lines at the top rather than at the bottom of 
  487. the display so that, when the screen scrolls, the previous status line 
  488. will roll off the top and be replaced by the next.
  489.      Here's a prompt that displays all available status information on 
  490. the top four lines of the display:
  491.           PROMPT $E[s$E[0;0H$V$E[K
  492.           $_Directory:$P$E[K
  493.           $_Date:     $D$E[K
  494.           $_Time:     $T$E[K$E[u$N$G
  495. The $E[s saves the current cursor position (to be restored later) and 
  496. the $E[0;0H portion sets the cursor at position 0,0.  The $V metastring
  497. prints the version line, and the $E[K sequence erases the rest of the
  498. line.  The next three sequences begin with a carriage return/linefeed
  499. ($-) so they'll each have a line of their own on the display.  Spaces
  500. are shown after Date and Time, so the information lines up nicely.
  501. Remember that the $E[K erases the rest of the current line.  The cursor
  502. is restored from the initial save by the $E[u sequence.  Finally, back
  503. where the prompt should be, the $N$G sequence shows the familiar
  504. default drive and right angle bracket.  For clarity these commands are
  505. shown on separate lines, but in reality this PROMPT sequence must be
  506. entered on a single line.
  507.      If you'd like this status information to stand out try using 
  508. reverse video or some other attribute with a control sequence.  The 
  509. $E[7m sequence turns on reverse video.  Anything that follows will be 
  510. printed black on green (on a monochrome display).  The $E[0m sequence 
  511. restores normal video unless you want all DOS displays in reverse 
  512. video.  A $E[5m sequence makes characters blink.  If you have a color
  513. display, you can switch background and foreground colors.
  514.      If you leave out the version number, you can put the current 
  515. directory, date and time on one line at the top of the screen, provided 
  516. that your directory path is 10 characters less than the maximum of 63.
  517.      My favorite prompt puts the date and time in the upper left-hand 
  518. corner of the display in reverse video and replaces the normal prompt 
  519. with the current directory path:
  520.           PROMPT $E[s$E[1;51H$E[K$E[7m$D/$T$E[0m$E[u$P$G
  521.      Once you find a prompt you like, put it in AUTOEXEC.BAT so that 
  522. the prompt will be set every time you boot up.  You can do this either 
  523. by putting the prompt directly in the AUTOEXEC.BAT file, or by putting 
  524. the prompt in a batch file (mine is called PROMPTST.BAT) and then 
  525. putting the name of the batch file in AUTOEXEC.BAT.
  526.      An ANSI.SYS control sequence that permits keyboard reassignment 
  527. is:
  528.           $E[key;definitionp
  529. The key specification is either the ASCII code in decimal for the key 
  530. you are redefining -- `65' for capital A, for example -- or a zero 
  531. followed by a semicolor followed by an extended ASCII key number.  
  532. Extended ASCII key numbers are used for keys that do not have normal 
  533. ASCII definitions.  These include the function keys, cursor movement 
  534. keys and some others.  The definition specification is what the key 
  535. will become. This can be more than one character long and may be 
  536. specified in pieces.  The pieces are separated by semicolons.  They 
  537. may be either ASCII codes in decimal, or text in double quotation 
  538. marks.  The keyboard redefinition is terminated by lowercase p.
  539.      ANSI.SYS will store the reassignment and use it when the redefined 
  540. key is pressed.  Once a key is redefined, it stays redefined until you 
  541. change it or boot up again.  The PROMPT command that redefines a key 
  542. can be used only once.  The key is then redefined, and you can specify 
  543. a different prompt to control what is displayed on the screen.
  544.      These keyboard reassignments will not work in any program that 
  545. bypasses DOS to get keyboard information, such as the BASIC 
  546. interpreters.  These programs go straight to the BIOS for their 
  547. keyboard information.  You'll have to experiment with various programs 
  548. to find out which ones will accept the redefined keys.
  549.      The redefined keys will be the one most frequently used for DOS 
  550. commands, following the operating system prompt.  When you see the 
  551. prompt, the COMMAND.COM file is running, and that program only uses DOS 
  552. keyboard information.
  553.      What keys should you reassign?  The function keys are your best 
  554. bet.  For instance, if you have a number of batch files set up, you can 
  555. define function keys to run them.  If you find yourself typing the 
  556. same command over and over, let a function key do the job.
  557.      You probably do not want to use function keys F1 through F6.  
  558. These keys have special meaning to DOS.  If you think that leaves only 
  559. four function keys, guess again.  The 10 keys are really 40 function 
  560. keys, since they can be pressed in combination with the Shift, Ctrl or 
  561. Alt keys.  So, you actually have 34 function keys left if you don't use 
  562. F1-F6.  The extended keyboard numbers for these keys are shown in 
  563. Figure 3.  If that's not enough, you can try using the Alt key in 
  564. combination with letters or the top row of number keys.
  565.      To define F7 to run a directory of the A: drive, type:
  566.           PROMPT $E[0;65;"Dir A:";13p
  567.      The entire prompt-text is used for the keyboard reassignment so 
  568. nothing is displayed on the screen after this prompt sequence has been 
  569. executed.  The prompt-text consists of an Escape character, a left 
  570. bracket, a zero (to indicate the use of an extended keyboard number), 
  571. the number from Figure 3, another semicolon, the redefinition, another 
  572. semicolon, a 13 (ASCII carriage return) and a lowercase p which tells 
  573. ANSI.SYS that this sequence is a keyboard reassignment.
  574.      After the key has been reassigned, you can type PROMPT without an 
  575. argument to restore the regular prompt.  Pressing the F7 key causes the 
  576. "Dir A:" to be treated as a command.
  577.      You can reassign keyboard keys more conveniently with a two-line 
  578. batch file called KEYDEFIN.BAT:
  579.           PROMPT $E[0;%1;"%2 %3 %4";13p
  580.           PROMPT
  581.      The first line is the PROMPT command to reassign a keyboard key.  
  582. The percent signs followed by numbers are replacable parameters of the 
  583. batch file.  The second line restores the prompt to normal.  Instead of 
  584. executing the PROMPT command in the second line, you may want to put in 
  585. the name of the batch file where your favorite prompt is stored.
  586.      Note that the Echo feature must be on for this file to work.  DOS 
  587. must actually try to display the prompt for ANSI.SYS to intercept it 
  588. and reassign the keys.  To use this batch file, try:
  589.           KEYDEFIN 66 DIR b:
  590. This sets %1 to 66, %2 to DIR, %3 to B:, and %4 to nothing, resulting 
  591. in the following set of commands:
  592.           PROMPT $E[0;66;"DIR B:";13p
  593.      .....(missing text) appear on the command line and displays the 
  594. directory.
  595.      By selecting extended keyboard numbers from Figure 2, you can 
  596. define keys to activate your most-used commands.  Note that the number 
  597. of batch parameters you want the redefined key to accept is equal to 
  598. the number of items (separated by blanks) within the quotation marks.
  599.      For example, the batch file above can't be used to define a key 
  600. that accepts four parameters.  To do that, the command is:
  601.           PROMPT $E[0;%1;"%2 %3 %4 %5";13p
  602. because the %1 parameter selects the key to be redefined.  You can even 
  603. go all out and try:
  604.           PROMPT $e[0;%1;"%2 %3 %4 %5 %6 %7 %8 %9";13p
  605. but since the parameters of %2 through %9 must be separated by blanks 
  606. (to preserve the spacing in the key reassignment sequence) this command 
  607. adds unnecessary characters to key definitions that have less than 
  608. eight parameters.
  609.      Because there's a zero after the left bracket, this batch file can 
  610. only reassign keys with extended keyboard numbers.  Another batch file 
  611. without the zero and first semicolon would handle definitions for 
  612. regular ASCII codes.
  613.      Without the semicolon followed by the number 13 in the PROMPT 
  614. statement, the cursor will stop after typing DIR A: and wait for more 
  615. input or the Enter key.  The `;13' sequence puts in the carriage 
  616. return.  If you prefer the option of adding something to the line, they 
  617. leave out the carriage return (but don't leave out the final lowercase 
  618. p).  If you want the function key to deliver several commands, 
  619. separate each of them by a semicolon, a `13', and another semicolon.  
  620. The sequence inserts carriage returns between the commands.
  621.      You can put your favorite keyboard reassignments in an AUTO-
  622. EXEC.BAT file to be set during the system boot. Each redefinition 
  623. requires one PROMPT command.  After all the key redefinitions are done, 
  624. a final PROMPT command or the name of another batch file can set the 
  625. display prompt.
  626.      You also can set up batch files to define particular keys for 
  627. special functions, but with a parameter to define a filename.  For 
  628. instance, an assembly language programmer may want to define function 
  629. keys that assemble, link, run an EXE2BIN utility, and then load DEBUG 
  630. -- with the same program name. A batch file to do this reassignment 
  631. (named QUICKASM.BAT) can be:
  632.           PROMPT $E[0;65;"MASM %1";13p
  633.           PROMPT $E[0;66;"LINK %1";13p
  634.           PROMPT $E[0;67;"EXE2BIN %1;%1.COM";13p
  635.           PROMPT $E[0;68;"DEBUG %1.COM";13p
  636. Then, using the command:
  637.           QUICKASM <program name>
  638. you can assemble the program by pressing the F7 key, link it with the 
  639. F8 key, change it to a .COM file with the F9 key, and load it into 
  640. DEBUG with the F10 key.
  641.      Not all programs get keyboard information from the standard DOS 
  642. function calls.  Also, ANSI.SYS reserves only 200 bytes for the storage 
  643. of keyboard reassignments -- when your system crashes you know you've 
  644. defined one key too many.  However, you can use DEBUG to patch the 
  645. ANSI.SYS file to allow more than 200 bytes of keyboard reassignments.
  646.  
  647. Figure 1:  PROMPT metastrings.
  648.  
  649.      MetaString     Definition Special Characters
  650.      -----------    -----------------------------
  651.           $B        The ":" character
  652.           $G        The ">" character
  653.           $L        The "<" character
  654.           $Q        The "=" character
  655.           $$        The "$" character
  656.  
  657.                     System Information
  658.                     ------------------
  659.           $D        The date (14 characters: 3 character day-of-week, 
  660.                     blank, 2 character month, dash, 2 character day,
  661.                     dash, 4 character year)
  662.           $T        The time (11 characters: 2 digit hour, colon, 2 
  663.                     digit minutes, colon, 2 digit seconds, point, 2
  664.                     digit hundredths-of-seconds)
  665.           $N        The default drive (1 character)
  666.           $P        The current directory path of the default drive 
  667.                     (begins with default drive, colon, then a maximum
  668.                     of 63 characters of the path from the root to the
  669.                     current directory)
  670.           $V        The version number (currently prints 39 characters)
  671.  
  672.                     Cursor Control
  673.                     --------------    
  674.           $H        Backspace & erasure of the previous character
  675.           $_        A carriage return and linefeed sequence
  676.  
  677.                     Other ASCII characters
  678.                     ----------------------
  679.           $E        The ASCII Escape character
  680.           $X       A null string  (where X is anything not used above)
  681.  
  682. Figure 2: Screen Control Sequence.
  683.  
  684.      Control String      Definition
  685.      --------------      ----------
  686.      $E[s                SCP (save cursor position for a future RCP 
  687.                               sequence)
  688.      $E[u                RCP (restore cursor position from a previous 
  689.                               SCP sequence)
  690.      $E[#;#H             CUP (cursor position: sets cursor to the row 
  691.                               and column substituted for the 1st and
  692.                               2nd #, respectively)
  693.      $E[#A               CUU (cursor up # positions)
  694.      $E[#B               CUD (cursor down # positions)
  695.      $E[#C               CUF (cursor forward # positions)
  696.      $E[#D               CUB (cursor backward # positions)
  697.      $E[2J               ED (erases whole display and homes cursor to 
  698.                              upper righthand corner)
  699.      $E[K                EL (erases from cursor to end of line)
  700.      $E[#;...#m          SGR (set graphics rendition, e.g., $E[7m will 
  701.                               turn on reverse video; $e[0m will go back
  702.                               to normal)
  703.      $E[0;#;"s";13p     Reassign extended ASCII keyboard key # to the 
  704.                         command string "s" followed by carriage return)
  705.  
  706. Figure 3: Extended Keyboard Numbers for F7-F10.
  707.  
  708.      Function  Extended Keyboard Number
  709.        Key     Base      Shift     Ctrl      Alt
  710.      --------  ---------------------------------
  711.        F1      (59)       84        94       104
  712.        F2      (60)       85        95       105
  713.        F3      (61)       86        96       106
  714.        F4      (62)       87        97       107
  715.        F5      (63)       88        98       108
  716.        F6      (64)       89        99       109
  717.        F7       65        90       100       110
  718.        F8       66        91       101       111
  719.        F9       67        92       102       112
  720.        F10      68        93       103       113
  721.           (  ): Used for DOS line editing
  722.  
  723.      Top row of     Extended Keyboard Number
  724.       keyboard      in combination with ALT
  725.      ----------     ------------------------
  726.           1              120
  727.           2              121
  728.           3              122
  729.           4              123
  730.           5              124
  731.           6              125
  732.           7              126
  733.           8              127
  734.           9              128
  735.           0              129
  736.           -              130
  737.           =              131
  738.  
  739.      Letter    Extended Keyboard   Letter    Extended Keyboard
  740.        Key     Number  with  ALT     Key     Number  with  ALT
  741.      ------    -----------------   ------    -----------------
  742.        A            30               N            49
  743.        B            48               O            24
  744.        C            46               P            25
  745.        D            32               Q            16
  746.        E            18               R            19
  747.        F            33               S            31
  748.        G            34               T            20
  749.        H            35               U            22
  750.        I            23               V            47
  751.        J            36               W            17
  752.        K            37               X            45
  753.        L            38               Y            21
  754.        M            50               Z            44   
  755.  
  756. -----------------------------------------------------------------
  757.                             Prompt Solution
  758.             (PC Magazine Vol 4 No 10 May 14, 1985 PC Tutor)
  759.  
  760.      In using the IBM AT, I found that in order to remove a 
  761. subdirectory the files contained in a subdirectory must first be 
  762. erased.  My first, and last, attempt caused all of the DOS files to
  763. be erased.  The command I used was either ERASE .. or ERASE *.*.  This 
  764. brings me to another point: what do .(DIR) and ..(DIR) mean when they 
  765. appear in a directory listing?
  766.      Response:  It sounds as if ERASE .. was what you typed.  To see 
  767. what that does, you need to know what the . and .. subdirectories are. 
  768. By convention, the . subdirectory is the current subdirectory.  The .. 
  769. subdirectory is the "parent" subdirectory.  For example, if your
  770. current directory is \DOS\UTIL\SYS, then the . subdirectory is just 
  771. \DOS\UTIL\SYS.  In this case, the .. subdirectory is \DOS\UTIL.  Thus, 
  772. when you typed in ERASE .., it erased all files in the parent, which, 
  773. in your case, contained all your DOS files.
  774.      To erase all of the files in the subdirectory you currently 
  775. occupy, you can type either: 
  776.           ERASE *.* or ERASE .  (note the single .)
  777. Given the confusion inherent in the second command, I would suggest 
  778. using *.* exclusively.  In fact, there is an even safer approach which 
  779. is to name the subdirectory explicitly.  For example, suppose I want to 
  780. erase all files in \DOS\UTIL\SYS.  Type:
  781.           ERASE \DOS\UTIL\SYS
  782. This procedure works from any current directory, and it removes all 
  783. possible ambiguity.
  784.      One of the problems of using subdirectories is that it is very 
  785. easy to lose your way and not know which directory you are currently 
  786. in.  The simplest approach is just to type:
  787.           A>CD
  788. This will put the name of your current subdirectry on the screen.  A 
  789. more complex approach, but one often used, is to include the 
  790. subdirectory name within the DOS prompt itself.  That way you're never 
  791. in doubt.
  792.      With DOS 2.x you can create a custom prompt that can be quite 
  793. complex.  The prompt can contain any of the items:
  794.           the time ($t)
  795.           the date ($d)
  796.           the current directory ($p)
  797.           the version ($v)
  798.           the default drive ($n)
  799.           a backspace ($h)
  800.           > character ($g)
  801.           < character ($1)
  802.           | character ($b)
  803.           = character ($q)
  804.           CR/LF sequence ($_)
  805.           any string
  806.      To make up the prompt you want, just issue the PROMPT command 
  807. followed by any arbitrary string you want printed including, if you 
  808. want, some of the special symbols listed above.  (For the last, you
  809. type in the characters within the parentheses.)  For example, the DOS
  810. default prompt you're used to would be entered as PROMPT $n$g if you
  811. had to create it.  Issuing the command:
  812.           PROMPT $p$_$n$g
  813. gives you a two-line prompt that shows the current drive and 
  814. subdirectory on the first line and the usual drive:> on the second.
  815.      I sometimes use the following prompt command:
  816.           PROMPT $p<tab><tab><tab>Time...$t$h$h$h$h$h$h$_$g
  817. This prints the name of the current directory, a few tabs (you just hit 
  818. the tab key where you see <tab> above), then the string "Time ..." 
  819. followed by the time of day.  The $h backspaces and erases the seconds, 
  820. which would be more information that I want. Finally, the $_$g produces 
  821. a new line with a > sign on it.  This is handy for project billing
  822. since a screen printout clearly shows me what application is being run
  823. and how long I have spent running it.
  824.      I think you'll find that it is both fun and instructive to 
  825. experiment with the PROMPT command.  If you decide you want to use a 
  826. customized prompt regularly, however, you must make the PROMPT command 
  827. sequence a part of your AUTOEXEC.BAT file since otherwise DOS will go 
  828. back to its normal default prompt each time you boot.
  829.