home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / BEEHIVE / OS / CONIX2.LBR / CHAPTER3.DQC / CHAPTER3.DOC
Text File  |  2000-06-30  |  33KB  |  991 lines

  1.  
  2.  
  3.  
  4.  
  5.                Chapter 3 - The Command Line
  6.  
  7.  
  8.     Discussion of the command line and prompt, entering and     executing
  9.     commands,  changing  system  disks, how    ConIX processes    arguments,
  10.     and special requests to    the command line processor.
  11.  
  12.  
  13.                    - CONTENTS -
  14.     __________________________________________________________________
  15.  
  16.  
  17.       3.  The Command Line......................................   3-1
  18.  
  19.         3.1      The System Prompt.................................   3-1
  20.  
  21.         3.2      Changing the Default Directory....................   3-1
  22.  
  23.         3.3      The Warm Boot.....................................   3-2
  24.  
  25.           3.3.1  Warm Boot Density Change.......................   3-3
  26.  
  27.         3.4      Command Line Editing..............................   3-4
  28.  
  29.         3.5      Entering Commands.................................   3-6
  30.  
  31.         3.6      Executing a Program in Memory    (!).................   3-7
  32.  
  33.         3.7      Aborting Command Execution........................   3-8
  34.  
  35.         3.8      Multiple Commands Per    Line........................   3-8
  36.  
  37.         3.9      Command Arguments.................................   3-9
  38.  
  39.         3.10  Backslash (Non-Interpret) Character...............  3-10
  40.  
  41.         3.11  Forced Case Mapping...............................  3-11
  42.  
  43.         3.12  Control Characters................................  3-12
  44.  
  45.         3.13  Data Type Conversions.............................  3-13
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62.                       -    i -
  63.  
  64.  
  65.  
  66.  
  67.  
  68.     ConIX Operating    System                  The Command Line
  69.  
  70.     3.  The    Command    Line
  71.  
  72.     A major    portion    of the ConIX Operating System is devoted to the
  73.     processing of user commands.  These commands are generally entered
  74.     at the system prompt and form the command line.     The Command Line
  75.     Processor is the part of the operating system that takes the
  76.     command    line, breaks it    up into    different segments, and    analyzes
  77.     it.  The power of ConIX    lies, for the most part, in its    enormous
  78.     flexibility with regard    to manipulating    the command line.  Exactly
  79.     how this is done, and what features are    available to the user, is
  80.     described in the sections that follow.
  81.  
  82.  
  83.     3.1  The System    Prompt
  84.  
  85.     When ConIX is ready to process a command, it displays a    prompt on
  86.     the console screen in the form:
  87.  
  88.         <d:##>
  89.  
  90.     where the single letter    d indicates the    currently selected disk
  91.     drive (A-P) and    the two-digit number ##    indicates the currently
  92.     selected user area (00-31).  For example, the prompt displayed
  93.     when using drive A, user area 0    is:
  94.  
  95.         <A:00>
  96.  
  97.     and will be used to indicate the system    prompt in examples
  98.     throughout this    manual.
  99.  
  100.     If the currently selected disk is write    protected by the operating
  101.     system (the drive set to Read Only), the `:' in    the prompt will    be
  102.     changed    to a `!', e.g.:
  103.  
  104.         <A!00>
  105.  
  106.     This will most often occur if you swap disks without resetting the
  107.     drive.    CP/M detects the change    and does not allow you write to
  108.     the new    disk.  To return the drive to normal use, simply hit
  109.     CTRL-C at the prompt level.  Under ConIX, diskettes need not
  110.     contain    a CP/M image on    the operating system tracks.
  111.  
  112.     Note that the prompt change does not take place    immediately after
  113.     you swap disks.     The R/O setting is activated only after the disk
  114.     directory has been accessed by a program.  For example,    if you ran
  115.     the DIR    (list directory) command after the swap, the next prompt
  116.     would indicate the write-protected status.
  117.  
  118.  
  119.     3.2  Changing the Default Directory
  120.  
  121.     Whenever you cold load CP/M into your system after a reset or
  122.     power-up, you are automatically    placed into the    default    directory
  123.     of drive A, user area 0.  It is    from this directory that all .COM
  124.     programs will be loaded, unless    you specify otherwise.
  125.  
  126.  
  127.  
  128.                        3-1
  129.  
  130.  
  131.  
  132.  
  133.  
  134.     The Command Line                ConIX Operating System
  135.  
  136.     When ConIX is initially    loaded,    the default directory which was
  137.     set from CP/M will be maintained.  This    default    may be changed at
  138.     any time by specifying a new directory,    as:
  139.  
  140.         <A:00> (D:)(#/)
  141.  
  142.     where D    is the disk directory (A-P), and # is the user area (0-
  143.     31).  Either or    both may be supplied, and the default directory
  144.     and prompt will    be changed accordingly.     All future commands and
  145.     files will then    be loaded from the new directory unless
  146.     respecified.
  147.  
  148.     In addition, there exists a method of changing the default
  149.     directory only for the execution of a single command.  The syntax
  150.     of this    feature    is:
  151.  
  152.         <A:00> @(D:)(#/) <command> (arg(s))
  153.  
  154.     which executes the command as if it were requested from    the
  155.     specified disk and/or user area.  For example,
  156.  
  157.         <A:00> stat foo.asm
  158.  
  159.     will execute the Digital Research STAT command on the file FOO.ASM
  160.     stored in the current directory, namely    drive A, user area 0.  If
  161.     you wished to STAT a file in a user area and/or    disk other than
  162.     the current default, you couldn't supply a user    area with the
  163.     filename since CP/M does not support this.  Instead, you must
  164.     manually change    to the desired directory and then execute STAT
  165.     from there.  Or, more conveniently, you    can type:
  166.  
  167.         <A:00> @B:10/ stat foo.asm
  168.  
  169.     which will execute the STAT command from the directory of drive
  170.     B:, user area 10 and return you    to the default directory which was
  171.     previously set.     This is exactly equivalent to typing:
  172.  
  173.         <A:00> b:10/
  174.         <B:10> stat foo.asm
  175.                .
  176.                . STAT runs on the file FOO.ASM in B:10
  177.                .
  178.         <B:10> a:0/
  179.         <A:00>
  180.  
  181.     where you had to manually specify the desired directory    changes
  182.     before and after the STAT command was executed.
  183.  
  184.  
  185.     3.3  The Warm Boot
  186.  
  187.     There are two kinds of boots (short for    bootstrap) under the CP/M
  188.     environment: they are the Cold Boot and    the Warm Boot.    Your
  189.     system does a cold boot    the first time CP/M is loaded.    By cold    we
  190.     mean that there    is no software in memory to perform operating
  191.  
  192.  
  193.  
  194.                        3-2
  195.  
  196.  
  197.  
  198.  
  199.  
  200.     ConIX Operating    System                  The Command Line
  201.  
  202.     system functions.  Once    loaded,    a signon message is printed and
  203.     control    is passed to the CP/M CCP.
  204.  
  205.     The warm boot occurs while the operating system    is resident in
  206.     memory.     It has    two primary purposes.  The first is to reset the
  207.     disk system, returning all disks to a writable state.  This is
  208.     most often done    at the prompt level by hitting a CTRL-C    after you
  209.     change disks.
  210.  
  211.     The second function performs a complete    reload of CP/M and the CCP
  212.     from system tracks of the A: disk.  This operation differs from    a
  213.     cold boot, as there still remains some software    in memory to do
  214.     the reload, namely the BIOS, which contains the    system-dependent
  215.     routines.
  216.  
  217.     A warm boot most often occurs after a large disk-based command
  218.     program    finishes execution.  It    is really only necessary for the
  219.     purpose    of reloading CP/M, since such programs generally overwrite
  220.     the CCP    with their stack and data areas.
  221.  
  222.     When working under CP/M, you will notice when a    warm boot occurs
  223.     if there is an increased delay after a program finishes    execution,
  224.     and before the prompt is displayed.  Some programs do not cause
  225.     this delay because they    do not require much memory and,    therefore,
  226.     do not have to overwrite the CCP.  Under ConIX,    this warm boot
  227.     delay is often eliminated entirely, as ConIX usually remains in
  228.     memory while programs execute.    A jump to location zero    or SysCall
  229.     #0 never enters    the BIOS, as this function is handled within ConIX
  230.     itself.
  231.  
  232.     Hitting    a CTRL-C at the    ConIX prompt will cause    a reset    of the
  233.     write-protect setting of all disks without performing a    CP/M or
  234.     ConIX reload, thereby eliminating much of the usual delay.  This
  235.     should be done whenever    you change disks, otherwise you    will not
  236.     be allowed to modify the data stored on    the new    disk.
  237.  
  238.  
  239.     3.3.1  Warm Boot Density Change
  240.  
  241.     Some computers may use the warm    boot operation to allow    you to
  242.     load different densities of disks into the system.  If this is
  243.     true, the media-type cannot be changed since ConIX will    not supply
  244.     the warm boot that is sometimes    used by    the BIOS to reset the
  245.     density    settings and disk parameter configurations.
  246.  
  247.     The program WARMBT.COM has been    supplied on your distribution
  248.     diskette for the purpose of performing a BIOS Warm Boot    directly
  249.     from ConIX.  To    execute    a warm boot, simply type:
  250.  
  251.         <A:00> warmbt
  252.  
  253.     which will cause ConIX to store    its current environment    (option
  254.     settings, etc.)    on disk, and then exit to CP/M via a standard warm
  255.     boot operation.     A command-submit file will have been created
  256.     which will cause ConIX to be reloaded along with its saved
  257.  
  258.  
  259.  
  260.                        3-3
  261.  
  262.  
  263.  
  264.  
  265.  
  266.     The Command Line                ConIX Operating System
  267.  
  268.     environment.
  269.  
  270.     This complex operation is performed exclusively    by a ConIX Command
  271.     Language program, the source code to which has been provided on
  272.     the Distribution Diskette for your examination.
  273.  
  274.     In addition, WARMBT will accept    command    line arguments in the
  275.     form:
  276.  
  277.         <A:00> warmbt <command>    . . .
  278.  
  279.     where the given    command(s) will    be executed after control is
  280.     returned to CP/M, and before ConIX is reloaded.     This provides a
  281.     mechanism for executing    programs in the    resident operating system
  282.     without    intervention by    ConIX.
  283.  
  284.     For example, the command line:
  285.  
  286.         <A:00> warmbt "dir *.com" stat
  287.  
  288.     will exit to CP/M, list    all files whose    names end with .COM, print
  289.     available disk space, and return to ConIX.
  290.  
  291.     NOTE: in instances when    we will    mention    a warm boot in this
  292.     manual,    we refer only to the process by    which a    program's
  293.     execution is terminated.  This does not    mean that an actual CP/M
  294.     and BIOS warm boot operation will take place.  No CP/M reload can
  295.     ever take place    when a program exits via a warm    boot under ConIX.
  296.     It is for this reason that diskettes used with ConIX need not
  297.     contain    a CP/M image on    the operating system tracks unless, of
  298.     course,    an exit    to CP/M    will be    necessary.
  299.  
  300.  
  301.     3.4  Command Line Editing
  302.  
  303.     ConIX supports the standard line editing functions available when
  304.     entering commands or other line    input (via BDOS    syscall    10).  The
  305.     editing    process    has been somewhat refined in operation and also
  306.     contains some new additions.  Valid commands are:
  307.  
  308.     CTRL-B:    Boot Program
  309.  
  310.       When this control character is typed at the first character
  311.       position after the system prompt, a predetermined program will
  312.       be booted into memory.  By default, the command MENU will be
  313.       executed, to facilitate the quick loading of a specialized
  314.       user-friendly    menu program, if available.  The value of the
  315.       CTRL-B key can be redefined using the    OPT +/-BC internal command
  316.       to load and execute any program of your choice.
  317.  
  318.     CTRL-C:    Warm Boot
  319.  
  320.       If this control sequence is entered at the first character
  321.       position of an input line, a warm boot will take place.  If this
  322.       was done while entering data into a running program, execution
  323.  
  324.  
  325.  
  326.                        3-4
  327.  
  328.  
  329.  
  330.  
  331.  
  332.     ConIX Operating    System                  The Command Line
  333.  
  334.       will be terminated and control returned to ConIX.  Otherwise,    if
  335.       typed    at the system prompt level, all    disks will be reset to a
  336.       writable state.
  337.  
  338.     CTRL-E:    Next Line
  339.  
  340.       This sequence    is used    to advance the cursor to the beginning of
  341.       the next physical input line.     You may then continue entering
  342.       data from that point.     This function only modifies the screen
  343.       and does not affect the actual input data.  It is useful for
  344.       terminals or printers    which do not auto-wrap when the    cursor
  345.       goes past the    end of a line.
  346.  
  347.     CTRL-H:    Backspace
  348.  
  349.       Use this sequence to backspace on the    input line and delete the
  350.       character preceding the current cursor position.  The    character
  351.       to be    removed    will be    overwritten by a space or blank, thus
  352.       causing it to    be erased from the screen.
  353.  
  354.     CTRL-I:    Tab
  355.  
  356.       The tab character will advance the cursor to the next    screen tab
  357.       stop,    which is preset    to every eight characters.  Although
  358.       spaces will be displayed so as to move the cursor, the ASCII tab
  359.       character (07h) will still remain in the line.
  360.  
  361.     CTRL-J:    Line Feed
  362.     CTRL-M:    Carriage Return
  363.  
  364.       Either of these characters will terminate the    input line,
  365.       sending it to    ConIX or the running program for processing.
  366.  
  367.     CTRL-O:    Restore    Line
  368.  
  369.       This sequence    will recall the    previously entered input line as
  370.       stored in the    input line buffer.  Therefore, if the previous
  371.       line may be re-used with few or no changes, you may recall it
  372.       without having to retype it.    Characters deleted by CTRL-H or
  373.       CTRL-X can also be restored by using CTRL-O.
  374.  
  375.     CTRL-P:    Transcript Mode    ON/OFF
  376.  
  377.       Entering this    sequence once will enable Printer Transcript Mode,
  378.       which    will cause all characters displayed on the console screen
  379.       to be    simultaneously printed on the printer (LST) device.
  380.       Entering this    character again    will disable this feature.  In
  381.       other    words, it has an on/off    toggling action.
  382.  
  383.     CTRL-R:    Recall Line
  384.  
  385.       The current contents of the input line will be reprinted on the
  386.       screen when this sequence is typed.  It is a form of screen
  387.       refresh, which will display the input    line as    it has been
  388.       entered thus far.
  389.  
  390.  
  391.  
  392.                        3-5
  393.  
  394.  
  395.  
  396.  
  397.  
  398.     The Command Line                ConIX Operating System
  399.  
  400.     CTRL-U:    Cancel Line
  401.  
  402.       This function    deletes    all previously typed characters    from the
  403.       input    line buffer.  The deleted characters will remain on the
  404.       screen, and the cursor will advance to the next line.
  405.  
  406.     CTRL-X:    Erase Line
  407.  
  408.       When this control sequence is    entered, all input which had been
  409.       displayed on the screen will be deleted, and the input will,
  410.       once again, start from the beginning of the line.  The
  411.       characters displayed on the screen will be overwritten with
  412.       backspaces and, thus,    physically erased as well.
  413.  
  414.     CTRL-\:    Non-Interpret
  415.  
  416.       Assigning control sequences to editing functions has caused
  417.       these    characters to be excluded from direct entry as data on the
  418.       input    line.  If any special editing characters are to    be
  419.       entered, use the CTRL-\ sequence followed by the desired
  420.       character.  This character will then be displayed on the screen
  421.       and stored as    input without being interpreted    by ConIX.  To
  422.       enter    the non-interpret sequence itself, simply type it twice.
  423.  
  424.     DEL (7F    hex): Delete Character
  425.  
  426.       DEL is used to delete    the last typed character from the input
  427.       line.     The affected character    will be    echoed to the screen as    an
  428.       indication of    its erasure.  This function is best suited for
  429.       editing on a terminal    or printer that    cannot backspace.
  430.  
  431.  
  432.     3.5  Entering Commands
  433.  
  434.     When the ConIX prompt is displayed, commands may be entered in the
  435.     same way as when CP/M was being    used.  For example:
  436.  
  437.         <A:00> dir
  438.              .
  439.              .    displays the directory
  440.              .
  441.         <A:00> era foo.asm
  442.              .
  443.              .    erases FOO.ASM
  444.              .
  445.         <A:00> ed foo.asm
  446.              .
  447.              .    invokes    an editor on FOO.ASM
  448.              .
  449.         <A:00>
  450.  
  451.     As with    CP/M, all characters entered onto the command line in
  452.     lower case are mapped to upper case before execution.  If a
  453.     command    is built into ConIX, it    is run immediately (as are DIR and
  454.     ERA).  A command which is not internal (as ED) is searched for on
  455.  
  456.  
  457.  
  458.                        3-6
  459.  
  460.  
  461.  
  462.  
  463.  
  464.     ConIX Operating    System                  The Command Line
  465.  
  466.     disk with a .COM ending    (as ED.COM).
  467.  
  468.  
  469.     3.6  Executing a Program in Memory (!)
  470.  
  471.     ConIX contains a special command which allows you to execute a
  472.     program    stored in system memory    as if it were loaded from a .COM
  473.     file.  The syntax of this command is:
  474.  
  475.         <A:00> !(&address) (arg(s))
  476.  
  477.     where address is the location in memory    at which the program
  478.     resides.  The args list    is a group of filenames    or other data
  479.     which may be supplied to the program on    the command line for its
  480.     execution.  All    data areas and parameters will be set in the same
  481.     manner as when executing commands from disk.  Thus we can think    of
  482.     the ! command as causing the disk loading process to be    bypassed
  483.     entirely.
  484.  
  485.     If address is not specified, a default location    of 100 hex is
  486.     assumed.  This address is most significant as it is the    beginning
  487.     of the Transient Program Area (TPA) in memory.    Since all .COM
  488.     programs are loaded into memory    starting at this address, they can
  489.     be re-executed directly    from memory without having to be reloaded
  490.     from disk.
  491.  
  492.     Take, for example, the STAT program, supplied by Digital Research
  493.     with CP/M.  If you wanted to determine the size    of a file, you
  494.     would type:
  495.  
  496.         <A:00> stat foo.asm
  497.  
  498.     STAT.COM would be loaded from disk and executed, reporting the
  499.     number of Kbytes occupied by FOO.ASM on    disk.  Let's say you then
  500.     wanted to determine the    size of    another    file.  You could re-run
  501.     STAT in    the same way as    before,    except with a different    filename,
  502.     or, you    could type:
  503.  
  504.         <A:00> !  foo.com
  505.  
  506.     which would execute STAT directly from memory with the new
  507.     argument, FOO.COM.  The    reason this is possible    is that    all .COM
  508.     still remain in    memory after execution.     Therefore, the    ! command
  509.     skips the loading process and executes the program already stored
  510.     in memory.
  511.  
  512.     There are a few    things that you    should be aware    of when    using this
  513.     feature.  Firstly, some    programs modify    their code and/or data
  514.     areas while running in memory and, therefore, may not re-execute
  515.     properly.  Secondly, ConIX has no way of telling whether garbage
  516.     or an actual program resides in    the memory you specify.
  517.     Therefore, be sure that    there really is    a program in memory before
  518.     you instruct ConIX to run it.  The system may hang if invalid
  519.     instructions are executed.  If used properly, this command could
  520.     really save quite a bit    of time.
  521.  
  522.  
  523.  
  524.                        3-7
  525.  
  526.  
  527.  
  528.  
  529.  
  530.     The Command Line                ConIX Operating System
  531.  
  532.     3.7  Aborting Command Execution
  533.  
  534.     If you enter a command at the prompt level and then realize that
  535.     you do not want    to run it, you may abort its execution by using
  536.     any of a number    of different methods described below.
  537.  
  538.     If you specified a disk-based command (.COM) program, you can
  539.     easily cancel the request before execution begins by simply
  540.     entering the CTRL-X sequence.  You can tell if the command has not
  541.     yet begun to execute if    the cursor is still sitting on top of the
  542.     `<' of the `<A:00>' prompt.  In    other words, the Line Feed
  543.     character has not yet been printed.  At    this point, ConIX is in
  544.     the process of loading the program into    memory from the    disk file,
  545.     and the    command    can be aborted before it starts    to execute.
  546.     However, once execution    begins,    it becomes somewhat more difficult
  547.     to cancel.
  548.  
  549.     It is unfortunate that,    on most    systems, there exists no
  550.     convenient method of interrupting a program once invoked by the
  551.     user.  CP/M sometimes allows you to abort a program if it is
  552.     currently outputting to    the screen.  You may be    able to    stop the
  553.     output with a CTRL-S and then enter a CTRL-C which will    cause a
  554.     warm boot to take place.  However, if a    program    is disk-bound,
  555.     there is no way    it can be stopped other    than by    forcing    a BDOS
  556.     error message by pulling out the disk from the drive (aargh!), or
  557.     performing a cold system reset.
  558.  
  559.     With ConIX, as in CP/M,    typing CTRL-S will temporarily stop screen
  560.     (CON) output and CTRL-C    can be used to abort execution.     In
  561.     addition, ConIX    provides a feature called Disk Wait Control which
  562.     allows you to use a CTRL-S to pause execution when a program is
  563.     accessing a disk.  Once    paused,    you may    similarly abort    using
  564.     CTRL-C,    or continue running the    program    by typing any other
  565.     character.  The    only type program which    cannot be stopped is one
  566.     which is performing some in-memory calculation since it    would be
  567.     impossible for ConIX to    intervene.
  568.  
  569.  
  570.     3.8  Multiple Commands Per Line
  571.  
  572.     More than one command may be entered on    a single command line by
  573.     simply separating each command and its arguments (if any) with a
  574.     semicolon, as:
  575.  
  576.         <A:00> dir; era    foo.asm; ed foo.asm
  577.  
  578.     which runs the commands    in sequence from left to right,    just as    if
  579.     you would have typed each command on a separate    command    line.  Any
  580.     spaces before or after the semicolon are optional.  This is very
  581.     useful if you have some    time consuming commands    to run in sequence
  582.     and don't really want to wait around for each one to finish before
  583.     starting the next.
  584.  
  585.  
  586.  
  587.  
  588.  
  589.  
  590.                        3-8
  591.  
  592.  
  593.  
  594.  
  595.  
  596.     ConIX Operating    System                  The Command Line
  597.  
  598.     3.9  Command Arguments
  599.  
  600.     Most commands can be invoked with arguments, which are words
  601.     passed to the program that tells it something about what you want
  602.     done.  A program can either request data from the user while it's
  603.     running, through interactive prompts or    questions, or it could
  604.     take the needed    information from the command line arguments.  The
  605.     latter method is the route most    programs take if all they require
  606.     is, say, a filename, as    is the case with:
  607.  
  608.         <A:00> ed foo.asm
  609.  
  610.     where FOO.ASM is ED's command line argument.  This is also the
  611.     case with most of the ConIX internal commands which gather their
  612.     operational data from the command line.
  613.  
  614.     ConIX and CP/M differentiate between separate arguments    by the
  615.     space or tab you type between them.  For example, COMPARE may be a
  616.     user-supplied program which compares two files,    as:
  617.  
  618.         <A:00> compare <file1> <file2>
  619.  
  620.     where the contents of file1 and    file2 are compared to each other.
  621.     The user may issue the command:
  622.  
  623.         <A:00> compare foo.asm foo.sav
  624.  
  625.     where FOO.ASM is the first argument, and FOO.SAV is the    second
  626.     argument to the    program    COMPARE.  Any spaces or    tabs between the
  627.     arguments or after the command name will be truncated to a single
  628.     space.
  629.  
  630.     It is often useful to combine multiple words into one argument
  631.     without    having the spaces between them act as separators to break
  632.     them up.  Take,    for example, the internal command ECHO,    which is a
  633.     utility    that prints its    arguments, as:
  634.  
  635.         <A:00> echo    Welcome    to  ConIX!
  636.         WELCOME    TO CONIX!
  637.         <A:00>
  638.  
  639.     Notice how the spaces (or tabs)    were truncated to a single space
  640.     and the    lowercase letters were mapped to uppercase.  In    this
  641.     example, the total number of arguments to the ECHO command is
  642.     three.    If, however, you were to enclose the arguments in double
  643.     quotes,    you'd get:
  644.  
  645.         <A:00> echo "    Welcome     to  ConIX!"
  646.            Welcome  to    ConIX!
  647.         <A:00>
  648.  
  649.     You can    see that the spaces were included and the characters were
  650.     not mapped to uppercase.  In this instance, there is only one
  651.     argument which contains    the entire string of three words and
  652.     spaces.
  653.  
  654.  
  655.  
  656.                        3-9
  657.  
  658.  
  659.  
  660.  
  661.  
  662.     The Command Line                ConIX Operating System
  663.  
  664.     In effect, the double quotes tell ConIX    not to change the case of
  665.     letters    or interpret the meaning of any    separation characters
  666.     within them.  So far, you've been introduced to    the space, tab,
  667.     and semicolon as separator characters.    There are others which you
  668.     will come across as you    read on.
  669.  
  670.     If you place nothing within a double quote string, then    what you
  671.     get is called the Null Argument.  It occupies space on the command
  672.     line as    an argument, however, it consists of only one character, a
  673.     NUL, which is the same as a CTRL-@ or 00 hex.
  674.  
  675.  
  676.     3.10  Backslash    (Non-Interpret)    Character
  677.  
  678.     One of the most    powerful characters, so    to speak, is the
  679.     backslash, `\'.     It removes any    special    meaning    that the character
  680.     following it may have to ConIX,    and puts it onto the command line
  681.     just like another character.  For example, if you want to place    a
  682.     double quote within a quoted argument string, you can precede it
  683.     with a backslash as:
  684.  
  685.         <A:00> echo "\"      Welcome  to  ConIX!\""
  686.         "   Welcome  to     ConIX!"
  687.         <A:00>
  688.  
  689.     If you forgot to enter the backslashes,    you'd get five arguments.
  690.     The first a null, the second WELCOME, the third    TO, the    fourth
  691.     CONIX!,    and the    fifth another null argument.
  692.  
  693.     As you may suspect, the    backslash can also be used in many other
  694.     instances as well.  For    example:
  695.  
  696.         <A:00> echo    Welcome\    \ to\ \    C\o\nIX!
  697.         WELCOME     TO  ConIX!
  698.         <A:00>
  699.  
  700.     The backslashes    before the spaces between the words serve to join
  701.     them together to form one argument.  The backslash tells the
  702.     Command    Line Processor to ignore the special meaning of    the space
  703.     characters, namely, to separate    arguments.  Thus, the spaces are
  704.     treated    as any other character and are included    within the
  705.     argument.  The backslash before    the o and n of ConIX! causes these
  706.     characters to be entered onto the command line in the same case    as
  707.     they were typed.  In this instance, the    mapping    of lowercase
  708.     characters to uppercase    is suppressed.
  709.  
  710.     You can    even use the backslash itself as a character on    the
  711.     command    line.  Simply backslash    the backslash (meaning,    don't
  712.     interpret the non-interpret character) as:
  713.  
  714.         <A:00> echo "Here is a Backslash \\ Character"
  715.         Here is    a Backslash \ Character
  716.         <A:00>
  717.  
  718.  
  719.  
  720.  
  721.  
  722.                        3-10
  723.  
  724.  
  725.  
  726.  
  727.  
  728.     ConIX Operating    System                  The Command Line
  729.  
  730.     3.11  Forced Case Mapping
  731.  
  732.     As we have shown in previous examples, characters entered on the
  733.     command    line are normally mapped to uppercase, unless they are
  734.     preceded by a backslash    or enclosed in double quotes.  Forced Case
  735.     Mapping    is a feature which can even cause the mapping of
  736.     characters within double quotes.  It is    implemented by using:
  737.  
  738.         _L   to    map all    characters to lowercase
  739.         _U   to    map all    characters to uppercase
  740.         _N   do    not map    any characters
  741.         __   to    return to standard case    mapping
  742.  
  743.     For example, `_L' (underscore followed by the letter ell) is used
  744.     as:
  745.  
  746.         <A:00> echo _lHello "There"
  747.         hello there
  748.         <A:00>
  749.  
  750.     where all characters in    lowercase remained untouched, but
  751.     characters in uppercase    were mapped to lowercase.  By definition,
  752.     the `_L' caused    all characters following it to be mapped to
  753.     lowercase, even    those in double    quotes.     Similarly, using `_U'
  754.     yields the opposite result, as:
  755.  
  756.         <A:00> echo _uHello "There"
  757.         HELLO THERE
  758.         <A:00>
  759.  
  760.     where all characters were force-mapped to uppercase.
  761.  
  762.     If no mapping is desired, use `_N' as:
  763.  
  764.         <A:00> echo _nHello There
  765.         Hello There
  766.         <A:00>
  767.  
  768.     where all characters remain in the same    case as    they were typed.
  769.     This is    operationally equivalent to using OPT -UC before the
  770.     command    and OPT    +UC after it (as described later).
  771.  
  772.     By using `__' (two underscores), the standard case mapping can be
  773.     returned to its    default    setting, as:
  774.  
  775.         <A:00> echo _uHello "There" __Hello "There"
  776.         HELLO THERE HELLO There
  777.         <A:00>
  778.  
  779.     The `_U' converted all characters until    the `__' to uppercase, and
  780.     after the `__',    regular    case mapping was invoked, returning the
  781.     case privileges    of the double quotes.
  782.  
  783.  
  784.  
  785.  
  786.  
  787.  
  788.                        3-11
  789.  
  790.  
  791.  
  792.  
  793.  
  794.     The Command Line                ConIX Operating System
  795.  
  796.     3.12  Control Characters
  797.  
  798.     ConIX will not allow you to use    the CTRL key to    enter actual
  799.     control    characters onto    the command line.  These characters are
  800.     generally non-printable, and are sometimes used    to modify certain
  801.     terminal characteristics.  In most instances they can be
  802.     considered undesirable glitch, and may actually    interfere with
  803.     program    operation.  It is for this reason that they are    normally
  804.     stripped from the command line.
  805.  
  806.     Control    characters span    the range of NUL (00 hex) to US    (1F hex).
  807.     One such character is a    CTRL-L,    which clears the screen    on most
  808.     terminals.  This sequence is entered by    holding    down the <CTRL>
  809.     key with one finger while pressing the `L' key with another.  If
  810.     you entered this sequence on the command line, you'd see:
  811.  
  812.         <A:00> ^L
  813.  
  814.     ConIX types the    `^' before the `L' to represent    the entry of the
  815.     CTRL-L character sequence.  If you entered a CTRL-L as an argument
  816.     to ECHO, you'd get:
  817.  
  818.         <A:00> echo ^L
  819.  
  820.         <A:00>
  821.  
  822.     which will not clear the screen, but print just    a blank    line.
  823.     Why?  Because ConIX strips off all control characters from the
  824.     command    line.  It is as    if you hadn't typed the    control    character
  825.     at all.     But we    shall not ban them totally, for    there are
  826.     instances when you would want them to be there.
  827.  
  828.     There are a few    methods    that can be used to include control
  829.     characters on the command line.     You could enter the control
  830.     sequence in double quotes, as:
  831.  
  832.         <A:00> echo "^L"
  833.  
  834.     because    the quotes allow control characters within them.  Or, you
  835.     could prefix the control sequence with a backslash:
  836.  
  837.         <A:00> echo \^L
  838.  
  839.     because    backslash removes any special meaning given by ConIX to
  840.     the character following    it.
  841.  
  842.     There is also a    special    character, the circumflex or up-arrow,
  843.     which can be used to represent a control sequence, without
  844.     actually using the CTRL    key.  This two-character sequence appears
  845.     on the screen to be almost identical to    entering the actual
  846.     control    character.  Instead, you spell it out manually as:
  847.  
  848.         <A:00> echo ^l
  849.  
  850.  
  851.  
  852.  
  853.  
  854.                        3-12
  855.  
  856.  
  857.  
  858.  
  859.  
  860.     ConIX Operating    System                  The Command Line
  861.  
  862.     where you type a `^' followed by an `l'    (ell), as opposed to the
  863.     two-stroke CTRL-L code.     This sequence will be changed into the
  864.     single control character code it represents.  It is especially
  865.     useful in command files    where, if the actual character would
  866.     appear inside it, the screen would clear when you TYPE or list the
  867.     file.  Also, some editors don't    allow entry of control characters.
  868.  
  869.     Another    special    character is available which will change the
  870.     normal operation of ConIX to remove all    control    characters from
  871.     the command line.  This    is done    with the tilde or squiggle
  872.     character, where:
  873.  
  874.         <A:00> ~echo ^L
  875.          . . . screen clears
  876.         <A:00>
  877.  
  878.     which allows a control character sequence to be    included anywhere
  879.     on the command line.  Using a second tilde would reset ConIX to
  880.     strip off control chars    for the    remainder of the line or until
  881.     another    tilde.    In other words,    the tilde has a    toggling on/off
  882.     action.     For example:
  883.  
  884.         <A:00> echo ~^L~ ^A^B^C~ ^G
  885.          . . . screen clears and terminal beeps
  886.         <A:00>
  887.  
  888.     causes only the    first CTRL-L and last CTRL-G to    be accepted.  The
  889.     first tilde turns control characters on, the second off, and the
  890.     third back on again.  Note that    using the tilde    will not affect
  891.     the other methods of enabling entry of control characters (i.e.
  892.     "", \, ^).
  893.  
  894.  
  895.     3.13  Data Type    Conversions
  896.  
  897.     Many built-in functions    require    data to    be entered in the form of
  898.     hexadecimal or decimal numbers.     For convenience, you may specify
  899.     such a number in either    hex or decimal format as:
  900.  
  901.         &<hexnum>
  902.  
  903.     where hexnum is    a hexadecimal number from 0-FFFF hex, or,
  904.  
  905.         #<decnum>
  906.  
  907.     where decnum is    a decimal number from 0-65535.    In addition, you
  908.     may specify a number as    its ASCII character equivalent,    as:
  909.  
  910.         '<char>
  911.  
  912.     which will cause the specified char to be converted into its
  913.     numeric    value and then passed to the command.
  914.  
  915.     Wherever commands are listed as    requiring numeric arguments, we
  916.     will use certain conventions for describing the    default    data type
  917.  
  918.  
  919.  
  920.                        3-13
  921.  
  922.  
  923.  
  924.  
  925.  
  926.     The Command Line                ConIX Operating System
  927.  
  928.     that command or    function is expecting.    If an `&' is indicated,
  929.     the default data type is hexadecimal.  If a `#'    is indicated, the
  930.     default    data type is decimal.  In each case, the number    may be
  931.     entered    in the default type without specifying its corresponding
  932.     type character.     Only when a non-default number    is entered must    it
  933.     be preceded by its special type    character.
  934.  
  935.     To illustrate, take for    example    the EXAM command which examines
  936.     memory.     It is defined as:
  937.  
  938.         EXAM <&start> <&end>
  939.  
  940.     where start and    end are, by default, two hexadecimal numbers
  941.     describing the start and end addresses.     If you    wished to examine
  942.     memory between 00 and FF hex, you'd type:
  943.  
  944.         <A:00> exam 0 ff
  945.  
  946.     or, if you speak only decimal, you can type:
  947.  
  948.         <A:00> exam #0 #255
  949.  
  950.     which would produce operationally equivalent results.  ConIX
  951.     internally performs these conversions automatically.
  952.  
  953.     Similarly, the SUM command will    add two    numbers, as:
  954.  
  955.         SUM <#num1> <#num2>
  956.  
  957.     where num1 and num2 are, by default, two decimal numbers.  If you
  958.     wished to add 10 and 15, you'd type:
  959.  
  960.         <A:00> sum 10 15
  961.  
  962.     or, if you wanted to sum two hex numbers, just type:
  963.  
  964.         <A:00> sum &a &f
  965.  
  966.     You can    also mix hex and decimal numbers as:
  967.  
  968.         <A:00> sum &a 15
  969.  
  970.     Additionally, you can use an ASCII character as:
  971.  
  972.         <A:00> sum '^j 15
  973.  
  974.     Each of    these examples would produce the decimal result    of 25.
  975.     Note that the data types given in the arguments    do not affect the
  976.     data type of the result.  SUM will always print    a decimal result,
  977.     regardless of whether it was given hex or decimal numbers as
  978.     arguments.  You    can convert results to decimal or hex by capturing
  979.     the command's output using redirection and then    passing    the data
  980.     to the BDEC or DECB internal commands.    This process will be
  981.     described clearly in later sections.
  982.  
  983.  
  984.  
  985.  
  986.                        3-14
  987.  
  988.  
  989.  
  990.  
  991. "CHAPTER1DOC τCHAPTER2DOC  `(CHAPTER3DOC