home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: OtherApp / OtherApp.zip / FSHL125.LZH / FSHL.DOC < prev    next >
Text File  |  1992-04-03  |  54KB  |  1,232 lines

  1.                                             Documentation for FSHL
  2.                                                       Version 1.25
  3.  
  4.                                                    Oberon Software
  5.                                              518 Blue Earth Street
  6.                                                  Mankato, MN 56001
  7.  
  8.                                       Voice Phone:    507/388-7001
  9.                                               BBS:    507/388-1154
  10.                                               FAX:    507/388-7568
  11.                                          MCI Mail: oberon/413-5847
  12.                                        GEnie Mail:       B.FLOWERS
  13.                                               CIS:      72510,3500
  14.  
  15.                                                      April 3, 1992
  16.  
  17.  
  18.   -------------------------------------------------------------
  19.  
  20. Copyright 1990-92, Oberon Software, Mankato, MN - All Rights Reserved
  21.  
  22.   -------------------------------------------------------------
  23.  
  24.               ----------------------------------------
  25.                               Contents
  26.               ----------------------------------------
  27.  
  28.                 0.    Overview
  29.                 I.    Invoking FSHL
  30.                 II.   Command Line Editor
  31.                    A. File name completion
  32.                    B. Notes on pattern matching
  33.                 III.  Command Line Historian
  34.                 IV.   Aliases
  35.                    A. Creating an alias on the command line
  36.                    B. Creating an alias in the initialization file
  37.                    C. The scope of aliases
  38.                    D. Limit on number of aliases
  39.                    E. Displaying aliases
  40.                    F. Replacing and clearing aliases
  41.                    G. Temporarily overriding an alias
  42.                    H. Function Key macros (PF Aliases)
  43.                    I. Misc
  44.                 V.    FSHL Internal Commands
  45.                 VI.   FSHL Command Files
  46.                    A. Restrictions
  47.                    B. Extensions
  48.                    C. Other differences
  49.                 VII.  Misc
  50.                    A. Setting COMSPEC
  51.                    B. FSHL and STARTUP.CMD
  52.                    C. Pseudo-Environment Variables
  53.                 VIII. Future Enhancements
  54.  
  55.               ----------------------------------------
  56.  
  57.  
  58. 0.   Overview
  59.      ========
  60.  
  61.   FSHL (pronounced eff-shell) is meant to enhance the functionality
  62. of the default OS/2 command interpreter, CMD.EXE.  In it's current
  63. incarnation, FSHL is not meant to completely replace CMD.EXE
  64. (although this is a future goal, see below).
  65.  
  66.   FSHL's features include a replacement command line editor and
  67. historian for OS/2 allowing more functionality than the one included
  68. in CMD.EXE.  As with CMD.EXE, the user may browse through a circular
  69. buffer of previously entered commands, edit and reedit command lines,
  70. and reexecute previously entered command lines using the cursor
  71. movement keys.  FSHL goes several steps further however and adds
  72. keystrokes allowing the user to delete specific commands from the
  73. history buffer (or the entire buffer), review the history and
  74. retrieve specific commands without being required to "arrow-back" to
  75. them.  The command line editing functions are also a superset of
  76. those offered by CMD.EXE.
  77.  
  78.   In addition to all of this, FSHL also allows you to define
  79. "aliases" for commonly typed (or difficult to remember) commands. 
  80. Aliases can be used to reduce the number of keystrokes you need to
  81. execute commonly used commands (for instance, "dir" may become simply
  82. "d").
  83.  
  84.   FSHL also introduces it's own set of internal commands,
  85. some new features to old friends like "PROMPT" and "PAUSE", special
  86. handling of certain batch files, and more.  Read on...
  87.  
  88.  
  89.  
  90. I.   Invoking FSHL
  91.      =============
  92.  
  93.   You may invoke FSHL directly from an OS/2 (CMD.EXE or FSHL) prompt,
  94. via an entry in a PM Desktop Manager Program Group, from a batch
  95. file, or from another program if it allows a customizable "Shell to
  96. OS/2" function or the ability to execute external, user defined
  97. programs.  There are a number of command line switches which you may
  98. use to define some of FSHL's behavior.  All command line switches
  99. must be preceded by a slash (/) or a hyphen (-) character and, if the
  100. switch has a parameter, it must follow directly after the switch
  101. character with no intervening space or tab characters (the -c and -k
  102. are exceptions to this rule, see note below).  A list of these option
  103. switches follows:
  104.  
  105.      -a<number>    specifies the maximum number of aliases which
  106.                    may be defined.  If omitted, defaults to 50.
  107.  
  108.      -h<number>    specifies the number of command lines to save in
  109.                    the history buffer. If omitted, defaults to 30.
  110.  
  111.      -f<filename>  specifies a valid file name containing a list
  112.                    if alias commands to load at startup.  This file
  113.                    is only read if there are no other instances of
  114.                    FSHL currently running on the system.  There is
  115.                    no default value.
  116.  
  117.      -i            when specified, sets the default edit mode
  118.                    of the command line editor to "insert".  If
  119.                    omitted, the default is "overstrike".
  120.  
  121.      -d<0 or 1>    specifies which delimiter set the command line
  122.                    editor will use for purposes of "word-wise"
  123.                    movement and deleting.  If set 0 is specified,
  124.                    only space and tab characters are treated as
  125.                    word delimiters, if set 1 is specified, all
  126.                    non-alphanumeric characters are treated as
  127.                    delimiters.  If omitted, defaults to 0.
  128.  
  129.      -u            if specified, sets the default mode for the
  130.                    "partial command recall" feature of the command
  131.                    line historian such that the CONTROL key is
  132.                    not required to perform a partial command
  133.                    search (see Section III).  If omitted, the
  134.                    default keystrokes for this feature are
  135.                    CONTROL+UP and CONTROL+DOWN.
  136.  
  137.      -c<command>   specifies a command to immediately execute at
  138.                    startup.  When the command has finished, FSHL
  139.                    will exit.
  140.  
  141.      -k<command>   specifies a command to immediately execute at
  142.                    startup.  When the command has finished, FSHL
  143.                    will enter normal, command line mode.
  144.  
  145.  
  146.   Note: For the -c and -k parameters, the command may be any legal
  147. command which you could otherwise type at the command prompt: an
  148. executable file name or batch file name or an OS/2 or FSHL internal
  149. command.  You may even use aliases in the command.  The -c and -k
  150. parameters are, of course, mutually exclusive.  The entire remainder
  151. of the FSHL command line is considered to be part of the -c or -k
  152. switch so, if you wish to use -c or -k, all other switches must
  153. precede it on the FSHL command line.
  154.  
  155.  
  156.   Installing FSHL in CONFIG.SYS
  157.   -----------------------------
  158.  
  159.   The preferred alternative to executing FSHL from the CMD.EXE
  160. command line or via a special entry in a PM Program Group, is to
  161. replace the reference to CMD.EXE in your PROTSHELL statement in
  162. CONFIG.SYS.  This will cause FSHL to be executed instead of CMD.EXE
  163. any time you invoke an OS/2 full screen or windowed session. There
  164. are several rules to remember if you elect to use this method
  165. however.
  166.  
  167.   1) You may follow the path/name of FSHL.EXE with any valid FSHL
  168. parameter as given above; FSHL will be executed with those parameters
  169. each time an OS/2 full screen or windowed session is initiated
  170. (except as regards STARTUP.CMD; see below).
  171.   2) You will want to change your "set COMSPEC=" statement in
  172. CONFIG.SYS to refer to FSHL rather than CMD.EXE.
  173.   3) You MUST add a line in CONFIG.SYS of the form "set CMD_EXE="
  174. such that the new CMD_EXE variable refers to the actual CMD.EXE file.
  175.   4) If you use a STARTUP.CMD file, FSHL will call on CMD.EXE as
  176. specified in the environment variable CMD_EXE to execute it.  OS/2
  177. invokes FSHL for this purpose without including the default
  178. parameters which were specified in the PROTSHELL statement so you
  179. won't have access to any aliases from your "-f" configuration file.
  180.  
  181.   Please refer to Section VII., Items A. and B. for further
  182. information.
  183.  
  184. Examples:
  185.  
  186.   These examples all assume that you have FSHL.EXE in a directory
  187. named "d:\bin", that your FSHL initialization file is named FSHL.INI
  188. and is located in "d:\bin\ini", and you have a startup FSHL-syntax
  189. batch file named FSHLINIT.FSH located somewhere on your PATH as
  190. specified in CONFIG.SYS.
  191.  
  192.   --------------------
  193.   1) Under OS/2 1.3, if you add FSHL to a Program Group, the entry
  194. might be:
  195.  
  196. Program Title    : FSHL - Full Screen Session
  197. Path and Filename: d:\bin\fshl.exe
  198. Parameters       : -fd:\bin\ini\fshl.ini -kfshlinit.fsh
  199. Working Directory: d:\usr
  200. Program Type     : Other
  201.  
  202. You may specify either a "fullscreen" session or a "windowed" session
  203. to run the program.
  204.  
  205.   --------------------
  206.   2) Under OS/2 2.0, if you add an FSHL Program Object to a folder or
  207. the desktop, after copying a "Program Object Template" to the destination,
  208. open the settings notebook and specify:
  209.  
  210. Path and Filename: d:\bin\fshl.exe
  211. Parameters       : -fd:\bin\ini\fshl.ini -kfshlinit.fsh
  212. Working Directory: d:\usr
  213.  
  214. On the "Session" page, you may select either "OS/2 Fullscreen" or
  215. "OS/2 Window".
  216.  
  217.  
  218.   --------------------
  219.   3) If you use the "protshell" method under OS/2 1.3 in CONFIG.SYS
  220. you would specify:
  221.  
  222. PROTSHELL=c:\os2\pmshell.exe os2.ini os2sys.ini d:\bin\fshl.exe /kfshlinit
  223. set COMSPEC=d:\bin\fshl.exe
  224. set CMD_EXE=c:\os2\cmd.exe
  225.  
  226.  
  227.   --------------------
  228.   4) If you use the "protshell" method under OS/2 2.0 in CONFIG.SYS
  229. you would specify:
  230.  
  231. PROTSHELL=c:\os2\pmshell.exe
  232. set USER_INI=c:\os2\os2.ini
  233. set SYSTEM_INI=c:\os2\os2sys.ini
  234. set OS2_SHELL=d:\bin\fshl.exe -fd:\bin\ini\fshl.cfg -kfshlinit
  235. set COMSPEC=d:\bin\fshl.exe
  236. set CMD_EXE=c:\os2\cmd.exe
  237.  
  238.  
  239.  
  240. II.  Command Line Editor
  241.      ===================
  242.  
  243.   The following keystrokes are available for editing the command
  244. line; you may use either the keys on the numeric keypad (if NumLock is
  245. off!) or the dedicated keypad.
  246.  
  247.      Keystroke           Function
  248.      ------------------- --------------------------------------------
  249.      LeftArrow           Move cursor one character to the left
  250.      RightArrow          Move cursor one character to the right
  251.      Home                Move cursor to the beginning of the line
  252.      End                 Move cursor to the end of the line
  253.      Control-LeftArrow   Move cursor one "word" to the left*
  254.      Control-RightArrow  Move cursor one "word" to the right*
  255.      Insert              Toggle insert/overstrike mode
  256.      Delete              Delete one character at the cursor
  257.      Backspace           Delete one character to the left of the cursor
  258.      Control-Delete      Delete one "word" at the cursor*
  259.      Control-Backspace   Delete one "word" to the left of the cursor*
  260.      Control-Home        Delete from beginning of line to cursor
  261.      Control-End         Delete from cursor to end of line
  262.      Escape              Erase entire line
  263.      Control-Insert      Exchange the character at the cursor with
  264.                          the character immediately to the right
  265.  
  266.   *For our purpose here, a "word" is a block of characters between
  267. two delimiters.  The default delimiter set is the beginning and end
  268. of the line plus the space and tab characters.  This definition may
  269. be expanded at startup (see discussion on the "-d" command line
  270. parameter in Section I. above) or while FSHL is active (see discussion
  271. on the "delimiters" command in Section V. below) to include all of
  272. the normal "punctuation" characters, i.e., all characters which are
  273. neither a letter nor a digit.
  274.  
  275.  
  276.   A. File name completion
  277.      --------------------
  278.  
  279.   There are two special keystrokes used by the command line editor
  280. that deserve a closer look:
  281.  
  282.      Alt->     "Alt-Greater Than" or, if you prefer, "Alt-."
  283.      Alt-<     "Alt-Less Than" or, if you prefer, "Alt-,"
  284.  
  285.   At any FSHL prompt, if you press Alt-> FSHL will look at the "word"
  286. just under the cursor (or just to the left if the cursor is over
  287. white space) and expand it into a list of matching file names.  If
  288. matches are found, the string is replaced immediately with the first
  289. match.  Subsequent presses of Alt-> will progress through the list. 
  290. Alt-< will move backwards through the list.  Either way, the list
  291. will "wrap".  That is, when the end is reached the display will start
  292. over from the other end.
  293.  
  294.  
  295.   B. Notes on pattern matching
  296.      -------------------------
  297.  
  298.   If you press Alt-> or Alt-< with the cursor over the string "foo",
  299. FSHL will first try to find a file which exactly matches "foo".  If
  300. the file exists, nothing apparent will happen; you are done.  If a
  301. SUBDIRECTORY named "foo" exists, however, a backslash will be
  302. appending to "foo", making it "foo\" and you will then be able to
  303. cycle through all the file names in that subdirectory.  If neither of
  304. these two events occurred, then FSHL will transform the string into
  305. "foo*" and try one more time and you will be able to cycle through
  306. your file names like "foolishness" and "food preparation in the
  307. 90's".  If there are still no matches at this point, FSHL will emit a
  308. short beep to inform you of that fact.
  309.  
  310.   If the string contains any *'s or ?'s, then only that string will
  311. be matched (i.e., FSHL will not test it as a possible subdirectory).
  312. If the string ends with a backslash (i.e., "foo\") then FSHL will not
  313. try to treat it like a possible file name and will instead match
  314. "foo\*".
  315.  
  316.  
  317.  
  318. III. Command Line Historian
  319.      ======================
  320.  
  321.   FSHL maintains a circular buffer of previously entered commands,
  322. any of which may be retrieved.  The size of this buffer defaults to
  323. 30 commands but the user may specify a different size if so desired
  324. (see discussion on the "-h" command line parameter in Section I.
  325. above).  When the buffer becomes "full" the eldest commands are
  326. removed as new ones are entered.
  327.  
  328.   It is worth noting that the history buffer is shared by any
  329. invocation of FSHL occurring in the same screen group.  This is to
  330. say, that if FSHL is executed from FSHL, or from any program which was
  331. itself executed from FSHL, it will share the history buffer with its
  332. parent(s) and any changes made to the buffer will remain in effect
  333. when the parent FSHL regains control.  However, two invocations of
  334. FSHL running in different windows or full screen session will each
  335. have their own, private history buffers.  The latter feature is
  336. desirable because, typically, different windows or sessions will be
  337. used for different activities.  Sharing the buffer within the screen 
  338. group is desirable because it adds continuity to the activity in the 
  339. current window.
  340.  
  341.   There are several keystrokes which may be used at the command
  342. prompt to navigate the history buffer.  Important to the concept here
  343. is that notion of "current position" in the history buffer.  After
  344. entering a new command, the current position is just after the
  345. newly entered command and (because the buffer is circular) just
  346. before the first command in the buffer.  Some of the keystroke
  347. functions listed below may change the current position.
  348.  
  349.      Keystroke           Function
  350.      ------------------- --------------------------------------------
  351.      UpArrow             recalls one command for reedit just before
  352.                          the current position.  Anything currently
  353.                          on the command line is replaced.  See
  354.                          exceptions, below (* and **)
  355.  
  356.      DownArrow           recalls one command for reedit just after
  357.                          the current position.  Anything currently
  358.                          on the command line is replaced.  See
  359.                          exceptions, below. (* and **)
  360.  
  361.      Control-UpArrow     searches backward for a command from the
  362.                          history buffer which matches exactly whatever
  363.                          is on the current command line to the left
  364.                          of the current cursor position.  Note, if
  365.                          the FSHL invocation line parameter "-u" was
  366.                          specified, or if the "ctrlsearch" mode has
  367.                          been set OFF via the "ctrlsearch" keyword,
  368.                          then the UpArrow, with or without the Control
  369.                          key will behave in this manner.
  370.  
  371.      Control-DownArrow   searches forward for a command from the
  372.                          history buffer which matches exactly whatever
  373.                          is on the current command line to the left
  374.                          of the current cursor position.  Note, if
  375.                          the FSHL invocation line parameter "-u" was
  376.                          specified, or if the "ctrlsearch" mode has
  377.                          been set OFF via the "ctrlsearch" keyword,
  378.                          then the DownArrow, with or without the Control
  379.                          key will behave in this manner.
  380.  
  381.      Control-PgDn        deletes the currently active command line
  382.                          from the history buffer.
  383.  
  384.      Control-PgUp        clears the entire history buffer
  385.  
  386.      Control-V           erases whatever is currently on the command
  387.                          line and displays the contents of the
  388.                          history buffer.
  389.  
  390.  
  391.   Additionally, there are several "pseudo-commands" which may be
  392. entered at the command prompt to help manipulate the history buffer.
  393.  
  394.   If you type an exclamation point (!) and hit the ENTER key, the
  395. history buffer will be displayed.  The entries in the history buffer
  396. are numbered from zero.
  397.  
  398.   If you type an exclamation point (!) plus a number which matches a
  399. valid entry in the history buffer and hit the ENTER key, that command
  400. will be immediately reexecuted.  If the number is invalid, the history
  401. buffer will be displayed.
  402.  
  403. * If you type an exclamation point (!) plus a number which matches a
  404. valid entry in the history buffer and press and UpArrow or DownArrow,
  405. that command will be recalled to the command line allowing you to
  406. reedit the line (this is the exception for UpArrow and DownArrow referred
  407. to above).
  408.  
  409.   Any command which begins with a circumflex character (^) will have
  410. that character removed and the command will NOT be added to the
  411. history buffer.
  412.  
  413. ** If the "ctrlsearch" mode has been set OFF either via the FSHL invocation
  414. switch "-u" or the "ctrlsearch" keyword, then the UpArrow and DownArrow
  415. will only behave as described above is there is nothing already entered
  416. on the command line or if the only thing entered is an exclamation point
  417. plus a number.  In all other cases, UpArrow and DownArrow will behave as
  418. described for Control-UpArrow and Control-DownArrow.  That is, a partial
  419. command line recall will be performed.
  420.  
  421.  
  422.  
  423. IV.  Aliases
  424.      =======
  425.  
  426.   Simply put, aliases are a redefinition of one string to another.
  427. The FSHL command line editor, historian, and batch processor are all
  428. aware of these aliases and will translate them behind the scenes into
  429. their full equivalents when they are encountered as the first thing
  430. on a command line.
  431.  
  432.   Aliases may be used to reduce the number of keystrokes needed for
  433. invoking frequently-used commands.  They may be used to avoid having to 
  434. remember long, involved command lines that are always the same.  They 
  435. may also be used to mask the difference in command line syntax when you 
  436. change your text editor or archive utility.
  437.  
  438.  
  439.   A. Creating an alias on the command line
  440.      -------------------------------------
  441.  
  442.   Use the FSHL internal "alias" command to do this.  Simply type:
  443.  
  444.         "alias newtoken alias_value"
  445.  
  446. without the quotes on the command line.  "newtoken" must be a single
  447. word with no embedded spaces or tabs, "alias_value" may be anything
  448. you wish.  From this point on, until all running copies of FSHL are
  449. exited, whenever you type "newtoken" as the first thing on a command
  450. line, it will be as if you had typed all of "alias_value".
  451.  
  452.     Examples:
  453.       alias d     dir
  454.       alias type  cat
  455.       alias zip   pkzip2
  456.       alias ccopy for %f in (*.c *.obj) do copy %f
  457.  
  458.   It's worth noting that, in the second example, an FSHL internal
  459. command has been aliased.  This will work because all aliases are
  460. expanded before the command is examined for internal commands and
  461. before the disk is searched for external programs.
  462.  
  463.   Sample invocations for these example aliases might be:
  464.       d c:\os2
  465.       type read.me
  466.       zip -v zipfile
  467.       ccopy a:
  468.   which would translate into:
  469.       dir c:\os2
  470.       cat read.me
  471.       pkzip2 -v zipfile
  472.       for %f in (*.c *.obj) do copy %f a:
  473.  
  474.   Note that the remainder of the command line is passed through
  475. unchanged in the translation.  There are also things called
  476. "parameterized aliases" which allow you some positive control over
  477. the parameters on the command line also.  It is perhaps easiest to
  478. think of alias parameters in much the same manner as you would think
  479. of .CMD file parameters.  A parameter may be referenced using "%n"
  480. where "n" is a digit from "1" to "9" and it refers to the parameters
  481. position on the command line.  You would use parameterized aliasing
  482. when you need to change the order of certain parameters or to embed
  483. parameters or information anywhere except in the first position.
  484.  
  485.     Examples:
  486.       alias dirmore dir %1 | more
  487.       alias b@      b %2 -m"goto_line %1"
  488.  
  489.   Sample invocations for these example aliases might be:
  490.       dirmore d:\bigdir
  491.       b@ 124 file.c
  492.   which would translate into:
  493.       dir d:\bigdir | more
  494.       b file.c -m"goto_line 124"
  495.  
  496.   If you were to type "dirmore d:\bigdir e:\stuff" however, the
  497. translation would be exactly the same because "e:\stuff" is "%2"
  498. which is not mentioned in the alias.  You could, of course, expand
  499. the alias definition to "dirmore %1 %2 | more" or even out to
  500. "dirmore %1 %2 %3 %4 %5 %6 %7 %8 %9 | more".  This points out a
  501. couple of limitations on parameterized aliases:
  502.  
  503.     1) If parameters are used, unreferenced arguments on the command
  504.        line are ignored.
  505.     2) If parameters are used, you are limited to using only the
  506.        first nine actual parameters.  There is no "shift" command or
  507.        "%*" syntax as in FSHL command files.
  508.  
  509.  
  510.  
  511.   B. Creating an alias in the initialization file
  512.      -------------------------------------------
  513.  
  514.   The file specified via the "-f" FSHL command line parameter (see
  515. Section I.) may contain a list of alias commands.  The syntax for
  516. alias command in this file is exactly the same as that discussed
  517. above.  Note that this file is only processed by FSHL at startup if
  518. there are no other currently executing copies of FSHL on the system.
  519.  
  520.  
  521.   C. The scope of aliases
  522.      --------------------
  523.  
  524.   All aliases are global to all currently active invocations of FSHL. 
  525. This is to say that, if an alias is defined in one FSHL session it
  526. will immediately be available in ALL FSHL sessions.
  527.  
  528.  
  529.   D. Limit on number of aliases
  530.      --------------------------
  531.  
  532.   The "-a" FSHL command line parameter defines the maximum size of
  533. FSHL's alias list (see Section I.).  Note that, except for the first
  534. invocation of FSHL, this is not an absolute value.  If, for instance,
  535. FSHL was invoked with the default alias list size of 30 and a second
  536. invocation of FSHL requested 20 aliases ("-a20") the larger size of
  537. 30 would remain in effect.  If a later invocation requests more
  538. aliases however, the alias list size is expanded to honor the
  539. request.
  540.  
  541.  
  542.   E. Displaying aliases
  543.      ------------------
  544.  
  545.   The "alias" command which was used to define the aliases may also
  546. be used to display the status of one alias or the status of all
  547. aliases.  If you type "alias" on the command line with no arguments,
  548. the entire list of active aliases is displayed.  If you type "alias"
  549. with a single argument, the value of that alias is displayed, if one
  550. exists, otherwise a message stating that the token is not aliased is
  551. printed.
  552.  
  553.   You may also use the single keystroke Control-T to display the
  554. alias list.  When Control-T is used, anything currently on the
  555. command line is erased and the alias list is displayed.
  556.  
  557.  
  558.   F. Replacing and clearing aliases
  559.      ------------------------------
  560.  
  561.   If you redefine an alias (i.e., create an alias for a token that
  562. already has an alias), the new alias is added to the list without
  563. removing the previous one.  When FSHL searches the list it searches
  564. from the last to the first, thus, the new alias will take precedence
  565. over the old one until it is cleared (see below) at which time the
  566. original alias takes effect again.
  567.  
  568.   You may remove aliases from the alias list with the "clearalias"
  569. command.  The syntax is simply "clearalias token".  If "token" has an
  570. alias, it is removed; otherwise the alias list is redisplayed.
  571.  
  572.  
  573.   G. Temporarily overriding an alias
  574.      -------------------------------
  575.  
  576.   Let's say you've aliased "d" to "dir" and now you want to test run
  577. someone's new program, d.exe.  You type "d" on the command line and
  578. FSHL faithfully presents you with a directory listing!  What to do? 
  579. Well, there are two things you can do.  The first would be to make
  580. sure that the first token isn't exactly "d"; ".\d" or "d.exe" would
  581. execute the d.exe file for you.  The other would be to type a space
  582. as the first character on the command line.  If FSHL finds a space
  583. character at the beginning of a line it performs NO aliasing on that
  584. line.  So, to execute d.exe you could type " d".
  585.  
  586.   Note that you can combine the space character override in
  587. conjunction with the "^" character to not enter a command into the
  588. history list (see Section III.).  To do this, make sure that the
  589. circumflex is the first character and the space is second.  Thus,
  590. "^ d" would execute your d.exe program and NOT add this command to
  591. the history list.
  592.  
  593.  
  594.   H. Function Key macros (PF Aliases)
  595.      --------------------------------
  596.  
  597. You can assign up to 48 text macros, one to each of the 12 Function
  598. Keys (F1 through F12) and one to each "shift state" of each Function
  599. Key.  The method uses the keywords "pfalias" and "pfalias!" in a
  600. similar manner to the use of the "alias" keyword.  The syntax is:
  601.  
  602.         "pfalias key_number text"
  603. or:
  604.         "pfalias! key_number text"
  605.  
  606. Where "key_number" is an integer number between 1 and 48 which indicates
  607. the appropriate function key according to the following table:
  608.  
  609.           UnShifted   Shift  Control   Alt
  610.          +----------------------------------
  611.      F1  |    1        13      25      37
  612.      F2  |    2        14      26      38
  613.      F3  |    3        15      27      39
  614.      F4  |    4        16      28      40
  615.      F5  |    5        17      29      41
  616.      F6  |    6        18      30      42
  617.      F7  |    7        19      31      43
  618.      F8  |    8        20      32      44
  619.      F9  |    9        21      33      45
  620.      F10 |    10       22      34      46
  621.      F11 |    11       23      35      47
  622.      F12 |    12       24      36      48
  623.  
  624.   The keyword "pfalias" assigns the exact text to the function key while
  625. the keyword "pfalias!" assigns the text plus a carriage return to the
  626. function key.  When invoked, the function key macro text will be "played
  627. back" onto the command line and will be treated from that point on as
  628. though the user had typed the text.  Thus, normal aliases and FSHL internal
  629. commands can be referenced in a Function key macro.
  630.  
  631.   The scope of the function key macros is within the session or
  632. screen group rather than global as are aliases.
  633.  
  634.  
  635.   I. Misc
  636.      ----
  637.  
  638.   Note that there is no eight character restriction on alias tokens. 
  639. There is absolutely nothing wrong with: "alias pastafazoola dir".
  640.  
  641.  
  642.  
  643. V.   FSHL Internal Commands
  644.      ======================
  645.  
  646.   The following is a list of all commands which FSHL will execute
  647. internal to itself.  The list includes some redefined CMD.EXE
  648. functions as well as some new ones which are unique to FSHL.  The
  649. capsule description provided with each should be fairly explanatory
  650. in most cases.  Where it is not, it is either covered in a separate
  651. section of this document (i.e., "alias" and "clearalias") or is
  652. discussed at greater length in the notes following the list.
  653.  
  654.      alias          see Section IV. "Aliases"
  655.      cd             exactly like the OS/2 command of the same name
  656.      cdd            change drive AND directory with single command
  657.      chcp           exactly like the OS/2 command of the same name
  658.      chdir          exactly like the OS/2 command of the same name
  659.      clearalias     see Section IV. "Aliases"
  660.      cls            exactly like the OS/2 command of the same name
  661.      ctrlsearch     sets default partial command recall mode, see below
  662.      del            some enhancements over the OS/2 equivalent, see below
  663.      delimiters     change the default word-delimiter set, see below
  664.      echo           exactly like the OS/2 command of the same name
  665.      erase          some enhancements over the OS/2 equivalent, see below
  666.      fexit          exit FSHL
  667.      for            like the OS/2 command of the same name but nestable
  668.      fshlinfo       display information about FSHL and current status
  669.      fshlinsert     sets default command line editor insert mode, see below
  670.      fshllogo       display FSHL logo and copyright notice
  671.      fver           display FSHL version
  672.      if             like the OS/2 command but see Section VI.
  673.      installdll     install 3rd party DLL, see below
  674.      md             exactly like the OS/2 command of the same name
  675.      mdd            make a directory and chdir to it in one command
  676.      mkdir          exactly like the OS/2 command of the same name
  677.      oberon         display information about Oberon Software
  678.      path           exactly like the OS/2 command of the same name
  679.      pause          some enhancements over the OS/2 equivalent, see below
  680.      pfalias        see Section IV. "Aliases"
  681.      pfalias!       see Section IV. "Aliases"
  682.      prompt         some enhancements over the OS/2 equivalent, see below
  683.      prty           set program priority, see below
  684.      rd             some enhancements over the OS/2 equivalent, see below
  685.      rem            exactly like the OS/2 command of the same name
  686.      restorehistory saves history buffer to file, see below
  687.      rmdir          some enhancements over the OS/2 equivalent, see below
  688.      savehistory    retrieves saved history from file, see below
  689.      set            exactly like the OS/2 command of the same name
  690.      sweep          see discussion below
  691.      type           some enhancements over the OS/2 equivalent, see below
  692.      ver            exactly like the OS/2 command of the same name
  693.      vol            some enhancements over the OS/2 equivalent, see below
  694.      window         alter VIO window from command line, see below
  695.  
  696.  
  697.   The "ctrlsearch" command:
  698.   -------------------------
  699.  
  700.   Sets or queries the default method for searching the history buffer
  701. for a partial match.  The default in ON, meaning that to search for a
  702. partial command line, you must use the Control key with either the up
  703. or down arrow to initiate the search and the regular arrow keys will
  704. cycle through each entry in the history buffer.  When this mode is
  705. set OFF then the control key is NOT required to search for partial
  706. command lines.  The only way to search the entire buffer is to clear
  707. the command line before using the up or down arrows.  In this case,
  708. you must also be aware that the cursor will remain at the beginning
  709. of the command as each is displayed instead of at the end.  If the
  710. parameter is omitted, the current state of this setting will be
  711. reported.
  712.  
  713. You can set this mode OFF on the FSHL command line with the switch:
  714. "-u".
  715.  
  716.  
  717.   The "delimiters" command:
  718.   -------------------------
  719.  
  720.   This command allows you to query or set the delimiter set used by
  721. the command line editor for purposes of "word-wise" movement.  If set
  722. to "standard", the delimiters are the beginning and ending of the
  723. line plus any block of space or tab characters.  If set to
  724. "extended", all of the punctuation characters are added to the set
  725. (i.e., any character which is neither numeric or alphabetic).
  726.  
  727.   The syntax is, then: "delimiters argument" where "argument" is one
  728. of "standard" or "extended".  Type "delimiters" with no argument to
  729. view the current setting.  Any other argument will display a brief
  730. help message and the current setting.
  731.  
  732.   Please refer to Section I. regarding setting the default delimiter
  733. set on the FSHL command line via the "-d" switch.  See Section II.
  734. regarding the behavior of the command line editor with respect to the
  735. delimiter setting.
  736.  
  737.  
  738.   Extensions to DEL and ERASE are:
  739.   --------------------------------
  740.  
  741.   Like the CMD.EXE equivalent, you may provide a list of ambiguous
  742. filespecs for DEL and ERASE and the list will be processed in order.
  743. In addition, FSHL provides the following switch settings to modify
  744. the behavior.  Switches are preceded with a slash (/) or a hyphen
  745. (-) and are not case sensitive.  Switches may appear at any place on
  746. the command line and are in effect for the remainder of the command
  747. line or until reset.
  748.  
  749.      -v  Verify.  User will be asked for each, individual file
  750.                   whether or not it should be deleted.  Turn this
  751.                   option off with "-v-" or "/v-".
  752.      -d  Display. Show the name of each file as it is deleted.
  753.                   Turn this option off with "-d-" or "/d-".
  754.      -y  Yes.     If the target of the del or erase command is a
  755.                   directory name or the wildcard is "*" or "*.*",
  756.                   the user is queried for verification unless this
  757.                   option is specified in which case, the prompt is
  758.                   NOT displayed and a "Yes" answer is assumed.
  759.                   Turn this option off with "-y-" or "/y-".
  760.                   USE THIS OPTION WITH EXTREME CARE!
  761.  
  762.  
  763.   The "fshlinsert" command:
  764.   -------------------------
  765.  
  766.   Sets or queries the default insert/overstrike mode for the command
  767. line editor.  If the parameter is 'ON', FSHL will default to insert
  768. mode on the command line, if it is 'OFF' it will default to
  769. overstrike mode.  If the parameter is omitted, the current state of
  770. this setting will be reported.
  771.  
  772. You can set this mode ON on the FSHL command line with the switch:
  773. "-i".
  774.  
  775.  
  776.   The "installdll" command:
  777.   -------------------------
  778.  
  779.   Allows the installation of a DLL (user or third party written)
  780. which may contain actions to be executed for the listed tokens. 
  781. Thereafter any of the tokens in the token list will act in a similar
  782. fashion to a normal 'alias' except that the DLL routine will be
  783. called.  If the "token list' is omitted, the DLL will be removed from
  784. memory.
  785.  
  786.   This DLL MUST have the following entry point:
  787.  
  788.       USHORT APIENTRY PROCESS(PCHAR, PCHAR);
  789.  
  790.   The two parameters will be the token which initiated this call to
  791. the DLL and its command line parameters respectively.  The return
  792. value from the function will placed into the ERRORLEVEL.
  793.  
  794.   The DLL may optionally have one or both of the following two entry
  795. points:
  796.  
  797.       USHORT APIENTRY INIT(VOID);
  798.       USHORT APIENTRY CLEANUP(VOID);
  799.  
  800.   INIT will be called immediately after loading the DLL to allow it
  801. to allocated resources or perform whatever action it feels it must. 
  802. If INIT returns nonzero, the DLL will immediately be unloaded and an
  803. error message printed.  CLEANUP is called when the DLL is unloaded
  804. under normal conditions.  This will allow the DLL to free any
  805. allocated resources and/or perform any other actions it deems
  806. necessary at this point.  See the supplied source code for TestDLL
  807. for a very contrived example.
  808.  
  809.   Note that the token lists for the installed DLLs are checked first
  810. before any other FSHL alias, FSHL internal, or OS/2 internal
  811. command.  After FSHL aliases are expanded, the list is rechecked.
  812.  
  813.   Also note that installed DLLs are inherited by child invocations of
  814. FSHL but not vice versa.  If a child uninstalls an inherited DLL, it
  815. will still be installed for the parent.  This behavior is analogous
  816. to the way SET environment variables behave with respect to parent
  817. and child processes.
  818.  
  819.  
  820.   Extensions to PROMPT are:
  821.   -------------------------
  822.  
  823.   All of the special dollar-sign codes which are traditionally
  824. allowed in the PROMPT string to modify the appearance of the system
  825. prompt are supported with the following enhancements and exceptions:
  826.  
  827.         $f  -- prints FSHL version
  828.         $s  -- prints current screen group number
  829.         $i  -- is completely ignored
  830.  
  831.  
  832.   The "prty" command:
  833.   -------------------
  834.  
  835.   "prty idle|normal|timecrit|foreground command [args]"
  836.  
  837.   Allows execution of "command" at the specified priority level. 
  838. Whatever priority FSHL itself is running at is restored after
  839. execution of the command.
  840.  
  841.  
  842.   Extensions to RD and RMDIR are:
  843.   -------------------------------
  844.  
  845.   Like the CMD.EXE equivalent, you may provide a list of directory
  846. specs for RD and RMDIR and the list will be processed in order.  In
  847. addition, FSHL provides the following switch settings to modify the
  848. behavior.  Switches are preceded with a slash (/) or a hyphen (-) and
  849. are not case sensitive.  Switches may appear at any place on the
  850. command line and are in effect for the remainder of the command line
  851. or until reset.
  852.  
  853.      -f  Files.   All files in the indicated subdirectory will be
  854.                   deleted prior to attempting to remove the directory.
  855.      -s  Subdirs. All files in the indicated subdirectory and all
  856.                   nested subdirectories will be deleted and all
  857.                   nested subdirectories removed prior to attempting
  858.                   to remove the directory.
  859.      -r  Restore. Negate the effects of any previously specified "-f"
  860.                   or "-s" switches.
  861.      -y  Yes.     If "-f" or "-s" has been specified, the user is
  862.                   queried for verification unless this option is
  863.                   specified in which case, the prompt is NOT displayed
  864.                   and a "Yes" answer is assumed.  Turn this option off
  865.                   with "-y-" or "/y-".
  866.                   USE THIS OPTION WITH EXTREME CARE!
  867.  
  868.  
  869.   The "savehistory" and "restorehistory" commands:
  870.   ------------------------------------------------
  871.  
  872.   "savehistory filename" saves the current history buffer to a file
  873. for later use with the FSHL "restorehistory" command.
  874.  
  875.   "restorehistory filename" reads a file, created previously by the
  876. FSHL "savehistory" command and replaces the entire history buffer
  877. with the saved buffer.
  878.  
  879.  
  880.   The "sweep" command:
  881.   --------------------
  882.  
  883.   Use sweep to execute a given command in the current directory and
  884. recursively over all nested subdirectories.
  885.  
  886.     Example:
  887.       sweep del *.bak
  888.  
  889.  
  890.   Extensions to TYPE are:
  891.   -----------------------
  892.  
  893.   Like the CMD.EXE equivalent, you may provide a list of ambiguous
  894. filespecs and the list will be processed in order.  In addition, FSHL
  895. provides the following switch settings to modify the behavior. 
  896. Switches are preceded with a slash (/) or a hyphen (-) and are not
  897. case sensitive.  Switches may appear at any place on the command line
  898. and are in effect for the remainder of the command line or until
  899. reset.
  900.  
  901.      -p[number]  Pause.  If supplied, the numeric parameter specifies
  902.                  the number of lines to display between "More?"
  903.                  prompts.  If zero (0) is given, prompting is
  904.                  disabled (this is the default).  If the number is
  905.                  omitted, the current screen length is used.
  906.  
  907.  
  908.   Extensions to VOL are:
  909.   ----------------------
  910.  
  911.   Like the CMD.EXE equivalent, you may provide a list of drive
  912. letters and the list will be processed in order.  In addition, FSHL
  913. provides the following switch settings to modify the behavior. 
  914. Switches are preceded with a slash (/) or a hyphen (-) and are not
  915. case sensitive.  Switches may appear at any place on the command line
  916. and are in effect for the remainder of the command line or until
  917. reset.
  918.  
  919.      -i Info.    If supplied, the total disk space and the total
  920.                  available disk space will be displayed in addition
  921.                  the standard information.  Turn this option off
  922.                  with "-i-" or "/i-".
  923.  
  924.  
  925.   The "window" command:
  926.   ---------------------
  927.  
  928.   "window min|max|restore|size|move|tasklist"
  929.  
  930.   Min, max, restore, size, and move perform the equivalent of
  931. selecting that item from the window's System menu.  Tasklist brings
  932. the system Task List to the foreground as if Ctrl+ESCAPE were keyed
  933. at the keyboard.  Note that "window min" and "window tasklist" will
  934. work in either a full screen session or a windowed session; in both
  935. cases, it will cause the PM Desktop and the Tasklist to surface. 
  936. "Max", "restore", "size", and "move" are only valid in windowed
  937. sessions.
  938.  
  939.  
  940.  
  941. VI.  FSHL Command Files
  942.      ==================
  943.  
  944.   OS/2 command files, which have the extension ".cmd", are all routed
  945. by FSHL back through the OS/2 command processor, CMD.EXE.  This has
  946. some benefits and some problems.  The benefits are that the syntax
  947. and behavior of these command files are nearly exactly what we would
  948. expect.  The word "nearly" is used because of one effect which could
  949. be considered either a problem or a benefit based on one's point of
  950. view.  This effect is that all .cmd command files behave as if they
  951. had a "setlocal" command at the very beginning (and no "endlocal"). 
  952. That is, the entire environment including the current drive and
  953. directory will be restored to its original value once the command
  954. file has finished executing.  This makes it not possible to change
  955. environment strings, your command prompt, the current path setting,
  956. or the current drive and/or directory in a command file and have
  957. those remain in effect after execution of the file.
  958.  
  959.   FSHL command files, which have the extension ".fsh", are executed
  960. directly by FSHL and they have a different set of features and
  961. limitations.  You MAY change the environment for the current session
  962. in an FSHL command file and have it remain in effect.  The syntax of
  963. an FSHL command file is almost exactly the same as that of an OS/2
  964. command file with the following restrictions and extensions.
  965.  
  966.  
  967.   A. Restrictions
  968.      ------------
  969.  
  970.   "SETLOCAL" and "ENDLOCAL" statements are not supported.
  971.  
  972.   Do not use "GOTO" in a statement that contains redirection
  973. characters (>, <, or |) or command chaining (&, &&, or ||).  If a
  974. "GOTO" is executed as a result of a "FOR" statement, the "GOTO" is
  975. executed and the "FOR" loop is exited immediately.
  976.  
  977.  
  978.  
  979.   B. Extensions
  980.      ----------
  981.  
  982.   You may use any FSHL internal command or defined alias in a command
  983. file with the desired results.  Lines in the command file are NOT
  984. added to the history buffer however and you may not use the "!" or
  985. "^" command prefixes as you would on the command line.
  986.  
  987.   The syntax on "IF" statements is extended to include all of the
  988. following constructs:
  989.  
  990.         if errorlevel == n ...
  991.         if errorlevel != n ...
  992.         if errorlevel >  n ...
  993.         if errorlevel <  n ...
  994.         if errorlevel >= n ...
  995.         if errorlevel <= n ...
  996.         if fullscreen ...
  997.         if foreground ...
  998.  
  999. Note that "if errorlevel n ..." behaves as always.  Any of the "IF"
  1000. statement conditions may be preceded with the keyword "NOT" with the
  1001. desired effect.
  1002.  
  1003.  
  1004.   Anywhere that you may use "errorlevel" in an "IF" statement, you
  1005. may substitute the actual command for which you wish to check.  The
  1006. command must be in parentheses; it may contain aliases.  For example:
  1007.  
  1008.         rem ---- The next two lines:
  1009.         chkdsk d:
  1010.         if errorlevel > 1 echo Chkdsk had problems
  1011.         rem ---- Are equivalent this one line:
  1012.         if (chkdsk d:) > 1 echo Chkdsk had problems
  1013.  
  1014.  
  1015.   Unlike the CMD.EXE batch processor, "FOR" loops may be nested in
  1016. .fsh files.
  1017.  
  1018.   New keywords: "COMPARECASE" and "COMPARENOCASE" effect the results
  1019. of string comparisons in "IF" statements.  By default, all string
  1020. comparisons are case sensitive.  Case sensitivity for these
  1021. comparisons is turned off using "COMPARENOCASE" and turned back on
  1022. using "COMPARECASE".  This state pervades until the end of the
  1023. command file but is NOT inherited by nested command files.
  1024.  
  1025.   You are not limited to %0 through %9 when referencing command line
  1026. parameters, %10, %11, indeed, %278 may be used.  The "SHIFT" keyword
  1027. works as expected.
  1028.  
  1029.   You may reference all command line parameters in a single string
  1030. using the construct "%*".  Note that this includes %0.  You may
  1031. reference all command line parameters from a given parameter in a
  1032. single string using "%*n" where "n" is the number of the parameter to
  1033. begin at, for example, "%*3" results in the entire command tail
  1034. beginning at (and including) "%3".
  1035.  
  1036.     Examples:
  1037.       echo My ENTIRE command line was [%*]
  1038.       rem  Reverse the first two parameters and pass the rest
  1039.       echo %2 %1 %*3
  1040.  
  1041.  
  1042.   The EXIT statement may have an optional parameter.  If this
  1043. parameter is numeric, the ERRORLEVEL is set to that value, if it is
  1044. non-numeric, ERRORLEVEL will be set to zero.
  1045.  
  1046.     Examples:
  1047.       exit 5
  1048.       exit %3
  1049.       if not fullscreen exit 1
  1050.  
  1051.  
  1052.   C. Other differences
  1053.      -----------------
  1054.  
  1055.   "EXIT" ends the current command file ("FEXIT" exits FSHL).
  1056.  
  1057.   Any nested FSHL command file, whether executed directly or via the
  1058. "CALL" keyword, are treated as if the "CALL" were present.  That is,
  1059. execution will always return to the calling command file.
  1060.  
  1061.   The ECHO state is not inherited by nested command files, it must be
  1062. explicitly turned off if this is desired.
  1063.  
  1064.  
  1065.  
  1066. VII. Misc
  1067.      ====
  1068.  
  1069.   A. Setting COMSPEC
  1070.      ---------------
  1071.  
  1072.   FSHL currently uses CMD.EXE for the execution of some internal OS/2
  1073. commands and for the execution of .CMD files.  For this reason, it
  1074. needs to know where to locate CMD.EXE and the COMSPEC environment
  1075. variable is the obvious place to look.  You may have reason, however,
  1076. to desire COMSPEC to point to FSHL itself so that certain programs
  1077. which allow you to shell to OS/2 will automatically invoke FSHL
  1078. (i.e., Brief, Codeview).  If you want to set COMSPEC to refer to
  1079. FSHL, you must make sure to set an environment variable "CMD_EXE" to
  1080. refer to the actual CMD.EXE.  FSHL will look for the CMD_EXE variable
  1081. first before defaulting to COMSPEC.
  1082.  
  1083.   VERY IMPORTANT: If you wish to set COMSPEC to refer to FSHL, it is
  1084. VERY IMPORTANT that you set the environment variable CMD_EXE as
  1085. outlined in the paragraph above!  If you have COMSPEC pointing to
  1086. FSHL and CMD_EXE undefined, FSHL will enter into an endless recursion
  1087. attempting to execute certain commands which could result in wildly
  1088. unpredictable behavior.
  1089.  
  1090.  
  1091.  
  1092.   B. FSHL and STARTUP.CMD
  1093.      --------------------
  1094.  
  1095.   Due to special handling of STARTUP, the command "fshl /k
  1096. STARTUP.CMD" will behave as if the "/k" were a "/c" (i.e., FSHL WILL
  1097. exit after executing this command).  This includes the command line
  1098. if you type it at a prompt!  If you really must execute STARTUP.CMD
  1099. through a second invocation of FSHL with the "/k" parameter, all you
  1100. need to do is either leave off the ".CMD" portion or include a drive
  1101. and/or path specification; the string must be exactly "STARTUP.CMD"
  1102. (upper, lower, or mixed case) for this special handling to be
  1103. triggered.
  1104.  
  1105.   If you have elected to replace CMD.EXE in the PROTSHELL statement
  1106. of your CONFIG.SYS file with FSHL, take care that any START commands
  1107. in the STARTUP.CMD file do NOT execute a session through a secondary
  1108. command processor if that session is to persist (i.e., STARTing a
  1109. Clock program or a BBS).  This will cause another copy of FSHL to be
  1110. loaded without your initialization file which will effectively block
  1111. any subsequent invocations of FSHL from reading this file.  You
  1112. should refer to the OS/2 documentation for the START command for
  1113. further details; however, when in doubt, include a "/N" parameter on
  1114. the START command line.
  1115.  
  1116.  
  1117.  
  1118.   C. Pseudo-Environment Variables
  1119.      ----------------------------
  1120.  
  1121.   Reference these on the command line or in command files as always
  1122. using percent signs (%) before and after.  They do NOT show up when
  1123. you type "set" with no parameters.  You may "set" them in your
  1124. environment but FSHL will preferentially use the pseudo-variable.
  1125.  
  1126.   _DATE_        The current date: "Day mm-dd-yyyy"
  1127.   _DATEYMD_     The current date: "yymmdd"
  1128.   _WEEKDAY_     The current weekday: "Sunday", "Monday", ...
  1129.   _MONTHDAY_    The current day of the month: "1", "2", .. "31"
  1130.   _MONTH_       The current month: "1", "2", ... "12"
  1131.   _MONTHNAME_   The current month: "January", "February", ...
  1132.   _YEAR_        The current year: i.e., "1992"
  1133.   _TIME_        The current time: "hh:mm:ss.hh"
  1134.   _FSHL_        The current FSHL version
  1135.   _ERRORLEVEL_  The current errorlevel
  1136.   _SCREENGROUP_ The current screen group number
  1137.   _SCREENTYPE_  The current screen type: "Full" or "Windowed"
  1138.   _OSVERSION_   The OS/2 version string
  1139.   _CODEPAGE_    The current code page setting
  1140.   _GREETING_    The greeting time: "Morning", "Afternoon", "Evening"
  1141.  
  1142.  
  1143.  
  1144. VIII. Programming APIs
  1145.       ================
  1146.  
  1147.   There are now two methods for you to programmatically extend and/or
  1148. access FSHL features.  One method is the 'InstallDLL' interface (see
  1149. above under 'installdll' for information regarding programming add-on
  1150. DLLs and also see the source for TestDLL for a simple example).  The
  1151. second is via the supplied FSHLCALL.DLL module.  This module contains
  1152. two entry points which you may access from your program:
  1153.  
  1154.   USHORT FindFshl(void);
  1155.         Returns the version number of the parent FSHL process or
  1156.         zero if you are not running as a child of FSHL.
  1157.  
  1158.   USHORT CallFshl(PSZ pszCmd, PUSHORT pusRetCode);
  1159.         'pszCmd' is a pointer to a buffer containing any arbitrary
  1160.         command line.  It will be submitted to the invocation of
  1161.         FSHL which is your most immediate predecessor which will
  1162.         treat it in all respects as though it were typed at the
  1163.         command line.  This is to say, alias expansion and expansion
  1164.         of environment variables will take place as normal.
  1165.         'pusRetCode' will be set to the return code (i.e., the
  1166.         ERRORLEVEL) from the command after its successful completion.
  1167.         The return value is zero on success, 0xffff on failure (if,
  1168.         for instance FSHL is not an ancestor of the current
  1169.         process).
  1170.  
  1171.   A header file, FSHLCALL.H and an import library, FSHLCALL.LIB, are
  1172. also supplied for your use.  It is recommended, however, that you
  1173. dynamically load FSHLCALL.DLL via DosLoadModule() rather than link
  1174. with the import library so that your program may continue to function
  1175. properly should it find itself in the situation where FSHL is not a
  1176. parent process.
  1177.  
  1178.  
  1179.   THE DIFFERENCE BETWEEN THE TWO APIS
  1180.   -----------------------------------
  1181.  
  1182.   1) Use the "InstallDLL" interface to create new built-in FSHL
  1183. commands or to enhance old ones.
  1184.  
  1185.   2) Use the CALLFSHL interface if your program needs to change
  1186. something in the parent FSHL's environment such as the current
  1187. working directory, disk drive, setting of an environment variable,
  1188. etc.
  1189.  
  1190.   3) The CALLFSHL interface could also be used as an alternative to
  1191. "shelling out" to an operating system command from your program to
  1192. avoid starting another process.
  1193.  
  1194.  
  1195.  
  1196. IX. Future Enhancements
  1197.     ===================
  1198.  
  1199.   It is hoped that, in the near future, FSHL may be used as a
  1200. complete replacement for CMD.EXE.  This would involve FSHL internal
  1201. processing for all CMD.EXE functions.  Of course, as this work is
  1202. performed, we'll take every opportunity to enhance the commands where
  1203. appropriate (much like the enhancements already made to DEL, TYPE,
  1204. and PROMPT).
  1205.  
  1206.   FSHL command file syntax will be enhanced to include block IF and
  1207. FOR statements and the syntax of the FOR statement expanded.  A .fsh
  1208. file compiler and REXX compatibility are also planned.
  1209.  
  1210.   We also intend to allow a formalized interface to user written
  1211. dynamic link libraries so that programmers may write their own
  1212. "internal" command set and tailor the environment to their
  1213. preferences.  Such dynamic link libraries, once created, could be
  1214. made available to others to enhance their environment.
  1215.  
  1216.   Let Oberon Software know what YOU would like.  Mice?  History
  1217. buffers that pop up point-and-shoot lists?  More *ix like commands?
  1218. Let us know.  Oberon Software is located at:
  1219.  
  1220.                 518 Blue Earth Street
  1221.                 Mankato, MN 56001
  1222.  
  1223. Various other methods of reaching Oberon Software are:
  1224.  
  1225.                   BBS: 507/388-1154 (HST 14.4, 24hrs/day)
  1226.           Voice Phone: 507/388-7001
  1227.                   FAX: 507-388-7568
  1228.                 GEnie: B.FLOWERS
  1229.                   CIS: 72510,3500
  1230.  
  1231.  
  1232.