CCPx2+ - An alternitive CCP for CP/M-68K                   CCPx2+ - An alternitive CCP for CP/M-68K                   CCPx2+ - An alternitive CCP for CP/M-68K

                                Robert Heller                                 Robert Heller                                 Robert Heller
                     Sun Feb 15, 1987 ***First Draft***                      Sun Feb 15, 1987 ***First Draft***                      Sun Feb 15, 1987 ***First Draft***

               (c) 1987 By Robert Heller. All rights reserved.                (c) 1987 By Robert Heller. All rights reserved.                (c) 1987 By Robert Heller. All rights reserved.








              ABSTRACT.  This  document  describes  design notes               ABSTRACT.               ABSTRACT.
              for CCPx2+, an alternitive CCP for CP/M-68K.




              CONTACT INFO. I can be reached as follows:               CONTACT INFO.               CONTACT INFO.

              ARAPNet:      [email protected]
              BITNET:       [email protected]
              BIX:          heller
              GEnie:        RHELLER
              FidoNet:      101/27 (Dave's Fido)
                         or 101/147 (Orange Fido)
              CompuServe:   71450,3432
              U.S. Mail:    Robert Heller
                            Star Route Box 51A
                            Wendell, MA 01379
              Voice Phone:  617-544-6933, early evenings
                                          (before 7:30 PM
                                          Eastern), and
                                          weekends.
                            413-545-0528, Monday to Friday
                                          8:00 AM to 4:00 PM
                                          Eastern.
              Data Phone:   617-544-6933, 7:30 PM to 7:00 AM
                                          Eastern.

















       CCPx2+ - An Alternitive CCP for CP/M-68K ***First Draft***        Page 2        CCPx2+ - An Alternitive CCP for CP/M-68K ***First Draft***        CCPx2+ - An Alternitive CCP for CP/M-68K ***First Draft***


                              1: Introduction.                                  Introduction.                                  Introduction.

              These design notes are intended to put  in  writing  my
         ideas  for  an  improved CCP (Console Command Processor) for
         CP/M-68K.  I'd like to circulate  these  ideas  through  the
         CP/M-68K  user  community  and  get  some  feedback on these
         ideas.  I don't know if I will implement all  of  the  ideas
         presented   here,   but  I  indend  to  implement  the  more
         important ones.    I  intend  to  produce   this   code   as
         shareware,  with  object  code  and  documentation available
         free, with source code available for a small fee.

                             2: Major Features.                                 Major Features.                                 Major Features.

              The major features of CCPx2+ are:

                 o Forground/Backgound Tasks.  The  main  feature  of                    Forground/Backgound Tasks.                    Forground/Backgound Tasks.
         CCPx2+   will   be   a   dual   TPA   system,  allowing  two
         core-resident tasks  to  be  run.     It   won't   be   true
         multi-tasking,  just a way to suspend a forground task (such
         as an editor) and run a background task (such as  getting  a
         directory listing or compiling a program).

                 o  Command Line Recall. A history mechanism, simular                     Command Line Recall.                     Command Line Recall.
         to VMS's DCL - will use control  characters  to  recall  and
         edit (as a one-line screen editor) previous command lines.

                 o  Nested  Submit  Files.  This  simply  means  that                     Nested  Submit  Files.                     Nested  Submit  Files.
         submit  files  will  behave  like  subroutines,   with   the
         neccessary context saved on a pushdown stack in the CCP.

                 o   Flow  Control  in  Submit  Files.  Simple  "if",                      Flow  Control  in  Submit  Files.                      Flow  Control  in  Submit  Files.
         "goto", and labels.  Should be enough for most purposes.

                 o "Lexical Functions". These  will  be  builtin  CCP                    "Lexical Functions".                    "Lexical Functions".
         commands with  a  functional  syntax.  Things like file name
         parsing,  file  tests  (exists,  size,  etc.)   and   system
         interegation (user number, current drive, etc.)

                 o  User  Interface  Hacks.  Things  like  control of                     User  Interface  Hacks.                     User  Interface  Hacks.
         command  line  echoing  while  executing  submit  files  and
         command prompt.

                 o  CCP  Call  Back.  There  will  be  a way for user                     CCP  Call  Back.                     CCP  Call  Back.
         programs to "call back" the CCP for various functions  (such
         as running a background task, etc.)

                 o  Aliases.  User definable symbols for commands and                     Aliases.                     Aliases.
         CCP variables.

                 o Program Search Path. A list of  drives  to  search                    Program Search Path.                    Program Search Path.
         for command and submit files.











       CCPx2+ - An Alternitive CCP for CP/M-68K ***First Draft***        Page 3        CCPx2+ - An Alternitive CCP for CP/M-68K ***First Draft***        CCPx2+ - An Alternitive CCP for CP/M-68K ***First Draft***


                       3: Forground/Background Tasks.                           Forground/Background Tasks.                           Forground/Background Tasks.

              I  plan  to have the CCP divide the TPA into two parts:
         a forground part and a background part.  The relative  sizes
         will  be  determined  by the BIOS, through the use of global
         parameters, much like the auto start is  presently  handled.
         The  default  will  be to cut the TPA into two equal pieces.
         Normally,  keyboard  commands  will  be  executed   in   the
         forground TPA.   A user-program will be able to pass control
         to a background task with a CCP call  back  function.    The
         call  back  function  will take a CCP command line (or blank
         for an interactive background task) with optional  arguments
         for  a  conin  and  conout  functions  (this  allows  simple
         pipes).

                           4: Command Line Recall.                               Command Line Recall.                               Command Line Recall.

              I plan on implementing  something  like  VMS's  command
         line recall.   VMS implements command line recall by binding
         control characters to functions  which  recall  the  command
         line(s)  and allow for one-line "screen" editing (inserting,
         deleting, and replacing of characters).

                           5: Nested Submit Files.                               Nested Submit Files.                               Nested Submit Files.

              This is simply a matter of having  the  SUBMIT  command
         maintain a stack of pending submit file states.

                      6: Flow Control in Submit Files.                          Flow Control in Submit Files.                          Flow Control in Submit Files.

              This  will  consist  of  a  contitional command (IF), a
         branching command (GOTO),  and  allowing  for  command  line
         labels.  This is probably suffientent for most purposes.

                            7: Lexical Functions.                                Lexical Functions.                                Lexical Functions.

              I have these functions in mind:

                 o  F$ACCESS(filename,mode)  - Just like the access()                     F$ACCESS(filename,mode)                     F$ACCESS(filename,mode)
         function. Returns a boolean  value  depending  on  the  file
         access.  Modes are:    READ, WRITE and SYSTEM.  Returns 1 if
         access is allowed (WRITE if RO bit clear, SYSTEM if SYS  bit
         set,  and  READ  if  file  exists)  or  0  if  access is not
         allowed.

                 o F$SIZE(filename) - Returns the size  of  the  file                    F$SIZE(filename)                    F$SIZE(filename)
         in sectors.

                 o  F$PARSE(filename,default,field) - Parses filename                     F$PARSE(filename,default,field)                     F$PARSE(filename,default,field)
         and optionally fills in missing  fields  (drive,  name,  and
         type) from  default.    Returns the whole file specification
         or selected parts (drive, name, or type) if  field  argument
         is non-empty.

                 o  F$LOCATE(substring,string) - Returns the location                     F$LOCATE(substring,string)                     F$LOCATE(substring,string)
         of substring in string or the length of string if  substring
         is not in string.






       CCPx2+ - An Alternitive CCP for CP/M-68K ***First Draft***        Page 4        CCPx2+ - An Alternitive CCP for CP/M-68K ***First Draft***        CCPx2+ - An Alternitive CCP for CP/M-68K ***First Draft***


                 o  F$EXTRACT(start,length,string)  -  Returns length                     F$EXTRACT(start,length,string)                     F$EXTRACT(start,length,string)
         characters from string starting at start.

                 o F$LENGTH(string)  -  Returns  the  length  of  the                    F$LENGTH(string)                    F$LENGTH(string)
         string.

                 o F$USER() - Returns the current user number.                    F$USER()                    F$USER()

                 o F$DRIVE() - Returns the current drive letter.                    F$DRIVE()                    F$DRIVE()

                 o  F$BACKGROUNDP() - Returns TRUE (1) if executed in                     F$BACKGROUNDP()                     F$BACKGROUNDP()
         the context of the background task.


              The  arguments  (if  any)  to   these   functions   are
         considered expressions,  which are evaluated.  Alias symbols
         can be used as variables.    These  lexical  functions  will
         work,  along  with infix arithmetical operators (+, -, *, /,
         =, <>, <=, >=), only on IF, ALIAS, SETPROMPT,  SETECHO,  and
         USER commands, and in argument expressions.

                          8: User Interface Hacks.                              User Interface Hacks.                              User Interface Hacks.

              This will consist of the commands:

                 o  SETPROMPT  string  -  set  the  command prompt to                     SETPROMPT  string                     SETPROMPT  string
         string.

                 o SETECHO flag - set  submit  file  echoing  on  (if                    SETECHO flag                    SETECHO flag
         flag is non-zero) or off (if flag is zero).

                 o SAVEECHO symbol - save echo state in symbol.                    SAVEECHO symbol                    SAVEECHO symbol

                              9: CCP Call Back.                                  CCP Call Back.                                  CCP Call Back.

              This  will  consist of some functions invoked with TRAP
         #1.  Included will be:

                 o Start Background Task  -  start  up  a  background                    Start Background Task                    Start Background Task
         task. Takes  three  optional  arguments:    a pointer to the
         command line to execute (NULL meaning start  an  interactive
         background  task), and pointers to functions (to be executed
         in the foreground  context)  to  handle  console  input  and
         output functions (NULL meaning use standard console I/O).

                 o  Get  Symbol  Alias  Value - fetch the value of an                     Get  Symbol  Alias  Value                     Get  Symbol  Alias  Value
         alias symbol.

                 o Set Symbol Alias Value  -  set  the  value  of  an                    Set Symbol Alias Value                    Set Symbol Alias Value
         alias symbol.













       CCPx2+ - An Alternitive CCP for CP/M-68K ***First Draft***        Page 5        CCPx2+ - An Alternitive CCP for CP/M-68K ***First Draft***        CCPx2+ - An Alternitive CCP for CP/M-68K ***First Draft***


                                10: Aliases.                                     Aliases.                                     Aliases.

              This  will  be  some sort of hybred of C-Shell and DCL.
         Probably the  syntax  of  the  C-Shell  (sort  of)  and  the
         functionallity  of  DCL.  I haven't fully figured out what I
         will do here.  Need  to  maintain  some  sort  of  syntactic
         compatablity with DRI's CCP.

                          11: Program Search Path.                               Program Search Path.                               Program Search Path.

              There  will  be  commands  to  set,  show, and edit the
         command search path.  This path  is  a  list  of  drives  to
         search  for  commands  to  execute.  I  will  also implement
         command name abbreviation hacking (probably by  filling  out
         the command name in the FCB with '?' instead of blanks).