[comp.sys.amiga.tech] SKsh 1.5 release available

koren@hpfelg.HP.COM (Steve Koren) (07/22/90)

SKsh 1.5 release
----------------------------------------------------------------------

The 1.5 release of SKsh is happening today.  I will US mail this
update to Fred Fish on Monday, and mail it to the comp.binaries.
amiga moderator as well.

Included at the end of this message is the text of the Addendum1.5.doc
file which briefly describes most of the additions in this version.
SKsh 1.5 is, in spite of the enhancements, actually smaller than the
1.4 release.

SKsh 1.6 is now planned for 6 months from now, although this is
of course subject to change.  Also I posted a brief question or two as
the first response to this note.

         - steve

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~cut here~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


[ title page deleted to save space ]





          Addendum to Version 1.5

            This  document  describes  additions and changes to SKsh  since
            version 1.4.


            User Definable Keymaps

               SKsh  1.5   permits  the  keyboard  mapping  to  be  changed
               arbitrarily.   Any  single  or  multiple key sequence can be
               mapped to any on of 35  functions, and macros can be created
               which  combine  other  functions.    Either modeless editors
               (such as emacs)  or  multi-mode  editors (such as vi) can be
               simulated.

               To  support this,  the  "setmap" command has been added.  It
               has the following forms:

                 Reset all keymaps to their original (dumb) state:

                    setmap -r

                 Set any  number of keys in keymap "map" to call functions,
                 other keymaps, or macros:

                    setmap -s map [{key|code} {fn|"@map"|"!macro"}] ...

                 Set keymaps "m1", "m2", etc to exit to keymap  "m0"  after
                 one key:

                    setmap -e m0 [ m1 ]...

                 Set keymaps "m1", "m2",  etc  to  be  non-exiting  keymaps
                 (ie, SKsh  keeps  using those keymaps even after they have
                 executed a function).

                    setmap -n  [ m1 ]...

                 Define macro "mac" to call functions or insert strings:

                    setmap -m mac [ fn | string ] ...

               Keymap  functions have short names such as "INS", which  in-
               serts  the  character just typed, or "EOL" which  moves  the
               cursor to the end of  the  current line.  Key mapping, along
               with  the  associated  functions, is  described in much more
               detail in the UserMan.doc and Reference.doc  files.   Please
               see those files for more information.








          SKsh Amiga Shell             Page 2              Addendum to 1.5









            Supplied functions define "emacs" mode and "vi" mode

               By  default, the ".skshinit" file sets SKsh to be in "emacs"
               mode, a  slight  superset of the previous SKsh editing mode.
               However,  this  can  be  changed;   two   functions  in  the
               stuff.sksh file  define an emacs mode and a vi mode.  Other,
               similar  functions could be added to  define most other edi-
               tor styles.


            "E" option to SKsh obsoleted

               The  "E"  option to SKsh has been  obsoleted by the addition
               of  user  definable keymaps.  The "E" option previously con-
               trolled whether  the  "tab"  key  was  used  for  file  name
               completion or  as  an  actual "tab" character.  In SKsh 1.5,
               you  may  simply  change  the  definition of the  "tab"  key
               accordingly.


            ARexx support added

               SKsh can now  accept commands from an ARexx script.  It does
               this  asynchronously;  no  special  command must be entered.
               However, it will only check  for  ARexx  commands when it is
               not  busy  doing  something else (ie, it is waiting for key-
               board  input).  SKsh  assumes a default port name, but there
               are  several ways to specify this  upon  invocation (for de-
               tails, see the "sksh"  entry in the reference manual and the
               ARexx  section of the UserMan.doc manual).  There is also  a
               new  variable called "AREXX_PORT" which contains the name of
               the  port  that  this  execution of SKsh uses.  The variable
               will be  unset if SKsh was not able or was instructed not to
               open ARexx.   The  "rx"  command can be used to invoke ARexx
               scripts.   For  more   information, see the "Using SKsh with
               ARexx" section of the UserMan.doc file.

               The ARexx port is only provided  in  the  large  version  of
               SKsh, not tiny_sksh.  There are a few problems with  it  and
               a significant number of possible enhancements (for  example,
               the  ability to set ARexx variables from SKsh).  If you have
               any ideas for  improvements to the ARexx port, please let me
               know.   I  will   almost for certain enhance the ARexx func-
               tionality in a future release.


            Local export command added

               A new "-l"  option to the export command can be used to con-
               trol whether SKsh  sets  AmigaDos  environment variables for
               exported  variables,  or  simply sets the top  level  symbol
               table  definition  inside of SKsh.  Most  variables will not
               need  to  be  exported to AmigaDos; the  "-l"  export option
               will use less space and  make the export operation faster. 


          SKsh Amiga Shell             Page 3              Addendum to 1.5











            Append redirection from external binaries fixed

               An  incompatibility  between  the  Lattice and AmigaDos  I/O
               functions   previously  prevented  append  redirection  from
               working  correctly when  used  with  external programs.  The
               part of  SKsh  which  controls this was rewritten to use the
               AmigaDos  functions  instead of the (more  standard) Lattice
               functions;  append  redirection  from  external binaries now
               works correctly.  (Note that is was not  a  problem with ei-
               ther the AmigaDos  or  Lattice functions, but simply a prob-
               lem in the interface between the two).


            All function keys now available

               In SKsh 1.4, the "f10" key was not mappable.  In  SKsh  1.5,
               it is.  Also in this  version, the shifted function keys may
               be used by setting variables "f11" through "f20".


            Cursor moved to end of line upon return

               A  small  incompatibility  between the AmigaDos console han-
               dler and the  popular "Conman" handler was causing a problem
               if  "return" was pressed while the  cursor was in the middle
               of a line.  The rest of the line would be blanked  (although
               it  executed  correctly).  SKsh now provides a workaround to
               that  problem  by  moving the  cursor to the end of the line
               after a "return".

               There  is  still  two  problems when using SKsh with conman.
               First,  the  conman  typeahead buffer  appears to be emptied
               when  SKsh  puts  the  console in "raw" mode (as  it  must).
               However, since this seems  to  be  something conman is doing
               by  itself, I don't think I can change it from  SKsh.   Sec-
               ond,  the  state  of  conman is  sometimes changed such that
               conman  echoes  characters even while in raw mode.   I  also
               cannot fix this, as I do not know what causes it.  For  this
               reason  it  is  recommended that the normal AmigaDos console
               handler be used with SKsh,  especially since SKsh line edit-
               ing  is  a  superset  of  conman line editing.  The AmigaDos
               console handler exhibits neither of these symptoms.


            Fixed "history" bug introduced in SKsh 1.4

               A bug  that  was  introduced in SKsh 1.4 caused "history -e"
               not to act correctly.  It is now fixed.  Sorry!   This  also
               affected '!' history access, as '!' was simply an alias  for
               history -e.




          SKsh Amiga Shell             Page 4              Addendum to 1.5









            "eval" builtin added

               The "eval"  command executes a string as if it was a command
               typed from  the  keyboard or entered into a script.  For ex-
               ample,

                 [dh0:]: a='echo "foo\nbar" | wc'
                 [dh0:]: eval "$a"
                       Filename        Chars      Words      Lines
                          stdin :          8          2          2
                 [dh0:]:


            "pushd" and "popd" now check for existance of directory

               The "pushd" and "popd"  functions which were provided in the
               Stuff.sksh file for 1.4 did not check for the  existance  of
               the  directory  before  trying to "cd" to  it.   This  never
               caused any  major problems, but it would cause the directory
               stack  variable  to  become out of  sync  with  reality if a
               "pushd" tried  to  "cd"  to  a  nonexistent directory.  Both
               functions now check for the existence of the directory.


            Lattice "chdir()" call no longer used

               SKsh  previously used  the  Lattice "chdir()" call to change
               the  current  directory.   However, the Lattice call did not
               correctly  update the AmigaDos structure containing the cur-
               rent  directory name, which caused "ps" to  report the wrong
               directory  name  for  background tasks.  The Lattice call is
               no longer used, and "ps"  reports the correct directory from
               which the other tasks were executed.


            SKsh no longer gets confused upon external "cd"

               SKsh  1.4  became  confused and even occasionally crashed if
               an  external  program changed  the  SKsh  working directory.
               While this  is  not  a  common case, SKsh 1.5 has fixed this
               problem.   If  an   external program changes the SKsh direc-
               tory, when  control returns to SKsh it will correctly update
               its  directory (in all places, including the prompt if it is
               defined  there).    However, in this case the "OLDPWD" vari-
               able  will  not  correctly  contain the name of the previous
               directory.


            "Stack" function removed

               All  previous  versions of SKsh  included a "stack" function
               defined  in  the  .skshinit  file  which   simply  used  the
               AmigaDos  stack  function to set the stack size to the  sup-
               plied value plus 10K bytes.  Since  this  function didn't do


          SKsh Amiga Shell             Page 5              Addendum to 1.5









               much, and it took  space  for  every SKsh invocation, it has
               been removed.  Use the AmigaDos  stack  function in the same
               way;  just  be  careful not to set the stack size below that
               required by SKsh.


            Backslash handling enhanced

               A  backslash  outside of any other  parameter but at the end
               of a line tells SKsh to read the next line as if  it  was  a
               continuation  of  the  current one.  This can  be  useful to
               pass  many  parameters to  functions or scripts when all the
               parameters  would  not  normally fit on one line.   The  new
               "Stuff.sksh"  file  uses  this  feature in the  vi_mode  and
               emacs_mode functions.


            Backquote bug fixed

               An  obscure  bug  in  backquote substitution has been fixed.
               If  multiple complete SKsh shell constructs were inclosed in
               backquotes and  separated by newlines instead of semicolons,
               only the first one would be evaluated.   This  problem never
               appeared with the $( ) style of  command substitution (which
               is  the  recommended  method),  so  it  was  not  commonly a
               problem.


            Expert commands smaller

               The  expert  commands have been further reduced in size from
               their 1.4 counterparts.  Most are smaller  by  approximately
               500 to 1000 bytes (10 to 30%).


            fgrep/grep changes

               A bug in the fgrep/grep  commands was causing them to ignore
               patterns which spanned 16K byte  boundaries in a file.  This
               has been fixed.   In  addition, the commands no longer print
               2  newlines  between file names when no pattern was found in
               the file.  Also, they no longer cycle though all  the  files
               if the ctrl-c is pressed; instead, they exit immediately.


            cp bug fixed

               The  1.4  cp  command would not copy multiple files to a di-
               rectory  if  those  files  already existed in the directory.
               This has been fixed.






          SKsh Amiga Shell             Page 6              Addendum to 1.5









            view enhancements

               The  "vmagic:"  assignment now points to  a  directory which
               contains the magic file, not the file itself.  Note that  if
               you  define this assignment in a startup file, you will have
               to change it.  "view" now finds the  magic  file  by  taking
               the filename of  "view"  and  adding the ".magic" extension.
               This means  that  view  can  be  copied to another name, and
               that  copy  can  automatically use  a  different magic file.
               For  example, if "view" is copied to "vlist", the magic file
               name  will  become "vmagic:vlist.magic".  This can be useful
               to  create  versions of view which  edit,  extract, list, or
               otherwise  manipulate files.  It will  become even more use-
               ful when  AmigaDos  supports file links.  Also, view now ac-
               cepts a  command line option which allows an arbitrary magic
               file  to  be  specified,  overriding the built in  defaults.
               See the documentation on the "view" command for details.


            "preparse" command added

               A "preparse"  command has been added which can parse an SKsh
               script file  and  save  the  parsed  output to another file.
               The  second file (which is  often smaller than the original)
               can be read by SKsh up to 3 times as fast as the original.

               Please note that preparsed files  are  not  guaranteed to be
               upwardly  compatible  between  versions of SKsh.  This means
               that the  originals must be kept (in any case, the preparsed
               files  are  extremely  difficult to edit).  SKsh will  check
               that a  prepared file was created by the current versions of
               SKsh,  and  issue an  error if it was not.  See the descrip-
               tion  of  this  command in the Reference.doc file  for  more
               details.

               You  can  automatically source the preparse form of a script
               if it is  there,  or  the  normal one if it is not, by using
               the following code fragment:

               if [ -f myscript.pp ]
               then
                  . myscript.pp
               else
                  . myscript
               fi


            Preparsed versions of the init files now handled

               SKsh will now  check  for  ".skshinit.pp"  and  ".skshrc.pp"
               files  which  are  preparsed  forms  of  the  initialization
               files, and use  those  instead if found.  If not, the origi-
               nals will be used.   This  can  dramatically reduce the time
               necessary  to  invoke SKsh.  Also, if you source all or part


          SKsh Amiga Shell             Page 7              Addendum to 1.5









               of the "Stuff.sksh" file from your  .skshrc  file,  you  can
               now source a preparsed form of  that  file.   Both  sourcing
               and  script  execution  automatically detect preparsed files
               and use them accordingly.  You can change your .skshrc  file
               to do the same thing.  For example:

                 if [ -f sksh:stuff.sksh.pp ]
                 then
                    . sksh:Stuff.sksh.pp
                 else
                    . sksh:Stuff.sksh
                 fi


            File completion enhanced

               SKsh file name  completion has been enhanced.  If completion
               is  used  and  matches  a  directory name, a "/" will be in-
               serted  automatically after the name.  If completion wholely
               matches a filename, a space will be  inserted.   This  makes
               it easy to tell when  a  whole  file  or  directory name has
               been matched, and which it was.

               Also, file names which are  typed  directly after a redirec-
               tion  symbol (such  as  ">myfile") will be correctly handled
               by the completion mechanism.  Previously this did not work.
                

            "printf" builtin added

               A "printf"  builtin has been added.  It supports most of the
               constructs used by the "c"  function of the same name.  How-
               ever, there are a few limitations.  SKsh uses 32  bit  inte-
               gers  internally;  therefore, "%ld" must be used  instead of
               "%d".   Also,  since  all  tokens are represented in SKsh as
               strings, SKsh  will  assume that a string beginning with "-"
               or a digit is to be used with the "%ld" style  of  arguments
               and  convert the string to a 32 bit  integer.   Arguments to
               printf are separated by white space, not "," as in "c".

               There is  no  associated sprintf or fprintf functions.  Sim-
               ply use "var=$(printf)" or "printf >>  file"  instead.   See
               the  description of  this  command in the Reference.doc file
               for more details.


            All external binaries now pure

               All of the  external SKsh binaries are now pure, and all can
               be  made  resident with the  SKsh  resident command.  If the
               pure bit is not set on all the binaries, you should  set  it
               using the chmod command.




          SKsh Amiga Shell             Page 8              Addendum to 1.5









            Documentation changes

               I  had  accidentally left the entry for the "resident" buil-
               tin out of the Reference.doc  file  for  version 1.4.  It is
               now back.  I also added a few  of  the  missing descriptions
               in the options command description in Reference.doc.


            Keyboard command to reverse two characters

               A new command has been added which switches the position  of
               the previous two characters.  By default, this is mapped  to
               the ^t combination.


            "run" function changed

               The   supplied  run  function  previously  referenced  c:run
               directly.  Now it uses  $(which  run).   This  allows you to
               have the run  command anyplace in your path, or in the resi-
               dent list.


            EOF no longer crashes shell when +e option used

               In SKsh 1.4, it was possible to crash the shell  if  command
               line editing was disabled (+e  option)  and  an  end-of-file
               was sent to the shell with "^\".  This no longer happens.


            Keyboard EOF will now terminate read loop

               If a while loop is constructed using the read statement:

               while read foo; do echo $foo; done

               the loop can now be terminated with an  EOF  sent  from  the
               keyboard.  Previously the loop worked fine if its input  was
               redirected from a file, but not  from  the  keyboard.   This
               only was a problem if the +e option was used.


            File name mapping problem fixed

               The  "."  character when used to represent the present work-
               ing  directory  occasionally gave  incorrect results when in
               the  root  directory of a  given  device.   For  example, if
               "cd"ed to ram:, the string ./foo  would  expand to ram:/foo,
               which  has  an  extra '/' character.  This  problem has been
               fixed.






          SKsh Amiga Shell             Page 9              Addendum to 1.5









            Empty lines no longer added to history list

               Some  combinations of  history flags and variables would al-
               low empty lines to be added to the  history buffer.  This no
               longer happens.


            CMDNUM variable only incremented for added history lines

               The  CMDNUM  variable is only incremented if the typed  line
               is  actually added  to  the  history buffer.  This keeps the
               value of the variable in sync with the history list.


            cat command now provided as external command

               The  cat  command is now  provided both as a builtin command
               and  as  an  external binary.  The external form has several
               advantages,  including that it is much faster and  can  copy
               binary data as well as ascii  data.   To  use  the  external
               command by default, unset the builtin form  with  "unset  -b
               cat".


            num command added

               The  num external command can add line numbers to either its
               standard  input or named files.   The  number of digits used
               is  changeable; see the documentation on that command in the
               ExtCmds.doc file for details.


            cut command added

               A  cut  command,  similar to  the  Un*x  command of the same
               name,  is  now  provided as an external binary.  This cut is
               actually  a  slight  superset of the Un*x command, as it al-
               lows  columns to be  re-ordered,  something the Un*x command
               will not do with most implementations.   Both  character and
               field oriented operation is supported.


            indent command added

               An  indent  command is  now  provided as an external binary.
               It simply indents input lines by a given amount.










          SKsh Amiga Shell            Page 10              Addendum to 1.5









            encr command added

               The  encr  command  provides a  function similar to the Un*x
               crypt  command,  although with a vastly different algorithm.
               It  will  encrypt from a file to a file, or it can act as  a
               filter  to  encrypt  standard input to standard output.  The
               key can be of any  length  limited only by the maximum pass-
               able  command  line.   Unlike crypt, the encrypted files are
               not  guaranteed (and in fact in  most  cases  will  not  be)
               ASCII files.   However, encr can encrypt binary data as well
               as ASCII data.  See  the  encr entry in the ExtCmds.doc file
               for  details.   That  entry also briefly discusses the secu-
               rity of the  encrypted files; I would like to hear if anyone
               manages to break  the  encryption scheme.  I have provided a
               file of 819  bytes  of  encrypted english text with SKsh 1.5
               for anyone who wishes to take up the challenge.


            dwclist command added

               A  dwclist  command has been added which allows wildcard ex-
               pansion to be  selectively disabled for individual commands.
               The  operation  and  options of this  command are similar to
               those of  the  complist command.  Before performing wildcard
               expansion  on  arguments, SKsh will search for  the  command
               name in the  dwclist.  If found, wildcards will be passed on
               unexpanded.

               The  dwclist can be listed or cleared, and  arguments can be
               added or  deleted from the list.  Use of long a long dwclist
               will slightly  degrade the SKsh interpreter performance, al-
               though  commands in the list will run much faster if  passed
               parameters with wildcards.

               The  dwclist is very useful for external programs which per-
               form their own wildcard expansion.   By  putting the command
               in  the  dwclist, SKsh will let that command perform its own
               wildcard  expansion,  thus  circumventing the 255  character
               command line limit  in  AmigaDos  1.3.   There  are  several
               things to note about  this  command; for details see the en-
               try in Reference.doc.


            +w option added

               A "w"  option has been added to the set of SKsh options.  If
               set,  then  the  dwclist will be used to  determine commands
               for which wildcards  are  not  to  be  expanded.   If  unset
               (which  is  the  default), the  dwclist will be ignored, re-
               sulting in slightly faster performance.






          SKsh Amiga Shell            Page 11              Addendum to 1.5









          Verifying the SKsh 1.5 Installation

            SKsh  1.5  includes a script file called "Check_1.5.sksh".  You
            should set the script bit on this file if it is not set  (using
            "chmod +s Check_1.5.sksh"), and run the script.  It will  check
            your  SKsh  installation for missing files, files with improper
            checksums  (perhaps  indicating an  old  version of that file),
            and  files  with  improper permissions.  It will check the main
            SKsh  binaries,  the  external  commands, and  will  optionally
            check the  documentation files if you indicate that you wish to
            do this.  It will also check that the  external binaries are in
            your SKsh search path.  You must run this script  under version
            1.5  after  installing version 1.5.  In other words, if you use
            1.4 to  install 1.5, you must quit version 1.4, execute version
            1.5, and run the script.


          A Word about Command Invocation under SKsh

            SKsh  does  not  actually invoke external commands itself.  In-
            stead, it builds a  command line with all passed parameters and
            passes this  command line to ARP.  However, there are differing
            requirements  for  various types of AmigaDos  programs (such as
            BCPL  versus  Lattice C).  Occasionally ARP will fail to invoke
            a  particular program correctly.  It does quite a good job con-
            sidering  the  situation, but sometimes it will fail.  I unfor-
            tunately  cannot  do  anything about this in SKsh, so if  there
            are few  programs you cannot invoke correctly, you will have to
            invoke them from the AmigaDos shell.

            Fortunately,  however,  AmigaDos  2.0  will  provide a standard
            method  of  program invocation.  When I can compile SKsh to use
            that  feature,  the  problem will be eliminated.   (That  will,
            however, mean that SKsh will run only under AmigaDos 2.0)   Un-
            til then, there is nothing I can do to help.  Sorry!


          Misc. Notes

            Make sure that you re-install  the  .skshinit  file.   You  can
            make and use the pre-parsed form of  this  file  if  you  wish.
            The "Stuff.sksh" file has also  changed  with  the  addition of
            the  emacs_mode and vi_mode functions.  All of the external bi-
            naries have changed as well and must be re-installed.

            There has been some  confusion about the interaction of the 'h'
            option and  the  history variables (such as MAXDIST and LLMIN).
            If  the  'h'  option is set, every non-blank line will be added
            to  the  history list, even if it does not meet the  qualifica-
            tions  imposed  by  the  history variables.   This  effectively
            overrides  any  effect  those  variables might have.  To effec-
            tively use the variables, keep the 'h' flag reset.




          SKsh Amiga Shell            Page 12              Addendum to 1.5









            A brief note about SKsh and the Amiga 3000: I have not  person-
            ally  tested  this,  but  various people have  reported that 1)
            SKsh works with 1  megabyte of chip memory running under either
            AmigaDos 1.3 or AmigaDos 2.0, and 2) SKsh does not run  with  2
            megabytes of chip memory.  At the  moment I have no idea why it
            would  not  run  with  2  megabytes of chip memory, and I don't
            have  access to a 3000 to test it with, so the short term prog-
            nosis for  this  problem is bleak.  As far as I can tell, noth-
            ing in the code should care the least bit about how  much  chip
            memory is around.  There does seem to  be  a  problem, however,
            One  reported workaround (which I have also not tested)  is  to
            run  NofasTmem  before  invoking SKsh, and  again  after to re-
            allocate the memory.

            I  removed the readme.pipes  file,  which  described how to use
            real pipes.  I  also  removed the associated code.  Until I get
            it  working for real, the code was just taking up space and not
            doing  anyone any  good.   Hopefully I will get this working in
            the  next  release or  two  (perhaps it will become easier with
            AmigaDos 2.0).

            Again, thanks to all  who  have  provided bug reports and ideas
            for enhancements.  I would like to make SKsh the best and  most
            complete  command interpreter available for the Amiga, and this
            feedback helps greatly.  If you  have  suggestions for improve-
            ments, please  forward them to me.  I cannot implement them all
            for each  release, however, so if I don't get to your "pet" en-
            hancement in the very  next  release, please be patient.  There
            is a good chance it will get in eventually.


          Finally...

            My home  address and phone number are likely to change sometime
            in the next 6 to 8 months.  I will try  to  include the new ad-
            dress and phone  number in release 1.6 of SKsh, provided that I
            know what it is by then.  If you try to reach  me  at  the  old
            number or address and get no response, this is why!

            SKsh 1.6: tentatively planned for 6  months  from  the  release
            date of 1.5.















          SKsh Amiga Shell            Page 13              Addendum to 1.5

koren@hpfelg.HP.COM (Steve Koren) (07/22/90)

As I mentioned in the originial note entitled "SKsh 1.5 release available",
I am posting this note with a few questions.

First, should I continue to post the addendums for new releases in
comp.sys.amiga.tech?  On one hand, they only are posted once every
4 to 6 months, but on the other, they are fairly large.  The most
recent is nearly 32 K bytes.  I can easily leave them out of the
posting and only say, "the new version is available; read the addendum
when you get it."

Second, I would like to solicit feedback on the following:
 
  1) I am considering extending the "complist" feature to allow
     the expansion list to be keyed off the value of the first
     command line parameter.  Does anyone actually use the
     complist feature?  Would anyone use that extension?

  2) I would like to hear any ideas for possible extensions to
     the ARexx port.  There is alot of room for improvement here,
     I think; only the basics are implemented now.  I am not,
     myself, a heavy user of ARexx, so I'm sure there are things
     obvious to others that I would not think of on my own.

Third, has anyone encountered strange side effects with the
WaitForChar() function?  I use this in SKsh if the ARexx
port is active as "WaitForChar(Input(), MY_DELAY)".  However,
I have noticed that when this function is used, and the console
is in the raw mode, certain things break.  For example, the
popular "MachClock" utility screen-shuffler feature stops
working, and in "excellence!" the cursor stops blinking,
although everything else acts normally.  What gives?  As I
understood it, the function is supposed to simply put my
task to sleep until either a character appears for me to
read, or the timer runs out, whichever comes first.  I am
fairly sure that this function is in fact causing the problem,
since if I replace it with a Read(), all works fine.  Is there
possibly a side effect of using it with Input()?

Lastly, besides "real" pipes, are there still significant features
that people want which aren't in SKsh?  I am definately planning a
1.6 release, but the number of future releases will depend
heavily upon what people actually want from it.  I currently have
a list of requested enhancements and bug fixes that are not
yet implemented, but for the most part they are minor things.

   - steve

peter@sugar.hackercorp.com (Peter da Silva) (07/24/90)

In article <13920077@hpfelg.HP.COM> koren@hpfelg.HP.COM (Steve Koren) writes:
>   2) I would like to hear any ideas for possible extensions to
>      the ARexx port.

I think you should probably run the arexx port in a child process. That's
what we do with TCL: for any given TCLish program, we run two copies. One
is used interactively and the other is purely a batch processor. To get
information back to the main one we have it send a message to the batch guy.
Much better than pretending to be a Mac program and busy-waiting.

Interaction between asynchronous command processors is a complex subject, but
by and large any given O/S level thread should only have one control flow.
Particularly is the alternative is busy-waiting.

> Lastly, besides "real" pipes, are there still significant features
> that people want which aren't in SKsh?

Do you have "here documents" yet?

"setmap" is a poor name, since that's an Amiga program to set the keyboard
mapping.
-- 
Peter da Silva.   `-_-'
<peter@sugar.hackercorp.com>.

koren@hpfelg.HP.COM (Steve Koren) (07/27/90)

A few days ago I wrote this:

> As I mentioned in the originial note entitled "SKsh 1.5 release available",
> I am posting this note with a few questions.

> First, should I continue to post the addendums for new releases in
> comp.sys.amiga.tech?  On one hand, they only are posted once every

email responses so far are 12 to zero that I should continue to post
the text of the addendums.  One person suggested having Tad post
them in c.b.a where people expect large postings; I will investigate
this.  


> Third, has anyone encountered strange side effects with the
> WaitForChar() function?  I use this in SKsh if the ARexx
> port is active as "WaitForChar(Input(), MY_DELAY)".  However,

No one else seems to have heard of that problem.  I still have no
idea what is causing it...

Anyhow, thanks to those who responded!  I got a few new ideas for
SKsh 1.6 in the process.

   - steve

charles@hpcvca.CV.HP.COM (Charles Brown) (07/28/90)

> First, should I continue to post the addendums for new releases in
> comp.sys.amiga.tech?

Please.  I don't always get the new release.  But I want to track what
you are changing anyway.  I am probably not alone.

>   1) Does anyone actually use the complist feature?

I don't.

> Lastly, besides "real" pipes, are there still significant features
> that people want which aren't in SKsh?
>    - steve

Is yank from the killbuffer (^Y) in yet?
--
	Charles Brown	charles@cv.hp.com or charles%hpcvca@hplabs.hp.com
			or hplabs!hpcvca!charles or "Hey you!"

koren@hpfelg.HP.COM (Steve Koren) (07/29/90)

> I think you should probably run the arexx port in a child process. That's

> information back to the main one we have it send a message to the batch guy.
> Much better than pretending to be a Mac program and busy-waiting.

That would be better, yes, but I've generally wanted to avoid forking
a child process until they get easier to set up.  In any case its
changeable later.  It doesn't really busy-wait now - the overhead of
the method it uses to check for ARexx messages is certainly much less
than, for example, blinking a cursor or updating a clock display.  
About 5 machine instructions are executed every 1.5 seconds.  Still,
you're right and it would be better to avoid this at all.  

> Interaction between asynchronous command processors is a complex subject, but
> by and large any given O/S level thread should only have one control flow.
> Particularly is the alternative is busy-waiting.

Not really.  What I need to do is wait on signal A or signal B, whichever
comes first.  No busy waiting, and no child process overhead either.
I was just a little too lazy to try to set that up in 1.5 :-).  Maybe later.

> "setmap" is a poor name, since that's an Amiga program to set the keyboard
> mapping.

Oh well.  Too late now.

   - steve

peter@sugar.hackercorp.com (Peter da Silva) (07/30/90)

In article <13920082@hpfelg.HP.COM> koren@hpfelg.HP.COM (Steve Koren) writes:
> Not really.  What I need to do is wait on signal A or signal B, whichever
> comes first.  No busy waiting, and no child process overhead either.

Another problem is that when you're doing something in the sksh command
processor, you lose the ability to handle commands in the AREXX part.
-- 
Peter da Silva.   `-_-'
<peter@sugar.hackercorp.com>.

koren@hpfelg.HP.COM (Steve Koren) (07/31/90)

A few days ago I wrote this:

> Third, has anyone encountered strange side effects with the
> WaitForChar() function?  I use this in SKsh if the ARexx
> port is active as "WaitForChar(Input(), MY_DELAY)".  However,

Thanks to Janne Saarela, I now know what the problem is.  I'll
point it out here so perhaps it will avoid biting someone else.

It turns out that Rob Peck's "Programmer's Guide to the Amiga"
(an excellent book, by the way), says that the delay value is given
in "ticks", or 50ths of a second.  It is really in microseconds.
I specified the value in ticks in SKsh 1.5 after looking at
PGttA, which of course means that the shell is consuming a rather
excessive amount of CPU time.

Accckk!  I will certainly fix this for 1.6, which I'm considering
moving up in time (with a corresponding decrease in new features)
because of both this (serious) and the +C bug I pointed out
eariler in the week.  The other one is easy to work around, but
all you can do here is to run the SKsh with the ARexx port with
a low priority.

Also I should point out that this only affects the shell started
with the "-a" (ARexx) option.

Sorry 'bout this, folks!  And again, thanks go to Janne Saarela
for pointing out the problem; I would probably not have found it
for a long time otherwise, as the PGttA is the only reference I
use routinely for such things.

   - steve "gotta find some RKM's" koren