_______________________________________________________________________________ An Introduction to PRIMOS CPL Directives Written by Necrovore A Telecom Computer Security Bulletin File _______________________________________________________________________________ PREFACE This text file is intended to serve as a reference guide for the aspiring CPL programmer. It is a full listing of CPL commands and discusses all arguments rather thoroughly. The following directives may be used within CPL programs only (for information on writing CPL programs, see the CPL User's Guide). This file was to be released in Phrack Issue 20 but certain members of that organization decided that this information was "too valuable for release to the general public". You know what I think of that? Utter bullshit. Sounds more like a bad case of information hoarding to me. That is not very cool. They appear to be afraid that Primes will be abused by people. Tell me, is it not better to teach everyone what CPL is and what it can do and how to PROPERLY use it? Thus, this file is not being released in Phrack. It is being released as part of TCSB Volume One. CPL COMMANDS &ARGS [name[;[type][=default] ]...]~ [name: -control_list [name[;[type][=default] ];...] ] Defines names (plus types, default values, and keywords, if desired) for arg- uments to be passed to a CPL program. Type may be any type shown below. If type is not specified the argument defaults to type char. If default is not specified, the system defaults are assigned as shown below: Argument CPL Type Explanation Default Value CHAR Any character string up to " 1024 characters long, mapped to upper case (default). CHARL Any character string up to " 1024 characters long, no case shifting. TREE A filename, directory name, " or pathname, up to 128 char- acters long. The last element of the pathname (that is, the final file or directory name) may contain wildcard characters. ENTRY A filename up 32 characters " long; may contain wildcard characters. DEC A decimal integer (A). 0 OCT An octal integer (A). 0 HEX A hexadecimal integer (A). 0 PTR Pointer; a virtual address 7777/0 in the format "octal/octal" (segno/wordno) (B). DATE Calendar date in the format " mm/dd/yy.hh:mm:ss or yy-mm- dd.hh:mm:ss. " REST The remainder of the command line. UNCL All tokens not accounted for " in the &ARGS picture. (A) Numeric arguments must be within the range if -2**31+1...2**331-1 (B) User specified default values are not supported for this datatype. &CALL routine_name Transfers control of the internal routine designated by routine_name. See also &ROUTINE. &CHECK expression &ROUTINE routine_name Defines an error condition (expression) and a routine (routine_name) to handle the condition. When this directive is present, the CPL interpreter evaluates expression after executing each PRIMOS command. If expression is true, control passes to routine_name. &DATA statement statement1 . . . statement-n [&TTY] &END Groups of statements to be treated as data or subcommands for user programs or PRIMOS utilities. The statement immediately following &DATA must invoke the program or utility. All other statements between &DATA and &END are evaluated, and the results written into a temporary file. The program (or utility) is then invoked and information passed to it, a line at a time, when called for. The &TTY directive may be used as the last statement preceding the &END. When it is reached, control passes to the user at the terminal. When the user exits from the program or utility, control returns to the CPL program. &DEBUG [option-list] Enables debugging for the CPL procedure containing the &DEBUG directive. If given without options, &DEBUG is equivalent to &DEBUG NO_EXECUTE &ECGI ALL. Options are: OPTION ACTION &OFF Turns off all debugging options. Initially all options are off. &NO_EXECUTE, &NEX Suppresses execution of PRIMOS commands, but interprets CPL directives. &EXECUTE, &EX Enables execution of PRIMOS commands. {ALL} If ALL is specified, echoes PRIMOS &ECHO {COM} commands and CPL directives. If COM {DIR} is specified, echoes only PRIMOS commands. If DIR is specified, echoes CPL directives. Default is ALL. {ALL} ALL cansels all echoing. COM cancels &NO_ECHO {COM} echoing of PRIMOS commands. DIR {DIR} cancels echoing of CPL directives. Default is ALL. &WATCH Adds the specified variables to the [var1 var2 ... var16] watchlist When the value of a watched variable is changed using the &SET_VAR directive (not the &SET_ VAR command), CPL reports this fact and the new value of the variable. At most 16 variables can be on the watchlist. If no vari are present, all variables are watched. &NO_WATCH Removes the specified variable(s) [var1 var2 ... var16] from the watchlist. If no variables are specified, watching is turned off completely. &DO [iteration] statement-1 . . . statement-n &END Allows a group of statements to be used anywhere a single statement can be used. If iteration is present, allows conditionally repeated execution of the statements contained between the &DO and the &END, iteration may be any of: 1. null (statement grouping) 2. [&WHILE while] [&UNTIL until] 3. var := start [&TO to] [&BY by] [&WHILE while] [&UNTIL until] 4. var &LIST list [&WHILE while] [&UNTIL until] 5. var &ITEMS items [&WHILE while] [&UNTIL until] 6. car := start &REPEAT repeat~ [&WHILE while] [&UNTIL until] &EXPAND {ON} {OFF} Turns abbreviation expansion on or off. Default is OFF. &GOTO label_name Transfers control to the statement following the &LABEL label_name directive. &IF expression &THEN true-statement [&ELSE false-statement] Evaluates expression. If expression is true, true-statement is executed. If expression is false, then: o If &ELSE is present, false-statement is executed. o If &ELSE is not present, control passes to the next statement in the CPL program. &LABEL label_name stateent Defines a label, label_name to which a &GOTO can go. (When &GOTO is reached, control passes to the statement following the &LABEL directive) &ON condition &ROUTINE routine_label Defines an internal routine to act as condition-handler (or on-unit) for the defined condition. (See the PRIMOS Subroutines Reference Guide for a list of PRIMOS-defined conditions and an explanation of PRIMOS's Condition Mechanism) &RESULT expression Used only in CPL programs designed to invoke via function calls from other CPL programs. (For example, "&IF A<50 &THEN &S B := [R program]"). When the &RESULT directive is reached, expression is evaluated and its value returned as the result of the function call. &RETURN [severity] [&MESSAGE text] Halts execution of procedure in which it occurs. Returns control to procedures called. If &MESSAGE is present, prints text on terminal when control returns. If sev- erity is present returns its value as a severity code to the procedures caller. Severity must be an integer. &REVERT condition Disables the latest condition handler defibed (via the &ON directive) for the named condition. &ROUTINE routine_name Names and defines entry point for an internal routine. &SELECT test_expression &WHEN expression-1 [,expression-2, ... ,expression-n] statement &WHEN expression-1 [,expression-2, ... ,expression-n] statement . . . [&OTHERWISE statement] &END Test_expression is evaluated and tested against expression-1, expression-2, and in turn until expression-n is reached. When a match for test_expression is found, the statement following the matching expression is executed. If no match is found, then: o If an &OTHERWISE directive is present, the statement following it is executed. o If no &OTHERWISE directive is present, control passes to the statement following the &END of the &SELECT group. &SET_VAR var-1 [, var-2, ... , var-n] := value Sets the value of the named variables to value. The variables need not exist previously. May be abbreviated to &S. &SEVERITY [level] [action] Checks for severity codes other than 0 (where codes > 0 indicate errors and codes < 0 indicate warnings) after execution of each PRIMOS command. If a code >= level is found, takes the specified action. Level may be: &ERROR Ignore warnings, take action on errors. &WARNING Take action on warnings and errors both. Action may be: &FAIL Halt execution, return a positive severity code to the routine's caller. &IGNORE Continue execution. &ROUTINE routine_name Pass control to the designated routine. If neither level nor action is given, all severity codes are ignored. If no &SEVERITY directive is given, warnings are ignored and errors halt execution. &SIGNAL condition [&NO_RETURN] Raises the condition "condition" and causes the CPL mechanism to search for a handler for that condition. If &NO_RETURN is specified, execution of the error-causing procedure cannot be resumed. &STOP [severity] [&MESSAGE text] Halts execution of procedure in which it occurs. If this procedure is a rout- ine, &STOP also halts the execution of the program containing the routine and any of the other routines that program may have active. Control returns to the caller of the mail program. If severity is present, specified severity code is returned to program's caller. Severity must be an integer. If &MESSAGE is present, text is printed at the caller's terminal. Downloaded From P-80 Systems 304-744-2253