home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / alib / d1xx / d168 / dillonstuff.lha / doc / shell.doc < prev   
Text File  |  1988-11-22  |  21KB  |  715 lines

  1.  
  2. SHELL V2.11  (C)Copyright 1986-88, Matthew Dillon, All Rights Reserved.
  3. Freely distributable for non-profit only.
  4.  
  5.         old users: Please read the version history at the bottom of
  6.         this document for changes and additions.
  7.  
  8.  
  9.       (A)   Compiling
  10.       (B)   Overview
  11.       (C)   Quicky tech notes on implimentation.
  12.  
  13.       (D)   Command pre-processor
  14.       (E)   Command-list
  15.       (F)   special SET variables
  16.       (G)   Version history
  17.  
  18.        See also EXAMPLES.TXT
  19.  
  20.             NEW FEATURES THIS VER
  21.  
  22.     (Taken from the history below):  an IPC implementation, ENV: variable
  23.     support, many commands enhanced, some bugs fixed.
  24.  
  25.                 COMPILATION
  26.  
  27.  
  28.     The SHELL will compile only under AZTEC C and requires my
  29.     support library (SUP32.LIB) to link as well as a precompiled
  30.     symbol table of all AMIGA .H files.  A Makefile is included.
  31.     Note that the shell must be compiled using 32 bit integers (+L)
  32.     option and linked with SUP32.LIB and C32.LIB.  Additionaly, my
  33.     dres.library must be present in order to use the IPC facility.
  34.  
  35.     NOTE that converting the shell to use 16 bit integers does not
  36.     make it significantly smaller or faster.  Do not waste your time.
  37.  
  38.  
  39.  
  40.                  OVERVIEW
  41.  
  42.  
  43.     Matthew Dillon
  44.     891 Regal Rd.
  45.     Berkeley, California 94708
  46.     USA
  47.  
  48.     ..!ucbvax!dillon
  49.     dillon@ucbvax.Berkeley.EDU
  50.     dillon@cory.Berkeley.EDU
  51.  
  52.     This is not a shareware program.  My basic philosophy is to write
  53.     software for myself and distribute it if I think it will benefit
  54.     others (that is, unless I start going broke).  Contribute if you want
  55.     to.
  56.  
  57.     IT IS SUGGESTED THAT YOU USE CONMAN OR THE NEW 1.3 ENHANCED CONSOLE
  58.     DEVICE.  CONMAN does to my shell what Steve did in his Manxfied (old
  59.     term) 16 bit version of my shell, and more.  It isn't required, but
  60.     CONMAN (shareware) complements the functionality of the shell quite
  61.     well.
  62.  
  63.  
  64.    PROBLEMS
  65.  
  66.    -Make sure you give the SHELL a big enough stack, especially if you
  67.     intend on running shell scripts which source other scripts.  8192
  68.     is suggested.  Remember, STACK must be run BEFORE you run the shell.
  69.     Running it from the shell does not effect the shell's stack.
  70.  
  71.    -You should not redirect the RUN command. to redirect the command the
  72.     RUN command is running, embed a standard CLI redirection in the command
  73.     string:
  74.  
  75.     RUN ">file" command
  76.  
  77.    -Append '>>' does NOT work with BCPL programs.  It does work with all
  78.     internal and non-bcpl (read C) programs.
  79.  
  80.    OVERVIEW of the major features:
  81.  
  82.    -History mechanism (complements conman quite nicely, in fact)
  83.    -Redirection
  84.    -Piping (sort of)
  85.    -Command search path by name and by CLI path list
  86.    -Aliases
  87.    -Variables & variable handling (embedded variables), and enviroment variables
  88.    -Automatic file name expansion via '?' and '*'
  89.    -Conditionals
  90.    -Shell Scripts
  91.    -many built in commands to speed things up
  92.  
  93.  
  94.                 COMMAND PREPROCESSOR
  95.  
  96.  
  97.    preprocessing is done on the command line before it is passed on to
  98.    an internal or external routine:
  99.  
  100.    ^c        where c is a character is converted to that control character.
  101.         Thus, say '^l' for control-l.
  102.  
  103.    $name    where name is a variable name.  Variable names can consist of
  104.         0-9, a-z, A-Z, and underscore (_).  The contents of the
  105.         specified variable is used.  If the variable doesn't exist,
  106.         the specifier is used.  That is, if the variable 'i' contains
  107.         'charlie', then '$i' -> 'charlie'.  If the variable 'i' doesn't
  108.         exist, then '$i'->'$i' .
  109.  
  110.    ;        delimits commands.     echo charlie ; echo ben.
  111.  
  112.    ' '      (a space). Spaces delimit arguments.
  113.  
  114.    "string" a quoted string.  For instance, if you want to echo five spaces
  115.         and an 'a':
  116.  
  117.         echo      a       -> a
  118.         echo "    a"      ->      a
  119.  
  120.    \c        overide the meaning of special characters.    '\^a' is a
  121.         circumflex and an a rather than control-a.    To get a backslash,
  122.         you must say '\\'.
  123.  
  124.         also used to overide alias searching for commands.
  125.  
  126.    >file    specify output redirection.  All output from the command is
  127.         placed in the specified file.
  128.  
  129.    >>file   specify append redirection (Does not work with BCPL programs).
  130.  
  131.    <file    specify input redirection.    The command takes input from the
  132.         file rather than the keyboard (note: not all commands require
  133.         input).  It makes no sense to say  'echo <charlie' since
  134.         the 'echo' command only outputs its arguments.
  135.  
  136.    |        PIPE specifier.  The output from the command on the left becomes
  137.         the input to the command on the right.  The current SHELL
  138.         implimentation uses temporary files to store the data.
  139.  
  140.    !!        execute the previously executed command.
  141.    !nn        (nn is a number).  Insert the history command numbered n (see
  142.         the HISTORY command)
  143.    !partial search backwards through the history list for a command which
  144.         looks the same as 'partial', and execute it.
  145.  
  146.    #        Enter comment.  The rest of the line is discarded (note: \#
  147.         will, of course, overide the comment character's special
  148.         meaning)
  149.  
  150.    ^search^replace
  151.         a '^' at the beginning of the line indicates history
  152.         replacement.  The first occurance of 'search' in the previous
  153.         command is changed to 'replace', and the command executed.
  154.  
  155.  
  156.  
  157.                  SHELL COMMANDS
  158.  
  159.  
  160.    The first argument is the command-name... if it doesn't exist in the
  161.    list below and isn't an alias, it is assumed to be an external (disk)
  162.    command.
  163.  
  164.    AUTOMATIC SOURCING may be accomplished by naming shell scripts with a
  165.    .sh suffix.    Thus, if you say 'stuff' and the file 'stuff.sh' exists in
  166.    your current or C: directory, it will be SOURCED with any arguments you
  167.    have placed in the $_passed variable.
  168.  
  169.               EXCEPTION_PROCESSING
  170.  
  171.       if no _except variable exists, any command which fails causes the
  172.       rest of the line to abort as if an ABORTLINE had been executed.  If
  173.       the _except variable exists, it is of the form:
  174.  
  175.       "nnn;commands..."
  176.  
  177.       where nnn is some value representing the minimum return code required
  178.       to cause an error.  Whenever a command returns a code which is
  179.       larger or equal to nnn, the commands in _except are executed before
  180.       anything.  WHEN _except EXISTS, THE COMMAND LINE DOES NOT ABORT
  181.       AUTOMATICALLY.  Thus, if you want the current line being executed
  182.       to be aborted, the last command in _except should be an "abortline".
  183.  
  184.       exception handling is disabled while in the exception handling routine
  185.       (thus you can't get into any infinite loops this way).
  186.  
  187.       Thus if _except = ";", return codes are completely ignored.
  188.  
  189.       example:
  190.  
  191.       set _except "20;abortline"
  192.  
  193.  
  194.    ABORTLINE
  195.  
  196.       or just 'abort'.  Causes the rest of the line to be aborted. Used in
  197.       conjunction with exception handling.
  198.  
  199.       % echo a;abort;echo b
  200.       a
  201.  
  202.  
  203.    HELP
  204.  
  205.       simply displays all the available commands.  The commands are
  206.       displayed in search-order.  That is, if you give a partial name
  207.       the first command that matches that name in this list is the one
  208.       executed.  Generally, you should specify enough of a command so that
  209.       it is completely unique.
  210.  
  211.    QUIT
  212.    EXIT
  213.    RETURN [n]
  214.  
  215.       quit my SHELL (awww!).  End, El-Zappo, Kapow. Done, Finis.  If you
  216.       use RETURN and are on the top source level, the shell exits with the
  217.       optional return code.  (see RETURN below)
  218.  
  219.  
  220.    SET
  221.    SET name
  222.    SET name string
  223.  
  224.       The first method lists all current variable settings.
  225.       The second method lists the setting for that particular variable,
  226.       or creates the variable if it doesn't exist (to "")
  227.       The last method sets a variable to a string.
  228.  
  229.       see the section on special _ variables down below
  230.  
  231.  
  232.    UNSET name name name....
  233.  
  234.       unset one or more variables.  Deletes them entirely.
  235.  
  236.  
  237.    SETENV name string
  238.  
  239.       Create/Modify an enviroment variable.  The enviroment is maintained
  240.       in ENV:, with a separate file for each enviroment variable.  This
  241.       should be assigned to a directory somewhere.
  242.  
  243.    UNSETENV name name name....
  244.  
  245.       remove the specified variables from the enviroment list.    This
  246.       call DeleteFile()'s the enviroment variable from ENV:
  247.  
  248.    PRINTENV
  249.  
  250.       Print the contents of the enviroment directory ENV:
  251.  
  252.    ALIAS
  253.    ALIAS name
  254.    ALIAS name string
  255.  
  256.       same as SET, but applies to the alias list.  You can alias a single
  257.       name to a set of commands.  For instance:
  258.  
  259.       alias hi "echo a; echo b"
  260.  
  261.       then you can simply say 'hi'.  Aliases come in two forms the second
  262.       form allows you to place the arguments after an alias in a variable
  263.       for retrieval:
  264.  
  265.       alias xxx "%i echo this $i is a test"
  266.  
  267.       % xxx charlie
  268.       this charlie is a test
  269.  
  270.       The rest of the command line is placed in the specified variable
  271.       for the duration of the alias.  This is especially useful when used
  272.       in conjunction with the 'FOREACH' command.
  273.  
  274.  
  275.    UNALIAS name name name...
  276.  
  277.       delete aliases..
  278.  
  279.  
  280.    ECHO string
  281.    ECHO -n string
  282.  
  283.       echo the string to the screen.  If '-n' is specified, no newline is
  284.       output.
  285.  
  286.  
  287.    STRHEAD  varname breakchar string
  288.  
  289.       remove everything after and including the breakchar in 'string' and
  290.       place in variable 'varname':
  291.  
  292.      % strhead j . aaa.bbb
  293.      % echo $j
  294.      aaa
  295.      %
  296.  
  297.  
  298.    STRTAIL  varname breakchar string
  299.  
  300.       remove everything before and including the breakchar in 'string' and
  301.       place in variable 'varname':
  302.  
  303.      % strtail j . aaa.bbb
  304.      % echo $j
  305.      bbb
  306.      %
  307.  
  308.  
  309.    SOURCE file [arguments]
  310.  
  311.       execute commands from a file.  You can create SHELL programs in
  312.       a file and then execute them with this command.  Source'd files
  313.       have the added advantage that you can have loops in your command
  314.       files (see GOTO and LABEL).  You can pass SOURCE files arguments
  315.       by specifying arguments after the file name.  Arguments are passed
  316.       via the _passed variable (as a single string).
  317.  
  318.       Automatic 'sourcing' is accomplished by placing a .sh extension on
  319.       the file and executing it as you would a C program:
  320.  
  321.       --------- file hello.sh ---------
  322.       foreach i ( $_passed ) "echo yo $i"
  323.       ---------------------------------
  324.       % hello a b c
  325.       yo a
  326.       yo b
  327.       yo c
  328.  
  329.       NOTE: The hash '#' as the FIRST character on the line is a comment
  330.         within script files.
  331.  
  332.    MV from to
  333.    MV from from from ... from todir
  334.  
  335.       Allows you to rename a file or move it around within a disk.  Allows
  336.       you to move 1 or more files into a single directory.  (if todir == '/',
  337.       the items are moved to the parent directory).
  338.  
  339.    CD
  340.    CD ..
  341.    CD path
  342.  
  343.       Change your current working directory.  You may specify '..' to go
  344.       back one directory (this is a CD specific feature, and does not
  345.       work with normal path specifications).  Note that CD / also goes
  346.       back one directory.
  347.  
  348.       CD without any arguments displays the path of the directory you
  349.       are currently in.
  350.  
  351.  
  352.    PWD
  353.       rebuild _cwd by backtracing from your current directory.    The $_cwd
  354.       variable can get confused by Assign'd labels.
  355.  
  356.    RM [-r] file file file...
  357.  
  358.       DeleteFile().  Remove the specified files.  Remove always returns
  359.       errorcode 0.  You can remove empty directories.  The '-r' option
  360.       will remove non-empty directories by recursively removing all sub
  361.       directories.
  362.  
  363.    CP file    (to current directory)
  364.    CP [-r] dir    (to current directory)
  365.    CP file file
  366.    CP file1 file2...fileN dir
  367.    CP [-r] dir1 dir2...dirN dir
  368.  
  369.       copy files or directories.  when copying directories, the "-r" option
  370.       must be specified to copy subdirectories as well.  Otherwise, only
  371.       top level files in the source directory are copied.
  372.  
  373.  
  374.    MKDIR name name name...
  375.  
  376.       create the following directories.
  377.  
  378.  
  379.    HISTORY [partial_string]
  380.  
  381.       Displays the enumerated history list.  The size of the list is
  382.       controlled by the _history variable.  If you specify a partial-
  383.       string, only those entries matching that string are displayed.
  384.  
  385.  
  386.    MEM
  387.  
  388.       Display current memory statistics for CHIP and FAST memory.
  389.  
  390.  
  391.    CAT [file file....]
  392.  
  393.       Type the specified files onto the screen.  If no file is specified,
  394.       STDIN in used.  CAT is meant to output text files only.  You cannot
  395.       use CAT to join binaries together.
  396.  
  397.    DIR [-s] [path path ... ]
  398.  
  399.       Get a directory listing of the current directory or specified
  400.       directories.  The -s option causes DIR to display a short-form
  401.       listing.
  402.  
  403.    DEVINFO [device: device:... ]
  404.  
  405.       Display Device statistics for the current device (CD base), or
  406.       specified devices.
  407.  
  408.  
  409.    FOREACH varname ( strings ) command
  410.  
  411.       'strings' is broken up into arguments.  Each argument is placed in
  412.       the variable 'varname' in turn and 'command' executed.  To execute
  413.       multiple commands, place them in quotes:
  414.  
  415.       % foreach i ( a b c d ) "echo -n $i;echo \" ha\""
  416.       a ha
  417.       b ha
  418.       c ha
  419.       d ha
  420.  
  421.       Foreach is especially useful when interpreting passed arguments in
  422.       an alias or source file.
  423.  
  424.       NOTE: a GOTO inside a FOREACH will have an indeterminate effect.
  425.  
  426.  
  427.    FOREVER command
  428.    FOREVER "command;command;command..."
  429.  
  430.       The specified commands are executed over and over again forever.
  431.  
  432.       -Execution stops if you hit ^C
  433.       -If the commands return with an error code.
  434.  
  435.       NOTE: a GOTO inside will have an indeterminate effect.
  436.  
  437.  
  438.    RETURN [value]
  439.  
  440.       return from a source file.  The rest of the source file is
  441.       discarded.  If given, the value becomes the return value for the
  442.       SOURCE command.  If you are on the top level, this value is returned
  443.       as the exit code for the shell.
  444.  
  445.  
  446.    IF -f path
  447.    IF argument conditional argument ;
  448.    IF argument
  449.  
  450.       If a single argument is something to another argument.  Conditional
  451.       clauses allowed:
  452.  
  453.       <, >, =, and combinations (wire or).  Thus <> is not-equal, >=
  454.       larger or equal, etc...
  455.  
  456.       If the left argument is numeric, both arguments are treated as
  457.       numeric.
  458.  
  459.       usually the argument is either a constant or a variable ($varname).
  460.  
  461.       The third form if IF is conditional on the existance of the argument.
  462.       If the argument is a "" string, then FALSE , else TRUE.
  463.  
  464.       The first form is TRUE if the path can be openned with modes 1005.
  465.  
  466.  
  467.    ELSE ;
  468.  
  469.       else clause.
  470.  
  471.  
  472.    ENDIF ;
  473.  
  474.       the end of an if statement.
  475.  
  476.  
  477.    LABEL name
  478.  
  479.       create a program label right here.  You can only have labels within
  480.       a source file.
  481.  
  482.  
  483.    GOTO label
  484.  
  485.       goto the specified label name.  You can only use this command from a
  486.       source file.
  487.  
  488.  
  489.    DEC var
  490.    INC var
  491.  
  492.       decrement or increment the numerical equivalent of the variable and
  493.       place the ascii-string result back into that variable.
  494.  
  495.  
  496.    INPUT varname
  497.  
  498.       input from STDIN (or a redirection, or a pipe) to a variable.  The
  499.       next input line is placed in the variable.
  500.  
  501.  
  502.    VER
  503.  
  504.       display my name, the version number, and the version date.
  505.  
  506.    IPC appname[.project] command
  507.  
  508.       Send an IPC command to the .CMD IPC domain for the specified
  509.       application.  An optional project name within that application
  510.       may be supplied.    The text command is sent to the application.
  511.  
  512.       Only applications that support the DRES.LIBRARY IPC interface
  513.       can communicate via this command.  DRES.LIBRARY must exist for
  514.       this command to work.  Examples:
  515.  
  516.       forever "ipc dmouse mouse;ipc dmouse nomouse"     (DMouse V1.11 and beyond)
  517.  
  518.       Currently, the shell cannot receive IPC commands.
  519.  
  520.    SLEEP timeout
  521.  
  522.       Sleep for 'timeout' seconds.
  523.  
  524.  
  525.  
  526.               SPECIAL VARIABLES
  527.  
  528.  
  529.    _prompt
  530.      This variable is set to the command you wish executed that will
  531.      create your prompt.
  532.  
  533.    _history
  534.      This variable is set to a numerical value, and specifies how far
  535.      back your history should extend.
  536.  
  537.    _histnum
  538.      This variable contains the history # of the next command that
  539.      will be executed.
  540.  
  541.    _debug
  542.      Debug mode... use it if you dare.  must be set to some value
  543.  
  544.    _verbose
  545.      Verbose mode (for source files).  display commands as they are
  546.      executed.
  547.  
  548.    _maxerr
  549.      The worst (highest) return value to date.  To use this, you usually
  550.      set it to '0', then do some set of commands, then check it.
  551.  
  552.    _lasterr
  553.      Return code of last command executed.    This includes internal
  554.      commands as well as external comands, so to use this variables
  555.      you must check it IMMEDIATELY after the command in question.
  556.  
  557.    _cwd
  558.      Holds a string representing the current directory we are in from
  559.      root.    The SHELL can get confused as to its current directory if
  560.      some external program changes the directory.  Use PWD to rebuild
  561.      the _cwd variable in these cases.
  562.  
  563.    _passed
  564.      This variable contains the passed arguments when you SOURCE a file
  565.      or execute a .sh file.  For instance:
  566.  
  567.      test a b c d
  568.  
  569.      -------- file test.sh ----------
  570.      echo $_passed
  571.      foreach i ( $_passed ) "echo YO $i"
  572.      --------------------------------
  573.  
  574.  
  575.    _path
  576.      This variable contains the search path when the shell is looking
  577.      for external commands.  The format is:  DIR,DIR,DIR  Each DIR must
  578.      have a trailing ':' or '/'.  The current directory is always
  579.      searched first.  The entire path will be searched first for the
  580.      <command>, then for <command>.sh (automatic shell script sourcing).
  581.  
  582.      The default _path is set to  "c:,ram:,ram:c/,df1:c/,df0:c/"
  583.  
  584.      NOTE:    The CLI path is also searched.
  585.  
  586.     _ignoreeof
  587.      If this variable exists, EOF is ignored on interactive
  588.      terminals.  This prevents accidental logouts.
  589.  
  590.     _copysilent
  591.      If this variable exists, the CP command will be silent.  The
  592.      default is now for CP to be verbose.
  593.  
  594.     _copydate
  595.     If this variables exists, the CP command will attempt to
  596.     transfer the datestamp src->dst file/dir.  For directories,
  597.     only those that CP must create will get the old datestamp
  598.     transfered to them.  Additionaly, the COMMENT, if any, will
  599.     the transfered src->dst file/dir.
  600.  
  601.  
  602.  
  603.                 TECH NOTES
  604.  
  605.  
  606.  
  607.    PIPES have been implimented using temporary RAM: files.  Thus, you
  608.    should be careful when specifying a 'ram:*' expansion as it might
  609.    include the temp. files.  These files are deleted on completion of
  610.    the pipe segment.
  611.  
  612.    The file names used are completely unique, even with multiple shells
  613.    running simultaniously.
  614.  
  615.    My favorite new feature is the fact that you can now redirect to and
  616.    from, and pipe internal commands.  'echo charlie >ram:x', for
  617.    instance.  Another favorite:
  618.  
  619.       echo "echo mem | shell" | shell
  620.  
  621.    To accomplish these new features, I completely re-wrote the command
  622.    parser in execom.c
  623.  
  624.    The BCPL 'RUN' command should not be redirected.. .strange things
  625.    happen.  You can use redirection WITHIN the RUN's command line, of
  626.    course, but it should be quoted so the shell doesn't think the
  627.    redirection is for it.
  628.  
  629.    NO BCPL program should be output-append redirected (>>).
  630.  
  631.  
  632.  
  633.                  VERSION HISTORY
  634.  
  635.     V2.11:
  636.     -IPC command added (requires dres.library to work).  All new
  637.      versions of my programs will support this IPC interface.
  638.  
  639.     V2.10:
  640.     -Command dispatch has been fixed... RUN used to create problems
  641.      sometimes (would give you a CLI prompt when it should not have).
  642.  
  643.     -MV fixed ... had problems when moving things to the current
  644.      directory ("") and names starting with '/'.
  645.  
  646.     -SETENV, PRINTENV commands added.  $var variables search the
  647.      enviroment (ENV:).  Aliases are searched for in ENV: as well
  648.      now.
  649.  
  650.      This allows you to have global variables and aliases for all
  651.      the shells running in the system without having to re-source an
  652.      initialization file.  Additionaly, to the limits of the command
  653.      line, the contents of any file in ENV: may be inserted by
  654.      referencing it as a variable.
  655.  
  656.      ANY system variable may be placed in the enviroment instead of
  657.      the local variables if you wish.
  658.  
  659.     -DIR enhanced.    Defaults to long list format.
  660.  
  661.     V2.08:
  662.  
  663.     -WaitForChar() removed from main processing loop (the old Delay(0)
  664.      bug though in this case it is WaitForChar(x,1).
  665.  
  666.     -CP now accepts single parameters (ala MSDOS).. copy a file or
  667.      directory to the current directory (-r for recursive sub-dirs)
  668.         CP FILE
  669.         CP [-r] DIR
  670.  
  671.     -A new variable, _copydate, which, if it exits, causes CP to
  672.      transfer both the comment and datestamp of the source to the
  673.      destination.
  674.  
  675.         set _copydate
  676.  
  677.     V2.07:  (Internal)
  678.  
  679.     V2.06B:
  680.     -External programs that change the current directory are caught,
  681.      and no longer crash the machine.
  682.  
  683.     -CP command, the _copysilent variable, if it exists, causes
  684.      directory and recursive copies to do their work in silence.
  685.  
  686.     V2.06:
  687.     -IF enhanced.  -f option added.  (if -f path).  If the named path
  688.      can be openned with modes 1005, then...
  689.  
  690.     -various routines fixed.
  691.  
  692.     V2.04:
  693.     - CP command now internal... see instructions.
  694.     - RM command now has '-r' option.
  695.     - \command forces the command parser NOT to look at aliases.  Thus,
  696.        you can alias something like 'cd' and have the alias contain a 'cd'
  697.        which references the internal cd:
  698.  
  699.        alias cd "stuff...;\\cd $x"
  700.  
  701.     - "-c" command line option to execute commands and return.
  702.  
  703.        shell -c "echo a;echo b;echo c".
  704.  
  705.     - _path default now places RAM: and RAM:C first rather than last.
  706.     - _histnum variable .. current history #
  707.     - expanded filenames are sorted.
  708.     - ^search^replace (modify previous command).
  709.  
  710.     V2.03 AND BELOW
  711.  
  712.     Before Written History (actually not quite, but there was this
  713.     fire you see....)
  714.  
  715.