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: Heller@UMass.CS.EDU BITNET: Heller@UMass.BITNET 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).